diff --git a/sonar-project.properties b/sonar-project.properties
index 00f6d63d..55b6ed7e 100644
--- a/sonar-project.properties
+++ b/sonar-project.properties
@@ -2,6 +2,6 @@ sonar.projectKey=SMillerDev_phpdraft
sonar.projectName=PHPDraft
sonar.organization=smillerdev-github
sonar.sources=src/PHPDraft
-sonar.php.coverage.reportPaths=coverage/coverage.xml
+sonar.php.coverage.reportPaths=coverage.xml
sonar.exclusions=src/PHPDraft/**/Tests/**, tests/**
sonar.coverage.exclusions=src/PHPDraft/Out/HTML/**
diff --git a/src/PHPDraft/Model/Elements/Tests/ElementStructureElementTest.php b/src/PHPDraft/Model/Elements/Tests/ElementStructureElementTest.php
new file mode 100644
index 00000000..8d4f45b1
--- /dev/null
+++ b/src/PHPDraft/Model/Elements/Tests/ElementStructureElementTest.php
@@ -0,0 +1,110 @@
+class = new ElementStructureElement();
+ $this->reflection = new ReflectionClass('PHPDraft\Model\Elements\ElementStructureElement');
+ }
+
+ /**
+ * Tear down
+ */
+ public function tearDown(): void
+ {
+ unset($this->class);
+ unset($this->reflection);
+ }
+
+ /**
+ * @covers \PHPDraft\Model\Elements\ElementStructureElement::parse
+ */
+ public function testParse()
+ {
+ $json = '{"element": "Cow", "content": "stuff", "meta": {"description": {"content": "desc"}}}';
+ $dep = [];
+ $this->class->parse(json_decode($json), $dep);
+
+ $this->assertPropertySame('type', 'Cow');
+ $this->assertPropertySame('value', 'stuff');
+ $this->assertPropertySame('description', 'desc');
+ $this->assertSame(['Cow'], $dep);
+ }
+
+ /**
+ * @covers \PHPDraft\Model\Elements\ElementStructureElement::string_value
+ */
+ public function testStringValue()
+ {
+ $this->assertSame('
', $this->class->string_value());
+ }
+
+ /**
+ * @covers \PHPDraft\Model\Elements\ElementStructureElement::__toString
+ */
+ public function testToString()
+ {
+ $this->set_reflection_property_value('type', 'string');
+
+ $this->assertSame('string
', $this->class->__toString());
+ }
+
+ /**
+ * @covers \PHPDraft\Model\Elements\ElementStructureElement::__toString
+ */
+ public function testToStringCustomType()
+ {
+ $this->set_reflection_property_value('type', 'Cow');
+
+ $this->assertSame('Cow', $this->class->__toString());
+ }
+
+ /**
+ * @covers \PHPDraft\Model\Elements\ElementStructureElement::__toString
+ */
+ public function testToStringDescription()
+ {
+ $this->set_reflection_property_value('type', 'Cow');
+ $this->set_reflection_property_value('description', 'Something');
+
+ $this->assertSame('Cow - Something', $this->class->__toString());
+ }
+
+ /**
+ * @covers \PHPDraft\Model\Elements\ElementStructureElement::__toString
+ */
+ public function testToStringValue()
+ {
+ $this->set_reflection_property_value('type', 'Cow');
+ $this->set_reflection_property_value('value', 'stuff');
+
+ $this->assertSame('Cow - stuff', $this->class->__toString());
+ }
+
+ /**
+ * @covers \PHPDraft\Model\Elements\ElementStructureElement::__toString
+ */
+ public function testToStringDescriptionAndValue()
+ {
+ $this->set_reflection_property_value('type', 'Cow');
+ $this->set_reflection_property_value('value', 'stuff');
+ $this->set_reflection_property_value('description', 'Something');
+
+ $this->assertSame('Cow - Something - stuff', $this->class->__toString());
+ }
+}
diff --git a/src/PHPDraft/Out/Sorting.php b/src/PHPDraft/Out/Sorting.php
index 246e5e27..7da422f1 100644
--- a/src/PHPDraft/Out/Sorting.php
+++ b/src/PHPDraft/Out/Sorting.php
@@ -22,28 +22,28 @@ class Sorting
*
* @var int
*/
- public static $PHPD_SORT_ALL = 3;
+ public const PHPD_SORT_ALL = 3;
/**
* Sets sorting to all webservices.
*
* @var int
*/
- public static $PHPD_SORT_WEBSERVICES = 2;
+ public const PHPD_SORT_WEBSERVICES = 2;
/**
* Sets sorting to all data structures.
*
* @var int
*/
- public static $PHPD_SORT_STRUCTURES = 1;
+ public const PHPD_SORT_STRUCTURES = 1;
/**
* Sets sorting to no data structures.
*
* @var int
*/
- public static $PHPD_SORT_NONE = -1;
+ public const PHPD_SORT_NONE = -1;
/**
* Check if structures should be sorted.
@@ -54,7 +54,7 @@ class Sorting
*/
public static function sortStructures(int $sort): bool
{
- return $sort === self::$PHPD_SORT_ALL || $sort === self::$PHPD_SORT_STRUCTURES;
+ return $sort === self::PHPD_SORT_ALL || $sort === self::PHPD_SORT_STRUCTURES;
}
/**
@@ -66,6 +66,6 @@ public static function sortStructures(int $sort): bool
*/
public static function sortServices(int $sort): bool
{
- return $sort === self::$PHPD_SORT_ALL || $sort === self::$PHPD_SORT_WEBSERVICES;
+ return $sort === self::PHPD_SORT_ALL || $sort === self::PHPD_SORT_WEBSERVICES;
}
}
diff --git a/src/PHPDraft/Out/TemplateGenerator.php b/src/PHPDraft/Out/TemplateGenerator.php
index 342397f5..e9b8f393 100644
--- a/src/PHPDraft/Out/TemplateGenerator.php
+++ b/src/PHPDraft/Out/TemplateGenerator.php
@@ -89,7 +89,7 @@ public function __construct(string $template, ?string $image)
$this->base_data['COLOR_2'] = $template_parts[2] ?? 'light_green';
$this->image = $image;
$this->http_status = new Httpstatus();
- $this->sorting = Sorting::$PHPD_SORT_NONE;
+ $this->sorting = Sorting::PHPD_SORT_NONE;
}
/**
diff --git a/src/PHPDraft/Out/Tests/SortingTest.php b/src/PHPDraft/Out/Tests/SortingTest.php
new file mode 100644
index 00000000..941b5eb7
--- /dev/null
+++ b/src/PHPDraft/Out/Tests/SortingTest.php
@@ -0,0 +1,52 @@
+
+ */
+
+namespace PHPDraft\Out\Tests;
+
+use Lunr\Halo\LunrBaseTest;
+use PHPDraft\Out\Sorting;
+use PHPDraft\Out\Version;
+use ReflectionClass;
+
+/**
+ * Class SortingTest
+ *
+ * @covers \PHPDraft\Out\Sorting
+ */
+class SortingTest extends LunrBaseTest
+{
+
+ /**
+ * Test if service sorting is determined correctly.
+ *
+ * @covers \PHPDraft\Out\Sorting::sortServices
+ */
+ public function testSortsServicesIfNeeded(): void
+ {
+ $this->assertTrue(Sorting::sortServices(3));
+ $this->assertTrue(Sorting::sortServices(2));
+ $this->assertFalse(Sorting::sortServices(-1));
+ $this->assertFalse(Sorting::sortServices(1));
+ $this->assertFalse(Sorting::sortServices(0));
+ }
+
+ /**
+ * Test if structure sorting is determined correctly.
+ *
+ * @covers \PHPDraft\Out\Sorting::sortStructures
+ */
+ public function testSortsStructureIfNeeded(): void
+ {
+ $this->assertTrue(Sorting::sortStructures(3));
+ $this->assertTrue(Sorting::sortStructures(1));
+ $this->assertFalse(Sorting::sortStructures(-1));
+ $this->assertFalse(Sorting::sortStructures(2));
+ $this->assertFalse(Sorting::sortStructures(0));
+ }
+}
diff --git a/src/PHPDraft/Parse/BaseHtmlGenerator.php b/src/PHPDraft/Parse/BaseHtmlGenerator.php
index 7340769f..216d795c 100644
--- a/src/PHPDraft/Parse/BaseHtmlGenerator.php
+++ b/src/PHPDraft/Parse/BaseHtmlGenerator.php
@@ -35,6 +35,8 @@ abstract class BaseHtmlGenerator
* JsonToHTML constructor.
*
* @param object $json JSON representation of an API Blueprint
+ *
+ * @return self
*/
public function init(object $json): self
{
diff --git a/src/PHPDraft/Parse/LegacyDrafter.php b/src/PHPDraft/Parse/LegacyDrafter.php
deleted file mode 100644
index 999a6c04..00000000
--- a/src/PHPDraft/Parse/LegacyDrafter.php
+++ /dev/null
@@ -1,77 +0,0 @@
-
- */
-
-namespace PHPDraft\Parse;
-
-use PHPDraft\In\ApibFileParser;
-
-/**
- * Class LegacyDrafter
- *
- * @deprecated No longer supported
- */
-class LegacyDrafter extends BaseParser
-{
- /**
- * The location of the drafter executable.
- *
- * @var string
- */
- protected $drafter;
-
- /**
- * ApibToJson constructor.
- *
- * @param ApibFileParser $apib API Blueprint text
- *
- * @return \PHPDraft\Parse\BaseParser
- */
- public function init(ApibFileParser $apib): BaseParser
- {
- parent::init($apib);
- $this->drafter = self::location();
-
- return $this;
- }
-
- /**
- * Return drafter location if found.
- *
- * @return bool|string
- */
- public static function location()
- {
- return false;
- }
-
- /**
- * Check if a given parser is available.
- *
- * @deprecated V2 doesn't support drafter 3.
- *
- * @return bool
- */
- public static function available(): bool
- {
- return false;
- }
-
- /**
- * Parses the apib for the selected method.
- *
- * @return void
- */
- protected function parse(): void
- {
- return;
- }
-}
diff --git a/src/PHPDraft/Parse/ParserFactory.php b/src/PHPDraft/Parse/ParserFactory.php
index 1b6b2176..20271564 100644
--- a/src/PHPDraft/Parse/ParserFactory.php
+++ b/src/PHPDraft/Parse/ParserFactory.php
@@ -12,7 +12,7 @@ class ParserFactory
/**
* Get the applicable Drafter parser.
*
- * @return \PHPDraft\Parse\BaseParser The parser that can be used
+ * @return BaseParser The parser that can be used
*/
public static function getDrafter(): BaseParser
{
@@ -22,26 +22,20 @@ public static function getDrafter(): BaseParser
if (DrafterAPI::available()) {
return new DrafterAPI();
}
- if (LegacyDrafter::available()) {
- throw new ResourceException('Drafter 3.x is no longer supported', 100);
- }
- throw new ResourceException("Couldn't get an apib parser", 255);
+ throw new ResourceException("Couldn't get an APIB parser", 255);
}
/**
* Get the applicable JSON parser.
*
- * @return \PHPDraft\Parse\BaseHtmlGenerator The parser that can be used
+ * @return BaseHtmlGenerator The parser that can be used
*/
public static function getJson(): BaseHtmlGenerator
{
if (Drafter::available() || DrafterAPI::available()) {
return new HtmlGenerator();
}
- if (LegacyDrafter::available()) {
- throw new ResourceException('Drafter 3.x is no longer supported', 100);
- }
throw new ResourceException("Couldn't get a JSON parser", 255);
}
diff --git a/src/PHPDraft/Parse/Tests/BaseHtmlGeneratorTest.php b/src/PHPDraft/Parse/Tests/BaseHtmlGeneratorTest.php
new file mode 100644
index 00000000..31f794f0
--- /dev/null
+++ b/src/PHPDraft/Parse/Tests/BaseHtmlGeneratorTest.php
@@ -0,0 +1,45 @@
+class = $this->getMockForAbstractClass('PHPDraft\Parse\BaseHtmlGenerator');
+ $this->reflection = new ReflectionClass('PHPDraft\Parse\BaseHtmlGenerator');
+ }
+
+ /**
+ * Tear down
+ */
+ public function tearDown(): void
+ {
+ unset($this->class);
+ unset($this->reflection);
+ }
+
+ /**
+ * * @covers \PHPDraft\Parse\BaseHtmlGenerator::init
+ */
+ public function testInit()
+ {
+ $data = json_decode(file_get_contents(TEST_STATICS . '/drafter/json/index.json'));
+ $init = $this->class->init($data);
+
+ $this->assertPropertySame('object', $data);
+ }
+}
diff --git a/src/PHPDraft/Parse/Tests/ParserFactoryTest.php b/src/PHPDraft/Parse/Tests/ParserFactoryTest.php
new file mode 100644
index 00000000..a65241af
--- /dev/null
+++ b/src/PHPDraft/Parse/Tests/ParserFactoryTest.php
@@ -0,0 +1,104 @@
+mock_method(['\PHPDraft\Parse\Drafter', 'available'], function () {
+ return true;
+ });
+
+ $this->assertInstanceOf('\PHPDraft\Parse\Drafter', ParserFactory::getDrafter());
+
+ $this->unmock_method(['\PHPDraft\Parse\Drafter', 'available']);
+ }
+
+ /**
+ * @covers \PHPDraft\Parse\ParserFactory::getDrafter
+ */
+ public function testGetDrafterAPI()
+ {
+ $this->mock_method(['\PHPDraft\Parse\Drafter', 'available'], function () {
+ return false;
+ });
+ $this->mock_method(['\PHPDraft\Parse\DrafterAPI', 'available'], function () {
+ return true;
+ });
+
+ $this->assertInstanceOf('\PHPDraft\Parse\DrafterAPI', ParserFactory::getDrafter());
+
+ $this->unmock_method(['\PHPDraft\Parse\Drafter', 'available']);
+ $this->unmock_method(['\PHPDraft\Parse\DrafterAPI', 'available']);
+ }
+
+ /**
+ * @covers \PHPDraft\Parse\ParserFactory::getDrafter
+ */
+ public function testGetDrafterFails()
+ {
+ $this->expectException('\PHPDraft\Parse\ResourceException');
+ $this->expectExceptionMessage('Couldn\'t get an APIB parser');
+ $this->mock_method(['\PHPDraft\Parse\Drafter', 'available'], function () {
+ return false;
+ });
+ $this->mock_method(['\PHPDraft\Parse\DrafterAPI', 'available'], function () {
+ return false;
+ });
+
+ ParserFactory::getDrafter();
+
+ $this->unmock_method(['\PHPDraft\Parse\Drafter', 'available']);
+ $this->unmock_method(['\PHPDraft\Parse\DrafterAPI', 'available']);
+ }
+
+ /**
+ * @covers \PHPDraft\Parse\ParserFactory::getJson
+ */
+ public function testGetJson()
+ {
+ $this->mock_method(['\PHPDraft\Parse\Drafter', 'available'], function () {
+ return false;
+ });
+ $this->mock_method(['\PHPDraft\Parse\DrafterAPI', 'available'], function () {
+ return true;
+ });
+
+ $this->assertInstanceOf('\PHPDraft\Parse\HtmlGenerator', ParserFactory::getJson());
+
+ $this->unmock_method(['\PHPDraft\Parse\Drafter', 'available']);
+ $this->unmock_method(['\PHPDraft\Parse\DrafterAPI', 'available']);
+ }
+
+ /**
+ * @covers \PHPDraft\Parse\ParserFactory::getJson
+ */
+ public function testGetJsonFails()
+ {
+ $this->expectException('\PHPDraft\Parse\ResourceException');
+ $this->expectExceptionMessage('Couldn\'t get a JSON parser');
+ $this->mock_method(['\PHPDraft\Parse\Drafter', 'available'], function () {
+ return false;
+ });
+ $this->mock_method(['\PHPDraft\Parse\DrafterAPI', 'available'], function () {
+ return false;
+ });
+
+ ParserFactory::getJson();
+
+ $this->unmock_method(['\PHPDraft\Parse\Drafter', 'available']);
+ $this->unmock_method(['\PHPDraft\Parse\DrafterAPI', 'available']);
+ }
+}
diff --git a/tests/phpunit.xml b/tests/phpunit.xml
index 552b040d..7adb8b1e 100755
--- a/tests/phpunit.xml
+++ b/tests/phpunit.xml
@@ -15,6 +15,8 @@
../src/PHPDraft/Parse/Tests/DrafterTest.php
../src/PHPDraft/Parse/Tests/DrafterAPITest.php
../src/PHPDraft/Parse/Tests/HtmlGeneratorTest.php
+ ../src/PHPDraft/Parse/Tests/BaseHtmlGeneratorTest.php
+ ../src/PHPDraft/Parse/Tests/ParserFactoryTest.php
../src/PHPDraft/Model/Tests/CategoryTest.php
@@ -28,12 +30,14 @@
../src/PHPDraft/Model/Elements/Tests/ObjectStructureElementTest.php
../src/PHPDraft/Model/Elements/Tests/ArrayStructureElementTest.php
../src/PHPDraft/Model/Elements/Tests/RequestBodyElementTest.php
+ ../src/PHPDraft/Model/Elements/Tests/ElementStructureElementTest.php
../src/PHPDraft/In/Tests/ApibFileParserTest.php
../src/PHPDraft/Out/Tests/VersionTest.php
+ ../src/PHPDraft/Out/Tests/SortingTest.php
../src/PHPDraft/Out/Tests/TemplateGeneratorTest.php