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.*;
10 import static org.junit.Assert.assertEquals;
12 import java.util.List;
13 import org.junit.Ignore;
14 import org.junit.Test;
15 import org.opendaylight.yangtools.yang.common.QName;
16 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
17 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
18 import org.opendaylight.yangtools.yang.model.api.Status;
19 import org.opendaylight.yangtools.yang.model.util.ExtendedType;
20 import org.opendaylight.yangtools.yang.model.util.IdentityrefType;
21 import org.opendaylight.yangtools.yang.model.util.Uint16;
22 import org.opendaylight.yangtools.yang.parser.builder.api.*;
23 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
26 * Test suite for increasing of test coverage of CopyUtils implementation.
28 * @see org.opendaylight.yangtools.yang.parser.builder.impl.CopyUtils
30 * @author Lukas Sedlak <lsedlak@cisco.com>
32 public class CopyUtilsTest extends AbstractBuilderTest {
34 @Test(expected = YangParseException.class)
35 public void testCopyOfUnknownTypeOfDataSchemaNode() {
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 CopyUtils.copy(new InvalidDataSchemaNodeBuilder(), leafBuilder, false);
45 public void testCopyAnyxmlWithAnyxmlOriginalNodeAndUnknownNodes() {
46 final String parentAnyxmlLocalName = "original-anyxml";
47 final QName parentAnyxmlName = QName.create(module.getNamespace(), module.getRevision(), parentAnyxmlLocalName);
48 final SchemaPath parentAnyxmlPath = SchemaPath.create(true, parentAnyxmlName);
49 final AnyXmlBuilder parentAnyXmlBuilder = new AnyXmlBuilder(module.getModuleName(), 22, parentAnyxmlName, parentAnyxmlPath);
51 final String anyxmlLocalName = "anyxml";
52 final QName anyxmlName = QName.create(module.getNamespace(), module.getRevision(), anyxmlLocalName);
53 final SchemaPath anyxmlPath = SchemaPath.create(true, anyxmlName);
54 final AnyXmlBuilder anyXmlBuilder = new AnyXmlBuilder(module.getModuleName(), 22, anyxmlName, anyxmlPath);
56 anyXmlBuilder.setOriginal(parentAnyXmlBuilder);
58 final UnknownSchemaNodeBuilder unknownSchemaNodeBuilder = provideUnknownNodeBuilder(anyxmlName);
59 anyXmlBuilder.addUnknownNodeBuilder(unknownSchemaNodeBuilder);
61 final AnyXmlBuilder copy = (AnyXmlBuilder) CopyUtils.copy(anyXmlBuilder, anyXmlBuilder, false);
62 assertFalse(copy.getUnknownNodes().isEmpty());
63 assertNotNull(copy.getOriginal());
64 assertEquals(copy.getOriginal(), parentAnyXmlBuilder);
68 public void testCopyChoiceBuilderWithUnknownNodesAndAugmentation() {
69 final String originalChoiceLocalName = "original-choice-to-copy";
70 final ChoiceBuilder originalChoiceBuilder = provideChoiceBuilder(originalChoiceLocalName);
72 final String choiceLocalName = "choice-to-copy";
73 final ChoiceBuilder choiceBuilder = provideChoiceBuilder(choiceLocalName);
74 choiceBuilder.setOriginal(originalChoiceBuilder);
76 final UnknownSchemaNodeBuilder unknownSchemaNodeBuilder = provideUnknownNodeBuilder(choiceBuilder.getQName());
77 final SchemaPath augPath = SchemaPath.create(true, choiceBuilder.getQName());
79 final AugmentationSchemaBuilder augBuilder = new AugmentationSchemaBuilderImpl(module.getModuleName(), 22,
80 "/imaginary/path", augPath, 0);
82 final UsesNodeBuilder usesNodeBuilder = provideUsesNodeBuilder("test-grouping-use");
83 augBuilder.addUsesNode(usesNodeBuilder);
84 augBuilder.addUnknownNodeBuilder(unknownSchemaNodeBuilder);
86 choiceBuilder.addUnknownNodeBuilder(unknownSchemaNodeBuilder);
87 choiceBuilder.addAugmentation(augBuilder);
89 final ChoiceBuilder copy = (ChoiceBuilder)CopyUtils.copy(choiceBuilder, module, false);
90 List<AugmentationSchemaBuilder> augmentations = copy.getAugmentationBuilders();
92 assertFalse(copy.getUnknownNodes().isEmpty());
94 final UnknownSchemaNodeBuilder copyUnknownNode = copy.getUnknownNodes().get(0);
95 assertEquals(copyUnknownNode, unknownSchemaNodeBuilder);
97 assertFalse(augmentations.isEmpty());
98 final AugmentationSchemaBuilder copyAugBuilder = augmentations.get(0);
100 assertEquals(copyAugBuilder, augBuilder);
101 assertEquals(copyAugBuilder.getUnknownNodes().get(0), augBuilder.getUnknownNodes().get(0));
102 assertNotEquals(copyAugBuilder.getUsesNodeBuilders().get(0), augBuilder.getUsesNodeBuilders().get(0));
106 public void testCopyChoiceCaseBuilder() {
107 final String originalChoiceCaseLocalName = "original-choice-case";
108 final QName originalChoiceCaseQName = QName.create(module.getNamespace(), module.getRevision(),
109 originalChoiceCaseLocalName);
110 final SchemaPath originalChoiceCasePath = SchemaPath.create(true, originalChoiceCaseQName);
111 final ChoiceCaseBuilder originalChoiceCaseBuilder = new ChoiceCaseBuilder(module.getModuleName(), 10,
112 originalChoiceCaseQName, originalChoiceCasePath);
114 final String choiceCaseLocalName = "test-choice-case";
115 final QName choiceCaseQName = QName.create(module.getNamespace(), module.getRevision(), choiceCaseLocalName);
116 final SchemaPath choiceCasePath = SchemaPath.create(true, choiceCaseQName);
117 final ChoiceCaseBuilder choiceCaseBuilder = new ChoiceCaseBuilder(module.getModuleName(), 10, choiceCaseQName,
120 choiceCaseBuilder.setOriginal(originalChoiceCaseBuilder);
122 final UsesNodeBuilder usesNodeBuilder = provideUsesNodeBuilder("test-grouping-use");
124 UnknownSchemaNodeBuilder unknownSchemaNodeBuilder = provideUnknownNodeBuilder(choiceCaseQName);
126 choiceCaseBuilder.addUsesNode(usesNodeBuilder);
127 choiceCaseBuilder.addUnknownNodeBuilder(unknownSchemaNodeBuilder);
129 ChoiceCaseBuilder copy = (ChoiceCaseBuilder) CopyUtils.copy(choiceCaseBuilder, module, true);
132 assertEquals(copy.getUnknownNodes().get(0), choiceCaseBuilder.getUnknownNodes().get(0));
133 assertFalse(copy.getUsesNodeBuilders().isEmpty());
134 assertNotEquals(copy.getUsesNodeBuilders().get(0), choiceCaseBuilder.getUsesNodeBuilders().get(0));
137 @Test(expected = YangParseException.class)
138 public void testAddGroupingIntoChoiceCaseBuilder() {
139 final String choiceCaseLocalName = "test-choice-case";
140 final QName choiceCaseQName = QName.create(module.getNamespace(), module.getRevision(), choiceCaseLocalName);
141 final SchemaPath choiceCasePath = SchemaPath.create(true, choiceCaseQName);
142 final ChoiceCaseBuilder choiceCaseBuilder = new ChoiceCaseBuilder(module.getModuleName(), 10, choiceCaseQName,
145 final String groupLocalName = "test-group";
146 final QName testGroup = QName.create(module.getNamespace(), module.getRevision(), groupLocalName);
147 final SchemaPath groupPath = SchemaPath.create(true, choiceCaseQName, testGroup);
148 final GroupingBuilder grouping = module.addGrouping(12, testGroup, groupPath);
149 choiceCaseBuilder.addGrouping(grouping);
153 public void testCopyContainerSchemaNodeBuilder() {
154 final ContainerSchemaNodeBuilder containerBuilder = provideContainerBuilder("parent-container");
156 final String groupLocalName = "test-group";
157 final GroupingBuilder grouping = provideNestedGroupingDefinition(containerBuilder.getQName(), groupLocalName);
159 final String typedefLocalName = "test-type-definition";
160 final TypeDefinitionBuilder typedefBuilder = provideNestedTypedef(containerBuilder.getQName(), typedefLocalName);
162 final UnknownSchemaNodeBuilder unknownNodeBuilder = provideUnknownNodeBuilder(containerBuilder.getQName());
164 containerBuilder.addGrouping(grouping);
165 containerBuilder.addTypedef(typedefBuilder);
166 containerBuilder.addUnknownNodeBuilder(unknownNodeBuilder);
168 final ContainerSchemaNodeBuilder copy = (ContainerSchemaNodeBuilder) CopyUtils.copy(containerBuilder, module, true);
172 assertFalse(copy.getGroupingBuilders().isEmpty());
173 assertFalse(copy.getTypeDefinitionBuilders().isEmpty());
174 assertFalse(copy.getUnknownNodes().isEmpty());
177 private GroupingBuilder provideNestedGroupingDefinition(final QName parentName, final String groupLocalName) {
178 final QName testGroup = QName.create(module.getNamespace(), module.getRevision(), groupLocalName);
179 final SchemaPath groupPath = SchemaPath.create(true, parentName, testGroup);
180 final GroupingBuilder grouping = module.addGrouping(12, testGroup, groupPath);
185 private TypeDefinitionBuilder provideNestedTypedef(final QName parentName, final String typedefLocalName) {
186 final QName typedefQname = QName.create(module.getNamespace(), module.getRevision(), typedefLocalName);
187 final SchemaPath typedefPath = SchemaPath.create(true, parentName, typedefQname);
188 final TypeDefinitionBuilder typedefBuilder = new TypeDefinitionBuilderImpl(module.getModuleName(), 12,
189 typedefQname, typedefPath);
190 typedefBuilder.setType(Uint16.getInstance());
192 return typedefBuilder;
196 public void testCopyLeafSchemaNodeBuilder() {
197 final String leafLocalName = "original-leaf";
198 final QName leafName = QName.create(module.getNamespace(), module.getRevision(), leafLocalName);
199 final SchemaPath leafPath = SchemaPath.create(true, leafName);
200 final LeafSchemaNodeBuilder leafBuilder = new LeafSchemaNodeBuilder(module.getModuleName(), 22, leafName, leafPath);
201 leafBuilder.setType(Uint16.getInstance());
203 final UnknownSchemaNodeBuilder unknownNodeBuilder = provideUnknownNodeBuilder(leafName);
204 leafBuilder.addUnknownNodeBuilder(unknownNodeBuilder);
206 final LeafSchemaNodeBuilder copy = (LeafSchemaNodeBuilder)CopyUtils.copy(leafBuilder, module, true);
209 assertFalse(leafBuilder.getUnknownNodes().isEmpty());
213 public void testCopyLeafListSchemaNodeBuilder() {
214 final String origLeafListLocalName = "original-list-to";
215 final QName origLeafListQName = QName.create(module.getNamespace(), module.getRevision(), origLeafListLocalName );
216 final SchemaPath origLeafListPath = SchemaPath.create(true, origLeafListQName);
217 final LeafListSchemaNodeBuilder origLeafListBuilder = new LeafListSchemaNodeBuilder(module.getModuleName(),
218 10, origLeafListQName, origLeafListPath);
219 origLeafListBuilder.setType(Uint16.getInstance());
221 final String leafListLocalName = "leaflist-copy";
222 final QName leafListQName = QName.create(module.getNamespace(), module.getRevision(), leafListLocalName);
223 final SchemaPath leafListPath = SchemaPath.create(true, leafListQName);
224 final LeafListSchemaNodeBuilder leafListBuilder = new LeafListSchemaNodeBuilder(module.getModuleName(),
225 20, leafListQName, leafListPath);
226 leafListBuilder.setType(Uint16.getInstance());
228 leafListBuilder.setOriginal(origLeafListBuilder);
229 final UnknownSchemaNodeBuilder unknownNodeBuilder = provideUnknownNodeBuilder(leafListQName);
230 leafListBuilder.addUnknownNodeBuilder(unknownNodeBuilder);
232 final LeafListSchemaNodeBuilder copy = (LeafListSchemaNodeBuilder)CopyUtils.copy(leafListBuilder, module, true);
235 assertFalse(copy.getUnknownNodes().isEmpty());
236 assertNotNull(copy.getUnknownNodes().get(0));
240 public void testCopyListSchemaNodeBuilder() {
241 final String origListLocalName = "original-list";
242 final QName origListQName = QName.create(module.getNamespace(), module.getRevision(), origListLocalName);
243 final SchemaPath origListPath = SchemaPath.create(true, origListQName);
244 final ListSchemaNodeBuilder origListBuilder = new ListSchemaNodeBuilder(module.getModuleName(),
245 10, origListQName, origListPath);
247 final String listLocalName = "copy-of-list";
248 final QName listQName = QName.create(module.getNamespace(), module.getRevision(), listLocalName);
249 final SchemaPath listPath = SchemaPath.create(true, listQName);
250 final ListSchemaNodeBuilder listBuilder = new ListSchemaNodeBuilder(module.getModuleName(),
251 20, listQName, listPath);
253 listBuilder.setOriginal(origListBuilder);
255 final String groupLocalName = "test-group";
256 final GroupingBuilder grouping = provideNestedGroupingDefinition(listBuilder.getQName(), groupLocalName);
257 listBuilder.addGrouping(grouping);
259 final String typedefLocalName = "test-type-definition";
260 final TypeDefinitionBuilder typedefBuilder = provideNestedTypedef(listBuilder.getQName(), typedefLocalName);
261 listBuilder.addTypedef(typedefBuilder);
263 final UnknownSchemaNodeBuilder unknownNodeBuilder = provideUnknownNodeBuilder(listBuilder.getQName());
264 listBuilder.addUnknownNodeBuilder(unknownNodeBuilder);
266 final UsesNodeBuilder usesNodeBuilder = provideUsesNodeBuilder("test-grouping-use");
267 listBuilder.addUsesNode(usesNodeBuilder);
269 final SchemaPath augPath = SchemaPath.create(true, listBuilder.getQName());
270 final AugmentationSchemaBuilder augBuilder = new AugmentationSchemaBuilderImpl(module.getModuleName(), 22,
271 "/imaginary/path", augPath, 0);
272 listBuilder.addAugmentation(augBuilder);
274 ListSchemaNodeBuilder copy = (ListSchemaNodeBuilder) CopyUtils.copy(listBuilder, module, true);
276 assertFalse(copy.getGroupingBuilders().isEmpty());
277 assertFalse(copy.getTypeDefinitionBuilders().isEmpty());
278 assertFalse(copy.getUnknownNodes().isEmpty());
279 assertFalse(copy.getUsesNodeBuilders().isEmpty());
280 assertFalse(copy.getAugmentationBuilders().isEmpty());
284 public void testCopyGroupingBuilder() {
285 final String groupLocalName = "test-group";
286 final QName testGroup = QName.create(module.getNamespace(), module.getRevision(), groupLocalName);
287 final SchemaPath groupPath = SchemaPath.create(true, testGroup);
288 final GroupingBuilder grouping = module.addGrouping(12, testGroup, groupPath);
290 final String innerGroupLocalName = "inner-group";
291 final QName innerGroup = QName.create(module.getNamespace(), module.getRevision(), innerGroupLocalName);
292 final SchemaPath innerGroupPath = SchemaPath.create(true, testGroup, innerGroup);
293 final GroupingBuilder innerGrouping = module.addGrouping(12, innerGroup, innerGroupPath);
295 grouping.addGrouping(innerGrouping);
297 final String typedefLocalName = "test-type-definition";
298 final TypeDefinitionBuilder typedefBuilder = provideNestedTypedef(grouping.getQName(), typedefLocalName);
299 grouping.addTypedef(typedefBuilder);
301 final UsesNodeBuilder usesNodeBuilder = provideUsesNodeBuilder(innerGroupLocalName);
302 grouping.addUsesNode(usesNodeBuilder);
304 final UnknownSchemaNodeBuilder unknownNodeBuilder = provideUnknownNodeBuilder(grouping.getQName());
305 grouping.addUnknownNodeBuilder(unknownNodeBuilder);
307 final GroupingBuilder copy = CopyUtils.copy(grouping, module, true);
309 assertFalse(copy.getGroupingBuilders().isEmpty());
310 assertFalse(copy.getTypeDefinitionBuilders().isEmpty());
311 assertFalse(copy.getUsesNodeBuilders().isEmpty());
312 assertFalse(copy.getUnknownNodes().isEmpty());
317 public void testCopyIdentityrefTypeBuilder() {
318 final String typedefLocalName = "identity-ref-test-type";
319 final QName typedefQname = QName.create(module.getNamespace(), module.getRevision(), typedefLocalName);
320 final SchemaPath typedefPath = SchemaPath.create(true, typedefQname);
321 final IdentityrefTypeBuilder typeBuilder = new IdentityrefTypeBuilder(module.getModuleName(), 12,
322 "base:parent-identity", typedefPath);
324 //FIXME remove Ignore annotation once fix for bug 2219 will be resolved and merged
325 final TypeDefinitionBuilder copy = CopyUtils.copy(typeBuilder, module, true);
328 //TODO: add additional asserts
333 public void testCopyTypeDefinitionBuilderWithUnknownNodes() {
334 final String typedefLocalName = "test-typedef-with-ext";
335 final QName typedefQname = QName.create(module.getNamespace(), module.getRevision(), typedefLocalName);
336 final SchemaPath typedefPath = SchemaPath.create(true, typedefQname);
337 final TypeDefinitionBuilder typedefBuilder = new TypeDefinitionBuilderImpl(module.getModuleName(), 12,
338 typedefQname, typedefPath);
339 typedefBuilder.setType(Uint16.getInstance());
341 typedefBuilder.addUnknownNodeBuilder(provideUnknownNodeBuilder());
343 TypeDefinitionBuilder copy = CopyUtils.copy(typedefBuilder, module, true);
344 //FIXME: remove @Ignore annotation once bug 2220 will be resolved and merged
346 assertFalse(copy.getUnknownNodes().isEmpty());
349 private static final class InvalidDataSchemaNodeBuilder implements DataSchemaNodeBuilder {
351 @Override public SchemaNodeBuilder getOriginal() {
355 @Override public void setOriginal(SchemaNodeBuilder original) {
359 @Override public boolean isAugmenting() {
363 @Override public void setAugmenting(boolean augmenting) {
367 @Override public boolean isConfiguration() {
371 @Override public void setConfiguration(boolean config) {
375 @Override public ConstraintsBuilder getConstraints() {
379 @Override public QName getQName() {
383 @Override public SchemaPath getPath() {
387 @Override public void setPath(SchemaPath path) {
391 @Override public String getModuleName() {
395 @Override public void setModuleName(String moduleName) {
399 @Override public int getLine() {
403 @Override public Builder getParent() {
407 @Override public void setParent(Builder parent) {
411 @Override public void addUnknownNodeBuilder(UnknownSchemaNodeBuilder unknownNode) {
415 @Override public List<UnknownSchemaNodeBuilder> getUnknownNodes() {
419 @Override public DataSchemaNode build() {
423 @Override public String getDescription() {
427 @Override public void setDescription(String description) {
431 @Override public String getReference() {
435 @Override public void setReference(String reference) {
439 @Override public Status getStatus() {
443 @Override public void setStatus(Status status) {
447 @Override public boolean isAddedByUses() {
451 @Override public void setAddedByUses(boolean addedByUses) {