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