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