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
8 package org.opendaylight.yangtools.yang.stmt;
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;
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;
19 class ExtensionStmtTest extends AbstractYangTest {
21 void testExtensionDefinition() {
22 final var result = assertEffectiveModel("/model/bar.yang");
23 final var testModule = result.findModules("bar").iterator().next();
24 assertNotNull(testModule);
26 assertEquals(1, testModule.getExtensionSchemaNodes().size());
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());
36 void testExtensionUsage() {
37 final var result = assertEffectiveModel(
38 "/semantic-statement-parser/ext-typedef.yang",
39 "/semantic-statement-parser/ext-use.yang");
41 final var testModule1 = result.findModules("ext-typedef").iterator().next();
42 assertNotNull(testModule1);
44 assertEquals(1, testModule1.getExtensionSchemaNodes().size());
46 final var extensions = testModule1.getExtensionSchemaNodes();
47 final var extensionDefinition = extensions.iterator().next();
49 final var testModule2 = result.findModules("ext-use").iterator().next();
50 assertNotNull(testModule2);
52 final var leaf = (LeafSchemaNode) testModule2.getDataChildByName(
53 QName.create(testModule2.getQNameModule(), "value"));
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());
64 assertEquals("key:value", extensionUse.argument());