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