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;
15 import com.google.common.collect.Iterables;
16 import java.util.Optional;
17 import org.junit.Test;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.common.QNameModule;
20 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
23 import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
24 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement;
27 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
29 public class EffectiveUsesRefineAndConstraintsTest extends AbstractYangTest {
31 public void refineTest() throws Exception {
32 final EffectiveModelContext result = assertEffectiveModel("/stmt-test/uses/refine-test.yang");
34 final ModuleEffectiveStatement module = Iterables.getOnlyElement(result.getModuleStatements().values());
35 final QNameModule qnameModule = module.localQNameModule();
36 final QName rootContainer = QName.create(qnameModule, "root-container");
38 final QName containerFromGrouping = QName.create(qnameModule, "container-from-grouping");
39 final QName listInContainer = QName.create(qnameModule, "list-in-container");
40 final QName choiceFromGrp = QName.create(qnameModule, "choice-from-grp");
42 final QName containerFromGrouping2 = QName.create(qnameModule, "container-from-grouping2");
43 final QName presenceContainer = QName.create(qnameModule, "presence-container");
45 checkRefinedList(module, rootContainer, containerFromGrouping, listInContainer);
46 checkRefinedChoice(module, rootContainer, containerFromGrouping, choiceFromGrp);
47 checkRefinedContainer(module, rootContainer, containerFromGrouping2, presenceContainer);
49 final GroupingEffectiveStatement grp = module.findFirstEffectiveSubstatement(GroupingEffectiveStatement.class)
51 assertEquals(QName.create(qnameModule, "grp-1"), grp.argument());
53 checkOriginalList(grp, containerFromGrouping, listInContainer);
54 checkOriginalChoice(grp, containerFromGrouping, choiceFromGrp);
55 checkOriginalContainer(grp, containerFromGrouping2, presenceContainer);
58 private static void checkOriginalContainer(final GroupingEffectiveStatement grp, final QName... qnames) {
59 SchemaNode containerInContainerNode = (SchemaNode) grp.findSchemaTreeNode(qnames).orElse(null);
60 assertNotNull(containerInContainerNode);
62 ContainerSchemaNode containerSchemaNode = (ContainerSchemaNode) containerInContainerNode;
63 assertFalse(containerSchemaNode.getReference().isPresent());
64 assertFalse(containerSchemaNode.getDescription().isPresent());
65 assertEquals(Optional.empty(), containerSchemaNode.effectiveConfig());
66 assertFalse(containerSchemaNode.isPresenceContainer());
68 assertEquals(0, containerSchemaNode.getMustConstraints().size());
71 private static void checkOriginalChoice(final GroupingEffectiveStatement grp, final QName... qnames) {
72 SchemaNode choiceInContainerNode = (SchemaNode) grp.findSchemaTreeNode(qnames).orElse(null);
73 assertNotNull(choiceInContainerNode);
75 ChoiceSchemaNode choiceSchemaNode = (ChoiceSchemaNode) choiceInContainerNode;
76 assertFalse(choiceSchemaNode.isMandatory());
79 private static void checkOriginalList(final GroupingEffectiveStatement grp, final QName... qnames) {
80 SchemaNode listInContainerNode = (SchemaNode) grp.findSchemaTreeNode(qnames).orElse(null);
81 assertNotNull(listInContainerNode);
83 ListSchemaNode listSchemaNode = (ListSchemaNode) listInContainerNode;
84 assertEquals(Optional.of("original reference"), listSchemaNode.getReference());
85 assertEquals(Optional.of("original description"), listSchemaNode.getDescription());
86 assertEquals(Optional.of(Boolean.FALSE), listSchemaNode.effectiveConfig());
88 ElementCountConstraint listConstraints = listSchemaNode.getElementCountConstraint().get();
89 assertEquals((Object) 10, listConstraints.getMinElements());
90 assertEquals((Object) 20, listConstraints.getMaxElements());
91 assertEquals(1, listSchemaNode.getMustConstraints().size());
94 private static void checkRefinedContainer(final ModuleEffectiveStatement module, final QName... qnames) {
95 final SchemaNode containerInContainerNode = (SchemaNode) module.findSchemaTreeNode(qnames).orElse(null);
96 assertNotNull(containerInContainerNode);
98 ContainerSchemaNode containerSchemaNode = (ContainerSchemaNode) containerInContainerNode;
99 assertEquals(Optional.of("new reference"), containerSchemaNode.getReference());
100 assertEquals(Optional.of("new description"), containerSchemaNode.getDescription());
101 assertEquals(Optional.of(Boolean.TRUE), containerSchemaNode.effectiveConfig());
102 assertTrue(containerSchemaNode.isPresenceContainer());
103 assertEquals(1, containerSchemaNode.getMustConstraints().size());
106 private static void checkRefinedChoice(final ModuleEffectiveStatement module, final QName... qnames) {
107 final SchemaNode choiceInContainerNode = (SchemaNode) module.findSchemaTreeNode(qnames).orElse(null);
108 assertNotNull(choiceInContainerNode);
110 ChoiceSchemaNode choiceSchemaNode = (ChoiceSchemaNode) choiceInContainerNode;
111 assertTrue(choiceSchemaNode.isMandatory());
114 private static void checkRefinedList(final ModuleEffectiveStatement module, final QName... qnames) {
115 final SchemaNode listInContainerNode = (SchemaNode) module.findSchemaTreeNode(qnames).orElse(null);
116 assertNotNull(listInContainerNode);
118 final ListSchemaNode listSchemaNode = (ListSchemaNode) listInContainerNode;
119 assertEquals(Optional.of("new reference"), listSchemaNode.getReference());
120 assertEquals(Optional.of("new description"), listSchemaNode.getDescription());
121 assertEquals(Optional.of(Boolean.TRUE), listSchemaNode.effectiveConfig());
123 final ElementCountConstraint listConstraints = listSchemaNode.getElementCountConstraint().get();
124 assertEquals((Object) 5, listConstraints.getMinElements());
125 assertEquals((Object) 7, listConstraints.getMaxElements());
126 assertEquals(2, listSchemaNode.getMustConstraints().size());