*/
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;
}
}