1 package org.opendaylight.yangtools.yang.stmt.effective.build.test;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertNotNull;
7 import java.net.URISyntaxException;
8 import java.util.Collection;
10 import org.junit.Test;
11 import org.opendaylight.yangtools.yang.common.QName;
12 import org.opendaylight.yangtools.yang.common.QNameModule;
13 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
14 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
15 import org.opendaylight.yangtools.yang.model.api.Module;
16 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
17 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
18 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
19 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
20 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl;
21 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext;
22 import org.opendaylight.yangtools.yang.stmt.test.StmtTestUtils;
24 public class EffectiveModulesAndSubmodulesTest {
26 private static final YangStatementSourceImpl ROOT_MODULE = new YangStatementSourceImpl(
27 "/stmt-test/submodules/root-module.yang",false);
28 private static final YangStatementSourceImpl IMPORTED_MODULE = new YangStatementSourceImpl(
29 "/stmt-test/submodules/imported-module.yang",false);
30 private static final YangStatementSourceImpl SUBMODULE_1 = new YangStatementSourceImpl(
31 "/stmt-test/submodules/submodule-1.yang",false);
32 private static final YangStatementSourceImpl SUBMODULE_2 = new YangStatementSourceImpl(
33 "/stmt-test/submodules/submodule-2.yang",false);
34 private static final YangStatementSourceImpl SUBMODULE_TO_SUBMODULE_1 = new YangStatementSourceImpl(
35 "/stmt-test/submodules/submodule-to-submodule-1.yang",false);
38 public void modulesAndSubmodulesSimpleReferencesTest()
39 throws SourceException, ReactorException, URISyntaxException {
40 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
42 StmtTestUtils.addSources(reactor, ROOT_MODULE, IMPORTED_MODULE,
43 SUBMODULE_1, SUBMODULE_2, SUBMODULE_TO_SUBMODULE_1);
44 EffectiveSchemaContext result = reactor.buildEffective();
46 assertNotNull(result);
48 Set<Module> modules = result.getModules();
49 assertNotNull(modules);
50 assertEquals(2, modules.size());
53 Module imported = null;
54 for (Module module : modules) {
55 switch (module.getName()) {
59 case "imported-module":
64 StmtTestUtils.printReferences(module, false, "");
65 StmtTestUtils.printChilds(module.getChildNodes(), " ");
69 assertNotNull(imported);
71 Collection<DataSchemaNode> rootChildNodes = root.getChildNodes();
72 Collection<DataSchemaNode> importedChildNodes = imported
75 assertNotNull(rootChildNodes);
76 assertNotNull(importedChildNodes);
78 assertEquals(3, rootChildNodes.size());
79 assertEquals(1, importedChildNodes.size());
81 Set<Module> rootSubmodules = root.getSubmodules();
82 Set<Module> importedSubmodules = imported.getSubmodules();
84 assertNotNull(rootSubmodules);
85 assertNotNull(importedSubmodules);
87 assertEquals(2, rootSubmodules.size());
88 assertEquals(0, importedSubmodules.size());
92 for (Module rootSubmodule : rootSubmodules) {
93 switch (rootSubmodule.getName()) {
107 assertEquals(QNameModule.create(new URI("root-module"),
108 SimpleDateFormatUtil.DEFAULT_DATE_REV), sub1.getQNameModule());
109 assertEquals(QNameModule.create(new URI("root-module"),
110 SimpleDateFormatUtil.DEFAULT_DATE_REV), sub2.getQNameModule());
112 Collection<DataSchemaNode> sub1ChildNodes = sub1.getChildNodes();
113 Collection<DataSchemaNode> sub2ChildNodes = sub2.getChildNodes();
115 assertNotNull(sub1ChildNodes);
116 assertNotNull(sub2ChildNodes);
118 assertEquals(2, sub1ChildNodes.size());
119 assertEquals(1, sub2ChildNodes.size());
121 Set<Module> sub1Submodules = sub1.getSubmodules();
122 Set<Module> sub2Submodules = sub2.getSubmodules();
124 assertNotNull(sub1Submodules);
125 assertNotNull(sub2Submodules);
127 assertEquals(1, sub1Submodules.size());
128 assertEquals(0, sub2Submodules.size());
130 Module sub1Submodule = null;
131 for (Module submodule : sub1Submodules) {
132 switch (submodule.getName()) {
133 case "submodule-to-submodule-1":
134 sub1Submodule = submodule;
140 assertNotNull(sub1Submodule);
142 assertEquals(QNameModule.create(new URI("root-module"),
143 SimpleDateFormatUtil.DEFAULT_DATE_REV),
144 sub1Submodule.getQNameModule());
146 Collection<DataSchemaNode> sub1SubmoduleChildNodes = sub1Submodule
148 assertNotNull(sub1SubmoduleChildNodes);
149 assertEquals(1, sub1SubmoduleChildNodes.size());
151 Set<Module> sub1SubmoduleSubmodules = sub1Submodule.getSubmodules();
152 assertNotNull(sub1SubmoduleSubmodules);
153 assertEquals(0, sub1SubmoduleSubmodules.size());
155 findModulesSubTest(result, root, imported);
157 getDataChildByNameSubTest(result, root);
161 private static void getDataChildByNameSubTest(final EffectiveSchemaContext result,
163 DataSchemaNode containerInRoot = result.getDataChildByName(QName
164 .create(root.getQNameModule(), "container-in-root-module"));
165 assertNotNull(containerInRoot);
166 assertEquals("desc", containerInRoot.getDescription());
169 private static void findModulesSubTest(final EffectiveSchemaContext result, final Module root,
170 final Module imported) throws URISyntaxException {
171 Module foundRoot = result.findModuleByName("root-module",
172 SimpleDateFormatUtil.DEFAULT_DATE_REV);
173 Set<Module> foundRoots = result.findModuleByNamespace(new URI(
175 Module foundRoot3 = result.findModuleByNamespaceAndRevision(new URI(
176 "root-module"), SimpleDateFormatUtil.DEFAULT_DATE_REV);
178 assertNotNull(foundRoot);
179 assertNotNull(foundRoots);
180 assertEquals(1, foundRoots.size());
181 Module foundRoot2 = foundRoots.iterator().next();
183 assertNotNull(foundRoot2);
184 assertNotNull(foundRoot3);
186 assertEquals(root, foundRoot);
187 assertEquals(root, foundRoot2);
188 assertEquals(root, foundRoot3);
190 Module foundImported = result.findModuleByName("imported-module",
191 SimpleDateFormatUtil.DEFAULT_DATE_REV);
192 Set<Module> foundImporteds = result.findModuleByNamespace(new URI(
194 Module foundImported3 = result.findModuleByNamespaceAndRevision(
195 new URI("imported-module"),
196 SimpleDateFormatUtil.DEFAULT_DATE_REV);
198 assertNotNull(foundImported);
199 assertNotNull(foundImporteds);
200 assertEquals(1, foundImporteds.size());
201 Module foundImported2 = foundImporteds.iterator().next();
203 assertNotNull(foundImported2);
204 assertNotNull(foundImported3);
206 assertEquals(imported, foundImported);
207 assertEquals(imported, foundImported2);
208 assertEquals(imported, foundImported3);
210 assertFalse(root.equals(imported));