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