Rename StatementSource to StatementOrigin
[yangtools.git] / yang / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / Bug4610Test.java
index 02b319a6ce91009070816bc2b7dad12adfd29c06..e0c892228e0ee1912bd2cab659c1928f925f84b1 100644 (file)
@@ -7,65 +7,61 @@
  */
 package org.opendaylight.yangtools.yang.stmt;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertSame;
 
-import java.net.URI;
 import org.junit.Test;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.Revision;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
-import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
+import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement;
 
 public class Bug4610Test {
-
     @Test
     public void test() throws Exception {
-        SchemaContext context = StmtTestUtils.parseYangSources("/bugs/bug4610");
-
-        Revision revision = Revision.of("2015-12-12");
-        QNameModule foo = QNameModule.create(URI.create("foo"), revision);
-        QNameModule bar = QNameModule.create(URI.create("bar"), revision);
-
-        QName g1 = QName.create(bar, "g1");
-        QName g2 = QName.create(bar, "g2");
-        QName c1Bar = QName.create(bar, "c1");
+        final EffectiveModelContext context = StmtTestUtils.parseYangSources("/bugs/bug4610");
+        final Revision revision = Revision.of("2015-12-12");
 
-        QName c1Foo = QName.create(foo, "c1");
-        QName g3 = QName.create(foo, "g3");
-        QName root = QName.create(foo, "root");
+        // Original
+        final QName c1Bar = QName.create(QNameModule.create(XMLNamespace.of("bar"), revision), "c1");
+        final ContainerEffectiveStatement g1container = findContainer(context, QName.create(c1Bar, "g1"), c1Bar);
+        final QName g1argument = g1container.argument();
+        final ContainerStatement g1original = g1container.getDeclared();
 
-        ContainerEffectiveStatement effectiveContainerStatementG1 = findContainer(context, g1, c1Bar);
-        ContainerEffectiveStatement effectiveContainerStatementG2 = findContainer(context, g2, c1Bar);
-        ContainerEffectiveStatement effectiveContainerStatementG3 = findContainer(context, g3, c1Foo);
-        ContainerEffectiveStatement effectiveContainerStatementRoot = findContainer(context, root, c1Foo);
+        final ContainerEffectiveStatement g2container = findContainer(context, QName.create(c1Bar, "g2"), c1Bar);
+        assertEquals(g1argument, g2container.argument());
+        assertSame(g1original, g2container.getDeclared());
 
-        // check arguments
-        QName originalStatementArgument = effectiveContainerStatementG1.argument();
-        assertTrue(originalStatementArgument.equals(effectiveContainerStatementG2.argument()));
-        assertFalse(originalStatementArgument.equals(effectiveContainerStatementG3.argument()));
-        assertFalse(originalStatementArgument.equals(effectiveContainerStatementRoot.argument()));
-
-        ContainerStatement originalContainerStatement = effectiveContainerStatementG1.getDeclared();
-        ContainerStatement inGrouping2ContainerStatement = effectiveContainerStatementG2.getDeclared();
-        ContainerStatement inGrouping3ContainerStatement = effectiveContainerStatementG3.getDeclared();
-        ContainerStatement inRootContainerStatement = effectiveContainerStatementRoot.getDeclared();
-
-        // check declared instances
-        assertTrue(originalContainerStatement == inGrouping2ContainerStatement);
-        assertTrue(originalContainerStatement == inGrouping3ContainerStatement);
-        assertTrue(originalContainerStatement == inRootContainerStatement);
+        final QName c1Foo = QName.create(QNameModule.create(XMLNamespace.of("foo"), revision), "c1");
+        final ContainerEffectiveStatement g3container = findContainer(context, QName.create(c1Foo, "g3"), c1Foo);
+        assertNotEquals(g1argument, g3container.argument());
+        assertSame(g1original, g3container.getDeclared());
 
+        final SchemaTreeEffectiveStatement<?> rootContainer = context.getModuleStatement(c1Foo.getModule())
+            .findSchemaTreeNode(QName.create(c1Foo, "root"), c1Foo).orElseThrow();
+        assertThat(rootContainer, instanceOf(ContainerEffectiveStatement.class));
+        assertNotEquals(g1argument, rootContainer.argument());
+        assertSame(g1original, rootContainer.getDeclared());
     }
 
-    private static ContainerEffectiveStatement findContainer(final SchemaContext context, final QName... path) {
-        SchemaNode node = SchemaContextUtil.findDataSchemaNode(context, SchemaPath.create(true, path));
-        assertTrue(node instanceof ContainerEffectiveStatement);
+    private static ContainerEffectiveStatement findContainer(final EffectiveModelContext context, final QName grouping,
+            final QName container) {
+        final ModuleEffectiveStatement module = context.getModuleStatement(grouping.getModule());
+        final GroupingEffectiveStatement grp = module.streamEffectiveSubstatements(GroupingEffectiveStatement.class)
+            .filter(stmt -> grouping.equals(stmt.argument()))
+            .findAny().orElseThrow();
+
+        final SchemaTreeEffectiveStatement<?> node = grp.findSchemaTreeNode(container).orElse(null);
+        assertThat(node, instanceOf(ContainerEffectiveStatement.class));
         return (ContainerEffectiveStatement) node;
     }
 }