Deprecate simple DataTreeFactory.create()
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / GroupingAndUsesStmtTest.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.junit.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertNotNull;
12
13 import java.util.List;
14 import org.junit.jupiter.api.Test;
15 import org.opendaylight.yangtools.yang.common.QName;
16 import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
17 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
18 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
19 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
20 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.Module;
23 import org.opendaylight.yangtools.yang.model.api.UsesNode;
24 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
25 import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement;
26
27 class GroupingAndUsesStmtTest extends AbstractYangTest {
28     private static final String MODULE = "/model/bar.yang";
29     private static final String SUBMODULE = "/model/subfoo.yang";
30     private static final String GROUPING_MODULE = "/model/baz.yang";
31     private static final String USES_MODULE = "/model/foo.yang";
32
33     @Test
34     void groupingTest() {
35         final var result = assertEffectiveModel(MODULE, GROUPING_MODULE);
36
37         final Module testModule = result.findModules("baz").iterator().next();
38         assertNotNull(testModule);
39
40         final var groupings = testModule.getGroupings();
41         assertEquals(1, groupings.size());
42
43         final GroupingDefinition grouping = groupings.iterator().next();
44         assertEquals("target", grouping.getQName().getLocalName());
45         assertEquals(5, grouping.getChildNodes().size());
46
47         final AnyxmlSchemaNode anyXmlNode = (AnyxmlSchemaNode) grouping.getDataChildByName(
48             QName.create(testModule.getQNameModule(), "data"));
49         assertNotNull(anyXmlNode);
50         final ChoiceSchemaNode choiceNode = (ChoiceSchemaNode) grouping.getDataChildByName(
51             QName.create(testModule.getQNameModule(), "how"));
52         assertNotNull(choiceNode);
53         final LeafSchemaNode leafNode = (LeafSchemaNode) grouping.getDataChildByName(
54             QName.create(testModule.getQNameModule(), "address"));
55         assertNotNull(leafNode);
56         final ContainerSchemaNode containerNode = (ContainerSchemaNode) grouping.getDataChildByName(
57             QName.create(testModule.getQNameModule(), "port"));
58         assertNotNull(containerNode);
59         final ListSchemaNode listNode = (ListSchemaNode) grouping.getDataChildByName(
60             QName.create(testModule.getQNameModule(), "addresses"));
61         assertNotNull(listNode);
62
63         assertEquals(1, grouping.getGroupings().size());
64         assertEquals("target-inner", grouping.getGroupings().iterator().next().getQName().getLocalName());
65
66         assertEquals(1, grouping.getTypeDefinitions().size());
67         assertEquals("group-type", grouping.getTypeDefinitions().iterator().next().getQName().getLocalName());
68
69         final var unknownSchemaNodes = grouping.asEffectiveStatement().getDeclared()
70             .declaredSubstatements(UnrecognizedStatement.class);
71         assertEquals(1, unknownSchemaNodes.size());
72         final UnrecognizedStatement extensionUse = unknownSchemaNodes.iterator().next();
73         assertEquals("opendaylight", extensionUse.statementDefinition().getStatementName().getLocalName());
74     }
75
76     @Test
77     void usesAndRefinesTest() {
78         final var result = assertEffectiveModel(MODULE, SUBMODULE, GROUPING_MODULE, USES_MODULE);
79
80         final Module testModule = result.findModules("foo").iterator().next();
81
82         final var usesNodes = testModule.getUses();
83         assertEquals(1, usesNodes.size());
84
85         UsesNode usesNode = usesNodes.iterator().next();
86         assertEquals("target", usesNode.getSourceGrouping().getQName().getLocalName());
87         assertEquals(1, usesNode.getAugmentations().size());
88
89         QName peer = QName.create(testModule.getQNameModule(), "peer");
90         ContainerSchemaNode container = (ContainerSchemaNode) testModule.getDataChildByName(peer);
91         assertNotNull(container);
92         container = (ContainerSchemaNode) container.getDataChildByName(QName.create(peer, "destination"));
93         assertEquals(1, container.getUses().size());
94
95         usesNode = container.getUses().iterator().next();
96         assertEquals("target", usesNode.getSourceGrouping().getQName().getLocalName());
97
98         assertEquals(List.of(
99                 Descendant.of(QName.create(peer, "address")),
100                 Descendant.of(QName.create(peer, "port")),
101                 Descendant.of(QName.create(peer, "addresses")),
102                 Descendant.of(QName.create(peer, "addresses"), QName.create(peer, "id"))),
103             List.copyOf(usesNode.getRefines()));
104     }
105 }