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
8 package org.opendaylight.yangtools.yang.stmt;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.opendaylight.yangtools.yang.stmt.StmtTestUtils.sourceForResource;
15 import java.util.Collection;
16 import java.util.Optional;
17 import org.junit.Test;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.common.QNameModule;
20 import org.opendaylight.yangtools.yang.common.XMLNamespace;
21 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.Module;
23 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
24 import org.opendaylight.yangtools.yang.model.api.Submodule;
25 import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors;
26 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
27 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
29 public class EffectiveModulesAndSubmodulesTest {
31 private static final StatementStreamSource ROOT_MODULE = sourceForResource(
32 "/stmt-test/submodules/root-module.yang");
33 private static final StatementStreamSource IMPORTED_MODULE = sourceForResource(
34 "/stmt-test/submodules/imported-module.yang");
35 private static final StatementStreamSource SUBMODULE_1 = sourceForResource(
36 "/stmt-test/submodules/submodule-1.yang");
37 private static final StatementStreamSource SUBMODULE_2 = sourceForResource(
38 "/stmt-test/submodules/submodule-2.yang");
39 private static final StatementStreamSource SUBMODULE_TO_SUBMODULE_1 = sourceForResource(
40 "/stmt-test/submodules/submodule-to-submodule-1.yang");
42 private static final QNameModule ROOT = QNameModule.create(XMLNamespace.of("root-module"));
45 public void modulesAndSubmodulesSimpleReferencesTest() throws ReactorException {
46 final SchemaContext result = RFC7950Reactors.defaultReactor().newBuild()
47 .addSources(ROOT_MODULE, IMPORTED_MODULE, SUBMODULE_1, SUBMODULE_2, SUBMODULE_TO_SUBMODULE_1)
50 assertNotNull(result);
52 final Collection<? extends Module> modules = result.getModules();
53 assertNotNull(modules);
54 assertEquals(2, modules.size());
57 Module imported = null;
58 for (final Module module : modules) {
59 switch (module.getName()) {
63 case "imported-module":
68 StmtTestUtils.printReferences(module, false, "");
69 StmtTestUtils.printChilds(module.getChildNodes(), " ");
73 assertNotNull(imported);
75 final Collection<? extends DataSchemaNode> rootChildNodes = root.getChildNodes();
76 final Collection<? extends DataSchemaNode> importedChildNodes = imported.getChildNodes();
78 assertNotNull(rootChildNodes);
79 assertNotNull(importedChildNodes);
81 assertEquals(3, rootChildNodes.size());
82 assertEquals(1, importedChildNodes.size());
84 final Collection<? extends Submodule> rootSubmodules = root.getSubmodules();
85 final Collection<? extends Submodule> importedSubmodules = imported.getSubmodules();
87 assertNotNull(rootSubmodules);
88 assertNotNull(importedSubmodules);
90 assertEquals(2, rootSubmodules.size());
91 assertEquals(0, importedSubmodules.size());
93 Submodule sub1 = null;
94 Submodule sub2 = null;
95 for (final Submodule rootSubmodule : rootSubmodules) {
96 switch (rootSubmodule.getName()) {
101 sub2 = rootSubmodule;
110 assertEquals(ROOT, sub1.getQNameModule());
111 assertEquals(ROOT, sub2.getQNameModule());
113 final Collection<? extends DataSchemaNode> sub1ChildNodes = sub1.getChildNodes();
114 final Collection<? extends DataSchemaNode> sub2ChildNodes = sub2.getChildNodes();
116 assertNotNull(sub1ChildNodes);
117 assertNotNull(sub2ChildNodes);
119 assertEquals(1, sub1ChildNodes.size());
120 assertEquals(1, sub2ChildNodes.size());
122 final Collection<? extends Submodule> sub1Submodules = sub1.getSubmodules();
123 final Collection<? extends Submodule> sub2Submodules = sub2.getSubmodules();
125 assertNotNull(sub1Submodules);
126 assertNotNull(sub2Submodules);
128 assertEquals(1, sub1Submodules.size());
129 assertEquals(0, sub2Submodules.size());
131 Submodule sub1Submodule = null;
132 for (final Submodule submodule : sub1Submodules) {
133 switch (submodule.getName()) {
134 case "submodule-to-submodule-1":
135 sub1Submodule = submodule;
141 assertNotNull(sub1Submodule);
143 assertEquals(ROOT, sub1Submodule.getQNameModule());
145 final Collection<? extends DataSchemaNode> sub1SubmoduleChildNodes = sub1Submodule.getChildNodes();
146 assertNotNull(sub1SubmoduleChildNodes);
147 assertEquals(1, sub1SubmoduleChildNodes.size());
149 final Collection<? extends Submodule> sub1SubmoduleSubmodules = sub1Submodule.getSubmodules();
150 assertNotNull(sub1SubmoduleSubmodules);
151 assertEquals(0, sub1SubmoduleSubmodules.size());
153 findModulesSubTest(result, root, imported);
155 getDataChildByNameSubTest(result, root);
158 private static void getDataChildByNameSubTest(final SchemaContext result, final Module root) {
159 final DataSchemaNode containerInRoot = result.getDataChildByName(QName
160 .create(root.getQNameModule(), "container-in-root-module"));
161 assertNotNull(containerInRoot);
162 assertEquals(Optional.of("desc"), containerInRoot.getDescription());
165 private static void findModulesSubTest(final SchemaContext result, final Module root, final Module imported) {
166 final Module foundRoot = result.findModule("root-module").get();
167 final Collection<? extends Module> foundRoots = result.findModules(XMLNamespace.of("root-module"));
168 final Module foundRoot3 = result.findModule(XMLNamespace.of("root-module")).get();
170 assertNotNull(foundRoot);
171 assertNotNull(foundRoots);
172 assertEquals(1, foundRoots.size());
173 final Module foundRoot2 = foundRoots.iterator().next();
175 assertNotNull(foundRoot2);
176 assertNotNull(foundRoot3);
178 assertEquals(root, foundRoot);
179 assertEquals(root, foundRoot2);
180 assertEquals(root, foundRoot3);
182 final Module foundImported = result.findModule("imported-module").get();
183 final Collection<? extends Module> foundImporteds = result.findModules(XMLNamespace.of("imported-module"));
184 final Module foundImported3 = result.findModule(XMLNamespace.of("imported-module")).get();
186 assertNotNull(foundImported);
187 assertNotNull(foundImporteds);
188 assertEquals(1, foundImporteds.size());
189 final Module foundImported2 = foundImporteds.iterator().next();
191 assertNotNull(foundImported2);
192 assertNotNull(foundImported3);
194 assertEquals(imported, foundImported);
195 assertEquals(imported, foundImported2);
196 assertEquals(imported, foundImported3);
198 assertFalse(root.equals(imported));