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.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertNotNull;
14 import static org.opendaylight.yangtools.yang.stmt.StmtTestUtils.sourceForResource;
17 import java.util.Collection;
19 import org.junit.Test;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.common.QNameModule;
22 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.Module;
24 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
25 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
26 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
27 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
28 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
30 public class EffectiveModulesAndSubmodulesTest {
32 private static final StatementStreamSource ROOT_MODULE = sourceForResource(
33 "/stmt-test/submodules/root-module.yang");
34 private static final StatementStreamSource IMPORTED_MODULE = sourceForResource(
35 "/stmt-test/submodules/imported-module.yang");
36 private static final StatementStreamSource SUBMODULE_1 = sourceForResource(
37 "/stmt-test/submodules/submodule-1.yang");
38 private static final StatementStreamSource SUBMODULE_2 = sourceForResource(
39 "/stmt-test/submodules/submodule-2.yang");
40 private static final StatementStreamSource SUBMODULE_TO_SUBMODULE_1 = sourceForResource(
41 "/stmt-test/submodules/submodule-to-submodule-1.yang");
44 public void modulesAndSubmodulesSimpleReferencesTest() throws ReactorException {
45 final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
47 reactor.addSources(ROOT_MODULE, IMPORTED_MODULE,
48 SUBMODULE_1, SUBMODULE_2, SUBMODULE_TO_SUBMODULE_1);
49 final SchemaContext result = reactor.buildEffective();
51 assertNotNull(result);
53 final Set<Module> modules = result.getModules();
54 assertNotNull(modules);
55 assertEquals(2, modules.size());
58 Module imported = null;
59 for (final Module module : modules) {
60 switch (module.getName()) {
64 case "imported-module":
69 StmtTestUtils.printReferences(module, false, "");
70 StmtTestUtils.printChilds(module.getChildNodes(), " ");
74 assertNotNull(imported);
76 final Collection<DataSchemaNode> rootChildNodes = root.getChildNodes();
77 final Collection<DataSchemaNode> importedChildNodes = imported
80 assertNotNull(rootChildNodes);
81 assertNotNull(importedChildNodes);
83 assertEquals(3, rootChildNodes.size());
84 assertEquals(1, importedChildNodes.size());
86 final Set<Module> rootSubmodules = root.getSubmodules();
87 final Set<Module> importedSubmodules = imported.getSubmodules();
89 assertNotNull(rootSubmodules);
90 assertNotNull(importedSubmodules);
92 assertEquals(2, rootSubmodules.size());
93 assertEquals(0, importedSubmodules.size());
97 for (final Module rootSubmodule : rootSubmodules) {
98 switch (rootSubmodule.getName()) {
100 sub1 = rootSubmodule;
103 sub2 = rootSubmodule;
112 assertEquals(QNameModule.create(URI.create("root-module"), null), sub1.getQNameModule());
113 assertEquals(QNameModule.create(URI.create("root-module"), null), sub2.getQNameModule());
115 final Collection<DataSchemaNode> sub1ChildNodes = sub1.getChildNodes();
116 final Collection<DataSchemaNode> sub2ChildNodes = sub2.getChildNodes();
118 assertNotNull(sub1ChildNodes);
119 assertNotNull(sub2ChildNodes);
121 assertEquals(1, sub1ChildNodes.size());
122 assertEquals(1, sub2ChildNodes.size());
124 final Set<Module> sub1Submodules = sub1.getSubmodules();
125 final Set<Module> sub2Submodules = sub2.getSubmodules();
127 assertNotNull(sub1Submodules);
128 assertNotNull(sub2Submodules);
130 assertEquals(1, sub1Submodules.size());
131 assertEquals(0, sub2Submodules.size());
133 Module sub1Submodule = null;
134 for (final Module submodule : sub1Submodules) {
135 switch (submodule.getName()) {
136 case "submodule-to-submodule-1":
137 sub1Submodule = submodule;
143 assertNotNull(sub1Submodule);
145 assertEquals(QNameModule.create(URI.create("root-module"), null), sub1Submodule.getQNameModule());
147 final Collection<DataSchemaNode> sub1SubmoduleChildNodes = sub1Submodule.getChildNodes();
148 assertNotNull(sub1SubmoduleChildNodes);
149 assertEquals(1, sub1SubmoduleChildNodes.size());
151 final Set<Module> sub1SubmoduleSubmodules = sub1Submodule.getSubmodules();
152 assertNotNull(sub1SubmoduleSubmodules);
153 assertEquals(0, sub1SubmoduleSubmodules.size());
155 findModulesSubTest(result, root, imported);
157 getDataChildByNameSubTest(result, root);
160 private static void getDataChildByNameSubTest(final SchemaContext result, final Module root) {
161 final DataSchemaNode containerInRoot = result.getDataChildByName(QName
162 .create(root.getQNameModule(), "container-in-root-module"));
163 assertNotNull(containerInRoot);
164 assertEquals("desc", containerInRoot.getDescription());
167 private static void findModulesSubTest(final SchemaContext result, final Module root, final Module imported) {
168 final Module foundRoot = result.findModule("root-module", null).get();
169 final Set<Module> foundRoots = result.findModules(URI.create("root-module"));
170 final Module foundRoot3 = result.findModule(URI.create("root-module"), null).get();
172 assertNotNull(foundRoot);
173 assertNotNull(foundRoots);
174 assertEquals(1, foundRoots.size());
175 final Module foundRoot2 = foundRoots.iterator().next();
177 assertNotNull(foundRoot2);
178 assertNotNull(foundRoot3);
180 assertEquals(root, foundRoot);
181 assertEquals(root, foundRoot2);
182 assertEquals(root, foundRoot3);
184 final Module foundImported = result.findModule("imported-module", null).get();
185 final Set<Module> foundImporteds = result.findModules(URI.create("imported-module"));
186 final Module foundImported3 = result.findModule(URI.create("imported-module"), null).get();
188 assertNotNull(foundImported);
189 assertNotNull(foundImporteds);
190 assertEquals(1, foundImporteds.size());
191 final Module foundImported2 = foundImporteds.iterator().next();
193 assertNotNull(foundImported2);
194 assertNotNull(foundImported3);
196 assertEquals(imported, foundImported);
197 assertEquals(imported, foundImported2);
198 assertEquals(imported, foundImported3);
200 assertFalse(root.equals(imported));