f9135d000323f0c4fade65eca20bf9707ae34332
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / Bug4456Test.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.Assert.assertEquals;
11 import static org.junit.Assert.fail;
12
13 import org.junit.Test;
14 import org.opendaylight.yangtools.yang.common.XMLNamespace;
15 import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
16 import org.opendaylight.yangtools.yang.model.api.Module;
17 import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement;
18
19 public class Bug4456Test extends AbstractYangTest {
20     @Test
21     public void test() {
22         final var schema = assertEffectiveModelDir("/bugs/bug4456");
23
24         var modules = schema.findModules(XMLNamespace.of("foo"));
25         assertEquals(1, modules.size());
26         Module moduleFoo = modules.iterator().next();
27
28         var extensionSchemaNodes = moduleFoo.getExtensionSchemaNodes();
29         assertEquals(5, extensionSchemaNodes.size());
30         for (ExtensionDefinition extensionDefinition : extensionSchemaNodes) {
31
32             var unknownSchemaNodes = extensionDefinition.asEffectiveStatement()
33                 .getDeclared().declaredSubstatements(UnrecognizedStatement.class);
34             assertEquals(1, unknownSchemaNodes.size());
35             UnrecognizedStatement unknownSchemaNode = unknownSchemaNodes.iterator().next();
36             String unknownNodeExtensionDefName = unknownSchemaNode.statementDefinition().getStatementName()
37                 .getLocalName();
38
39             var subUnknownSchemaNodes = unknownSchemaNode.declaredSubstatements(UnrecognizedStatement.class);
40             assertEquals(1, subUnknownSchemaNodes.size());
41             UnrecognizedStatement subUnknownSchemaNode = subUnknownSchemaNodes.iterator().next();
42             String subUnknownNodeExtensionDefName = subUnknownSchemaNode.statementDefinition().getStatementName()
43                 .getLocalName();
44
45             switch (extensionDefinition.getQName().getLocalName()) {
46                 case "a":
47                     assertEquals("b", unknownNodeExtensionDefName);
48                     assertEquals("c", subUnknownNodeExtensionDefName);
49                     break;
50                 case "b":
51                     assertEquals("c", unknownNodeExtensionDefName);
52                     assertEquals("a", subUnknownNodeExtensionDefName);
53                     break;
54                 case "c":
55                     assertEquals("a", unknownNodeExtensionDefName);
56                     assertEquals("b", subUnknownNodeExtensionDefName);
57                     break;
58                 case "r":
59                     assertEquals("r", unknownNodeExtensionDefName);
60                     assertEquals("r2", subUnknownNodeExtensionDefName);
61                     break;
62                 case "r2":
63                     assertEquals("r2", unknownNodeExtensionDefName);
64                     assertEquals("r", subUnknownNodeExtensionDefName);
65                     break;
66                 default:
67                     fail("Unexpected extension definition");
68             }
69         }
70     }
71 }