Rename mdsal.binding.dom.codec.api
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / ExtensionStmtTest.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 import static org.junit.jupiter.api.Assertions.assertTrue;
13
14 import org.junit.jupiter.api.Test;
15 import org.opendaylight.yangtools.yang.common.QName;
16 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
17 import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement;
18
19 class ExtensionStmtTest extends AbstractYangTest {
20     @Test
21     void testExtensionDefinition() {
22         final var result = assertEffectiveModel("/model/bar.yang");
23         final var testModule = result.findModules("bar").iterator().next();
24         assertNotNull(testModule);
25
26         assertEquals(1, testModule.getExtensionSchemaNodes().size());
27
28         final var extensions = testModule.getExtensionSchemaNodes();
29         final var extension = extensions.iterator().next();
30         assertEquals("opendaylight", extension.getQName().getLocalName());
31         assertEquals("name", extension.getArgument());
32         assertTrue(extension.isYinElement());
33     }
34
35     @Test
36     void testExtensionUsage() {
37         final var result = assertEffectiveModel(
38             "/semantic-statement-parser/ext-typedef.yang",
39             "/semantic-statement-parser/ext-use.yang");
40
41         final var testModule1 = result.findModules("ext-typedef").iterator().next();
42         assertNotNull(testModule1);
43
44         assertEquals(1, testModule1.getExtensionSchemaNodes().size());
45
46         final var extensions = testModule1.getExtensionSchemaNodes();
47         final var extensionDefinition = extensions.iterator().next();
48
49         final var testModule2 = result.findModules("ext-use").iterator().next();
50         assertNotNull(testModule2);
51
52         final var leaf = (LeafSchemaNode) testModule2.getDataChildByName(
53             QName.create(testModule2.getQNameModule(), "value"));
54         assertNotNull(leaf);
55
56         final var unknownNodes = leaf.asEffectiveStatement().getDeclared()
57             .declaredSubstatements(UnrecognizedStatement.class);
58         assertEquals(1, unknownNodes.size());
59         final var extensionUse = unknownNodes.iterator().next();
60         assertEquals(extensionDefinition.getQName(), extensionUse.statementDefinition().getStatementName());
61         assertEquals(extensionDefinition.getArgument(), extensionUse.statementDefinition().getArgumentDefinition()
62             .orElseThrow().argumentName().getLocalName());
63
64         assertEquals("key:value", extensionUse.argument());
65     }
66 }