Switch Import/Include/BelongsTo statements to use Unqualified
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / DeclaredStatementsTest.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 package org.opendaylight.yangtools.yang.stmt;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertTrue;
14 import static org.opendaylight.yangtools.yang.stmt.StmtTestUtils.sourceForResource;
15
16 import java.text.ParseException;
17 import java.util.Collection;
18 import java.util.Set;
19 import java.util.function.Predicate;
20 import org.junit.Test;
21 import org.opendaylight.yangtools.yang.common.QName;
22 import org.opendaylight.yangtools.yang.common.Revision;
23 import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
24 import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
28 import org.opendaylight.yangtools.yang.model.api.Module;
29 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
30 import org.opendaylight.yangtools.yang.model.api.Status;
31 import org.opendaylight.yangtools.yang.model.api.Submodule;
32 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement;
33 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
34 import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement;
35 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentEffectiveStatement;
36 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
37 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
38 import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
39 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceEffectiveStatement;
40 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement;
41 import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement;
42 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
43 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
44 import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement;
45 import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement;
46 import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement;
47 import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement;
48 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement;
49 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement;
50 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement;
51 import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement;
52 import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement;
53 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement;
54 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
55 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
56 import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
57 import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement;
58 import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement;
59 import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement;
60 import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
61 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement;
62 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
63 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
64 import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleEffectiveStatement;
65 import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement;
66 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
67 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
68 import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement;
69 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
70 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
71
72 public class DeclaredStatementsTest {
73
74     @Test
75     public void testDeclaredAnyXml() throws ReactorException {
76         final StatementStreamSource anyxmlStmtModule =
77                 sourceForResource("/declared-statements-test/anyxml-declared-test.yang");
78
79         final SchemaContext schemaContext = StmtTestUtils.parseYangSources(anyxmlStmtModule);
80         assertNotNull(schemaContext);
81
82         final Module testModule = schemaContext.findModules("anyxml-declared-test").iterator().next();
83         assertNotNull(testModule);
84
85         final AnyxmlSchemaNode anyxmlSchemaNode = (AnyxmlSchemaNode) testModule.getDataChildByName(
86                 QName.create(testModule.getQNameModule(), "foobar"));
87         assertNotNull(anyxmlSchemaNode);
88         final AnyxmlStatement anyxmlStatement = ((AnyxmlEffectiveStatement) anyxmlSchemaNode).getDeclared();
89
90         final QName name = anyxmlStatement.argument();
91         assertNotNull(name);
92
93         final WhenStatement whenStatement = anyxmlStatement.getWhenStatement().get();
94         assertNotNull(whenStatement.argument());
95         final DescriptionStatement whenStatementDescription = whenStatement.getDescription().get();
96         assertTrue(whenStatement.getReference().isPresent());
97
98         final Collection<? extends IfFeatureStatement> ifFeatureStatements = anyxmlStatement.getIfFeatures();
99         assertNotNull(ifFeatureStatements);
100         assertEquals(1, ifFeatureStatements.size());
101         final Predicate<Set<QName>> ifFeaturePredicate = ifFeatureStatements.iterator().next().getIfFeaturePredicate();
102         assertNotNull(ifFeaturePredicate);
103
104         final Collection<? extends MustStatement> mustStatements = anyxmlStatement.getMustStatements();
105         assertNotNull(mustStatements);
106         assertEquals(1, mustStatements.size());
107         final MustStatement mustStatement = mustStatements.iterator().next();
108         assertNotNull(mustStatement.argument());
109         assertTrue(mustStatement.getErrorAppTagStatement().isPresent());
110         assertTrue(mustStatement.getErrorMessageStatement().isPresent());
111         assertTrue(mustStatement.getDescription().isPresent());
112         assertTrue(mustStatement.getReference().isPresent());
113
114         final ConfigStatement configStatement = anyxmlStatement.getConfig().get();
115         assertFalse(configStatement.getValue());
116
117         final StatusStatement statusStatement = anyxmlStatement.getStatus().get();
118         final Status status = statusStatement.argument();
119         assertNotNull(status);
120
121         final DescriptionStatement descriptionStatement = anyxmlStatement.getDescription().get();
122         assertEquals("anyxml description", descriptionStatement.argument());
123
124         final ReferenceStatement referenceStatement = anyxmlStatement.getReference().get();
125         assertEquals("anyxml reference", referenceStatement.argument());
126
127         assertTrue(anyxmlStatement.getMandatory().isPresent());
128     }
129
130     @Test
131     public void testDeclaredChoice() throws ReactorException {
132         final StatementStreamSource choiceStmtModule =
133                 sourceForResource("/declared-statements-test/choice-declared-test.yang");
134
135         final SchemaContext schemaContext = StmtTestUtils.parseYangSources(choiceStmtModule);
136         assertNotNull(schemaContext);
137
138         final Module testModule = schemaContext.findModules("choice-declared-test").iterator().next();
139         assertNotNull(testModule);
140
141         final ChoiceSchemaNode choiceSchemaNode = (ChoiceSchemaNode) testModule.getDataChildByName(
142                 QName.create(testModule.getQNameModule(), "test-choice"));
143         assertNotNull(choiceSchemaNode);
144         final ChoiceStatement choiceStatement = ((ChoiceEffectiveStatement) choiceSchemaNode).getDeclared();
145
146         final QName name = choiceStatement.argument();
147         assertNotNull(name);
148
149         final DefaultStatement defaultStatement = choiceStatement.getDefault().get();
150         assertEquals("case-two", defaultStatement.argument());
151
152         assertTrue(choiceStatement.getConfig().isPresent());
153         assertTrue(choiceStatement.getMandatory().isPresent());
154
155         final Collection<? extends CaseStatement> caseStatements = choiceStatement.getCases();
156         assertNotNull(caseStatements);
157         assertEquals(3, caseStatements.size());
158         final CaseStatement caseStatement = caseStatements.iterator().next();
159         final QName caseStatementName = caseStatement.argument();
160         assertNotNull(caseStatementName);
161         final WhenStatement caseStatementWhen = caseStatement.getWhenStatement().get();
162         final Collection<? extends IfFeatureStatement> caseStatementIfFeatures = caseStatement.getIfFeatures();
163         assertNotNull(caseStatementIfFeatures);
164         assertEquals(1, caseStatementIfFeatures.size());
165         final Collection<? extends DataDefinitionStatement> caseStatementDataDefinitions =
166                 caseStatement.getDataDefinitions();
167         assertNotNull(caseStatementDataDefinitions);
168         assertEquals(1, caseStatementDataDefinitions.size());
169         assertTrue(caseStatement.getStatus().isPresent());
170         assertTrue(caseStatement.getDescription().isPresent());
171         assertTrue(caseStatement.getReference().isPresent());
172
173         final WhenStatement whenStatement = choiceStatement.getWhenStatement().get();
174
175         final Collection<? extends IfFeatureStatement> ifFeatureStatements = choiceStatement.getIfFeatures();
176         assertNotNull(ifFeatureStatements);
177         assertEquals(1, ifFeatureStatements.size());
178
179         assertTrue(choiceStatement.getStatus().isPresent());
180         assertTrue(choiceStatement.getDescription().isPresent());
181         assertTrue(choiceStatement.getReference().isPresent());
182     }
183
184     @Test
185     public void testDeclaredAugment() throws ReactorException {
186         final StatementStreamSource augmentStmtModule =
187                 sourceForResource("/declared-statements-test/augment-declared-test.yang");
188
189         final SchemaContext schemaContext = StmtTestUtils.parseYangSources(augmentStmtModule);
190         assertNotNull(schemaContext);
191
192         final Module testModule = schemaContext.findModules("augment-declared-test").iterator().next();
193         assertNotNull(testModule);
194
195         final Collection<? extends AugmentationSchemaNode> augmentationSchemas = testModule.getAugmentations();
196         assertNotNull(augmentationSchemas);
197         assertEquals(1, augmentationSchemas.size());
198
199         final AugmentationSchemaNode augmentationSchema = augmentationSchemas.iterator().next();
200         final AugmentStatement augmentStatement = ((AugmentEffectiveStatement) augmentationSchema).getDeclared();
201
202         final SchemaNodeIdentifier targetNode = augmentStatement.argument();
203         assertNotNull(targetNode);
204
205         final Collection<? extends DataDefinitionStatement> augmentStatementDataDefinitions =
206                 augmentStatement.getDataDefinitions();
207         assertNotNull(augmentStatementDataDefinitions);
208         assertEquals(1, augmentStatementDataDefinitions.size());
209     }
210
211     @Test
212     public void testDeclaredModuleAndSubmodule() throws ReactorException {
213         final StatementStreamSource parentModule =
214                 sourceForResource("/declared-statements-test/parent-module-declared-test.yang");
215
216         final StatementStreamSource childModule =
217                 sourceForResource("/declared-statements-test/child-module-declared-test.yang");
218
219         final SchemaContext schemaContext = StmtTestUtils.parseYangSources(parentModule, childModule);
220         assertNotNull(schemaContext);
221
222         final Module testModule = schemaContext.findModules("parent-module-declared-test").iterator().next();
223         assertNotNull(testModule);
224
225         final ModuleStatement moduleStatement = ((ModuleEffectiveStatement) testModule).getDeclared();
226         assertNotNull(moduleStatement.argument());
227
228         final YangVersionStatement moduleStatementYangVersion = moduleStatement.getYangVersion();
229         assertNotNull(moduleStatementYangVersion);
230         assertNotNull(moduleStatementYangVersion.argument());
231
232         final NamespaceStatement moduleStatementNamspace = moduleStatement.getNamespace();
233         assertNotNull(moduleStatementNamspace);
234         assertNotNull(moduleStatementNamspace.argument());
235
236         final PrefixStatement moduleStatementPrefix = moduleStatement.getPrefix();
237         assertNotNull(moduleStatementPrefix);
238         assertNotNull(moduleStatementPrefix.argument());
239
240         assertEquals(1, moduleStatement.getIncludes().size());
241         final IncludeStatement includeStatement = moduleStatement.getIncludes().iterator().next();
242         assertEquals(Unqualified.of("child-module-declared-test"), includeStatement.argument());
243
244         final Collection<? extends Submodule> submodules = testModule.getSubmodules();
245         assertNotNull(submodules);
246         assertEquals(1, submodules.size());
247
248         final Submodule submodule = submodules.iterator().next();
249         final SubmoduleStatement submoduleStatement = ((SubmoduleEffectiveStatement) submodule).getDeclared();
250
251         assertNotNull(submoduleStatement.argument());
252
253         final YangVersionStatement submoduleStatementYangVersion = submoduleStatement.getYangVersion();
254         assertNotNull(submoduleStatementYangVersion);
255
256         final BelongsToStatement belongsToStatement = submoduleStatement.getBelongsTo();
257         assertNotNull(belongsToStatement);
258         assertNotNull(belongsToStatement.argument());
259         assertNotNull(belongsToStatement.getPrefix());
260     }
261
262     @Test
263     public void testDeclaredModule() throws ReactorException, ParseException {
264         final StatementStreamSource rootModule =
265                 sourceForResource("/declared-statements-test/root-module-declared-test.yang");
266
267         final StatementStreamSource importedModule =
268                 sourceForResource("/declared-statements-test/imported-module-declared-test.yang");
269
270         final SchemaContext schemaContext = StmtTestUtils.parseYangSources(rootModule, importedModule);
271         assertNotNull(schemaContext);
272
273         final Revision revision = Revision.of("2016-09-28");
274         final Module testModule = schemaContext.findModule("root-module-declared-test", revision).get();
275         assertNotNull(testModule);
276
277         final ModuleStatement moduleStatement = ((ModuleEffectiveStatement) testModule).getDeclared();
278
279         assertEquals(1, moduleStatement.getImports().size());
280         final ImportStatement importStatement = moduleStatement.getImports().iterator().next();
281         assertEquals(Unqualified.of("imported-module-declared-test"), importStatement.argument());
282         assertEquals("imdt", importStatement.getPrefix().argument());
283         assertEquals(revision, importStatement.getRevisionDate().argument());
284
285         assertEquals("test description", moduleStatement.getDescription().get().argument());
286         assertEquals("test reference", moduleStatement.getReference().get().argument());
287         assertEquals("test organization", moduleStatement.getOrganization().get().argument());
288         assertEquals("test contact", moduleStatement.getContact().get().argument());
289
290         assertEquals(1, moduleStatement.getRevisions().size());
291         final RevisionStatement revisionStatement = moduleStatement.getRevisions().iterator().next();
292         assertEquals(revision, revisionStatement.argument());
293         assertEquals("test description", revisionStatement.getDescription().get().argument());
294         assertEquals("test reference", revisionStatement.getReference().get().argument());
295
296         assertEquals(1, moduleStatement.getExtensions().size());
297         final ExtensionStatement extensionStatement = moduleStatement.getExtensions().iterator().next();
298         assertEquals(Status.CURRENT, extensionStatement.getStatus().get().argument());
299         assertEquals("test description", extensionStatement.getDescription().get().argument());
300         assertEquals("test reference", extensionStatement.getReference().get().argument());
301         final ArgumentStatement argumentStatement = extensionStatement.getArgument();
302         assertEquals("ext-argument", argumentStatement.argument().getLocalName());
303         assertTrue(argumentStatement.getYinElement().argument());
304
305         assertEquals(2, moduleStatement.getFeatures().size());
306         final FeatureStatement featureStatement = moduleStatement.getFeatures().iterator().next();
307         assertEquals(Status.CURRENT, featureStatement.getStatus().get().argument());
308         assertEquals("test description", featureStatement.getDescription().get().argument());
309         assertEquals("test reference", featureStatement.getReference().get().argument());
310         assertEquals("test-feature", featureStatement.argument().getLocalName());
311         assertEquals(1, featureStatement.getIfFeatures().size());
312
313         assertEquals(2, moduleStatement.getIdentities().size());
314         IdentityStatement identityStatement = null;
315         for (final IdentityStatement identity : moduleStatement.getIdentities()) {
316             if (identity.argument().getLocalName().equals("test-id")) {
317                 identityStatement = identity;
318             }
319         }
320
321         assertEquals("test-base-id", identityStatement.getBases().iterator().next().argument().getLocalName());
322         assertEquals(Status.CURRENT, identityStatement.getStatus().get().argument());
323         assertEquals("test description", identityStatement.getDescription().get().argument());
324         assertEquals("test reference", identityStatement.getReference().get().argument());
325         assertEquals("test-id", identityStatement.argument().getLocalName());
326
327         assertEquals(1, moduleStatement.getTypedefs().size());
328         final TypedefStatement typedefStatement = moduleStatement.getTypedefs().iterator().next();
329         assertEquals(Status.CURRENT, typedefStatement.getStatus().get().argument());
330         assertEquals("test description", typedefStatement.getDescription().get().argument());
331         assertEquals("test reference", typedefStatement.getReference().get().argument());
332         assertEquals("test-typedef", typedefStatement.argument().getLocalName());
333         assertEquals("int32", typedefStatement.getType().rawArgument());
334         assertEquals("meter", typedefStatement.getUnits().get().argument());
335     }
336
337     @Test
338     public void testDeclaredContainer() throws ReactorException {
339         final StatementStreamSource containerStmtModule =
340                 sourceForResource("/declared-statements-test/container-declared-test.yang");
341
342         final SchemaContext schemaContext = StmtTestUtils.parseYangSources(containerStmtModule);
343         assertNotNull(schemaContext);
344
345         final Module testModule = schemaContext.findModules("container-declared-test").iterator().next();
346         assertNotNull(testModule);
347
348         final ContainerSchemaNode containerSchemaNode = (ContainerSchemaNode) testModule.getDataChildByName(
349                 QName.create(testModule.getQNameModule(), "test-container"));
350         assertNotNull(containerSchemaNode);
351         final ContainerStatement containerStatement =
352                 ((ContainerEffectiveStatement) containerSchemaNode).getDeclared();
353
354         final QName name = containerStatement.argument();
355         assertNotNull(name);
356
357         final WhenStatement containerStatementWhen = containerStatement.getWhenStatement().get();
358
359         final Collection<? extends IfFeatureStatement> containerStatementIfFeatures =
360                 containerStatement.getIfFeatures();
361         assertNotNull(containerStatementIfFeatures);
362         assertEquals(1, containerStatementIfFeatures.size());
363
364         final Collection<? extends MustStatement> containerStatementMusts = containerStatement.getMustStatements();
365         assertNotNull(containerStatementMusts);
366         assertEquals(1, containerStatementMusts.size());
367
368         final PresenceStatement containerStatementPresence = containerStatement.getPresence();
369         assertNotNull(containerStatementPresence);
370         assertNotNull(containerStatementPresence.argument());
371
372         assertTrue(containerStatement.getConfig().isPresent());
373         assertTrue(containerStatement.getStatus().isPresent());
374         assertTrue(containerStatement.getDescription().isPresent());
375         assertTrue(containerStatement.getReference().isPresent());
376
377         final Collection<? extends TypedefStatement> containerStatementTypedefs = containerStatement.getTypedefs();
378         assertNotNull(containerStatementTypedefs);
379         assertEquals(1, containerStatementTypedefs.size());
380
381         final Collection<? extends GroupingStatement> containerStatementGroupings = containerStatement.getGroupings();
382         assertNotNull(containerStatementGroupings);
383         assertEquals(1, containerStatementGroupings.size());
384
385         final Collection<? extends DataDefinitionStatement> containerStatementDataDefinitions =
386                 containerStatement.getDataDefinitions();
387
388         assertNotNull(containerStatementDataDefinitions);
389         assertEquals(1, containerStatementDataDefinitions.size());
390     }
391 }