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 org.opendaylight.yangtools.yang.common.QName;
9 import org.opendaylight.yangtools.yang.common.QNameModule;
10 import java.net.URISyntaxException;
12 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
13 import java.util.Collection;
14 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
16 import org.opendaylight.yangtools.yang.model.api.Module;
17 import org.opendaylight.yangtools.yang.stmt.test.StmtTestUtils;
18 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
19 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
20 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
21 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
22 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext;
23 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl;
24 import org.junit.Test;
26 public class EffectiveModulesAndSubmodulesTest {
28 private static final YangStatementSourceImpl ROOT_MODULE = new YangStatementSourceImpl(
29 "/stmt-test/submodules/root-module.yang",false);
30 private static final YangStatementSourceImpl IMPORTED_MODULE = new YangStatementSourceImpl(
31 "/stmt-test/submodules/imported-module.yang",false);
32 private static final YangStatementSourceImpl SUBMODULE_1 = new YangStatementSourceImpl(
33 "/stmt-test/submodules/submodule-1.yang",false);
34 private static final YangStatementSourceImpl SUBMODULE_2 = new YangStatementSourceImpl(
35 "/stmt-test/submodules/submodule-2.yang",false);
36 private static final YangStatementSourceImpl SUBMODULE_TO_SUBMODULE_1 = new YangStatementSourceImpl(
37 "/stmt-test/submodules/submodule-to-submodule-1.yang",false);
40 public void modulesAndSubmodulesSimpleReferencesTest()
41 throws SourceException, ReactorException, URISyntaxException {
42 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
44 StmtTestUtils.addSources(reactor, ROOT_MODULE, IMPORTED_MODULE,
45 SUBMODULE_1, SUBMODULE_2, SUBMODULE_TO_SUBMODULE_1);
46 EffectiveSchemaContext result = reactor.buildEffective();
48 assertNotNull(result);
50 Set<Module> modules = result.getModules();
51 assertNotNull(modules);
52 assertEquals(2, modules.size());
55 Module imported = null;
56 for (Module module : modules) {
57 switch (module.getName()) {
61 case "imported-module":
66 StmtTestUtils.printReferences(module, false, "");
67 StmtTestUtils.printChilds(module.getChildNodes(), " ");
71 assertNotNull(imported);
73 Collection<DataSchemaNode> rootChildNodes = root.getChildNodes();
74 Collection<DataSchemaNode> importedChildNodes = imported
77 assertNotNull(rootChildNodes);
78 assertNotNull(importedChildNodes);
80 assertEquals(3, rootChildNodes.size());
81 assertEquals(1, importedChildNodes.size());
83 Set<Module> rootSubmodules = root.getSubmodules();
84 Set<Module> importedSubmodules = imported.getSubmodules();
86 assertNotNull(rootSubmodules);
87 assertNotNull(importedSubmodules);
89 assertEquals(2, rootSubmodules.size());
90 assertEquals(0, importedSubmodules.size());
94 for (Module rootSubmodule : rootSubmodules) {
95 switch (rootSubmodule.getName()) {
100 sub2 = rootSubmodule;
109 assertEquals(QNameModule.create(new URI("root-module"),
110 SimpleDateFormatUtil.DEFAULT_DATE_REV), sub1.getQNameModule());
111 assertEquals(QNameModule.create(new URI("root-module"),
112 SimpleDateFormatUtil.DEFAULT_DATE_REV), sub2.getQNameModule());
114 Collection<DataSchemaNode> sub1ChildNodes = sub1.getChildNodes();
115 Collection<DataSchemaNode> sub2ChildNodes = sub2.getChildNodes();
117 assertNotNull(sub1ChildNodes);
118 assertNotNull(sub2ChildNodes);
120 assertEquals(2, sub1ChildNodes.size());
121 assertEquals(1, sub2ChildNodes.size());
123 Set<Module> sub1Submodules = sub1.getSubmodules();
124 Set<Module> sub2Submodules = sub2.getSubmodules();
126 assertNotNull(sub1Submodules);
127 assertNotNull(sub2Submodules);
129 assertEquals(1, sub1Submodules.size());
130 assertEquals(0, sub2Submodules.size());
132 Module sub1Submodule = null;
133 for (Module submodule : sub1Submodules) {
134 switch (submodule.getName()) {
135 case "submodule-to-submodule-1":
136 sub1Submodule = submodule;
142 assertNotNull(sub1Submodule);
144 assertEquals(QNameModule.create(new URI("root-module"),
145 SimpleDateFormatUtil.DEFAULT_DATE_REV),
146 sub1Submodule.getQNameModule());
148 Collection<DataSchemaNode> sub1SubmoduleChildNodes = sub1Submodule
150 assertNotNull(sub1SubmoduleChildNodes);
151 assertEquals(1, sub1SubmoduleChildNodes.size());
153 Set<Module> sub1SubmoduleSubmodules = sub1Submodule.getSubmodules();
154 assertNotNull(sub1SubmoduleSubmodules);
155 assertEquals(0, sub1SubmoduleSubmodules.size());
157 findModulesSubTest(result, root, imported);
159 getDataChildByNameSubTest(result, root);
163 private void getDataChildByNameSubTest(EffectiveSchemaContext result,
165 DataSchemaNode containerInRoot = result.getDataChildByName(QName
166 .create(root.getQNameModule(), "container-in-root-module"));
167 assertNotNull(containerInRoot);
168 assertEquals("desc", containerInRoot.getDescription());
171 private void findModulesSubTest(EffectiveSchemaContext result, Module root,
172 Module imported) throws URISyntaxException {
173 Module foundRoot = result.findModuleByName("root-module",
174 SimpleDateFormatUtil.DEFAULT_DATE_REV);
175 Set<Module> foundRoots = result.findModuleByNamespace(new URI(
177 Module foundRoot3 = result.findModuleByNamespaceAndRevision(new URI(
178 "root-module"), SimpleDateFormatUtil.DEFAULT_DATE_REV);
180 assertNotNull(foundRoot);
181 assertNotNull(foundRoots);
182 assertEquals(1, foundRoots.size());
183 Module foundRoot2 = foundRoots.iterator().next();
185 assertNotNull(foundRoot2);
186 assertNotNull(foundRoot3);
188 assertEquals(root, foundRoot);
189 assertEquals(root, foundRoot2);
190 assertEquals(root, foundRoot3);
192 Module foundImported = result.findModuleByName("imported-module",
193 SimpleDateFormatUtil.DEFAULT_DATE_REV);
194 Set<Module> foundImporteds = result.findModuleByNamespace(new URI(
196 Module foundImported3 = result.findModuleByNamespaceAndRevision(
197 new URI("imported-module"),
198 SimpleDateFormatUtil.DEFAULT_DATE_REV);
200 assertNotNull(foundImported);
201 assertNotNull(foundImporteds);
202 assertEquals(1, foundImporteds.size());
203 Module foundImported2 = foundImporteds.iterator().next();
205 assertNotNull(foundImported2);
206 assertNotNull(foundImported3);
208 assertEquals(imported, foundImported);
209 assertEquals(imported, foundImported2);
210 assertEquals(imported, foundImported3);
212 assertFalse(root.equals(imported));