Define a feature-parent
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / EffectiveModuleTest.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.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertNotNull;
12
13 import java.util.Optional;
14 import org.junit.jupiter.api.Test;
15 import org.opendaylight.yangtools.yang.common.QName;
16 import org.opendaylight.yangtools.yang.common.QNameModule;
17 import org.opendaylight.yangtools.yang.common.Revision;
18 import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
19 import org.opendaylight.yangtools.yang.common.XMLNamespace;
20 import org.opendaylight.yangtools.yang.common.YangVersion;
21 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.DeviateKind;
23 import org.opendaylight.yangtools.yang.model.api.Status;
24 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
25
26 class EffectiveModuleTest {
27     private static final QNameModule ROOT_MODULE_QNAME = QNameModule.of("root-ns");
28     private static final QName CONT = QName.create(ROOT_MODULE_QNAME, "cont");
29     private static final QName FEATURE1 = QName.create(ROOT_MODULE_QNAME, "feature1");
30     private static final Revision REVISION = Revision.of("2000-01-01");
31
32     @Test
33     void effectiveBuildTest() throws Exception {
34         final var rootModule = TestUtils.parseYangSource(
35             "/semantic-statement-parser/effective-module/root.yang",
36             "/semantic-statement-parser/effective-module/imported.yang",
37             "/semantic-statement-parser/effective-module/submod.yang")
38             .findModules("root").iterator().next();
39         assertNotNull(rootModule);
40
41         assertEquals("root-pref", rootModule.getPrefix());
42         assertEquals(YangVersion.VERSION_1, rootModule.getYangVersion());
43         assertEquals(Optional.of("cisco"), rootModule.getOrganization());
44         assertEquals(Optional.of("cisco email"), rootModule.getContact());
45
46         final var contSchemaNode = (ContainerSchemaNode) rootModule.getDataChildByName(CONT);
47         assertNotNull(contSchemaNode);
48
49         final var augmentations = rootModule.getAugmentations();
50         assertEquals(1, augmentations.size());
51         assertEquals(Absolute.of(CONT), augmentations.iterator().next().getTargetPath());
52
53         final var imports = rootModule.getImports();
54         assertEquals(1, imports.size());
55         final var importStmt = imports.iterator().next();
56         assertNotNull(importStmt);
57         assertEquals(Unqualified.of("imported"), importStmt.getModuleName());
58         assertEquals(Optional.of(REVISION), importStmt.getRevision());
59         assertEquals("imp-pref", importStmt.getPrefix());
60
61         final var submodules = rootModule.getSubmodules();
62         assertEquals(1, submodules.size());
63         assertEquals("submod", submodules.iterator().next().getName());
64
65         final var notifications = rootModule.getNotifications();
66         assertEquals(1, notifications.size());
67         assertEquals("notif1", notifications.iterator().next().getQName().getLocalName());
68
69         final var rpcs = rootModule.getRpcs();
70         assertEquals(1, rpcs.size());
71         assertEquals("rpc1", rpcs.iterator().next().getQName().getLocalName());
72
73         final var deviations = rootModule.getDeviations();
74         assertEquals(1, deviations.size());
75         final var deviationStmt = deviations.iterator().next();
76         assertNotNull(deviationStmt);
77         final var importedContQName = QName.create(QNameModule.of(XMLNamespace.of("imported"), REVISION), "cont");
78         assertEquals(Absolute.of(importedContQName), deviationStmt.getTargetPath());
79         assertEquals(DeviateKind.ADD, deviationStmt.getDeviates().iterator().next().getDeviateType());
80         assertEquals(Optional.of("deviate reference"), deviationStmt.getReference());
81
82         final var identities = rootModule.getIdentities();
83         assertEquals(1, identities.size());
84         assertEquals("identity1", identities.iterator().next().getQName().getLocalName());
85
86         final var features = rootModule.getFeatures();
87         assertEquals(1, features.size());
88         final var featureStmt = features.iterator().next();
89         assertNotNull(featureStmt);
90         assertEquals(FEATURE1, featureStmt.getQName());
91         assertEquals(Optional.of("feature1 description"), featureStmt.getDescription());
92         assertEquals(Optional.of("feature1 reference"), featureStmt.getReference());
93         assertEquals(Status.CURRENT, featureStmt.getStatus());
94
95         final var extensionSchemaNodes = rootModule.getExtensionSchemaNodes();
96         assertEquals(1, extensionSchemaNodes.size());
97         assertEquals("ext1", extensionSchemaNodes.iterator().next().getQName().getLocalName());
98     }
99 }