Use correct key-arg splitting
[yangtools.git] / yang / 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.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.opendaylight.yangtools.yang.stmt.StmtTestUtils.sourceForResource;
13
14 import com.google.common.collect.ImmutableList;
15 import java.util.ArrayList;
16 import java.util.Collection;
17 import java.util.Iterator;
18 import java.util.Map;
19 import org.junit.Test;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
25 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.Module;
28 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
29 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
30 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
31 import org.opendaylight.yangtools.yang.model.api.UsesNode;
32 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
33 import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors;
34 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
35 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
36
37 public class GroupingAndUsesStmtTest {
38
39     private static final StatementStreamSource MODULE = sourceForResource("/model/bar.yang");
40     private static final StatementStreamSource SUBMODULE = sourceForResource("/model/subfoo.yang");
41     private static final StatementStreamSource GROUPING_MODULE = sourceForResource("/model/baz.yang");
42     private static final StatementStreamSource USES_MODULE = sourceForResource("/model/foo.yang");
43
44     @Test
45     public void groupingTest() throws ReactorException {
46         final SchemaContext result = RFC7950Reactors.defaultReactor().newBuild()
47                 .addSources(MODULE, GROUPING_MODULE)
48                 .buildEffective();
49         assertNotNull(result);
50
51         final Module testModule = result.findModules("baz").iterator().next();
52         assertNotNull(testModule);
53
54         final Collection<? extends GroupingDefinition> groupings = testModule.getGroupings();
55         assertEquals(1, groupings.size());
56
57         final Iterator<? extends GroupingDefinition> groupingsIterator = groupings.iterator();
58         final GroupingDefinition grouping = groupingsIterator.next();
59         assertEquals("target", grouping.getQName().getLocalName());
60         assertEquals(5, grouping.getChildNodes().size());
61
62         final AnyxmlSchemaNode anyXmlNode = (AnyxmlSchemaNode) grouping.getDataChildByName(
63             QName.create(testModule.getQNameModule(), "data"));
64         assertNotNull(anyXmlNode);
65         final ChoiceSchemaNode choiceNode = (ChoiceSchemaNode) grouping.getDataChildByName(
66             QName.create(testModule.getQNameModule(), "how"));
67         assertNotNull(choiceNode);
68         final LeafSchemaNode leafNode = (LeafSchemaNode) grouping.getDataChildByName(
69             QName.create(testModule.getQNameModule(), "address"));
70         assertNotNull(leafNode);
71         final ContainerSchemaNode containerNode = (ContainerSchemaNode) grouping.getDataChildByName(
72             QName.create(testModule.getQNameModule(), "port"));
73         assertNotNull(containerNode);
74         final ListSchemaNode listNode = (ListSchemaNode) grouping.getDataChildByName(
75             QName.create(testModule.getQNameModule(), "addresses"));
76         assertNotNull(listNode);
77
78         assertEquals(1, grouping.getGroupings().size());
79         assertEquals("target-inner", grouping.getGroupings().iterator().next().getQName().getLocalName());
80
81         assertEquals(1, grouping.getTypeDefinitions().size());
82         assertEquals("group-type", grouping.getTypeDefinitions().iterator().next().getQName().getLocalName());
83
84         final Collection<? extends UnknownSchemaNode> unknownSchemaNodes = grouping.getUnknownSchemaNodes();
85         assertEquals(1, unknownSchemaNodes.size());
86         final UnknownSchemaNode extensionUse = unknownSchemaNodes.iterator().next();
87         assertEquals("opendaylight", extensionUse.getExtensionDefinition().getQName().getLocalName());
88     }
89
90     @Test
91     public void usesAndRefinesTest() throws ReactorException {
92         final SchemaContext result = RFC7950Reactors.defaultReactor().newBuild()
93                 .addSources(MODULE, SUBMODULE, GROUPING_MODULE, USES_MODULE)
94                 .buildEffective();
95         assertNotNull(result);
96
97         final Module testModule = result.findModules("foo").iterator().next();
98
99         final Collection<? extends UsesNode> usesNodes = testModule.getUses();
100         assertEquals(1, usesNodes.size());
101
102         UsesNode usesNode = usesNodes.iterator().next();
103         assertEquals("target", usesNode.getSourceGrouping().getQName().getLocalName());
104         assertEquals(1, usesNode.getAugmentations().size());
105
106         QName peer = QName.create(testModule.getQNameModule(), "peer");
107         ContainerSchemaNode container = (ContainerSchemaNode) testModule.getDataChildByName(peer);
108         assertNotNull(container);
109         container = (ContainerSchemaNode) container.getDataChildByName(QName.create(peer, "destination"));
110         assertEquals(1, container.getUses().size());
111
112         usesNode = container.getUses().iterator().next();
113         assertEquals("target", usesNode.getSourceGrouping().getQName().getLocalName());
114
115         final Map<Descendant, SchemaNode> refines = usesNode.getRefines();
116         assertEquals(4, refines.size());
117
118         assertEquals(ImmutableList.of(
119             Descendant.of(QName.create(peer, "address")),
120             Descendant.of(QName.create(peer, "port")),
121             Descendant.of(QName.create(peer, "addresses")),
122             Descendant.of(QName.create(peer, "addresses"), QName.create(peer, "id"))),
123             new ArrayList<>(refines.keySet()));
124     }
125 }