2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.yangtools.yang.stmt;
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;
16 import java.text.ParseException;
17 import java.util.Collection;
18 import java.util.Date;
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;
74 public class DeclaredStatementsTest {
77 public void testDeclaredAnyXml() throws ReactorException {
78 YangStatementSourceImpl anyxmlStmtModule =
79 new YangStatementSourceImpl("/declared-statements-test/anyxml-declared-test.yang", false);
81 SchemaContext schemaContext = StmtTestUtils.parseYangSources(anyxmlStmtModule);
82 assertNotNull(schemaContext);
84 Module testModule = schemaContext.findModuleByName("anyxml-declared-test", null);
85 assertNotNull(testModule);
87 AnyXmlSchemaNode anyxmlSchemaNode = (AnyXmlSchemaNode) testModule.getDataChildByName(
88 QName.create(testModule.getQNameModule(), "foobar"));
89 assertNotNull(anyxmlSchemaNode);
90 AnyxmlStatement anyxmlStatement = ((AnyXmlEffectiveStatementImpl) anyxmlSchemaNode).getDeclared();
92 QName name = anyxmlStatement.getName();
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);
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);
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);
125 ConfigStatement configStatement = anyxmlStatement.getConfig();
126 assertNotNull(configStatement);
127 assertFalse(configStatement.getValue());
129 StatusStatement statusStatement = anyxmlStatement.getStatus();
130 assertNotNull(statusStatement);
131 Status status = statusStatement.getValue();
132 assertNotNull(status);
134 DescriptionStatement descriptionStatement = anyxmlStatement.getDescription();
135 assertNotNull(descriptionStatement);
136 assertEquals("anyxml description", descriptionStatement.getText());
138 ReferenceStatement referenceStatement = anyxmlStatement.getReference();
139 assertNotNull(referenceStatement);
140 assertEquals("anyxml reference", referenceStatement.getText());
142 MandatoryStatement mandatoryStatement = anyxmlStatement.getMandatory();
143 assertNotNull(mandatoryStatement);
147 public void testDeclaredChoice() throws ReactorException {
148 YangStatementSourceImpl choiceStmtModule =
149 new YangStatementSourceImpl("/declared-statements-test/choice-declared-test.yang", false);
151 SchemaContext schemaContext = StmtTestUtils.parseYangSources(choiceStmtModule);
152 assertNotNull(schemaContext);
154 Module testModule = schemaContext.findModuleByName("choice-declared-test", null);
155 assertNotNull(testModule);
157 ChoiceSchemaNode choiceSchemaNode = (ChoiceSchemaNode) testModule.getDataChildByName(
158 QName.create(testModule.getQNameModule(), "test-choice"));
159 assertNotNull(choiceSchemaNode);
160 ChoiceStatement choiceStatement = ((ChoiceEffectiveStatementImpl) choiceSchemaNode).getDeclared();
162 QName name = choiceStatement.getName();
165 DefaultStatement defaultStatement = choiceStatement.getDefault();
166 assertNotNull(defaultStatement);
167 assertEquals("case-two", defaultStatement.getValue());
169 ConfigStatement configStatement = choiceStatement.getConfig();
170 assertNotNull(configStatement);
172 MandatoryStatement mandatoryStatement = choiceStatement.getMandatory();
173 assertNotNull(mandatoryStatement);
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);
196 WhenStatement whenStatement = choiceStatement.getWhenStatement();
197 assertNotNull(whenStatement);
199 Collection<? extends IfFeatureStatement> ifFeatureStatements = choiceStatement.getIfFeatures();
200 assertNotNull(ifFeatureStatements);
201 assertEquals(1, ifFeatureStatements.size());
203 StatusStatement statusStatement = choiceStatement.getStatus();
204 assertNotNull(statusStatement);
206 DescriptionStatement descriptionStatement = choiceStatement.getDescription();
207 assertNotNull(descriptionStatement);
209 ReferenceStatement referenceStatement = choiceStatement.getReference();
210 assertNotNull(referenceStatement);
214 public void testDeclaredAugment() throws ReactorException {
215 YangStatementSourceImpl augmentStmtModule =
216 new YangStatementSourceImpl("/declared-statements-test/augment-declared-test.yang", false);
218 SchemaContext schemaContext = StmtTestUtils.parseYangSources(augmentStmtModule);
219 assertNotNull(schemaContext);
221 Module testModule = schemaContext.findModuleByName("augment-declared-test", null);
222 assertNotNull(testModule);
224 Set<AugmentationSchema> augmentationSchemas = testModule.getAugmentations();
225 assertNotNull(augmentationSchemas);
226 assertEquals(1, augmentationSchemas.size());
228 AugmentationSchema augmentationSchema = augmentationSchemas.iterator().next();
229 AugmentStatement augmentStatement = ((AugmentEffectiveStatementImpl) augmentationSchema).getDeclared();
231 SchemaNodeIdentifier targetNode = augmentStatement.getTargetNode();
232 assertNotNull(targetNode);
234 Collection<? extends DataDefinitionStatement> augmentStatementDataDefinitions =
235 augmentStatement.getDataDefinitions();
236 assertNotNull(augmentStatementDataDefinitions);
237 assertEquals(1, augmentStatementDataDefinitions.size());
241 public void testDeclaredModuleAndSubmodule() throws ReactorException {
242 YangStatementSourceImpl parentModule =
243 new YangStatementSourceImpl("/declared-statements-test/parent-module-declared-test.yang", false);
245 YangStatementSourceImpl childModule =
246 new YangStatementSourceImpl("/declared-statements-test/child-module-declared-test.yang", false);
248 SchemaContext schemaContext = StmtTestUtils.parseYangSources(parentModule, childModule);
249 assertNotNull(schemaContext);
251 Module testModule = schemaContext.findModuleByName("parent-module-declared-test", null);
252 assertNotNull(testModule);
254 ModuleStatement moduleStatement = ((ModuleEffectiveStatementImpl) testModule).getDeclared();
256 String moduleStatementName = moduleStatement.getName();
257 assertNotNull(moduleStatementName);
259 YangVersionStatement moduleStatementYangVersion = moduleStatement.getYangVersion();
260 assertNotNull(moduleStatementYangVersion);
261 assertNotNull(moduleStatementYangVersion.getValue());
263 NamespaceStatement moduleStatementNamspace = moduleStatement.getNamespace();
264 assertNotNull(moduleStatementNamspace);
265 assertNotNull(moduleStatementNamspace.getUri());
267 PrefixStatement moduleStatementPrefix= moduleStatement.getPrefix();
268 assertNotNull(moduleStatementPrefix);
269 assertNotNull(moduleStatementPrefix.getValue());
271 assertEquals(1, moduleStatement.getIncludes().size());
272 IncludeStatement includeStatement = moduleStatement.getIncludes().iterator().next();
273 assertEquals("child-module-declared-test", includeStatement.getModule());
275 Set<Module> submodules = testModule.getSubmodules();
276 assertNotNull(submodules);
277 assertEquals(1, submodules.size());
279 Module submodule = submodules.iterator().next();
280 SubmoduleStatement submoduleStatement = ((SubmoduleEffectiveStatementImpl) submodule).getDeclared();
282 String submoduleStatementName = submoduleStatement.getName();
283 assertNotNull(submoduleStatementName);
285 YangVersionStatement submoduleStatementYangVersion = submoduleStatement.getYangVersion();
286 assertNotNull(submoduleStatementYangVersion);
288 BelongsToStatement belongsToStatement = submoduleStatement.getBelongsTo();
289 assertNotNull(belongsToStatement);
290 assertNotNull(belongsToStatement.getModule());
291 assertNotNull(belongsToStatement.getPrefix());
295 public void testDeclaredModule() throws ReactorException, ParseException {
296 YangStatementSourceImpl rootModule =
297 new YangStatementSourceImpl("/declared-statements-test/root-module-declared-test.yang", false);
299 YangStatementSourceImpl importedModule =
300 new YangStatementSourceImpl("/declared-statements-test/imported-module-declared-test.yang", false);
302 SchemaContext schemaContext = StmtTestUtils.parseYangSources(rootModule, importedModule);
303 assertNotNull(schemaContext);
305 Date revision = SimpleDateFormatUtil.getRevisionFormat().parse("2016-09-28");
307 Module testModule = schemaContext.findModuleByName("root-module-declared-test", revision);
308 assertNotNull(testModule);
310 ModuleStatement moduleStatement = ((ModuleEffectiveStatementImpl) testModule).getDeclared();
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());
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());
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());
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());
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());
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;
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());
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());
371 public void testDeclaredContainer() throws ReactorException {
372 YangStatementSourceImpl containerStmtModule =
373 new YangStatementSourceImpl("/declared-statements-test/container-declared-test.yang", false);
375 SchemaContext schemaContext = StmtTestUtils.parseYangSources(containerStmtModule);
376 assertNotNull(schemaContext);
378 Module testModule = schemaContext.findModuleByName("container-declared-test", null);
379 assertNotNull(testModule);
381 ContainerSchemaNode containerSchemaNode = (ContainerSchemaNode) testModule.getDataChildByName(
382 QName.create(testModule.getQNameModule(), "test-container"));
383 assertNotNull(containerSchemaNode);
384 ContainerStatement containerStatement = ((ContainerEffectiveStatementImpl) containerSchemaNode).getDeclared();
386 QName name = containerStatement.getName();
389 WhenStatement containerStatementWhen = containerStatement.getWhenStatement();
390 assertNotNull(containerStatementWhen);
392 Collection<? extends IfFeatureStatement> containerStatementIfFeatures = containerStatement.getIfFeatures();
393 assertNotNull(containerStatementIfFeatures);
394 assertEquals(1, containerStatementIfFeatures.size());
396 Collection<? extends MustStatement> containerStatementMusts = containerStatement.getMusts();
397 assertNotNull(containerStatementMusts);
398 assertEquals(1, containerStatementMusts.size());
400 PresenceStatement containerStatementPresence = containerStatement.getPresence();
401 assertNotNull(containerStatementPresence);
402 assertNotNull(containerStatementPresence.getValue());
404 ConfigStatement containerStatementConfig = containerStatement.getConfig();
405 assertNotNull(containerStatementConfig);
407 StatusStatement containerStatementStatus = containerStatement.getStatus();
408 assertNotNull(containerStatementStatus);
410 DescriptionStatement containerStatementDescription = containerStatement.getDescription();
411 assertNotNull(containerStatementDescription);
413 ReferenceStatement containerStatementReference = containerStatement.getReference();
414 assertNotNull(containerStatementReference);
416 Collection<? extends TypedefStatement> containerStatementTypedefs = containerStatement.getTypedefs();
417 assertNotNull(containerStatementTypedefs);
418 assertEquals(1, containerStatementTypedefs.size());
420 Collection<? extends GroupingStatement> containerStatementGroupings = containerStatement.getGroupings();
421 assertNotNull(containerStatementGroupings);
422 assertEquals(1, containerStatementGroupings.size());
424 Collection<? extends DataDefinitionStatement> containerStatementDataDefinitions =
425 containerStatement.getDataDefinitions();
427 assertNotNull(containerStatementDataDefinitions);
428 assertEquals(1, containerStatementDataDefinitions.size());