2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
3 * This program and the accompanying materials are made available under the
4 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
5 * and is available at http://www.eclipse.org/legal/epl-v10.html
7 package org.opendaylight.yangtools.yang.parser.builder.impl;
9 import static org.junit.Assert.assertEquals;
10 import static org.junit.Assert.assertFalse;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertNull;
13 import static org.junit.Assert.assertTrue;
14 import org.junit.Test;
15 import org.opendaylight.yangtools.yang.common.QName;
16 import org.opendaylight.yangtools.yang.model.api.MustDefinition;
17 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
18 import org.opendaylight.yangtools.yang.parser.builder.api.GroupingBuilder;
19 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
20 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
23 * Test suite for increasing of test coverage of RefineUtils implementation.
25 * @see org.opendaylight.yangtools.yang.parser.builder.impl.RefineUtils
27 * @author Lukas Sedlak <lsedlak@cisco.com>
29 * @deprecated Pre-Beryllium implementation, scheduled for removal.
32 public class RefineUtilsTest extends AbstractBuilderTest {
35 public void testRefineLeafWithEmptyDefaultString() {
36 final String leafLocalName = "leaf-to-refine";
37 final QName leafName = QName.create(module.getNamespace(), module.getRevision(), leafLocalName);
38 final SchemaPath leafPath = SchemaPath.create(true, leafName);
39 final LeafSchemaNodeBuilder leafBuilder = new LeafSchemaNodeBuilder(module.getModuleName(), 22, leafName, leafPath);
41 final RefineHolderImpl refineBuilder = new RefineHolderImpl(module.getModuleName(), 23, "/"+leafLocalName);
42 refineBuilder.setDefaultStr("");
44 RefineUtils.performRefine(leafBuilder, refineBuilder);
45 assertNull(leafBuilder.getDefaultStr());
49 public void testRefineContainer() {
50 final String containerLocalName = "container-to-refine";
51 final QName containerName = QName.create(module.getNamespace(), module.getRevision(), containerLocalName);
52 final SchemaPath containerPath = SchemaPath.create(true, containerName);
53 final ContainerSchemaNodeBuilder containerBuilder = new ContainerSchemaNodeBuilder(module.getModuleName(),
54 10, containerName, containerPath);
56 final RefineHolderImpl refineBuilder = new RefineHolderImpl(module.getModuleName(), 23, "/"+containerLocalName);
57 refineBuilder.setPresence(null);
59 final MustDefinition must = provideMustDefinition();
60 refineBuilder.setMust(must);
62 final UnknownSchemaNodeBuilder unknownNodeBuilder = provideUnknownNodeBuilder();
63 refineBuilder.addUnknownNodeBuilder(unknownNodeBuilder);
65 RefineUtils.performRefine(containerBuilder, refineBuilder);
67 assertFalse(containerBuilder.getConstraints().getMustDefinitions().isEmpty());
68 assertEquals(containerBuilder.getConstraints().getMustDefinitions().size(), 1);
69 assertFalse(containerBuilder.getUnknownNodes().isEmpty());
70 assertEquals(containerBuilder.getUnknownNodes().get(0), unknownNodeBuilder);
76 public void testRefineList() {
77 final String listLocalName = "list-to-refine";
78 final QName listQName = QName.create(module.getNamespace(), module.getRevision(), listLocalName);
79 final SchemaPath listPath = SchemaPath.create(true, listQName);
80 final ListSchemaNodeBuilder listBuilder = new ListSchemaNodeBuilder(module.getModuleName(),
81 10, listQName, listPath);
83 final RefineHolderImpl refineBuilder = new RefineHolderImpl(module.getModuleName(), 23, "/"+listLocalName);
85 final MustDefinition must = provideMustDefinition();
86 refineBuilder.setMust(must);
88 final UnknownSchemaNodeBuilder unknownNodeBuilder = provideUnknownNodeBuilder();
89 refineBuilder.addUnknownNodeBuilder(unknownNodeBuilder);
91 refineBuilder.setMinElements(null);
92 refineBuilder.setMaxElements(null);
94 RefineUtils.performRefine(listBuilder, refineBuilder);
95 assertFalse(listBuilder.getConstraints().getMustDefinitions().isEmpty());
96 assertEquals(listBuilder.getConstraints().getMustDefinitions().size(), 1);
97 assertNull(listBuilder.getConstraints().getMinElements());
98 assertNull(listBuilder.getConstraints().getMaxElements());
99 assertFalse(listBuilder.getUnknownNodes().isEmpty());
100 assertEquals(listBuilder.getUnknownNodes().get(0), unknownNodeBuilder);
104 public void testRefineLeafList() {
105 final String leafListLocalName = "list-to-refine";
106 final QName leafListQName = QName.create(module.getNamespace(), module.getRevision(), leafListLocalName);
107 final SchemaPath leafListPath = SchemaPath.create(true, leafListQName);
108 final LeafListSchemaNodeBuilder leafListBuilder = new LeafListSchemaNodeBuilder(module.getModuleName(),
109 10, leafListQName, leafListPath);
111 final RefineHolderImpl refineBuilder = new RefineHolderImpl(module.getModuleName(), 23, "/"+leafListLocalName);
113 final MustDefinition must = provideMustDefinition();
114 refineBuilder.setMust(null);
116 final UnknownSchemaNodeBuilder unknownNodeBuilder = provideUnknownNodeBuilder();
117 refineBuilder.addUnknownNodeBuilder(unknownNodeBuilder);
119 refineBuilder.setMinElements(null);
120 refineBuilder.setMaxElements(null);
122 RefineUtils.performRefine(leafListBuilder, refineBuilder);
123 assertTrue(leafListBuilder.getConstraints().getMustDefinitions().isEmpty());
124 assertNull(leafListBuilder.getConstraints().getMinElements());
125 assertNull(leafListBuilder.getConstraints().getMaxElements());
126 assertFalse(leafListBuilder.getUnknownNodes().isEmpty());
127 assertEquals(leafListBuilder.getUnknownNodes().get(0), unknownNodeBuilder);
129 refineBuilder.setMinElements(Integer.MIN_VALUE);
130 refineBuilder.setMaxElements(Integer.MAX_VALUE);
131 refineBuilder.setMust(must);
133 RefineUtils.performRefine(leafListBuilder, refineBuilder);
134 assertFalse(leafListBuilder.getConstraints().getMustDefinitions().isEmpty());
135 assertEquals(leafListBuilder.getConstraints().getMustDefinitions().size(), 1);
137 assertNotNull(leafListBuilder.getConstraints().getMinElements());
138 assertNotNull(leafListBuilder.getConstraints().getMaxElements());
142 public void testRefineChoice() {
143 final String choiceLocalName = "choice-to-refine";
144 final ChoiceBuilder choiceBuilder = provideChoiceBuilder(choiceLocalName);
146 final RefineHolderImpl refineBuilder = new RefineHolderImpl(module.getModuleName(), 23, "/"+choiceLocalName);
147 refineBuilder.setDefaultStr(null);
148 refineBuilder.setMandatory(null);
150 RefineUtils.performRefine(choiceBuilder, refineBuilder);
151 assertNull(choiceBuilder.getDefaultCase());
152 assertFalse(choiceBuilder.getConstraints().isMandatory());
154 final String defaultValue = "choice-default-case";
155 refineBuilder.setDefaultStr(defaultValue);
156 refineBuilder.setMandatory(true);
157 final UnknownSchemaNodeBuilder unknownNodeBuilder = provideUnknownNodeBuilder();
158 refineBuilder.addUnknownNodeBuilder(unknownNodeBuilder);
160 RefineUtils.performRefine(choiceBuilder, refineBuilder);
161 assertNotNull(choiceBuilder.getDefaultCase());
162 assertNotNull(choiceBuilder.getConstraints().isMandatory());
163 assertFalse(choiceBuilder.getUnknownNodes().isEmpty());
164 assertEquals(choiceBuilder.getUnknownNodes().get(0), unknownNodeBuilder);
168 public void testRefineAnyxml() {
169 final String anyxmlLocalName = "anyxml-to-refine";
170 final QName anyxmlName = QName.create(module.getNamespace(), module.getRevision(), anyxmlLocalName);
171 final SchemaPath anyxmlPath = SchemaPath.create(true, anyxmlName);
172 final AnyXmlBuilder anyXmlBuilder = new AnyXmlBuilder(module.getModuleName(), 22, anyxmlName, anyxmlPath);
174 final RefineHolderImpl refineBuilder = new RefineHolderImpl(module.getModuleName(), 23, "/"+anyxmlLocalName);
175 refineBuilder.setMandatory(null);
176 refineBuilder.setMust(null);
178 RefineUtils.performRefine(anyXmlBuilder, refineBuilder);
179 assertNull(refineBuilder.isMandatory());
180 assertNull(refineBuilder.getMust());
182 final MustDefinition must = provideMustDefinition();
184 refineBuilder.setMandatory(true);
185 refineBuilder.setMust(must);
187 final UnknownSchemaNodeBuilder unknownNodeBuilder = provideUnknownNodeBuilder();
188 refineBuilder.addUnknownNodeBuilder(unknownNodeBuilder);
190 RefineUtils.performRefine(anyXmlBuilder, refineBuilder);
191 assertFalse(anyXmlBuilder.getConstraints().getMustDefinitions().isEmpty());
192 assertEquals(anyXmlBuilder.getConstraints().getMustDefinitions().size(), 1);
193 assertFalse(anyXmlBuilder.getUnknownNodes().isEmpty());
194 assertEquals(anyXmlBuilder.getUnknownNodes().get(0), unknownNodeBuilder);
195 assertTrue(anyXmlBuilder.getConstraints().isMandatory());
198 @Test(expected = YangParseException.class)
199 public void testCheckRefineDefault() {
200 final String groupLocalName = "test-group";
201 final QName testGroup = QName.create(module.getNamespace(), module.getRevision(), groupLocalName);
202 final SchemaPath groupPath = SchemaPath.create(true, testGroup);
203 final GroupingBuilder grouping = module.addGrouping(12, testGroup, groupPath);
205 final RefineHolderImpl refineBuilder = new RefineHolderImpl(module.getModuleName(), 23, "/"+groupLocalName);
206 refineBuilder.setDefaultStr("invalid-default-value");
208 RefineUtils.performRefine(grouping, refineBuilder);
211 @Test(expected = YangParseException.class)
212 public void testCheckRefineMandatory() {
213 final TypeDefinitionBuilderImpl typedef = initTypedef();
214 final RefineHolderImpl refineBuilder = new RefineHolderImpl(module.getModuleName(), 23, "/"+typedef.getQName().getLocalName());
215 refineBuilder.setMandatory(true);
216 RefineUtils.performRefine(typedef, refineBuilder);
219 private TypeDefinitionBuilderImpl initTypedef() {
220 final String typedefLocalName = "test-type-definition";
221 final QName testTypedef = QName.create(module.getNamespace(), module.getRevision(), typedefLocalName);
222 SchemaPath testTypedefPath = SchemaPath.create(true, testTypedef);
224 return module.addTypedef(23, testTypedef, testTypedefPath);
227 @Test(expected = YangParseException.class)
228 public void testCheckRefineMust() {
229 final TypeDefinitionBuilderImpl typedef = initTypedef();
230 final RefineHolderImpl refineBuilder = new RefineHolderImpl(module.getModuleName(), 23, "/"+typedef.getQName().getLocalName());
232 final MustDefinition must = provideMustDefinition();
233 refineBuilder.setMust(must);
234 RefineUtils.performRefine(typedef, refineBuilder);
237 @Test(expected = YangParseException.class)
238 public void testCheckRefineMin() {
239 final TypeDefinitionBuilderImpl typedef = initTypedef();
240 final RefineHolderImpl refineBuilder = new RefineHolderImpl(module.getModuleName(), 23, "/"+typedef.getQName().getLocalName());
242 refineBuilder.setMinElements(Integer.MIN_VALUE);
243 RefineUtils.performRefine(typedef, refineBuilder);
246 @Test(expected = YangParseException.class)
247 public void testCheckRefineMax() {
248 final TypeDefinitionBuilderImpl typedef = initTypedef();
249 final RefineHolderImpl refineBuilder = new RefineHolderImpl(module.getModuleName(), 23, "/"+typedef.getQName().getLocalName());
251 refineBuilder.setMaxElements(Integer.MAX_VALUE);
252 RefineUtils.performRefine(typedef, refineBuilder);