Cleanup DocumentedNode
[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.spi.meta.ReactorException;
27 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
28 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
29 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
30
31 public class EffectiveModulesAndSubmodulesTest {
32
33     private static final StatementStreamSource ROOT_MODULE = sourceForResource(
34             "/stmt-test/submodules/root-module.yang");
35     private static final StatementStreamSource IMPORTED_MODULE = sourceForResource(
36             "/stmt-test/submodules/imported-module.yang");
37     private static final StatementStreamSource SUBMODULE_1 = sourceForResource(
38             "/stmt-test/submodules/submodule-1.yang");
39     private static final StatementStreamSource SUBMODULE_2 = sourceForResource(
40             "/stmt-test/submodules/submodule-2.yang");
41     private static final StatementStreamSource SUBMODULE_TO_SUBMODULE_1 = sourceForResource(
42             "/stmt-test/submodules/submodule-to-submodule-1.yang");
43
44     private static final QNameModule ROOT = QNameModule.create(URI.create("root-module"));
45
46     @Test
47     public void modulesAndSubmodulesSimpleReferencesTest() throws ReactorException {
48         final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
49                 .newBuild();
50         reactor.addSources(ROOT_MODULE, IMPORTED_MODULE,
51                 SUBMODULE_1, SUBMODULE_2, SUBMODULE_TO_SUBMODULE_1);
52         final SchemaContext result = reactor.buildEffective();
53
54         assertNotNull(result);
55
56         final Set<Module> modules = result.getModules();
57         assertNotNull(modules);
58         assertEquals(2, modules.size());
59
60         Module root = null;
61         Module imported = null;
62         for (final Module module : modules) {
63             switch (module.getName()) {
64                 case "root-module":
65                     root = module;
66                     break;
67                 case "imported-module":
68                     imported = module;
69                     break;
70                 default:
71             }
72             StmtTestUtils.printReferences(module, false, "");
73             StmtTestUtils.printChilds(module.getChildNodes(), "      ");
74         }
75
76         assertNotNull(root);
77         assertNotNull(imported);
78
79         final Collection<DataSchemaNode> rootChildNodes = root.getChildNodes();
80         final Collection<DataSchemaNode> importedChildNodes = imported
81                 .getChildNodes();
82
83         assertNotNull(rootChildNodes);
84         assertNotNull(importedChildNodes);
85
86         assertEquals(3, rootChildNodes.size());
87         assertEquals(1, importedChildNodes.size());
88
89         final Set<Module> rootSubmodules = root.getSubmodules();
90         final Set<Module> importedSubmodules = imported.getSubmodules();
91
92         assertNotNull(rootSubmodules);
93         assertNotNull(importedSubmodules);
94
95         assertEquals(2, rootSubmodules.size());
96         assertEquals(0, importedSubmodules.size());
97
98         Module sub1 = null;
99         Module sub2 = null;
100         for (final Module rootSubmodule : rootSubmodules) {
101             switch (rootSubmodule.getName()) {
102                 case "submodule-1":
103                     sub1 = rootSubmodule;
104                     break;
105                 case "submodule-2":
106                     sub2 = rootSubmodule;
107                     break;
108                 default:
109             }
110         }
111
112         assertNotNull(sub1);
113         assertNotNull(sub2);
114
115         assertEquals(ROOT, sub1.getQNameModule());
116         assertEquals(ROOT, sub2.getQNameModule());
117
118         final Collection<DataSchemaNode> sub1ChildNodes = sub1.getChildNodes();
119         final Collection<DataSchemaNode> sub2ChildNodes = sub2.getChildNodes();
120
121         assertNotNull(sub1ChildNodes);
122         assertNotNull(sub2ChildNodes);
123
124         assertEquals(1, sub1ChildNodes.size());
125         assertEquals(1, sub2ChildNodes.size());
126
127         final Set<Module> sub1Submodules = sub1.getSubmodules();
128         final Set<Module> sub2Submodules = sub2.getSubmodules();
129
130         assertNotNull(sub1Submodules);
131         assertNotNull(sub2Submodules);
132
133         assertEquals(1, sub1Submodules.size());
134         assertEquals(0, sub2Submodules.size());
135
136         Module sub1Submodule = null;
137         for (final Module submodule : sub1Submodules) {
138             switch (submodule.getName()) {
139                 case "submodule-to-submodule-1":
140                     sub1Submodule = submodule;
141                     break;
142                 default:
143             }
144         }
145
146         assertNotNull(sub1Submodule);
147
148         assertEquals(ROOT, sub1Submodule.getQNameModule());
149
150         final Collection<DataSchemaNode> sub1SubmoduleChildNodes = sub1Submodule.getChildNodes();
151         assertNotNull(sub1SubmoduleChildNodes);
152         assertEquals(1, sub1SubmoduleChildNodes.size());
153
154         final Set<Module> sub1SubmoduleSubmodules = sub1Submodule.getSubmodules();
155         assertNotNull(sub1SubmoduleSubmodules);
156         assertEquals(0, sub1SubmoduleSubmodules.size());
157
158         findModulesSubTest(result, root, imported);
159
160         getDataChildByNameSubTest(result, root);
161     }
162
163     private static void getDataChildByNameSubTest(final SchemaContext result, final Module root) {
164         final DataSchemaNode containerInRoot = result.getDataChildByName(QName
165                 .create(root.getQNameModule(), "container-in-root-module"));
166         assertNotNull(containerInRoot);
167         assertEquals(Optional.of("desc"), containerInRoot.getDescription());
168     }
169
170     private static void findModulesSubTest(final SchemaContext result, final Module root, final Module imported) {
171         final Module foundRoot = result.findModule("root-module").get();
172         final Set<Module> foundRoots = result.findModules(URI.create("root-module"));
173         final Module foundRoot3 = result.findModule(URI.create("root-module")).get();
174
175         assertNotNull(foundRoot);
176         assertNotNull(foundRoots);
177         assertEquals(1, foundRoots.size());
178         final Module foundRoot2 = foundRoots.iterator().next();
179
180         assertNotNull(foundRoot2);
181         assertNotNull(foundRoot3);
182
183         assertEquals(root, foundRoot);
184         assertEquals(root, foundRoot2);
185         assertEquals(root, foundRoot3);
186
187         final Module foundImported = result.findModule("imported-module").get();
188         final Set<Module> foundImporteds = result.findModules(URI.create("imported-module"));
189         final Module foundImported3 = result.findModule(URI.create("imported-module")).get();
190
191         assertNotNull(foundImported);
192         assertNotNull(foundImporteds);
193         assertEquals(1, foundImporteds.size());
194         final Module foundImported2 = foundImporteds.iterator().next();
195
196         assertNotNull(foundImported2);
197         assertNotNull(foundImported3);
198
199         assertEquals(imported, foundImported);
200         assertEquals(imported, foundImported2);
201         assertEquals(imported, foundImported3);
202
203         assertFalse(root.equals(imported));
204     }
205 }