BUG-4688: Rework SchemaContext module lookups
[yangtools.git] / yang / yang-data-codec-xml / src / test / java / org / opendaylight / yangtools / yang / data / codec / xml / YangModeledAnyXMLDeserializationTest.java
index 1130885f231ea927c488b58c168691c606cab5e0..32318e981cf533b1ac7053a420a6d3e98d897635 100644 (file)
@@ -11,18 +11,18 @@ package org.opendaylight.yangtools.yang.data.codec.xml;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-import com.google.common.base.Optional;
 import java.io.InputStream;
 import java.net.URI;
 import java.util.Collection;
 import java.util.List;
+import java.util.Optional;
+import javax.annotation.Nonnull;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamReader;
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
-import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
@@ -32,19 +32,17 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.YangModeledAnyXmlNode;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeSchemaAwareBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
 import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.YangModeledAnyXmlSchemaNode;
-import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl;
+import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class YangModeledAnyXMLDeserializationTest {
 
@@ -61,32 +59,25 @@ public class YangModeledAnyXMLDeserializationTest {
     private SchemaContext schemaContext;
 
     @Before
-    public void Init() throws Exception {
-        barModuleQName = QNameModule.create(new URI("bar"), SimpleDateFormatUtil.getRevisionFormat()
-                .parse("1970-01-01"));
+    public void setUp() throws Exception {
+        barModuleQName = QNameModule.create(new URI("bar"), QName.parseRevision("1970-01-01"));
         myContainer1 = QName.create(barModuleQName, "my-container-1");
         myLeaf1 = QName.create(barModuleQName, "my-leaf-1");
         myAnyXMLDataBar = QName.create(barModuleQName, "my-anyxml-data");
 
-        fooModuleQName = QNameModule.create(new URI("foo"), SimpleDateFormatUtil.getRevisionFormat()
-                .parse("1970-01-01"));
+        fooModuleQName = QNameModule.create(new URI("foo"), QName.parseRevision("1970-01-01"));
         myContainer2 = QName.create(fooModuleQName, "my-container-2");
         innerContainer = QName.create(fooModuleQName, "inner-container");
         myLeaf3 = QName.create(fooModuleQName, "my-leaf-3");
         myLeaf2 = QName.create(fooModuleQName, "my-leaf-2");
         myAnyXMLDataFoo = QName.create(fooModuleQName, "my-anyxml-data");
 
-        CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
-        reactor.addSources(new YangStatementSourceImpl("/anyxml-support/yang/foo.yang", false),
-                new YangStatementSourceImpl("/anyxml-support/yang/bar.yang", false),
-                new YangStatementSourceImpl("/anyxml-support/yang/yang-ext.yang", false));
-
-        schemaContext = reactor.buildEffective();
+        schemaContext = YangParserTestUtils.parseYangResourceDirectory("/anyxml-support/yang");
     }
 
     @Test
     public void testRawAnyXMLFromBar() throws Exception {
-        DataSchemaNode barContainer = schemaContext.getDataChildByName(QName.create(barModuleQName, "bar"));;
+        DataSchemaNode barContainer = schemaContext.getDataChildByName(QName.create(barModuleQName, "bar"));
         assertTrue(barContainer instanceof ContainerSchemaNode);
         final YangModeledAnyXmlSchemaNode yangModeledAnyXML = new YangModeledAnyXMLSchemaNodeImplTest(myAnyXMLDataBar,
                 (ContainerSchemaNode) barContainer);
@@ -96,31 +87,31 @@ public class YangModeledAnyXMLDeserializationTest {
 
         final XMLInputFactory factory = XMLInputFactory.newInstance();
         final XMLStreamReader reader = factory.createXMLStreamReader(resourceAsStream);
-
-        final ImmutableContainerNodeBuilder result = (ImmutableContainerNodeBuilder) ImmutableContainerNodeSchemaAwareBuilder
-                        .create(yangModeledAnyXML.getSchemaOfAnyXmlData());
+        final NormalizedNodeResult result = new NormalizedNodeResult();
 
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
         final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, yangModeledAnyXML);
         xmlParser.parse(reader);
 
-        final NormalizedNode<?, ?> output = result.build();
+        final NormalizedNode<?, ?> output = result.getResult();
+        assertTrue(output instanceof YangModeledAnyXmlNode);
+        final YangModeledAnyXmlNode yangModeledAnyXmlNode = (YangModeledAnyXmlNode) output;
 
-        Collection<DataContainerChild<? extends PathArgument, ?>> value = ((ContainerNode) output).getValue();
+        Collection<DataContainerChild<? extends PathArgument, ?>> value = yangModeledAnyXmlNode.getValue();
         assertEquals(2, value.size());
 
-        Optional<DataContainerChild<? extends PathArgument, ?>> child = ((ContainerNode) output)
+        Optional<DataContainerChild<? extends PathArgument, ?>> child = yangModeledAnyXmlNode
                 .getChild(new NodeIdentifier(myContainer1));
-        assertTrue(child.orNull() instanceof ContainerNode);
+        assertTrue(child.orElse(null) instanceof ContainerNode);
         ContainerNode myContainerNode1 = (ContainerNode) child.get();
 
         Optional<DataContainerChild<? extends PathArgument, ?>> child2 = myContainerNode1.getChild(new NodeIdentifier(
                 myLeaf1));
-        assertTrue(child2.orNull() instanceof LeafNode);
-        LeafNode<?> LeafNode1 = (LeafNode<?>) child2.get();
+        assertTrue(child2.orElse(null) instanceof LeafNode);
+        LeafNode<?> leafNode1 = (LeafNode<?>) child2.get();
 
-        Object leafNode1Value = LeafNode1.getValue();
+        Object leafNode1Value = leafNode1.getValue();
         assertEquals("value1", leafNode1Value);
     }
 
@@ -128,24 +119,22 @@ public class YangModeledAnyXMLDeserializationTest {
     public void testRealSchemaContextFromFoo() throws Exception {
         final InputStream resourceAsStream = YangModeledAnyXMLDeserializationTest.class.getResourceAsStream(
                 "/anyxml-support/xml/foo.xml");
+        final Module foo = schemaContext.findModules("foo").iterator().next();
+        final YangModeledAnyXmlSchemaNode myAnyXmlData = (YangModeledAnyXmlSchemaNode) foo.getDataChildByName(
+                QName.create(foo.getQNameModule(), "my-anyxml-data"));
 
         final XMLInputFactory factory = XMLInputFactory.newInstance();
         final XMLStreamReader reader = factory.createXMLStreamReader(resourceAsStream);
-
-        final ImmutableContainerNodeBuilder result = (ImmutableContainerNodeBuilder) ImmutableContainerNodeSchemaAwareBuilder
-                .create(schemaContext);
+        final NormalizedNodeResult result = new NormalizedNodeResult();
 
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, myAnyXmlData);
         xmlParser.parse(reader);
 
-        final NormalizedNode<?, ?> output = result.build();
-
-        Optional<DataContainerChild<? extends PathArgument, ?>> child = ((ContainerNode) output).getChild(
-                new NodeIdentifier(myAnyXMLDataFoo));
-        assertTrue(child.orNull() instanceof YangModeledAnyXmlNode);
-        YangModeledAnyXmlNode yangModeledAnyXmlNode = (YangModeledAnyXmlNode) child.get();
+        final NormalizedNode<?, ?> output = result.getResult();
+        assertTrue(output instanceof YangModeledAnyXmlNode);
+        final YangModeledAnyXmlNode yangModeledAnyXmlNode = (YangModeledAnyXmlNode) output;
 
         DataSchemaNode schemaOfAnyXmlData = yangModeledAnyXmlNode.getSchemaOfAnyXmlData();
         DataSchemaNode expectedSchemaOfAnyXmlData = schemaContext.getDataChildByName(myContainer2);
@@ -156,32 +145,32 @@ public class YangModeledAnyXMLDeserializationTest {
 
         Optional<DataContainerChild<? extends PathArgument, ?>> child2 = yangModeledAnyXmlNode
                 .getChild(new NodeIdentifier(innerContainer));
-        assertTrue(child2.orNull() instanceof ContainerNode);
+        assertTrue(child2.orElse(null) instanceof ContainerNode);
         ContainerNode innerContainerNode = (ContainerNode) child2.get();
 
         Optional<DataContainerChild<? extends PathArgument, ?>> child3 = innerContainerNode
                 .getChild(new NodeIdentifier(myLeaf2));
-        assertTrue(child3.orNull() instanceof LeafNode);
-        LeafNode<?> LeafNode2 = (LeafNode<?>) child3.get();
+        assertTrue(child3.orElse(null) instanceof LeafNode);
+        LeafNode<?> leafNode2 = (LeafNode<?>) child3.get();
 
-        Object leafNode2Value = LeafNode2.getValue();
+        Object leafNode2Value = leafNode2.getValue();
         assertEquals("any-xml-leaf-2-value", leafNode2Value);
 
         Optional<DataContainerChild<? extends PathArgument, ?>> child4 = yangModeledAnyXmlNode
                 .getChild(new NodeIdentifier(myLeaf3));
-        assertTrue(child4.orNull() instanceof LeafNode);
-        LeafNode<?> LeafNode3 = (LeafNode<?>) child4.get();
+        assertTrue(child4.orElse(null) instanceof LeafNode);
+        LeafNode<?> leafNode3 = (LeafNode<?>) child4.get();
 
-        Object leafNode3Value = LeafNode3.getValue();
+        Object leafNode3Value = leafNode3.getValue();
         assertEquals("any-xml-leaf-3-value", leafNode3Value);
     }
 
-    private static class YangModeledAnyXMLSchemaNodeImplTest implements YangModeledAnyXmlSchemaNode {
-        private final QName qName;
+    private static final class YangModeledAnyXMLSchemaNodeImplTest implements YangModeledAnyXmlSchemaNode {
+        private final QName qname;
         private final ContainerSchemaNode contentSchema;
 
-        private YangModeledAnyXMLSchemaNodeImplTest(QName qName, ContainerSchemaNode contentSchema) {
-            this.qName = qName;
+        YangModeledAnyXMLSchemaNodeImplTest(final QName qname, final ContainerSchemaNode contentSchema) {
+            this.qname = qname;
             this.contentSchema = contentSchema;
         }
 
@@ -205,16 +194,19 @@ public class YangModeledAnyXMLDeserializationTest {
             return null;
         }
 
+        @Nonnull
         @Override
         public QName getQName() {
-            return qName;
+            return qname;
         }
 
+        @Nonnull
         @Override
         public SchemaPath getPath() {
             return null;
         }
 
+        @Nonnull
         @Override
         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
             return null;
@@ -230,11 +222,13 @@ public class YangModeledAnyXMLDeserializationTest {
             return null;
         }
 
+        @Nonnull
         @Override
         public Status getStatus() {
             return null;
         }
 
+        @Nonnull
         @Override
         public ContainerSchemaNode getSchemaOfAnyXmlData() {
             return contentSchema;