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.net.URISyntaxException;
18 import java.util.Collection;
20 import org.junit.Test;
21 import org.opendaylight.yangtools.yang.common.QName;
22 import org.opendaylight.yangtools.yang.common.QNameModule;
23 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
24 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.Module;
26 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
27 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
28 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
29 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
30 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
31 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext;
33 public class EffectiveModulesAndSubmodulesTest {
35 private static final StatementStreamSource ROOT_MODULE = sourceForResource(
36 "/stmt-test/submodules/root-module.yang");
37 private static final StatementStreamSource IMPORTED_MODULE = sourceForResource(
38 "/stmt-test/submodules/imported-module.yang");
39 private static final StatementStreamSource SUBMODULE_1 = sourceForResource(
40 "/stmt-test/submodules/submodule-1.yang");
41 private static final StatementStreamSource SUBMODULE_2 = sourceForResource(
42 "/stmt-test/submodules/submodule-2.yang");
43 private static final StatementStreamSource SUBMODULE_TO_SUBMODULE_1 = sourceForResource(
44 "/stmt-test/submodules/submodule-to-submodule-1.yang");
47 public void modulesAndSubmodulesSimpleReferencesTest()
48 throws SourceException, ReactorException, URISyntaxException {
49 final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
51 reactor.addSources(ROOT_MODULE, IMPORTED_MODULE,
52 SUBMODULE_1, SUBMODULE_2, SUBMODULE_TO_SUBMODULE_1);
53 final EffectiveSchemaContext result = reactor.buildEffective();
55 assertNotNull(result);
57 final Set<Module> modules = result.getModules();
58 assertNotNull(modules);
59 assertEquals(2, modules.size());
62 Module imported = null;
63 for (final Module module : modules) {
64 switch (module.getName()) {
68 case "imported-module":
73 StmtTestUtils.printReferences(module, false, "");
74 StmtTestUtils.printChilds(module.getChildNodes(), " ");
78 assertNotNull(imported);
80 final Collection<DataSchemaNode> rootChildNodes = root.getChildNodes();
81 final Collection<DataSchemaNode> importedChildNodes = imported
84 assertNotNull(rootChildNodes);
85 assertNotNull(importedChildNodes);
87 assertEquals(3, rootChildNodes.size());
88 assertEquals(1, importedChildNodes.size());
90 final Set<Module> rootSubmodules = root.getSubmodules();
91 final Set<Module> importedSubmodules = imported.getSubmodules();
93 assertNotNull(rootSubmodules);
94 assertNotNull(importedSubmodules);
96 assertEquals(2, rootSubmodules.size());
97 assertEquals(0, importedSubmodules.size());
101 for (final Module rootSubmodule : rootSubmodules) {
102 switch (rootSubmodule.getName()) {
104 sub1 = rootSubmodule;
107 sub2 = rootSubmodule;
116 assertEquals(QNameModule.create(new URI("root-module"),
117 SimpleDateFormatUtil.DEFAULT_DATE_REV), sub1.getQNameModule());
118 assertEquals(QNameModule.create(new URI("root-module"),
119 SimpleDateFormatUtil.DEFAULT_DATE_REV), sub2.getQNameModule());
121 final Collection<DataSchemaNode> sub1ChildNodes = sub1.getChildNodes();
122 final Collection<DataSchemaNode> sub2ChildNodes = sub2.getChildNodes();
124 assertNotNull(sub1ChildNodes);
125 assertNotNull(sub2ChildNodes);
127 assertEquals(1, sub1ChildNodes.size());
128 assertEquals(1, sub2ChildNodes.size());
130 final Set<Module> sub1Submodules = sub1.getSubmodules();
131 final Set<Module> sub2Submodules = sub2.getSubmodules();
133 assertNotNull(sub1Submodules);
134 assertNotNull(sub2Submodules);
136 assertEquals(1, sub1Submodules.size());
137 assertEquals(0, sub2Submodules.size());
139 Module sub1Submodule = null;
140 for (final Module submodule : sub1Submodules) {
141 switch (submodule.getName()) {
142 case "submodule-to-submodule-1":
143 sub1Submodule = submodule;
149 assertNotNull(sub1Submodule);
151 assertEquals(QNameModule.create(new URI("root-module"),
152 SimpleDateFormatUtil.DEFAULT_DATE_REV),
153 sub1Submodule.getQNameModule());
155 final Collection<DataSchemaNode> sub1SubmoduleChildNodes = sub1Submodule
157 assertNotNull(sub1SubmoduleChildNodes);
158 assertEquals(1, sub1SubmoduleChildNodes.size());
160 final Set<Module> sub1SubmoduleSubmodules = sub1Submodule.getSubmodules();
161 assertNotNull(sub1SubmoduleSubmodules);
162 assertEquals(0, sub1SubmoduleSubmodules.size());
164 findModulesSubTest(result, root, imported);
166 getDataChildByNameSubTest(result, root);
170 private static void getDataChildByNameSubTest(final EffectiveSchemaContext result,
172 final DataSchemaNode containerInRoot = result.getDataChildByName(QName
173 .create(root.getQNameModule(), "container-in-root-module"));
174 assertNotNull(containerInRoot);
175 assertEquals("desc", containerInRoot.getDescription());
178 private static void findModulesSubTest(final EffectiveSchemaContext result, final Module root,
179 final Module imported) throws URISyntaxException {
180 final Module foundRoot = result.findModuleByName("root-module",
181 SimpleDateFormatUtil.DEFAULT_DATE_REV);
182 final Set<Module> foundRoots = result.findModuleByNamespace(new URI(
184 final Module foundRoot3 = result.findModuleByNamespaceAndRevision(new URI(
185 "root-module"), SimpleDateFormatUtil.DEFAULT_DATE_REV);
187 assertNotNull(foundRoot);
188 assertNotNull(foundRoots);
189 assertEquals(1, foundRoots.size());
190 final Module foundRoot2 = foundRoots.iterator().next();
192 assertNotNull(foundRoot2);
193 assertNotNull(foundRoot3);
195 assertEquals(root, foundRoot);
196 assertEquals(root, foundRoot2);
197 assertEquals(root, foundRoot3);
199 final Module foundImported = result.findModuleByName("imported-module",
200 SimpleDateFormatUtil.DEFAULT_DATE_REV);
201 final Set<Module> foundImporteds = result.findModuleByNamespace(new URI(
203 final Module foundImported3 = result.findModuleByNamespaceAndRevision(
204 new URI("imported-module"),
205 SimpleDateFormatUtil.DEFAULT_DATE_REV);
207 assertNotNull(foundImported);
208 assertNotNull(foundImporteds);
209 assertEquals(1, foundImporteds.size());
210 final Module foundImported2 = foundImporteds.iterator().next();
212 assertNotNull(foundImported2);
213 assertNotNull(foundImported3);
215 assertEquals(imported, foundImported);
216 assertEquals(imported, foundImported2);
217 assertEquals(imported, foundImported3);
219 assertFalse(root.equals(imported));