Fix checkstyle in yang-parser-impl and enable enforcement
[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.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.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
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,
41             URISyntaxException {
42
43         CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
44                 .newBuild();
45         reactor.addSources(CYCLIC_IDENTITY_TEST);
46         try {
47             reactor.buildEffective();
48         } catch (SomeModifiersUnresolvedException e) {
49             StmtTestUtils.log(e, "      ");
50             throw e;
51         }
52     }
53
54     @Test
55     public void identityTest() throws SourceException, ReactorException,
56             URISyntaxException {
57
58         CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
59         reactor.addSources(IDENTITY_TEST);
60         SchemaContext result = reactor.buildEffective();
61
62         assertNotNull(result);
63
64         Module module = result.findModule("identity-test").get();
65         Set<IdentitySchemaNode> identities = module.getIdentities();
66
67         assertNotNull(identities);
68         assertEquals(4, identities.size());
69
70         IdentitySchemaNode root = null;
71         IdentitySchemaNode child1 = null;
72         IdentitySchemaNode child2 = null;
73         IdentitySchemaNode child12 = null;
74         for (IdentitySchemaNode identitySchemaNode : identities) {
75             switch (identitySchemaNode.getQName().getLocalName()) {
76                 case "root-identity":
77                     root = identitySchemaNode;
78                     break;
79                 case "child-identity-1":
80                     child1 = identitySchemaNode;
81                     break;
82                 case "child-identity-2":
83                     child2 = identitySchemaNode;
84                     break;
85                 case "child-identity-1-2":
86                     child12 = identitySchemaNode;
87                     break;
88                 default:
89                     break;
90             }
91         }
92
93         assertNotNull(root);
94         assertNotNull(child1);
95         assertNotNull(child2);
96         assertNotNull(child12);
97
98         assertTrue(root.getBaseIdentities().isEmpty());
99
100         Set<IdentitySchemaNode> rootDerivedIdentities = root
101                 .getDerivedIdentities();
102         assertEquals(2, rootDerivedIdentities.size());
103
104         assertTrue(rootDerivedIdentities.contains(child1));
105         assertTrue(rootDerivedIdentities.contains(child2));
106         assertFalse(rootDerivedIdentities.contains(child12));
107         assertFalse(child1.equals(child2));
108
109         assertTrue(root == Iterables.getOnlyElement(child1.getBaseIdentities()));
110         assertTrue(root == Iterables.getOnlyElement(child2.getBaseIdentities()));
111
112         assertTrue(child2.getDerivedIdentities().isEmpty());
113
114         Set<IdentitySchemaNode> child1DerivedIdentities = child1
115                 .getDerivedIdentities();
116         assertEquals(1, child1DerivedIdentities.size());
117         assertTrue(child1DerivedIdentities.contains(child12));
118         assertFalse(child1DerivedIdentities.contains(child1));
119
120         assertTrue(child1 == Iterables.getOnlyElement(child12.getBaseIdentities()));
121         assertTrue(child12 == child1DerivedIdentities.iterator().next());
122     }
123 }