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.assertInstanceOf;
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.ListSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement;
24 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
26 class EffectiveUsesRefineAndConstraintsTest extends AbstractYangTest {
29 final var result = assertEffectiveModel("/stmt-test/uses/refine-test.yang");
31 final var module = Iterables.getOnlyElement(result.getModuleStatements().values());
32 final QNameModule qnameModule = module.localQNameModule();
33 final QName rootContainer = QName.create(qnameModule, "root-container");
35 final QName containerFromGrouping = QName.create(qnameModule, "container-from-grouping");
36 final QName listInContainer = QName.create(qnameModule, "list-in-container");
37 final QName choiceFromGrp = QName.create(qnameModule, "choice-from-grp");
39 final QName containerFromGrouping2 = QName.create(qnameModule, "container-from-grouping2");
40 final QName presenceContainer = QName.create(qnameModule, "presence-container");
42 checkRefinedList(module, rootContainer, containerFromGrouping, listInContainer);
43 checkRefinedChoice(module, rootContainer, containerFromGrouping, choiceFromGrp);
44 checkRefinedContainer(module, rootContainer, containerFromGrouping2, presenceContainer);
46 final var grp = module.findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow();
47 assertEquals(QName.create(qnameModule, "grp-1"), grp.argument());
49 checkOriginalList(grp, containerFromGrouping, listInContainer);
50 checkOriginalChoice(grp, containerFromGrouping, choiceFromGrp);
51 checkOriginalContainer(grp, containerFromGrouping2, presenceContainer);
54 private static void checkOriginalContainer(final GroupingEffectiveStatement grp, final QName... qnames) {
55 var containerSchemaNode = assertInstanceOf(ContainerSchemaNode.class,
56 grp.findSchemaTreeNode(qnames).orElseThrow());
57 assertFalse(containerSchemaNode.getReference().isPresent());
58 assertFalse(containerSchemaNode.getDescription().isPresent());
59 assertEquals(Optional.empty(), containerSchemaNode.effectiveConfig());
60 assertFalse(containerSchemaNode.isPresenceContainer());
62 assertEquals(0, containerSchemaNode.getMustConstraints().size());
65 private static void checkOriginalChoice(final GroupingEffectiveStatement grp, final QName... qnames) {
66 var choiceSchemaNode = assertInstanceOf(ChoiceSchemaNode.class, grp.findSchemaTreeNode(qnames).orElseThrow());
67 assertFalse(choiceSchemaNode.isMandatory());
70 private static void checkOriginalList(final GroupingEffectiveStatement grp, final QName... qnames) {
71 final var listSchemaNode = assertInstanceOf(ListSchemaNode.class, grp.findSchemaTreeNode(qnames).orElseThrow());
72 assertEquals(Optional.of("original reference"), listSchemaNode.getReference());
73 assertEquals(Optional.of("original description"), listSchemaNode.getDescription());
74 assertEquals(Optional.of(Boolean.FALSE), listSchemaNode.effectiveConfig());
76 var listConstraints = listSchemaNode.getElementCountConstraint().orElseThrow();
77 assertEquals((Object) 10, listConstraints.getMinElements());
78 assertEquals((Object) 20, listConstraints.getMaxElements());
79 assertEquals(1, listSchemaNode.getMustConstraints().size());
82 private static void checkRefinedContainer(final ModuleEffectiveStatement module, final QName... qnames) {
83 final var containerSchemaNode = assertInstanceOf(ContainerSchemaNode.class,
84 module.findSchemaTreeNode(qnames).orElseThrow());
85 assertEquals(Optional.of("new reference"), containerSchemaNode.getReference());
86 assertEquals(Optional.of("new description"), containerSchemaNode.getDescription());
87 assertEquals(Optional.of(Boolean.TRUE), containerSchemaNode.effectiveConfig());
88 assertTrue(containerSchemaNode.isPresenceContainer());
89 assertEquals(1, containerSchemaNode.getMustConstraints().size());
92 private static void checkRefinedChoice(final ModuleEffectiveStatement module, final QName... qnames) {
93 final var choiceSchemaNode = assertInstanceOf(ChoiceSchemaNode.class,
94 module.findSchemaTreeNode(qnames).orElseThrow());
95 assertTrue(choiceSchemaNode.isMandatory());
98 private static void checkRefinedList(final ModuleEffectiveStatement module, final QName... qnames) {
99 final var listSchemaNode = assertInstanceOf(ListSchemaNode.class,
100 module.findSchemaTreeNode(qnames).orElseThrow());
101 assertEquals(Optional.of("new reference"), listSchemaNode.getReference());
102 assertEquals(Optional.of("new description"), listSchemaNode.getDescription());
103 assertEquals(Optional.of(Boolean.TRUE), listSchemaNode.effectiveConfig());
105 final var listConstraints = listSchemaNode.getElementCountConstraint().orElseThrow();
106 assertEquals((Object) 5, listConstraints.getMinElements());
107 assertEquals((Object) 7, listConstraints.getMaxElements());
108 assertEquals(2, listSchemaNode.getMustConstraints().size());