Bug 5085: Clean-up test and retest JUnit tests
[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 java.net.URI;
15 import java.net.URISyntaxException;
16 import java.util.Collection;
17 import java.util.Set;
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;
30
31 public class EffectiveModulesAndSubmodulesTest {
32
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);
43
44     @Test
45     public void modulesAndSubmodulesSimpleReferencesTest()
46             throws SourceException, ReactorException, URISyntaxException {
47         CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
48                 .newBuild();
49         StmtTestUtils.addSources(reactor, ROOT_MODULE, IMPORTED_MODULE,
50                 SUBMODULE_1, SUBMODULE_2, SUBMODULE_TO_SUBMODULE_1);
51         EffectiveSchemaContext result = reactor.buildEffective();
52
53         assertNotNull(result);
54
55         Set<Module> modules = result.getModules();
56         assertNotNull(modules);
57         assertEquals(2, modules.size());
58
59         Module root = null;
60         Module imported = null;
61         for (Module module : modules) {
62             switch (module.getName()) {
63             case "root-module":
64                 root = module;
65                 break;
66             case "imported-module":
67                 imported = module;
68                 break;
69             default:
70             }
71             StmtTestUtils.printReferences(module, false, "");
72             StmtTestUtils.printChilds(module.getChildNodes(), "      ");
73         }
74
75         assertNotNull(root);
76         assertNotNull(imported);
77
78         Collection<DataSchemaNode> rootChildNodes = root.getChildNodes();
79         Collection<DataSchemaNode> importedChildNodes = imported
80                 .getChildNodes();
81
82         assertNotNull(rootChildNodes);
83         assertNotNull(importedChildNodes);
84
85         assertEquals(3, rootChildNodes.size());
86         assertEquals(1, importedChildNodes.size());
87
88         Set<Module> rootSubmodules = root.getSubmodules();
89         Set<Module> importedSubmodules = imported.getSubmodules();
90
91         assertNotNull(rootSubmodules);
92         assertNotNull(importedSubmodules);
93
94         assertEquals(2, rootSubmodules.size());
95         assertEquals(0, importedSubmodules.size());
96
97         Module sub1 = null;
98         Module sub2 = null;
99         for (Module rootSubmodule : rootSubmodules) {
100             switch (rootSubmodule.getName()) {
101             case "submodule-1":
102                 sub1 = rootSubmodule;
103                 break;
104             case "submodule-2":
105                 sub2 = rootSubmodule;
106                 break;
107             default:
108             }
109         }
110
111         assertNotNull(sub1);
112         assertNotNull(sub2);
113
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());
118
119         Collection<DataSchemaNode> sub1ChildNodes = sub1.getChildNodes();
120         Collection<DataSchemaNode> sub2ChildNodes = sub2.getChildNodes();
121
122         assertNotNull(sub1ChildNodes);
123         assertNotNull(sub2ChildNodes);
124
125         assertEquals(2, sub1ChildNodes.size());
126         assertEquals(1, sub2ChildNodes.size());
127
128         Set<Module> sub1Submodules = sub1.getSubmodules();
129         Set<Module> sub2Submodules = sub2.getSubmodules();
130
131         assertNotNull(sub1Submodules);
132         assertNotNull(sub2Submodules);
133
134         assertEquals(1, sub1Submodules.size());
135         assertEquals(0, sub2Submodules.size());
136
137         Module sub1Submodule = null;
138         for (Module submodule : sub1Submodules) {
139             switch (submodule.getName()) {
140             case "submodule-to-submodule-1":
141                 sub1Submodule = submodule;
142                 break;
143             default:
144             }
145         }
146
147         assertNotNull(sub1Submodule);
148
149         assertEquals(QNameModule.create(new URI("root-module"),
150                 SimpleDateFormatUtil.DEFAULT_DATE_REV),
151                 sub1Submodule.getQNameModule());
152
153         Collection<DataSchemaNode> sub1SubmoduleChildNodes = sub1Submodule
154                 .getChildNodes();
155         assertNotNull(sub1SubmoduleChildNodes);
156         assertEquals(1, sub1SubmoduleChildNodes.size());
157
158         Set<Module> sub1SubmoduleSubmodules = sub1Submodule.getSubmodules();
159         assertNotNull(sub1SubmoduleSubmodules);
160         assertEquals(0, sub1SubmoduleSubmodules.size());
161
162         findModulesSubTest(result, root, imported);
163
164         getDataChildByNameSubTest(result, root);
165
166     }
167
168     private static void getDataChildByNameSubTest(final EffectiveSchemaContext result,
169             final Module root) {
170         DataSchemaNode containerInRoot = result.getDataChildByName(QName
171                 .create(root.getQNameModule(), "container-in-root-module"));
172         assertNotNull(containerInRoot);
173         assertEquals("desc", containerInRoot.getDescription());
174     }
175
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(
181                 "root-module"));
182         Module foundRoot3 = result.findModuleByNamespaceAndRevision(new URI(
183                 "root-module"), SimpleDateFormatUtil.DEFAULT_DATE_REV);
184
185         assertNotNull(foundRoot);
186         assertNotNull(foundRoots);
187         assertEquals(1, foundRoots.size());
188         Module foundRoot2 = foundRoots.iterator().next();
189
190         assertNotNull(foundRoot2);
191         assertNotNull(foundRoot3);
192
193         assertEquals(root, foundRoot);
194         assertEquals(root, foundRoot2);
195         assertEquals(root, foundRoot3);
196
197         Module foundImported = result.findModuleByName("imported-module",
198                 SimpleDateFormatUtil.DEFAULT_DATE_REV);
199         Set<Module> foundImporteds = result.findModuleByNamespace(new URI(
200                 "imported-module"));
201         Module foundImported3 = result.findModuleByNamespaceAndRevision(
202                 new URI("imported-module"),
203                 SimpleDateFormatUtil.DEFAULT_DATE_REV);
204
205         assertNotNull(foundImported);
206         assertNotNull(foundImporteds);
207         assertEquals(1, foundImporteds.size());
208         Module foundImported2 = foundImporteds.iterator().next();
209
210         assertNotNull(foundImported2);
211         assertNotNull(foundImported3);
212
213         assertEquals(imported, foundImported);
214         assertEquals(imported, foundImported2);
215         assertEquals(imported, foundImported3);
216
217         assertFalse(root.equals(imported));
218     }
219
220 }