2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.yangtools.yang.stmt;
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;
18 import java.util.Iterator;
19 import java.util.List;
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.impl.DefaultReactors;
37 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
38 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
40 public class GroupingAndUsesStmtTest {
42 private static final StatementStreamSource MODULE = sourceForResource("/model/bar.yang");
43 private static final StatementStreamSource SUBMODULE = sourceForResource("/model/subfoo.yang");
44 private static final StatementStreamSource GROUPING_MODULE = sourceForResource("/model/baz.yang");
45 private static final StatementStreamSource USES_MODULE = sourceForResource("/model/foo.yang");
48 public void groupingTest() throws ReactorException {
49 final SchemaContext result = DefaultReactors.defaultReactor().newBuild()
50 .addSources(MODULE, GROUPING_MODULE)
52 assertNotNull(result);
54 final Module testModule = result.findModules("baz").iterator().next();
55 assertNotNull(testModule);
57 final Set<GroupingDefinition> groupings = testModule.getGroupings();
58 assertEquals(1, groupings.size());
60 final Iterator<GroupingDefinition> groupingsIterator = groupings.iterator();
61 final GroupingDefinition grouping = groupingsIterator.next();
62 assertEquals("target", grouping.getQName().getLocalName());
63 assertEquals(5, grouping.getChildNodes().size());
65 final AnyXmlSchemaNode anyXmlNode = (AnyXmlSchemaNode) grouping.getDataChildByName(
66 QName.create(testModule.getQNameModule(), "data"));
67 assertNotNull(anyXmlNode);
68 final ChoiceSchemaNode choiceNode = (ChoiceSchemaNode) grouping.getDataChildByName(
69 QName.create(testModule.getQNameModule(), "how"));
70 assertNotNull(choiceNode);
71 final LeafSchemaNode leafNode = (LeafSchemaNode) grouping.getDataChildByName(
72 QName.create(testModule.getQNameModule(), "address"));
73 assertNotNull(leafNode);
74 final ContainerSchemaNode containerNode = (ContainerSchemaNode) grouping.getDataChildByName(
75 QName.create(testModule.getQNameModule(), "port"));
76 assertNotNull(containerNode);
77 final ListSchemaNode listNode = (ListSchemaNode) grouping.getDataChildByName(
78 QName.create(testModule.getQNameModule(), "addresses"));
79 assertNotNull(listNode);
81 assertEquals(1, grouping.getGroupings().size());
82 assertEquals("target-inner", grouping.getGroupings().iterator().next().getQName().getLocalName());
84 assertEquals(1, grouping.getTypeDefinitions().size());
85 assertEquals("group-type", grouping.getTypeDefinitions().iterator().next().getQName().getLocalName());
87 final List<UnknownSchemaNode> unknownSchemaNodes = grouping.getUnknownSchemaNodes();
88 assertEquals(1, unknownSchemaNodes.size());
89 final UnknownSchemaNode extensionUse = unknownSchemaNodes.get(0);
90 assertEquals("opendaylight", extensionUse.getExtensionDefinition().getQName().getLocalName());
94 public void usesAndRefinesTest() throws ReactorException {
95 final SchemaContext result = DefaultReactors.defaultReactor().newBuild()
96 .addSources(MODULE, SUBMODULE, GROUPING_MODULE, USES_MODULE)
98 assertNotNull(result);
100 final Module testModule = result.findModules("foo").iterator().next();
101 assertNotNull(testModule);
103 final Set<UsesNode> usesNodes = testModule.getUses();
104 assertEquals(1, usesNodes.size());
106 UsesNode usesNode = usesNodes.iterator().next();
107 assertEquals("target", usesNode.getGroupingPath().getLastComponent().getLocalName());
108 assertEquals(1, usesNode.getAugmentations().size());
110 ContainerSchemaNode container = (ContainerSchemaNode) testModule.getDataChildByName(
111 QName.create(testModule.getQNameModule(), "peer"));
112 assertNotNull(container);
113 container = (ContainerSchemaNode) container.getDataChildByName(QName.create(testModule.getQNameModule(),
115 assertEquals(1, container.getUses().size());
117 usesNode = container.getUses().iterator().next();
118 assertEquals("target", usesNode.getGroupingPath().getLastComponent().getLocalName());
120 final Map<SchemaPath, SchemaNode> refines = usesNode.getRefines();
121 assertEquals(4, refines.size());
123 final Iterator<SchemaPath> refinesKeysIterator = refines.keySet().iterator();
124 SchemaPath path = refinesKeysIterator.next();
125 assertThat(path.getLastComponent().getLocalName(), anyOf(is("port"), is("address"), is("addresses"), is("id")));
126 path = refinesKeysIterator.next();
127 assertThat(path.getLastComponent().getLocalName(), anyOf(is("port"), is("address"), is("addresses"), is("id")));
128 path = refinesKeysIterator.next();
129 assertThat(path.getLastComponent().getLocalName(), anyOf(is("port"), is("address"), is("addresses"), is("id")));
130 path = refinesKeysIterator.next();
131 assertThat(path.getLastComponent().getLocalName(), anyOf(is("port"), is("address"), is("addresses"), is("id")));