Clean up TreeNode API
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / EffectiveUsesRefineAndConstraintsTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.stmt;
9
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;
14
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;
25
26 class EffectiveUsesRefineAndConstraintsTest extends AbstractYangTest {
27     @Test
28     void refineTest() {
29         final var result = assertEffectiveModel("/stmt-test/uses/refine-test.yang");
30
31         final var module = Iterables.getOnlyElement(result.getModuleStatements().values());
32         final QNameModule qnameModule = module.localQNameModule();
33         final QName rootContainer = QName.create(qnameModule, "root-container");
34
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");
38
39         final QName containerFromGrouping2 = QName.create(qnameModule, "container-from-grouping2");
40         final QName presenceContainer = QName.create(qnameModule, "presence-container");
41
42         checkRefinedList(module, rootContainer, containerFromGrouping, listInContainer);
43         checkRefinedChoice(module, rootContainer, containerFromGrouping, choiceFromGrp);
44         checkRefinedContainer(module, rootContainer, containerFromGrouping2, presenceContainer);
45
46         final var grp = module.findFirstEffectiveSubstatement(GroupingEffectiveStatement.class).orElseThrow();
47         assertEquals(QName.create(qnameModule, "grp-1"), grp.argument());
48
49         checkOriginalList(grp, containerFromGrouping, listInContainer);
50         checkOriginalChoice(grp, containerFromGrouping, choiceFromGrp);
51         checkOriginalContainer(grp, containerFromGrouping2, presenceContainer);
52     }
53
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());
61
62         assertEquals(0, containerSchemaNode.getMustConstraints().size());
63     }
64
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());
68     }
69
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());
75
76         var listConstraints = listSchemaNode.getElementCountConstraint().orElseThrow();
77         assertEquals((Object) 10, listConstraints.getMinElements());
78         assertEquals((Object) 20, listConstraints.getMaxElements());
79         assertEquals(1, listSchemaNode.getMustConstraints().size());
80     }
81
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());
90     }
91
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());
96     }
97
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());
104
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());
109     }
110 }