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.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertFalse;
12 import static org.junit.jupiter.api.Assertions.assertNotNull;
13 import static org.junit.jupiter.api.Assertions.assertTrue;
15 import com.google.common.collect.Iterables;
16 import java.util.Optional;
17 import org.junit.jupiter.api.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.ElementCountConstraint;
23 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement;
26 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
28 class EffectiveUsesRefineAndConstraintsTest extends AbstractYangTest {
31 final var result = assertEffectiveModel("/stmt-test/uses/refine-test.yang");
33 final var module = Iterables.getOnlyElement(result.getModuleStatements().values());
34 final QNameModule qnameModule = module.localQNameModule();
35 final QName rootContainer = QName.create(qnameModule, "root-container");
37 final QName containerFromGrouping = QName.create(qnameModule, "container-from-grouping");
38 final QName listInContainer = QName.create(qnameModule, "list-in-container");
39 final QName choiceFromGrp = QName.create(qnameModule, "choice-from-grp");
41 final QName containerFromGrouping2 = QName.create(qnameModule, "container-from-grouping2");
42 final QName presenceContainer = QName.create(qnameModule, "presence-container");
44 checkRefinedList(module, rootContainer, containerFromGrouping, listInContainer);
45 checkRefinedChoice(module, rootContainer, containerFromGrouping, choiceFromGrp);
46 checkRefinedContainer(module, rootContainer, containerFromGrouping2, presenceContainer);
48 final var grp = module.findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow();
49 assertEquals(QName.create(qnameModule, "grp-1"), grp.argument());
51 checkOriginalList(grp, containerFromGrouping, listInContainer);
52 checkOriginalChoice(grp, containerFromGrouping, choiceFromGrp);
53 checkOriginalContainer(grp, containerFromGrouping2, presenceContainer);
56 private static void checkOriginalContainer(final GroupingEffectiveStatement grp, final QName... qnames) {
57 SchemaNode containerInContainerNode = (SchemaNode) grp.findSchemaTreeNode(qnames).orElse(null);
58 assertNotNull(containerInContainerNode);
60 ContainerSchemaNode containerSchemaNode = (ContainerSchemaNode) containerInContainerNode;
61 assertFalse(containerSchemaNode.getReference().isPresent());
62 assertFalse(containerSchemaNode.getDescription().isPresent());
63 assertEquals(Optional.empty(), containerSchemaNode.effectiveConfig());
64 assertFalse(containerSchemaNode.isPresenceContainer());
66 assertEquals(0, containerSchemaNode.getMustConstraints().size());
69 private static void checkOriginalChoice(final GroupingEffectiveStatement grp, final QName... qnames) {
70 SchemaNode choiceInContainerNode = (SchemaNode) grp.findSchemaTreeNode(qnames).orElse(null);
71 assertNotNull(choiceInContainerNode);
73 ChoiceSchemaNode choiceSchemaNode = (ChoiceSchemaNode) choiceInContainerNode;
74 assertFalse(choiceSchemaNode.isMandatory());
77 private static void checkOriginalList(final GroupingEffectiveStatement grp, final QName... qnames) {
78 SchemaNode listInContainerNode = (SchemaNode) grp.findSchemaTreeNode(qnames).orElse(null);
79 assertNotNull(listInContainerNode);
81 ListSchemaNode listSchemaNode = (ListSchemaNode) listInContainerNode;
82 assertEquals(Optional.of("original reference"), listSchemaNode.getReference());
83 assertEquals(Optional.of("original description"), listSchemaNode.getDescription());
84 assertEquals(Optional.of(Boolean.FALSE), listSchemaNode.effectiveConfig());
86 ElementCountConstraint listConstraints = listSchemaNode.getElementCountConstraint().get();
87 assertEquals((Object) 10, listConstraints.getMinElements());
88 assertEquals((Object) 20, listConstraints.getMaxElements());
89 assertEquals(1, listSchemaNode.getMustConstraints().size());
92 private static void checkRefinedContainer(final ModuleEffectiveStatement module, final QName... qnames) {
93 final SchemaNode containerInContainerNode = (SchemaNode) module.findSchemaTreeNode(qnames).orElse(null);
94 assertNotNull(containerInContainerNode);
96 ContainerSchemaNode containerSchemaNode = (ContainerSchemaNode) containerInContainerNode;
97 assertEquals(Optional.of("new reference"), containerSchemaNode.getReference());
98 assertEquals(Optional.of("new description"), containerSchemaNode.getDescription());
99 assertEquals(Optional.of(Boolean.TRUE), containerSchemaNode.effectiveConfig());
100 assertTrue(containerSchemaNode.isPresenceContainer());
101 assertEquals(1, containerSchemaNode.getMustConstraints().size());
104 private static void checkRefinedChoice(final ModuleEffectiveStatement module, final QName... qnames) {
105 final SchemaNode choiceInContainerNode = (SchemaNode) module.findSchemaTreeNode(qnames).orElse(null);
106 assertNotNull(choiceInContainerNode);
108 ChoiceSchemaNode choiceSchemaNode = (ChoiceSchemaNode) choiceInContainerNode;
109 assertTrue(choiceSchemaNode.isMandatory());
112 private static void checkRefinedList(final ModuleEffectiveStatement module, final QName... qnames) {
113 final SchemaNode listInContainerNode = (SchemaNode) module.findSchemaTreeNode(qnames).orElse(null);
114 assertNotNull(listInContainerNode);
116 final ListSchemaNode listSchemaNode = (ListSchemaNode) listInContainerNode;
117 assertEquals(Optional.of("new reference"), listSchemaNode.getReference());
118 assertEquals(Optional.of("new description"), listSchemaNode.getDescription());
119 assertEquals(Optional.of(Boolean.TRUE), listSchemaNode.effectiveConfig());
121 final ElementCountConstraint listConstraints = listSchemaNode.getElementCountConstraint().get();
122 assertEquals((Object) 5, listConstraints.getMinElements());
123 assertEquals((Object) 7, listConstraints.getMaxElements());
124 assertEquals(2, listSchemaNode.getMustConstraints().size());