109800d5dfcdee082805cc8ea8ca4f24f1f7335c
[yangtools.git] / yang / yang-parser-impl / src / test / java / org / opendaylight / yangtools / yang / stmt / effective / build / test / EffectiveIdentityTest.java
1 package org.opendaylight.yangtools.yang.stmt.effective.build.test;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertNotNull;
6 import static org.junit.Assert.assertNull;
7 import static org.junit.Assert.assertTrue;
8
9 import org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException;
10
11 import java.util.Set;
12 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
13 import org.opendaylight.yangtools.yang.model.api.Module;
14 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
15 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext;
16 import java.net.URISyntaxException;
17 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
18 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
19 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
20 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
21 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl;
22 import org.opendaylight.yangtools.yang.stmt.test.StmtTestUtils;
23 import org.junit.Test;
24
25 public class EffectiveIdentityTest {
26
27     private static final YangStatementSourceImpl IDENTITY_TEST = new YangStatementSourceImpl(
28             "/stmt-test/identity/identity-test.yang", false);
29
30     private static final YangStatementSourceImpl CYCLIC_IDENTITY_TEST = new YangStatementSourceImpl(
31             "/stmt-test/identity/cyclic-identity-test.yang", false);
32
33     @Test(expected = SomeModifiersUnresolvedException.class)
34     public void cyclicefineTest() throws SourceException, ReactorException,
35             URISyntaxException {
36
37         CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
38                 .newBuild();
39         StmtTestUtils.addSources(reactor, CYCLIC_IDENTITY_TEST);
40         try {
41             EffectiveSchemaContext result = reactor.buildEffective();
42         } catch (SomeModifiersUnresolvedException e) {
43             StmtTestUtils.log(e, "      ");
44             throw e;
45         }
46     }
47
48     @Test
49     public void identityTest() throws SourceException, ReactorException,
50             URISyntaxException {
51
52         CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
53                 .newBuild();
54         StmtTestUtils.addSources(reactor, IDENTITY_TEST);
55         EffectiveSchemaContext result = reactor.buildEffective();
56
57         assertNotNull(result);
58
59         Module module = result.findModuleByName("identity-test",
60                 SimpleDateFormatUtil.DEFAULT_DATE_REV);
61
62         assertNotNull(module);
63
64         Set<IdentitySchemaNode> identities = module.getIdentities();
65
66         assertNotNull(identities);
67         assertEquals(4, identities.size());
68
69         IdentitySchemaNode root = null;
70         IdentitySchemaNode child1 = null;
71         IdentitySchemaNode child2 = null;
72         IdentitySchemaNode child12 = null;
73         for (IdentitySchemaNode identitySchemaNode : identities) {
74             switch (identitySchemaNode.getQName().getLocalName()) {
75             case "root-identity":
76                 root = identitySchemaNode;
77                 break;
78             case "child-identity-1":
79                 child1 = identitySchemaNode;
80                 break;
81             case "child-identity-2":
82                 child2 = identitySchemaNode;
83                 break;
84             case "child-identity-1-2":
85                 child12 = identitySchemaNode;
86                 break;
87             default:
88                 break;
89             }
90         }
91
92         assertNotNull(root);
93         assertNotNull(child1);
94         assertNotNull(child2);
95         assertNotNull(child12);
96
97         assertNull(root.getBaseIdentity());
98
99         Set<IdentitySchemaNode> rootDerivedIdentities = root
100                 .getDerivedIdentities();
101         assertEquals(2, rootDerivedIdentities.size());
102
103         assertTrue(rootDerivedIdentities.contains(child1));
104         assertTrue(rootDerivedIdentities.contains(child2));
105         assertFalse(rootDerivedIdentities.contains(child12));
106         assertFalse(child1.equals(child2));
107
108         assertTrue(root == child1.getBaseIdentity());
109         assertTrue(root == child2.getBaseIdentity());
110
111         assertTrue(child2.getDerivedIdentities().isEmpty());
112
113         Set<IdentitySchemaNode> child1DerivedIdentities = child1
114                 .getDerivedIdentities();
115         assertEquals(1, child1DerivedIdentities.size());
116         assertTrue(child1DerivedIdentities.contains(child12));
117         assertFalse(child1DerivedIdentities.contains(child1));
118
119         assertTrue(child1 == child12.getBaseIdentity());
120         assertTrue(child12 == child1DerivedIdentities.iterator().next());
121     }
122
123 }