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;
15 import java.net.URISyntaxException;
16 import java.util.Collection;
18 import org.junit.Test;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.common.QNameModule;
21 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
22 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.Module;
24 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
25 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
26 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
27 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
28 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl;
29 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext;
31 public class EffectiveModulesAndSubmodulesTest {
33 private static final YangStatementSourceImpl ROOT_MODULE = new YangStatementSourceImpl(
34 "/stmt-test/submodules/root-module.yang",false);
35 private static final YangStatementSourceImpl IMPORTED_MODULE = new YangStatementSourceImpl(
36 "/stmt-test/submodules/imported-module.yang",false);
37 private static final YangStatementSourceImpl SUBMODULE_1 = new YangStatementSourceImpl(
38 "/stmt-test/submodules/submodule-1.yang",false);
39 private static final YangStatementSourceImpl SUBMODULE_2 = new YangStatementSourceImpl(
40 "/stmt-test/submodules/submodule-2.yang",false);
41 private static final YangStatementSourceImpl SUBMODULE_TO_SUBMODULE_1 = new YangStatementSourceImpl(
42 "/stmt-test/submodules/submodule-to-submodule-1.yang",false);
45 public void modulesAndSubmodulesSimpleReferencesTest()
46 throws SourceException, ReactorException, URISyntaxException {
47 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
49 StmtTestUtils.addSources(reactor, ROOT_MODULE, IMPORTED_MODULE,
50 SUBMODULE_1, SUBMODULE_2, SUBMODULE_TO_SUBMODULE_1);
51 EffectiveSchemaContext result = reactor.buildEffective();
53 assertNotNull(result);
55 Set<Module> modules = result.getModules();
56 assertNotNull(modules);
57 assertEquals(2, modules.size());
60 Module imported = null;
61 for (Module module : modules) {
62 switch (module.getName()) {
66 case "imported-module":
71 StmtTestUtils.printReferences(module, false, "");
72 StmtTestUtils.printChilds(module.getChildNodes(), " ");
76 assertNotNull(imported);
78 Collection<DataSchemaNode> rootChildNodes = root.getChildNodes();
79 Collection<DataSchemaNode> importedChildNodes = imported
82 assertNotNull(rootChildNodes);
83 assertNotNull(importedChildNodes);
85 assertEquals(3, rootChildNodes.size());
86 assertEquals(1, importedChildNodes.size());
88 Set<Module> rootSubmodules = root.getSubmodules();
89 Set<Module> importedSubmodules = imported.getSubmodules();
91 assertNotNull(rootSubmodules);
92 assertNotNull(importedSubmodules);
94 assertEquals(2, rootSubmodules.size());
95 assertEquals(0, importedSubmodules.size());
99 for (Module rootSubmodule : rootSubmodules) {
100 switch (rootSubmodule.getName()) {
102 sub1 = rootSubmodule;
105 sub2 = rootSubmodule;
114 assertEquals(QNameModule.create(new URI("root-module"),
115 SimpleDateFormatUtil.DEFAULT_DATE_REV), sub1.getQNameModule());
116 assertEquals(QNameModule.create(new URI("root-module"),
117 SimpleDateFormatUtil.DEFAULT_DATE_REV), sub2.getQNameModule());
119 Collection<DataSchemaNode> sub1ChildNodes = sub1.getChildNodes();
120 Collection<DataSchemaNode> sub2ChildNodes = sub2.getChildNodes();
122 assertNotNull(sub1ChildNodes);
123 assertNotNull(sub2ChildNodes);
125 assertEquals(2, sub1ChildNodes.size());
126 assertEquals(1, sub2ChildNodes.size());
128 Set<Module> sub1Submodules = sub1.getSubmodules();
129 Set<Module> sub2Submodules = sub2.getSubmodules();
131 assertNotNull(sub1Submodules);
132 assertNotNull(sub2Submodules);
134 assertEquals(1, sub1Submodules.size());
135 assertEquals(0, sub2Submodules.size());
137 Module sub1Submodule = null;
138 for (Module submodule : sub1Submodules) {
139 switch (submodule.getName()) {
140 case "submodule-to-submodule-1":
141 sub1Submodule = submodule;
147 assertNotNull(sub1Submodule);
149 assertEquals(QNameModule.create(new URI("root-module"),
150 SimpleDateFormatUtil.DEFAULT_DATE_REV),
151 sub1Submodule.getQNameModule());
153 Collection<DataSchemaNode> sub1SubmoduleChildNodes = sub1Submodule
155 assertNotNull(sub1SubmoduleChildNodes);
156 assertEquals(1, sub1SubmoduleChildNodes.size());
158 Set<Module> sub1SubmoduleSubmodules = sub1Submodule.getSubmodules();
159 assertNotNull(sub1SubmoduleSubmodules);
160 assertEquals(0, sub1SubmoduleSubmodules.size());
162 findModulesSubTest(result, root, imported);
164 getDataChildByNameSubTest(result, root);
168 private static void getDataChildByNameSubTest(final EffectiveSchemaContext result,
170 DataSchemaNode containerInRoot = result.getDataChildByName(QName
171 .create(root.getQNameModule(), "container-in-root-module"));
172 assertNotNull(containerInRoot);
173 assertEquals("desc", containerInRoot.getDescription());
176 private static void findModulesSubTest(final EffectiveSchemaContext result, final Module root,
177 final Module imported) throws URISyntaxException {
178 Module foundRoot = result.findModuleByName("root-module",
179 SimpleDateFormatUtil.DEFAULT_DATE_REV);
180 Set<Module> foundRoots = result.findModuleByNamespace(new URI(
182 Module foundRoot3 = result.findModuleByNamespaceAndRevision(new URI(
183 "root-module"), SimpleDateFormatUtil.DEFAULT_DATE_REV);
185 assertNotNull(foundRoot);
186 assertNotNull(foundRoots);
187 assertEquals(1, foundRoots.size());
188 Module foundRoot2 = foundRoots.iterator().next();
190 assertNotNull(foundRoot2);
191 assertNotNull(foundRoot3);
193 assertEquals(root, foundRoot);
194 assertEquals(root, foundRoot2);
195 assertEquals(root, foundRoot3);
197 Module foundImported = result.findModuleByName("imported-module",
198 SimpleDateFormatUtil.DEFAULT_DATE_REV);
199 Set<Module> foundImporteds = result.findModuleByNamespace(new URI(
201 Module foundImported3 = result.findModuleByNamespaceAndRevision(
202 new URI("imported-module"),
203 SimpleDateFormatUtil.DEFAULT_DATE_REV);
205 assertNotNull(foundImported);
206 assertNotNull(foundImporteds);
207 assertEquals(1, foundImporteds.size());
208 Module foundImported2 = foundImporteds.iterator().next();
210 assertNotNull(foundImported2);
211 assertNotNull(foundImported3);
213 assertEquals(imported, foundImported);
214 assertEquals(imported, foundImported2);
215 assertEquals(imported, foundImported3);
217 assertFalse(root.equals(imported));