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.rfc7950.reactor.RFC7950Reactors;
25 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
26 import org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException;
27 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
28 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
29 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
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, URISyntaxException {
42 CrossSourceStatementReactor.BuildAction reactor = RFC7950Reactors.defaultReactor().newBuild()
43 .addSources(CYCLIC_IDENTITY_TEST);
45 reactor.buildEffective();
46 } catch (SomeModifiersUnresolvedException e) {
47 StmtTestUtils.log(e, " ");
53 public void identityTest() throws SourceException, ReactorException,
55 SchemaContext result = RFC7950Reactors.defaultReactor().newBuild()
56 .addSources(IDENTITY_TEST)
59 assertNotNull(result);
61 Module module = result.findModule("identity-test").get();
62 Set<IdentitySchemaNode> identities = module.getIdentities();
64 assertNotNull(identities);
65 assertEquals(4, identities.size());
67 IdentitySchemaNode root = null;
68 IdentitySchemaNode child1 = null;
69 IdentitySchemaNode child2 = null;
70 IdentitySchemaNode child12 = null;
71 for (IdentitySchemaNode identitySchemaNode : identities) {
72 switch (identitySchemaNode.getQName().getLocalName()) {
74 root = identitySchemaNode;
76 case "child-identity-1":
77 child1 = identitySchemaNode;
79 case "child-identity-2":
80 child2 = identitySchemaNode;
82 case "child-identity-1-2":
83 child12 = identitySchemaNode;
91 assertNotNull(child1);
92 assertNotNull(child2);
93 assertNotNull(child12);
95 assertTrue(root.getBaseIdentities().isEmpty());
97 Set<IdentitySchemaNode> rootDerivedIdentities = root
98 .getDerivedIdentities();
99 assertEquals(2, rootDerivedIdentities.size());
101 assertTrue(rootDerivedIdentities.contains(child1));
102 assertTrue(rootDerivedIdentities.contains(child2));
103 assertFalse(rootDerivedIdentities.contains(child12));
104 assertFalse(child1.equals(child2));
106 assertTrue(root == Iterables.getOnlyElement(child1.getBaseIdentities()));
107 assertTrue(root == Iterables.getOnlyElement(child2.getBaseIdentities()));
109 assertTrue(child2.getDerivedIdentities().isEmpty());
111 Set<IdentitySchemaNode> child1DerivedIdentities = child1
112 .getDerivedIdentities();
113 assertEquals(1, child1DerivedIdentities.size());
114 assertTrue(child1DerivedIdentities.contains(child12));
115 assertFalse(child1DerivedIdentities.contains(child1));
117 assertTrue(child1 == Iterables.getOnlyElement(child12.getBaseIdentities()));
118 assertTrue(child12 == child1DerivedIdentities.iterator().next());