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
8 package org.opendaylight.yangtools.yang.stmt;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertTrue;
14 import static org.opendaylight.yangtools.yang.stmt.StmtTestUtils.sourceForResource;
16 import com.google.common.collect.Iterables;
17 import java.net.URISyntaxException;
18 import java.util.Collection;
19 import org.junit.Test;
20 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.Module;
22 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
23 import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors;
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;
30 public class EffectiveIdentityTest {
32 private static final StatementStreamSource IDENTITY_TEST = sourceForResource(
33 "/stmt-test/identity/identity-test.yang");
35 private static final StatementStreamSource CYCLIC_IDENTITY_TEST = sourceForResource(
36 "/stmt-test/identity/cyclic-identity-test.yang");
38 @Test(expected = SomeModifiersUnresolvedException.class)
39 public void cyclicefineTest() throws SourceException, ReactorException, URISyntaxException {
41 CrossSourceStatementReactor.BuildAction reactor = RFC7950Reactors.defaultReactor().newBuild()
42 .addSources(CYCLIC_IDENTITY_TEST);
44 reactor.buildEffective();
45 } catch (SomeModifiersUnresolvedException e) {
46 StmtTestUtils.log(e, " ");
52 public void identityTest() throws SourceException, ReactorException,
54 SchemaContext result = RFC7950Reactors.defaultReactor().newBuild().addSources(IDENTITY_TEST).buildEffective();
55 assertNotNull(result);
57 Module module = result.findModule("identity-test").get();
58 Collection<? extends IdentitySchemaNode> identities = module.getIdentities();
60 assertNotNull(identities);
61 assertEquals(4, identities.size());
63 IdentitySchemaNode root = null;
64 IdentitySchemaNode child1 = null;
65 IdentitySchemaNode child2 = null;
66 IdentitySchemaNode child12 = null;
67 for (IdentitySchemaNode identitySchemaNode : identities) {
68 switch (identitySchemaNode.getQName().getLocalName()) {
70 root = identitySchemaNode;
72 case "child-identity-1":
73 child1 = identitySchemaNode;
75 case "child-identity-2":
76 child2 = identitySchemaNode;
78 case "child-identity-1-2":
79 child12 = identitySchemaNode;
87 assertNotNull(child1);
88 assertNotNull(child2);
89 assertNotNull(child12);
91 assertTrue(root.getBaseIdentities().isEmpty());
93 Collection<? extends IdentitySchemaNode> rootDerivedIdentities = result.getDerivedIdentities(root);
94 assertEquals(2, rootDerivedIdentities.size());
96 assertTrue(rootDerivedIdentities.contains(child1));
97 assertTrue(rootDerivedIdentities.contains(child2));
98 assertFalse(rootDerivedIdentities.contains(child12));
99 assertFalse(child1.equals(child2));
101 assertTrue(root == Iterables.getOnlyElement(child1.getBaseIdentities()));
102 assertTrue(root == Iterables.getOnlyElement(child2.getBaseIdentities()));
104 assertEquals(0, result.getDerivedIdentities(child2).size());
106 Collection<? extends IdentitySchemaNode> child1DerivedIdentities = result.getDerivedIdentities(child1);
107 assertEquals(1, child1DerivedIdentities.size());
108 assertTrue(child1DerivedIdentities.contains(child12));
109 assertFalse(child1DerivedIdentities.contains(child1));
111 assertTrue(child1 == Iterables.getOnlyElement(child12.getBaseIdentities()));
112 assertTrue(child12 == child1DerivedIdentities.iterator().next());