diff --git a/src/PHPDraft/Model/Category.php b/src/PHPDraft/Model/Category.php index 5f5e506..1875c44 100644 --- a/src/PHPDraft/Model/Category.php +++ b/src/PHPDraft/Model/Category.php @@ -50,7 +50,7 @@ public function parse(object $object): self $struct->deps = $deps; $struct->parse($item->content, $deps); - if (isset($item->content->content[0]->meta->id)) { + if (isset($item->content->content) && is_array($item->content->content) && isset($item->content->content[0]->meta->id)) { $this->structures[$item->content->content[0]->meta->id] = $struct; } elseif (isset($item->content->meta->id->content)) { $this->structures[$item->content->meta->id->content] = $struct; diff --git a/src/PHPDraft/Model/Elements/EnumStructureElement.php b/src/PHPDraft/Model/Elements/EnumStructureElement.php index 3ef1aba..8221c11 100644 --- a/src/PHPDraft/Model/Elements/EnumStructureElement.php +++ b/src/PHPDraft/Model/Elements/EnumStructureElement.php @@ -56,15 +56,16 @@ public function parse(?object $object, array &$dependencies): self $dependencies[] = $object->content->element; } $this->value = $object->content->content; - $this->deps = $dependencies; - - return $this; } - foreach ($object->attributes->enumerations->content as $sub_item) { - $element = new ElementStructureElement(); - $element->parse($sub_item, $dependencies); - $this->value[] = $element; + if (isset($object->attributes->enumerations->content) && $object->attributes->enumerations->content !== []) { + $this->value = []; + + foreach ($object->attributes->enumerations->content as $sub_item) { + $element = new ElementStructureElement(); + $element->parse($sub_item, $dependencies); + $this->value[] = $element; + } } $this->deps = $dependencies; diff --git a/src/PHPDraft/Model/Elements/Tests/EnumStructureElementTest.php b/src/PHPDraft/Model/Elements/Tests/EnumStructureElementTest.php index 0bc671c..862eb74 100644 --- a/src/PHPDraft/Model/Elements/Tests/EnumStructureElementTest.php +++ b/src/PHPDraft/Model/Elements/Tests/EnumStructureElementTest.php @@ -186,6 +186,19 @@ public static function parseObjectProvider(): array $base3->is_variable = false; $base3->deps = []; + $base4 = new EnumStructureElement(); + $base4->key = new ElementStructureElement(); + $base4->value = [ $value1 ]; + $base4->key->type = 'string'; + $base4->key->value = 'item'; + $base4->status = []; + $base4->element = 'enum'; + $base4->type = 'Some simple enum'; + $base4->is_variable = false; + $base4->description = null; + $base4->ref = null; + $base4->deps = ['Some simple enum']; + $return['base enum'] = [ '{ "element":"enum", @@ -288,6 +301,44 @@ public static function parseObjectProvider(): array }', $base3, ]; + $return['enum with single enumeration and content'] = [ + '{ + "element":"enum", + "meta":{ + "id":{ + "element":"string", + "content":"Some simple enum" + } + }, + "attributes":{ + "enumerations":{ + "element":"array", + "content":[ + { + "element":"string", + "attributes":{ + "typeAttributes":{ + "element":"array", + "content":[ + { + "element":"string", + "content":"fixed" + } + ] + } + }, + "content":"item" + } + ] + } + }, + "content": { + "element": "string", + "content": "item" + } + }', + $base4, + ]; return $return; }