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.util.Collection;
18 import java.util.Optional;
19 import org.junit.Test;
20 import org.opendaylight.yangtools.yang.common.Revision;
21 import org.opendaylight.yangtools.yang.model.api.DeviateDefinition;
22 import org.opendaylight.yangtools.yang.model.api.DeviateKind;
23 import org.opendaylight.yangtools.yang.model.api.Deviation;
24 import org.opendaylight.yangtools.yang.model.api.Module;
25 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
26 import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement;
27 import org.opendaylight.yangtools.yang.model.api.type.Uint32TypeDefinition;
28 import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors;
29 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
30 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
32 public class DeviationStmtTest {
34 private static final StatementStreamSource FOO_MODULE = sourceForResource("/deviation-stmt-test/foo.yang");
35 private static final StatementStreamSource FOO_IMP_MODULE = sourceForResource("/deviation-stmt-test/foo-imp.yang");
36 private static final StatementStreamSource BAR_MODULE = sourceForResource("/deviation-stmt-test/bar.yang");
37 private static final StatementStreamSource BAR_IMP_MODULE = sourceForResource("/deviation-stmt-test/bar-imp.yang");
40 public void testDeviationAndDeviate() throws ReactorException {
41 final SchemaContext schemaContext = RFC7950Reactors.defaultReactor().newBuild()
42 .addSources(FOO_MODULE, FOO_IMP_MODULE, BAR_MODULE, BAR_IMP_MODULE)
44 assertNotNull(schemaContext);
46 Module testModule = schemaContext.findModule("foo", Revision.of("2016-06-23")).get();
47 Collection<? extends Deviation> deviations = testModule.getDeviations();
48 assertEquals(4, deviations.size());
50 for (Deviation deviation : deviations) {
51 final Collection<? extends DeviateDefinition> deviates = deviation.getDeviates();
53 final String targetLocalName = Iterables.getLast(deviation.getTargetPath().getNodeIdentifiers())
55 if ("test-leaf".equals(targetLocalName)) {
56 assertEquals(Optional.of("test-leaf is not supported"), deviation.getDescription());
57 assertEquals(1, deviates.size());
58 assertEquals(DeviateKind.NOT_SUPPORTED, deviates.iterator().next().getDeviateType());
59 } else if ("test-leaf-2".equals(targetLocalName)) {
60 assertEquals(1, deviates.size());
61 assertEquals(DeviateKind.ADD, deviates.iterator().next().getDeviateType());
62 assertEquals("added-def-val", deviates.iterator().next().getDeviatedDefault());
63 assertFalse(deviates.iterator().next().getDeviatedConfig());
64 assertTrue(deviates.iterator().next().getDeviatedMandatory());
65 } else if ("test-leaf-list".equals(targetLocalName)) {
66 assertEquals(3, deviates.size());
67 for (DeviateDefinition deviate : deviates) {
68 if (DeviateKind.ADD.equals(deviate.getDeviateType())) {
69 assertEquals(12, deviate.getDeviatedMaxElements().intValue());
70 } else if (DeviateKind.REPLACE.equals(deviate.getDeviateType())) {
71 assertEquals(5, deviate.getDeviatedMinElements().intValue());
72 assertTrue(deviate.getDeviatedType() instanceof Uint32TypeDefinition);
74 assertEquals(2, deviate.getDeviatedMusts().size());
75 assertEquals("minutes", deviate.getDeviatedUnits());
79 assertEquals(1, deviation.getDeviates().size());
80 assertEquals(DeviateKind.DELETE, deviates.iterator().next().getDeviateType());
81 assertEquals(2, deviates.iterator().next().getDeviatedUniques().size());
85 testModule = schemaContext.findModule("bar", Revision.of("2016-09-22")).get();
86 assertNotNull(testModule);
88 deviations = testModule.getDeviations();
89 assertEquals(7, deviations.size());
91 Deviation deviation1 = null;
92 Deviation deviation2 = null;
93 Deviation deviation3 = null;
94 Deviation deviation4 = null;
95 Deviation deviation5 = null;
96 Deviation deviation6 = null;
97 Deviation deviation7 = null;
99 for (Deviation deviation : deviations) {
100 final Collection<? extends DeviateDefinition> deviates = deviation.getDeviates();
101 final String targetLocalName = Iterables.getLast(deviation.getTargetPath().getNodeIdentifiers())
104 if ("bar-container-1".equals(targetLocalName)) {
105 deviation1 = deviation;
108 if ("bar-container-2".equals(targetLocalName)) {
109 DeviateKind deviateKind = deviates.iterator().next().getDeviateType();
110 if (deviateKind.equals(DeviateKind.DELETE)) {
111 deviation2 = deviation;
112 } else if (deviateKind.equals(DeviateKind.ADD)) {
113 deviation3 = deviation;
117 if ("bar-leaf-1".equals(targetLocalName)) {
118 if (Optional.of("desc").equals(deviation.getDescription())) {
119 deviation4 = deviation;
121 deviation5 = deviation;
125 if ("bar-leaf-2".equals(targetLocalName)) {
126 if (Optional.of("ref").equals(deviation.getReference())) {
127 deviation6 = deviation;
129 deviation7 = deviation;
134 assertEquals(0, deviation1.getUnknownSchemaNodes().size());
136 deviation1.asEffectiveStatement().getDeclared().declaredSubstatements(UnrecognizedStatement.class).size());
138 assertTrue(deviation1.equals(deviation1));
139 assertFalse(deviation1.equals(null));
140 assertFalse(deviation1.equals("str"));
142 DeviateDefinition deviate = deviation1.getDeviates().iterator().next();
143 assertTrue(deviate.equals(deviate));
144 assertFalse(deviate.equals(null));
145 assertFalse(deviate.equals("str"));
147 assertFalse(deviation1.equals(deviation2));
148 assertFalse(deviation2.equals(deviation3));
149 assertFalse(deviation4.equals(deviation5));
150 assertFalse(deviation6.equals(deviation7));