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.assertTrue;
15 import static org.opendaylight.yangtools.yang.stmt.StmtTestUtils.sourceForResource;
17 import com.google.common.collect.Iterables;
18 import java.net.URISyntaxException;
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;
31 public class EffectiveIdentityTest {
33 private static final StatementStreamSource IDENTITY_TEST = sourceForResource(
34 "/stmt-test/identity/identity-test.yang");
36 private static final StatementStreamSource CYCLIC_IDENTITY_TEST = sourceForResource(
37 "/stmt-test/identity/cyclic-identity-test.yang");
39 @Test(expected = SomeModifiersUnresolvedException.class)
40 public void cyclicefineTest() throws SourceException, ReactorException,
43 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
45 reactor.addSources(CYCLIC_IDENTITY_TEST);
47 reactor.buildEffective();
48 } catch (SomeModifiersUnresolvedException e) {
49 StmtTestUtils.log(e, " ");
55 public void identityTest() throws SourceException, ReactorException,
58 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
59 reactor.addSources(IDENTITY_TEST);
60 SchemaContext result = reactor.buildEffective();
62 assertNotNull(result);
64 Module module = result.findModule("identity-test", null).get();
65 Set<IdentitySchemaNode> identities = module.getIdentities();
67 assertNotNull(identities);
68 assertEquals(4, identities.size());
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()) {
77 root = identitySchemaNode;
79 case "child-identity-1":
80 child1 = identitySchemaNode;
82 case "child-identity-2":
83 child2 = identitySchemaNode;
85 case "child-identity-1-2":
86 child12 = identitySchemaNode;
94 assertNotNull(child1);
95 assertNotNull(child2);
96 assertNotNull(child12);
98 assertTrue(root.getBaseIdentities().isEmpty());
100 Set<IdentitySchemaNode> rootDerivedIdentities = root
101 .getDerivedIdentities();
102 assertEquals(2, rootDerivedIdentities.size());
104 assertTrue(rootDerivedIdentities.contains(child1));
105 assertTrue(rootDerivedIdentities.contains(child2));
106 assertFalse(rootDerivedIdentities.contains(child12));
107 assertFalse(child1.equals(child2));
109 assertTrue(root == Iterables.getOnlyElement(child1.getBaseIdentities()));
110 assertTrue(root == Iterables.getOnlyElement(child2.getBaseIdentities()));
112 assertTrue(child2.getDerivedIdentities().isEmpty());
114 Set<IdentitySchemaNode> child1DerivedIdentities = child1
115 .getDerivedIdentities();
116 assertEquals(1, child1DerivedIdentities.size());
117 assertTrue(child1DerivedIdentities.contains(child12));
118 assertFalse(child1DerivedIdentities.contains(child1));
120 assertTrue(child1 == Iterables.getOnlyElement(child12.getBaseIdentities()));
121 assertTrue(child12 == child1DerivedIdentities.iterator().next());