2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.yangtools.yang.stmt;
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;
17 import org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException;
20 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.Module;
22 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
23 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext;
24 import java.net.URISyntaxException;
25 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
26 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
27 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
28 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
29 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl;
30 import org.junit.Test;
32 public class EffectiveIdentityTest {
34 private static final YangStatementSourceImpl IDENTITY_TEST = new YangStatementSourceImpl(
35 "/stmt-test/identity/identity-test.yang", false);
37 private static final YangStatementSourceImpl CYCLIC_IDENTITY_TEST = new YangStatementSourceImpl(
38 "/stmt-test/identity/cyclic-identity-test.yang", false);
40 @Test(expected = SomeModifiersUnresolvedException.class)
41 public void cyclicefineTest() throws SourceException, ReactorException,
44 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
46 StmtTestUtils.addSources(reactor, CYCLIC_IDENTITY_TEST);
48 EffectiveSchemaContext result = reactor.buildEffective();
49 } catch (SomeModifiersUnresolvedException e) {
50 StmtTestUtils.log(e, " ");
56 public void identityTest() throws SourceException, ReactorException,
59 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
61 StmtTestUtils.addSources(reactor, IDENTITY_TEST);
62 EffectiveSchemaContext result = reactor.buildEffective();
64 assertNotNull(result);
66 Module module = result.findModuleByName("identity-test",
67 SimpleDateFormatUtil.DEFAULT_DATE_REV);
69 assertNotNull(module);
71 Set<IdentitySchemaNode> identities = module.getIdentities();
73 assertNotNull(identities);
74 assertEquals(4, identities.size());
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()) {
83 root = identitySchemaNode;
85 case "child-identity-1":
86 child1 = identitySchemaNode;
88 case "child-identity-2":
89 child2 = identitySchemaNode;
91 case "child-identity-1-2":
92 child12 = identitySchemaNode;
100 assertNotNull(child1);
101 assertNotNull(child2);
102 assertNotNull(child12);
104 assertNull(root.getBaseIdentity());
106 Set<IdentitySchemaNode> rootDerivedIdentities = root
107 .getDerivedIdentities();
108 assertEquals(2, rootDerivedIdentities.size());
110 assertTrue(rootDerivedIdentities.contains(child1));
111 assertTrue(rootDerivedIdentities.contains(child2));
112 assertFalse(rootDerivedIdentities.contains(child12));
113 assertFalse(child1.equals(child2));
115 assertTrue(root == child1.getBaseIdentity());
116 assertTrue(root == child2.getBaseIdentity());
118 assertTrue(child2.getDerivedIdentities().isEmpty());
120 Set<IdentitySchemaNode> child1DerivedIdentities = child1
121 .getDerivedIdentities();
122 assertEquals(1, child1DerivedIdentities.size());
123 assertTrue(child1DerivedIdentities.contains(child12));
124 assertFalse(child1DerivedIdentities.contains(child1));
126 assertTrue(child1 == child12.getBaseIdentity());
127 assertTrue(child12 == child1DerivedIdentities.iterator().next());