function it_renders_into_dom_element(TypesRepositoryInterface $repo, DOMDocument $doc, DOMElement $parent) { $repo->beADoubleOf('XsdTranslator\\TypesRepositoryInterface'); $doc = new DOMDocument('1.0', 'UTF-8'); $parent = $doc->createElement('root'); $doc->appendChild($parent); $route = ['root', 'aaa', 'bbb', 'ccc']; $xml = DOMDocument::loadXML("<?xml version='1.0' encoding='UTF-8'?><root>{{ \$root['aaa']['bbb']['ccc'] }}</root>"); $this->render($repo, $doc, $parent, $route)->shouldBeLike($xml); }
function it_should_parse_all_types_files_when_has_dependencies(TypesRepositoryInterface $repo) { $this->beConstructedWith(__DIR__ . "/xsd/example_dep.xsd"); $repo->beADoubleOf('XsdTranslator\\TypesRepositoryInterface'); $this->setTypesRepository($repo); $repo->registerType('SomeSimpleType', Argument::type('XsdTranslator\\SimpleType'))->shouldBeCalled(); $repo->registerType('SomeComplexType', Argument::type('XsdTranslator\\ComplexType'))->shouldBeCalled(); $repo->registerType('SomeAnotherComplexType', Argument::type('XsdTranslator\\ComplexType'))->shouldBeCalled(); $this->parse(); }
protected function parseComplexTypes(TypesRepositoryInterface $repo) { foreach ($this->parseXPath('/xs:schema/xs:complexType') as $complex_type) { $name = $complex_type->getAttribute('name'); $elementNodes = $this->parseXPath($complex_type->getNodePath() . '/xs:sequence/xs:element'); $elements = []; foreach ($elementNodes as $element) { $elName = $element->getAttribute('name'); $elType = NULL; $elComplexType = $element->getAttribute('type'); $elSimpleType = $this->parseXPath($element->getNodePath() . '/xs:simpleType/xs:restriction', 'base'); if ($elComplexType) { $elType = $elComplexType; } elseif (count($elSimpleType)) { $elType = $elSimpleType[0]; } else { $elType = "UnknownType"; } $min_occurs = $element->getAttribute('minOccurs'); $max_occurs = $element->getAttribute('maxOccurs'); $elements[$elName] = new Element(['elementName' => $elName, 'type' => Helpers::cleanNamespace($elType), 'min_occurs' => $min_occurs, 'max_occurs' => $max_occurs]); } $xsd_type = new ComplexType(['name' => $name, 'elements' => $elements]); $repo->registerType($name, $xsd_type); } }