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.common.SimpleDateFormatUtil;
22 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.Module;
24 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
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;
30 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
32 public class EffectiveIdentityTest {
34 private static final StatementStreamSource IDENTITY_TEST = sourceForResource(
35 "/stmt-test/identity/identity-test.yang");
37 private static final StatementStreamSource CYCLIC_IDENTITY_TEST = sourceForResource(
38 "/stmt-test/identity/cyclic-identity-test.yang");
40 @Test(expected = SomeModifiersUnresolvedException.class)
41 public void cyclicefineTest() throws SourceException, ReactorException,
44 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
46 reactor.addSources(CYCLIC_IDENTITY_TEST);
48 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 reactor.addSources(IDENTITY_TEST);
62 SchemaContext result = reactor.buildEffective();
64 assertNotNull(result);
66 Module module = result.findModule("identity-test", SimpleDateFormatUtil.DEFAULT_DATE_REV).get();
67 Set<IdentitySchemaNode> identities = module.getIdentities();
69 assertNotNull(identities);
70 assertEquals(4, identities.size());
72 IdentitySchemaNode root = null;
73 IdentitySchemaNode child1 = null;
74 IdentitySchemaNode child2 = null;
75 IdentitySchemaNode child12 = null;
76 for (IdentitySchemaNode identitySchemaNode : identities) {
77 switch (identitySchemaNode.getQName().getLocalName()) {
79 root = identitySchemaNode;
81 case "child-identity-1":
82 child1 = identitySchemaNode;
84 case "child-identity-2":
85 child2 = identitySchemaNode;
87 case "child-identity-1-2":
88 child12 = identitySchemaNode;
96 assertNotNull(child1);
97 assertNotNull(child2);
98 assertNotNull(child12);
100 assertTrue(root.getBaseIdentities().isEmpty());
102 Set<IdentitySchemaNode> rootDerivedIdentities = root
103 .getDerivedIdentities();
104 assertEquals(2, rootDerivedIdentities.size());
106 assertTrue(rootDerivedIdentities.contains(child1));
107 assertTrue(rootDerivedIdentities.contains(child2));
108 assertFalse(rootDerivedIdentities.contains(child12));
109 assertFalse(child1.equals(child2));
111 assertTrue(root == Iterables.getOnlyElement(child1.getBaseIdentities()));
112 assertTrue(root == Iterables.getOnlyElement(child2.getBaseIdentities()));
114 assertTrue(child2.getDerivedIdentities().isEmpty());
116 Set<IdentitySchemaNode> child1DerivedIdentities = child1
117 .getDerivedIdentities();
118 assertEquals(1, child1DerivedIdentities.size());
119 assertTrue(child1DerivedIdentities.contains(child12));
120 assertFalse(child1DerivedIdentities.contains(child1));
122 assertTrue(child1 == Iterables.getOnlyElement(child12.getBaseIdentities()));
123 assertTrue(child12 == child1DerivedIdentities.iterator().next());