Fix checkstyle in yang-parser-impl and enable enforcement
[yangtools.git] / yang / yang-parser-impl / 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
9 package org.opendaylight.yangtools.yang.stmt;
10
11 import static org.hamcrest.CoreMatchers.anyOf;
12 import static org.hamcrest.CoreMatchers.is;
13 import static org.hamcrest.MatcherAssert.assertThat;
14 import static org.junit.Assert.assertEquals;
15 import static org.junit.Assert.assertNotNull;
16 import static org.opendaylight.yangtools.yang.stmt.StmtTestUtils.sourceForResource;
17
18 import java.util.Iterator;
19 import java.util.List;
20 import java.util.Map;
21 import java.util.Set;
22 import org.junit.Test;
23 import org.opendaylight.yangtools.yang.common.QName;
24 import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
28 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
29 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
30 import org.opendaylight.yangtools.yang.model.api.Module;
31 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
32 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
33 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
34 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
35 import org.opendaylight.yangtools.yang.model.api.UsesNode;
36 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
37 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
38 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
39 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
40
41 public class GroupingAndUsesStmtTest {
42
43     private static final StatementStreamSource MODULE = sourceForResource("/model/bar.yang");
44     private static final StatementStreamSource SUBMODULE = sourceForResource("/model/subfoo.yang");
45     private static final StatementStreamSource GROUPING_MODULE = sourceForResource("/model/baz.yang");
46     private static final StatementStreamSource USES_MODULE = sourceForResource("/model/foo.yang");
47
48     @Test
49     public void groupingTest() throws ReactorException {
50         final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
51         reactor.addSources(MODULE, GROUPING_MODULE);
52
53         final SchemaContext result = reactor.buildEffective();
54         assertNotNull(result);
55
56         final Module testModule = result.findModules("baz").iterator().next();
57         assertNotNull(testModule);
58
59         final Set<GroupingDefinition> groupings = testModule.getGroupings();
60         assertEquals(1, groupings.size());
61
62         final Iterator<GroupingDefinition> groupingsIterator = groupings.iterator();
63         final GroupingDefinition grouping = groupingsIterator.next();
64         assertEquals("target", grouping.getQName().getLocalName());
65         assertEquals(5, grouping.getChildNodes().size());
66
67         final AnyXmlSchemaNode anyXmlNode = (AnyXmlSchemaNode) grouping.getDataChildByName(
68             QName.create(testModule.getQNameModule(), "data"));
69         assertNotNull(anyXmlNode);
70         final ChoiceSchemaNode choiceNode = (ChoiceSchemaNode) grouping.getDataChildByName(
71             QName.create(testModule.getQNameModule(), "how"));
72         assertNotNull(choiceNode);
73         final LeafSchemaNode leafNode = (LeafSchemaNode) grouping.getDataChildByName(
74             QName.create(testModule.getQNameModule(), "address"));
75         assertNotNull(leafNode);
76         final ContainerSchemaNode containerNode = (ContainerSchemaNode) grouping.getDataChildByName(
77             QName.create(testModule.getQNameModule(), "port"));
78         assertNotNull(containerNode);
79         final ListSchemaNode listNode = (ListSchemaNode) grouping.getDataChildByName(
80             QName.create(testModule.getQNameModule(), "addresses"));
81         assertNotNull(listNode);
82
83         assertEquals(1, grouping.getGroupings().size());
84         assertEquals("target-inner", grouping.getGroupings().iterator().next().getQName().getLocalName());
85
86         assertEquals(1, grouping.getTypeDefinitions().size());
87         assertEquals("group-type", grouping.getTypeDefinitions().iterator().next().getQName().getLocalName());
88
89         final List<UnknownSchemaNode> unknownSchemaNodes = grouping.getUnknownSchemaNodes();
90         assertEquals(1, unknownSchemaNodes.size());
91         final UnknownSchemaNode extensionUse = unknownSchemaNodes.get(0);
92         assertEquals("opendaylight", extensionUse.getExtensionDefinition().getQName().getLocalName());
93     }
94
95     @Test
96     public void usesAndRefinesTest() throws ReactorException {
97         final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
98         reactor.addSources(MODULE, SUBMODULE, GROUPING_MODULE, USES_MODULE);
99
100         final SchemaContext result = reactor.buildEffective();
101         assertNotNull(result);
102
103         final Module testModule = result.findModules("foo").iterator().next();
104         assertNotNull(testModule);
105
106         final Set<UsesNode> usesNodes = testModule.getUses();
107         assertEquals(1, usesNodes.size());
108
109         UsesNode usesNode = usesNodes.iterator().next();
110         assertEquals("target", usesNode.getGroupingPath().getLastComponent().getLocalName());
111         assertEquals(1, usesNode.getAugmentations().size());
112
113         ContainerSchemaNode container = (ContainerSchemaNode) testModule.getDataChildByName(
114             QName.create(testModule.getQNameModule(), "peer"));
115         assertNotNull(container);
116         container = (ContainerSchemaNode) container.getDataChildByName(QName.create(testModule.getQNameModule(),
117             "destination"));
118         assertEquals(1, container.getUses().size());
119
120         usesNode = container.getUses().iterator().next();
121         assertEquals("target", usesNode.getGroupingPath().getLastComponent().getLocalName());
122
123         final Map<SchemaPath, SchemaNode> refines = usesNode.getRefines();
124         assertEquals(4, refines.size());
125
126         final Iterator<SchemaPath> refinesKeysIterator = refines.keySet().iterator();
127         SchemaPath path = refinesKeysIterator.next();
128         assertThat(path.getLastComponent().getLocalName(), anyOf(is("port"), is("address"), is("addresses"), is("id")));
129         path = refinesKeysIterator.next();
130         assertThat(path.getLastComponent().getLocalName(), anyOf(is("port"), is("address"), is("addresses"), is("id")));
131         path = refinesKeysIterator.next();
132         assertThat(path.getLastComponent().getLocalName(), anyOf(is("port"), is("address"), is("addresses"), is("id")));
133         path = refinesKeysIterator.next();
134         assertThat(path.getLastComponent().getLocalName(), anyOf(is("port"), is("address"), is("addresses"), is("id")));
135     }
136 }