Adjust test suite parser update to conform with API changes
[yangtools.git] / yang / yang-parser-impl / src / test / java / org / opendaylight / yangtools / yang / stmt / EffectiveModulesAndSubmodulesTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.yangtools.yang.stmt;
10
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;
15
16 import java.net.URI;
17 import java.util.Collection;
18 import java.util.Optional;
19 import java.util.Set;
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.model.api.DataSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.Module;
25 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
26 import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors;
27 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
28 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
29
30 public class EffectiveModulesAndSubmodulesTest {
31
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");
42
43     private static final QNameModule ROOT = QNameModule.create(URI.create("root-module"));
44
45     @Test
46     public void modulesAndSubmodulesSimpleReferencesTest() throws ReactorException {
47         final SchemaContext result = RFC7950Reactors.defaultReactor().newBuild()
48                 .addSources(ROOT_MODULE, IMPORTED_MODULE, SUBMODULE_1, SUBMODULE_2, SUBMODULE_TO_SUBMODULE_1)
49                 .buildEffective();
50
51         assertNotNull(result);
52
53         final Set<Module> modules = result.getModules();
54         assertNotNull(modules);
55         assertEquals(2, modules.size());
56
57         Module root = null;
58         Module imported = null;
59         for (final Module module : modules) {
60             switch (module.getName()) {
61                 case "root-module":
62                     root = module;
63                     break;
64                 case "imported-module":
65                     imported = module;
66                     break;
67                 default:
68             }
69             StmtTestUtils.printReferences(module, false, "");
70             StmtTestUtils.printChilds(module.getChildNodes(), "      ");
71         }
72
73         assertNotNull(root);
74         assertNotNull(imported);
75
76         final Collection<DataSchemaNode> rootChildNodes = root.getChildNodes();
77         final Collection<DataSchemaNode> importedChildNodes = imported
78                 .getChildNodes();
79
80         assertNotNull(rootChildNodes);
81         assertNotNull(importedChildNodes);
82
83         assertEquals(3, rootChildNodes.size());
84         assertEquals(1, importedChildNodes.size());
85
86         final Set<Module> rootSubmodules = root.getSubmodules();
87         final Set<Module> importedSubmodules = imported.getSubmodules();
88
89         assertNotNull(rootSubmodules);
90         assertNotNull(importedSubmodules);
91
92         assertEquals(2, rootSubmodules.size());
93         assertEquals(0, importedSubmodules.size());
94
95         Module sub1 = null;
96         Module sub2 = null;
97         for (final Module rootSubmodule : rootSubmodules) {
98             switch (rootSubmodule.getName()) {
99                 case "submodule-1":
100                     sub1 = rootSubmodule;
101                     break;
102                 case "submodule-2":
103                     sub2 = rootSubmodule;
104                     break;
105                 default:
106             }
107         }
108
109         assertNotNull(sub1);
110         assertNotNull(sub2);
111
112         assertEquals(ROOT, sub1.getQNameModule());
113         assertEquals(ROOT, sub2.getQNameModule());
114
115         final Collection<DataSchemaNode> sub1ChildNodes = sub1.getChildNodes();
116         final Collection<DataSchemaNode> sub2ChildNodes = sub2.getChildNodes();
117
118         assertNotNull(sub1ChildNodes);
119         assertNotNull(sub2ChildNodes);
120
121         assertEquals(1, sub1ChildNodes.size());
122         assertEquals(1, sub2ChildNodes.size());
123
124         final Set<Module> sub1Submodules = sub1.getSubmodules();
125         final Set<Module> sub2Submodules = sub2.getSubmodules();
126
127         assertNotNull(sub1Submodules);
128         assertNotNull(sub2Submodules);
129
130         assertEquals(1, sub1Submodules.size());
131         assertEquals(0, sub2Submodules.size());
132
133         Module sub1Submodule = null;
134         for (final Module submodule : sub1Submodules) {
135             switch (submodule.getName()) {
136                 case "submodule-to-submodule-1":
137                     sub1Submodule = submodule;
138                     break;
139                 default:
140             }
141         }
142
143         assertNotNull(sub1Submodule);
144
145         assertEquals(ROOT, sub1Submodule.getQNameModule());
146
147         final Collection<DataSchemaNode> sub1SubmoduleChildNodes = sub1Submodule.getChildNodes();
148         assertNotNull(sub1SubmoduleChildNodes);
149         assertEquals(1, sub1SubmoduleChildNodes.size());
150
151         final Set<Module> sub1SubmoduleSubmodules = sub1Submodule.getSubmodules();
152         assertNotNull(sub1SubmoduleSubmodules);
153         assertEquals(0, sub1SubmoduleSubmodules.size());
154
155         findModulesSubTest(result, root, imported);
156
157         getDataChildByNameSubTest(result, root);
158     }
159
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(Optional.of("desc"), containerInRoot.getDescription());
165     }
166
167     private static void findModulesSubTest(final SchemaContext result, final Module root, final Module imported) {
168         final Module foundRoot = result.findModule("root-module").get();
169         final Set<Module> foundRoots = result.findModules(URI.create("root-module"));
170         final Module foundRoot3 = result.findModule(URI.create("root-module")).get();
171
172         assertNotNull(foundRoot);
173         assertNotNull(foundRoots);
174         assertEquals(1, foundRoots.size());
175         final Module foundRoot2 = foundRoots.iterator().next();
176
177         assertNotNull(foundRoot2);
178         assertNotNull(foundRoot3);
179
180         assertEquals(root, foundRoot);
181         assertEquals(root, foundRoot2);
182         assertEquals(root, foundRoot3);
183
184         final Module foundImported = result.findModule("imported-module").get();
185         final Set<Module> foundImporteds = result.findModules(URI.create("imported-module"));
186         final Module foundImported3 = result.findModule(URI.create("imported-module")).get();
187
188         assertNotNull(foundImported);
189         assertNotNull(foundImporteds);
190         assertEquals(1, foundImporteds.size());
191         final Module foundImported2 = foundImporteds.iterator().next();
192
193         assertNotNull(foundImported2);
194         assertNotNull(foundImported3);
195
196         assertEquals(imported, foundImported);
197         assertEquals(imported, foundImported2);
198         assertEquals(imported, foundImported3);
199
200         assertFalse(root.equals(imported));
201     }
202 }