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