Further cleanup of tests
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / Bug4610Test.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.yangtools.yang.stmt;
9
10 import static org.hamcrest.CoreMatchers.instanceOf;
11 import static org.hamcrest.MatcherAssert.assertThat;
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertNotEquals;
14 import static org.junit.Assert.assertSame;
15
16 import org.junit.Test;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.common.QNameModule;
19 import org.opendaylight.yangtools.yang.common.Revision;
20 import org.opendaylight.yangtools.yang.common.XMLNamespace;
21 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
22 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
23 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
24 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement;
25 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
26 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement;
27
28 public class Bug4610Test extends AbstractYangTest {
29     @Test
30     public void test() {
31         final var context = assertEffectiveModelDir("/bugs/bug4610");
32         final Revision revision = Revision.of("2015-12-12");
33
34         // Original
35         final QName c1Bar = QName.create(QNameModule.create(XMLNamespace.of("bar"), revision), "c1");
36         final ContainerEffectiveStatement g1container = findContainer(context, QName.create(c1Bar, "g1"), c1Bar);
37         final QName g1argument = g1container.argument();
38         final ContainerStatement g1original = g1container.getDeclared();
39
40         final ContainerEffectiveStatement g2container = findContainer(context, QName.create(c1Bar, "g2"), c1Bar);
41         assertEquals(g1argument, g2container.argument());
42         assertSame(g1original, g2container.getDeclared());
43
44         final QName c1Foo = QName.create(QNameModule.create(XMLNamespace.of("foo"), revision), "c1");
45         final ContainerEffectiveStatement g3container = findContainer(context, QName.create(c1Foo, "g3"), c1Foo);
46         assertNotEquals(g1argument, g3container.argument());
47         assertSame(g1original, g3container.getDeclared());
48
49         final SchemaTreeEffectiveStatement<?> rootContainer = context.getModuleStatement(c1Foo.getModule())
50             .findSchemaTreeNode(QName.create(c1Foo, "root"), c1Foo).orElseThrow();
51         assertThat(rootContainer, instanceOf(ContainerEffectiveStatement.class));
52         assertNotEquals(g1argument, rootContainer.argument());
53         assertSame(g1original, rootContainer.getDeclared());
54     }
55
56     private static ContainerEffectiveStatement findContainer(final EffectiveModelContext context, final QName grouping,
57             final QName container) {
58         final ModuleEffectiveStatement module = context.getModuleStatement(grouping.getModule());
59         final GroupingEffectiveStatement grp = module.streamEffectiveSubstatements(GroupingEffectiveStatement.class)
60             .filter(stmt -> grouping.equals(stmt.argument()))
61             .findAny().orElseThrow();
62
63         final SchemaTreeEffectiveStatement<?> node = grp.findSchemaTreeNode(container).orElse(null);
64         assertThat(node, instanceOf(ContainerEffectiveStatement.class));
65         return (ContainerEffectiveStatement) node;
66     }
67 }