1 package org.opendaylight.yangtools.yang.stmt.effective.build.test;
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;
9 import org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException;
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;
25 public class EffectiveIdentityTest {
27 private static final YangStatementSourceImpl IDENTITY_TEST = new YangStatementSourceImpl(
28 "/stmt-test/identity/identity-test.yang", false);
30 private static final YangStatementSourceImpl CYCLIC_IDENTITY_TEST = new YangStatementSourceImpl(
31 "/stmt-test/identity/cyclic-identity-test.yang", false);
33 @Test(expected = SomeModifiersUnresolvedException.class)
34 public void cyclicefineTest() throws SourceException, ReactorException,
37 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
39 StmtTestUtils.addSources(reactor, CYCLIC_IDENTITY_TEST);
41 EffectiveSchemaContext result = reactor.buildEffective();
42 } catch (SomeModifiersUnresolvedException e) {
43 StmtTestUtils.log(e, " ");
49 public void identityTest() throws SourceException, ReactorException,
52 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
54 StmtTestUtils.addSources(reactor, IDENTITY_TEST);
55 EffectiveSchemaContext result = reactor.buildEffective();
57 assertNotNull(result);
59 Module module = result.findModuleByName("identity-test",
60 SimpleDateFormatUtil.DEFAULT_DATE_REV);
62 assertNotNull(module);
64 Set<IdentitySchemaNode> identities = module.getIdentities();
66 assertNotNull(identities);
67 assertEquals(4, identities.size());
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()) {
76 root = identitySchemaNode;
78 case "child-identity-1":
79 child1 = identitySchemaNode;
81 case "child-identity-2":
82 child2 = identitySchemaNode;
84 case "child-identity-1-2":
85 child12 = identitySchemaNode;
93 assertNotNull(child1);
94 assertNotNull(child2);
95 assertNotNull(child12);
97 assertNull(root.getBaseIdentity());
99 Set<IdentitySchemaNode> rootDerivedIdentities = root
100 .getDerivedIdentities();
101 assertEquals(2, rootDerivedIdentities.size());
103 assertTrue(rootDerivedIdentities.contains(child1));
104 assertTrue(rootDerivedIdentities.contains(child2));
105 assertFalse(rootDerivedIdentities.contains(child12));
106 assertFalse(child1.equals(child2));
108 assertTrue(root == child1.getBaseIdentity());
109 assertTrue(root == child2.getBaseIdentity());
111 assertTrue(child2.getDerivedIdentities().isEmpty());
113 Set<IdentitySchemaNode> child1DerivedIdentities = child1
114 .getDerivedIdentities();
115 assertEquals(1, child1DerivedIdentities.size());
116 assertTrue(child1DerivedIdentities.contains(child12));
117 assertFalse(child1DerivedIdentities.contains(child1));
119 assertTrue(child1 == child12.getBaseIdentity());
120 assertTrue(child12 == child1DerivedIdentities.iterator().next());