2 * Copyright (c) 2017 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.mdsal.binding.javav2.generator.impl;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertTrue;
13 import static org.junit.Assert.fail;
14 import static org.mockito.Mockito.mock;
15 import static org.mockito.Mockito.when;
17 import java.lang.reflect.Constructor;
18 import java.util.ArrayList;
19 import java.util.Collection;
20 import java.util.HashMap;
21 import java.util.HashSet;
22 import java.util.List;
24 import java.util.Optional;
26 import org.junit.Test;
27 import org.opendaylight.mdsal.binding.javav2.generator.context.ModuleContext;
28 import org.opendaylight.mdsal.binding.javav2.generator.spi.TypeProvider;
29 import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder.GeneratedTypeBuilderImpl;
30 import org.opendaylight.mdsal.binding.javav2.generator.yang.types.TypeProviderImpl;
31 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType;
32 import org.opendaylight.mdsal.binding.javav2.model.api.Type;
33 import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilder;
34 import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType;
35 import org.opendaylight.mdsal.binding.javav2.spec.structural.Augmentable;
36 import org.opendaylight.yangtools.yang.common.QName;
37 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
38 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
39 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
40 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
41 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
42 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
43 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
44 import org.opendaylight.yangtools.yang.model.api.Module;
45 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
46 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
47 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
48 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
49 import org.opendaylight.yangtools.yang.model.api.UsesNode;
50 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
52 public class AugmentToGenTypeTest {
54 @Test(expected = UnsupportedOperationException.class)
55 public void constructorTest() throws Throwable {
56 final Constructor<AugmentToGenType> constructor = AugmentToGenType.class.getDeclaredConstructor();
57 constructor.setAccessible(true);
58 final Object[] objs = {};
60 constructor.newInstance(objs);
61 } catch (final Exception e) {
67 public void generateNullModuleTest() {
68 final SchemaContext context = null;
69 final TypeProvider typeProvider = null;
70 final Map<Module, ModuleContext> genCtx = new HashMap<>();
71 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilders = new HashMap<>();
72 final Module m = null;
75 AugmentToGenType.generate(m, context, typeProvider, genCtx, genTypeBuilders, false);
77 } catch (final IllegalArgumentException e) {
78 assertEquals("Module reference cannot be NULL.", e.getMessage());
83 public void generateNullModuleNameTest() {
84 final SchemaContext context = null;
85 final TypeProvider typeProvider = null;
86 final Map<Module, ModuleContext> genCtx = new HashMap<>();
87 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilders = new HashMap<>();
88 final Module m = mock(Module.class);
89 when(m.getName()).thenReturn(null);
92 AugmentToGenType.generate(m, context, typeProvider, genCtx, genTypeBuilders, false);
94 } catch (final IllegalArgumentException e) {
95 assertEquals("Module name cannot be NULL.", e.getMessage());
100 public void generateNullModuleAugmentationsTest() {
101 final SchemaContext context = null;
102 final TypeProvider typeProvider = null;
103 final Map<Module, ModuleContext> genCtx = new HashMap<>();
104 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilders = new HashMap<>();
105 final Module m = mock(Module.class);
106 when(m.getName()).thenReturn("name");
107 when(m.getAugmentations()).thenReturn(null);
110 AugmentToGenType.generate(m, context, typeProvider, genCtx, genTypeBuilders, false);
112 } catch (final IllegalStateException e) {
113 assertEquals("Augmentations Set cannot be NULL.", e.getMessage());
118 public void generateWithoutAugmentationsTest() {
119 final SchemaContext context = YangParserTestUtils.parseYangResource("/generator/test.yang");
120 final TypeProvider typeProvider = new TypeProviderImpl(context);
121 final Map<Module, ModuleContext> genCtx = new HashMap<>();
122 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilders = new HashMap<>();
123 final Map<Module, ModuleContext> invoke = AugmentToGenType.generate(context.getModules().iterator().next(),
124 context, typeProvider, genCtx, genTypeBuilders, false);
125 assertNotNull(invoke);
129 public void generateWithAugmentationsTest() {
130 final SchemaContext context = YangParserTestUtils.parseYangResource("/generator/test-augment.yang");
131 final TypeProvider typeProvider = new TypeProviderImpl(context);
132 final Map<Module, ModuleContext> genCtx = mock(Map.class);
133 final Collection<ModuleContext> moduleContexts = new ArrayList<>();
134 final ModuleContext moduleContext = new ModuleContext();
135 moduleContexts.add(moduleContext);
136 final QName create = QName.create("urn:test:simple:test", "2017-02-06", "my-cont");
137 final SchemaNode schemaNode = mock(SchemaNode.class);
138 when(schemaNode.getPath()).thenReturn(SchemaPath.create(true, create));
139 moduleContext.addChildNodeType(schemaNode, new GeneratedTypeBuilderImpl("test", "Test", moduleContext));
140 when(genCtx.values()).thenReturn(moduleContexts);
141 when(genCtx.get(context.getModules().iterator().next())).thenReturn(moduleContext);
142 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilders = new HashMap<>();
144 final Map<Module, ModuleContext> invoke = AugmentToGenType.generate(context.getModules().iterator().next(),
145 context, typeProvider, genCtx, genTypeBuilders, false);
146 assertNotNull(invoke);
150 public void resolveAugmentationsNullModuleTest() {
152 AugmentToGenType.resolveAugmentations(null, null);
154 } catch (final IllegalArgumentException e) {
155 assertEquals("Module reference cannot be NULL.", e.getMessage());
160 public void resolveAugmentationsNullAugmentationsTest() {
161 final Module m = mock(Module.class);
162 when(m.getAugmentations()).thenReturn(null);
163 final SchemaContext schemaContext = mock(SchemaContext.class);
166 AugmentToGenType.resolveAugmentations(m, schemaContext);
168 } catch (final IllegalStateException e) {
169 assertEquals("Augmentations Set cannot be NULL.", e.getMessage());
174 public void resolveAugmentationsTest() {
175 final Module m = mock(Module.class);
176 final Module m2 = mock(Module.class);
177 final SchemaContext schemaContext = mock(SchemaContext.class);
179 final Set<AugmentationSchemaNode> augmentations = new HashSet<>();
181 final QName q1 = QName.create("q1", "2017-04-04", "q1");
182 final QName q2 = QName.create("q2", "2017-04-04", "q2");
183 final QName q3 = QName.create("q3", "2017-04-04", "q3");
184 final QName q4 = QName.create("q4", "2017-04-04", "q4");
185 final QName q5 = QName.create("q5", "2017-04-04", "q5");
187 final AugmentationSchemaNode AugmentationSchemaNode1 = mock(AugmentationSchemaNode.class);
188 when(AugmentationSchemaNode1.getTargetPath()).thenReturn(SchemaPath.create(true, q1, q2));
189 final AugmentationSchemaNode AugmentationSchemaNode2 = mock(AugmentationSchemaNode.class);
190 when(AugmentationSchemaNode2.getTargetPath()).thenReturn(SchemaPath.create(true, q3, q4, q5));
191 augmentations.add(AugmentationSchemaNode1);
192 augmentations.add(AugmentationSchemaNode2);
194 when(m.getAugmentations()).thenReturn(augmentations);
195 when(schemaContext.findModule(q1.getModule())).thenReturn(Optional.of(m2));
196 when(schemaContext.findModule(q3.getModule())).thenReturn(Optional.of(m2));
198 final List<AugmentationSchemaNode> result = AugmentToGenType.resolveAugmentations(m, schemaContext);
199 assertNotNull(result);
200 assertTrue(!result.isEmpty());
201 assertEquals(result.get(0), AugmentationSchemaNode1);
202 assertEquals(result.get(1), AugmentationSchemaNode2);
206 public void augmentationToGenTypesNullPckgNameTest() {
207 final String augmPackName = null;
208 final Map.Entry<SchemaPath, List<AugmentationSchemaNode>> schemaPathAugmentListEntry = null;
209 final SchemaContext context = null;
210 final TypeProvider typeProvider = null;
211 final Map<Module, ModuleContext> genCtx = new HashMap<>();
212 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilders = new HashMap<>();
213 final Module m = null;
216 AugmentToGenType.augmentationToGenTypes(augmPackName, schemaPathAugmentListEntry, m, context, false, genCtx,
217 genTypeBuilders, typeProvider);
219 } catch (final IllegalArgumentException e) {
220 assertEquals("Package Name cannot be NULL.", e.getMessage());
225 public void augmentationToGenTypesNullAugSchemaTest() {
226 final String augmPackName = "pckg.name";
227 final Map.Entry<SchemaPath, List<AugmentationSchemaNode>> schemaPathAugmentListEntry = null;
228 final SchemaContext context = null;
229 final TypeProvider typeProvider = null;
230 final Map<Module, ModuleContext> genCtx = new HashMap<>();
231 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilders = new HashMap<>();
232 final Module m = null;
235 AugmentToGenType.augmentationToGenTypes(augmPackName, schemaPathAugmentListEntry, m, context, false, genCtx,
236 genTypeBuilders, typeProvider);
238 } catch (final IllegalArgumentException e) {
239 assertEquals("Augmentation List Entry cannot be NULL.", e.getMessage());
244 public void augmentationToGenTypesNullAugSchemaTargetPathTest() {
245 final String augmPackName = "pckg.name";
246 final AugmentationSchemaNode augmSchema = mock(AugmentationSchemaNode.class);
247 when(augmSchema.getTargetPath()).thenReturn(null);
249 final List<AugmentationSchemaNode> AugmentationSchemaNodeList = new ArrayList<>();
250 final Map.Entry<SchemaPath, List<AugmentationSchemaNode>> schemaPathAugmentListEntry = mock(Map.Entry.class);
251 when(schemaPathAugmentListEntry.getKey()).thenReturn(null);
252 when(schemaPathAugmentListEntry.getValue()).thenReturn(AugmentationSchemaNodeList);
254 final SchemaContext context = null;
255 final TypeProvider typeProvider = null;
256 final Map<Module, ModuleContext> genCtx = new HashMap<>();
257 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilders = new HashMap<>();
258 final Module m = null;
261 AugmentToGenType.augmentationToGenTypes(augmPackName, schemaPathAugmentListEntry, m, context, false, genCtx,
262 genTypeBuilders, typeProvider);
264 } catch (final IllegalStateException e) {
265 assertEquals("Augmentation List Entry does not contain Target Path (Target Path is NULL).", e.getMessage());
270 public void augmentationToGenTypesNullAugSchemaListTest() {
271 final String augmPackName = "pckg.name";
272 final AugmentationSchemaNode augmSchema = mock(AugmentationSchemaNode.class);
273 final QName qnamePath = QName.create("test", "2017-04-04", "aug");
274 final SchemaPath path = SchemaPath.create(true, qnamePath);
275 when(augmSchema.getTargetPath()).thenReturn(path);
277 final List<AugmentationSchemaNode> AugmentationSchemaNodeList = new ArrayList<>();
278 final Map.Entry<SchemaPath, List<AugmentationSchemaNode>> schemaPathAugmentListEntry = mock(Map.Entry.class);
279 when(schemaPathAugmentListEntry.getKey()).thenReturn(path);
280 when(schemaPathAugmentListEntry.getValue()).thenReturn(AugmentationSchemaNodeList);
282 final SchemaContext context = null;
283 final TypeProvider typeProvider = null;
284 final Map<Module, ModuleContext> genCtx = new HashMap<>();
285 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilders = new HashMap<>();
286 final Module m = null;
289 AugmentToGenType.augmentationToGenTypes(augmPackName, schemaPathAugmentListEntry, m, context, false, genCtx,
290 genTypeBuilders, typeProvider);
292 } catch (final IllegalStateException e) {
293 assertEquals("Augmentation List cannot be empty.", e.getMessage());
298 public void augmentationToGenTypesNullAugSchemaTargetNodeTest() {
299 final String augmPackName = "pckg.name";
301 final AugmentationSchemaNode augmSchema = mock(AugmentationSchemaNode.class);
302 final QName qnamePath = QName.create("test", "2017-04-04", "aug");
303 final SchemaPath path = SchemaPath.create(true, qnamePath);
304 when(augmSchema.getTargetPath()).thenReturn(path);
305 final Set<UsesNode> uses = new HashSet<>();
306 when(augmSchema.getUses()).thenReturn(uses);
308 final List<AugmentationSchemaNode> AugmentationSchemaNodeList = new ArrayList<>();
309 AugmentationSchemaNodeList.add(augmSchema);
310 final Map.Entry<SchemaPath, List<AugmentationSchemaNode>> schemaPathAugmentListEntry = mock(Map.Entry.class);
311 when(schemaPathAugmentListEntry.getKey()).thenReturn(path);
312 when(schemaPathAugmentListEntry.getValue()).thenReturn(AugmentationSchemaNodeList);
314 final SchemaContext context = mock(SchemaContext.class);
315 final Module moduleAug = mock(Module.class);
316 final DataSchemaNode schNode = null;
317 when(moduleAug.getDataChildByName(qnamePath)).thenReturn(schNode);
318 when(context.findModule(qnamePath.getModule())).thenReturn(Optional.of(moduleAug));
320 final TypeProvider typeProvider = null;
321 final Map<Module, ModuleContext> genCtx = new HashMap<>();
322 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilders = new HashMap<>();
324 final Module m = mock(Module.class);
325 when(m.getName()).thenReturn("augm-module");
326 when(m.getNamespace()).thenReturn(qnamePath.getNamespace());
327 when(m.getRevision()).thenReturn(qnamePath.getRevision());
330 AugmentToGenType.augmentationToGenTypes(augmPackName, schemaPathAugmentListEntry, m, context, false, genCtx,
331 genTypeBuilders, typeProvider);
333 } catch (final IllegalArgumentException e) {
334 assertEquals("augment target not found: " + path, e.getMessage());
339 public void augmentationToGenTypesNullAugTargetGTBTest() {
340 final String augmPackName = "pckg.name";
342 final AugmentationSchemaNode augmSchema = mock(AugmentationSchemaNode.class);
343 final QName qnamePath = QName.create("test", "2017-04-04", "aug");
344 final SchemaPath path = SchemaPath.create(true, qnamePath);
345 when(augmSchema.getTargetPath()).thenReturn(path);
346 final Set<UsesNode> uses = new HashSet<>();
347 when(augmSchema.getUses()).thenReturn(uses);
349 final List<AugmentationSchemaNode> AugmentationSchemaNodeList = new ArrayList<>();
350 AugmentationSchemaNodeList.add(augmSchema);
351 final Map.Entry<SchemaPath, List<AugmentationSchemaNode>> schemaPathAugmentListEntry = mock(Map.Entry.class);
352 when(schemaPathAugmentListEntry.getKey()).thenReturn(path);
353 when(schemaPathAugmentListEntry.getValue()).thenReturn(AugmentationSchemaNodeList);
355 final SchemaContext context = mock(SchemaContext.class);
356 final Module moduleAug = mock(Module.class);
357 final DataSchemaNode schNode = mock(DataSchemaNode.class);
358 when(moduleAug.getDataChildByName(qnamePath)).thenReturn(schNode);
359 when(context.findModule(qnamePath.getModule())).thenReturn(Optional.of(moduleAug));
361 final TypeProvider typeProvider = null;
362 final Map<Module, ModuleContext> genCtx = new HashMap<>();
363 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilders = new HashMap<>();
365 final Module m = mock(Module.class);
366 when(m.getName()).thenReturn("augm-module");
367 when(m.getNamespace()).thenReturn(qnamePath.getNamespace());
368 when(m.getRevision()).thenReturn(qnamePath.getRevision());
371 AugmentToGenType.augmentationToGenTypes(augmPackName, schemaPathAugmentListEntry, m, context, false, genCtx,
372 genTypeBuilders, typeProvider);
374 } catch (final NullPointerException e) {
375 assertEquals("Target type not yet generated: " + schNode, e.getMessage());
380 public void augmentationToGenTypesTargetChoicSchemaNodeTest() {
381 final String augmPackName = "pckg.name";
383 final AugmentationSchemaNode augmSchema = mock(AugmentationSchemaNode.class);
384 final QName qnamePath = QName.create("test", "2017-04-04", "aug");
385 final SchemaPath path = SchemaPath.create(true, qnamePath);
386 when(augmSchema.getTargetPath()).thenReturn(path);
387 final Set<UsesNode> uses = new HashSet<>();
388 when(augmSchema.getUses()).thenReturn(uses);
390 final List<AugmentationSchemaNode> AugmentationSchemaNodeList = new ArrayList<>();
391 AugmentationSchemaNodeList.add(augmSchema);
392 final Map.Entry<SchemaPath, List<AugmentationSchemaNode>> schemaPathAugmentListEntry = mock(Map.Entry.class);
393 when(schemaPathAugmentListEntry.getKey()).thenReturn(path);
394 when(schemaPathAugmentListEntry.getValue()).thenReturn(AugmentationSchemaNodeList);
396 final SchemaContext context = mock(SchemaContext.class);
397 final Module moduleAug = mock(Module.class);
398 final ChoiceSchemaNode targetSchNode = mock(ChoiceSchemaNode.class);
399 when(targetSchNode.getPath()).thenReturn(path);
400 when(moduleAug.getDataChildByName(qnamePath)).thenReturn(targetSchNode);
401 when(context.findModule(qnamePath.getModule())).thenReturn(Optional.of(moduleAug));
403 final TypeProvider typeProvider = null;
405 final Map<Module, ModuleContext> genCtx = mock(Map.class);
406 final Collection<ModuleContext> moduleContexts = new ArrayList<>();
407 final ModuleContext mc = new ModuleContext();
408 final GeneratedTypeBuilder gtb = new GeneratedTypeBuilderImpl(augmPackName, "augm", mc);
409 mc.addChildNodeType(targetSchNode, gtb);
410 moduleContexts.add(mc);
411 when(genCtx.values()).thenReturn(moduleContexts);
413 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilders = new HashMap<>();
415 final Module m = mock(Module.class);
416 when(m.getName()).thenReturn("augm-module");
417 when(m.getNamespace()).thenReturn(qnamePath.getNamespace());
418 when(m.getRevision()).thenReturn(qnamePath.getRevision());
420 final Map<Module, ModuleContext> result = AugmentToGenType.augmentationToGenTypes(augmPackName,
421 schemaPathAugmentListEntry, m, context, false, genCtx, genTypeBuilders, typeProvider);
422 assertNotNull(result);
426 public void augmentationToGenTypesTest() {
427 final String augmPackName = "pckg.name";
429 final AugmentationSchemaNode augmSchema = mock(AugmentationSchemaNode.class);
430 final QName qnamePath = QName.create("test", "2017-04-04", "aug");
431 final SchemaPath path = SchemaPath.create(true, qnamePath);
432 when(augmSchema.getTargetPath()).thenReturn(path);
433 final Set<UsesNode> uses = new HashSet<>();
434 when(augmSchema.getUses()).thenReturn(uses);
435 final List<UnknownSchemaNode> unknownSchemaNodes = new ArrayList<>();
436 when(augmSchema.getUnknownSchemaNodes()).thenReturn(unknownSchemaNodes);
438 final List<AugmentationSchemaNode> AugmentationSchemaNodeList = new ArrayList<>();
439 AugmentationSchemaNodeList.add(augmSchema);
440 final Map.Entry<SchemaPath, List<AugmentationSchemaNode>> schemaPathAugmentListEntry = mock(Map.Entry.class);
441 when(schemaPathAugmentListEntry.getKey()).thenReturn(path);
442 when(schemaPathAugmentListEntry.getValue()).thenReturn(AugmentationSchemaNodeList);
444 final SchemaContext context = mock(SchemaContext.class);
445 final Module moduleAug = mock(Module.class);
446 final DerivableSchemaNode targetSchNode = mock(DerivableSchemaNode.class);
447 when(targetSchNode.getPath()).thenReturn(path);
448 when(targetSchNode.isAddedByUses()).thenReturn(true);
449 when(targetSchNode.getQName()).thenReturn(QName.create("test", "2017-04-04", "aug-node"));
450 when(moduleAug.getDataChildByName(qnamePath)).thenReturn(targetSchNode);
451 when(context.findModule(qnamePath.getModule())).thenReturn(Optional.of(moduleAug));
453 final TypeProvider typeProvider = null;
455 final Map<Module, ModuleContext> genCtx = new HashMap<>();
457 final Collection<ModuleContext> moduleContexts = new ArrayList<>();
458 final ModuleContext mc = new ModuleContext();
459 final GeneratedTypeBuilder gtb = new GeneratedTypeBuilderImpl(augmPackName, "augm", mc);
460 mc.addChildNodeType(targetSchNode, gtb);
461 moduleContexts.add(mc);
462 genCtx.put(moduleAug, mc);
464 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilders = new HashMap<>();
466 when(moduleAug.getName()).thenReturn("augm-module");
467 when(moduleAug.getNamespace()).thenReturn(qnamePath.getNamespace());
468 when(moduleAug.getRevision()).thenReturn(qnamePath.getRevision());
470 final Map<Module, ModuleContext> result =
471 AugmentToGenType.augmentationToGenTypes(augmPackName, schemaPathAugmentListEntry, moduleAug, context,
472 false, genCtx, genTypeBuilders, typeProvider);
473 assertNotNull(result);
474 final ModuleContext moduleContext = result.get(moduleAug);
475 assertTrue(moduleContext.getAugmentations().get(0).getName().contains("Augm"));
476 assertEquals("pckg.name.data", moduleContext.getAugmentations().get(0).getPackageName());
477 assertTrue(moduleContext.getChildNode(path).getName().contains("Augm"));
478 assertEquals("pckg.name", moduleContext.getChildNode(path).getPackageName());
482 public void findOriginalTargetFromGroupingNonGroupingTest() {
483 final Module module = mock(Module.class);
484 final QName qnamePath = QName.create("test", "2017-04-04", "test");
485 final SchemaPath schemaPath = SchemaPath.create(true, qnamePath);
486 final DataSchemaNode schNode = mock(DataSchemaNode.class);
487 when(schNode.getPath()).thenReturn(schemaPath);
488 when(module.getDataChildByName(qnamePath)).thenReturn(schNode);
490 final SchemaContext context = mock(SchemaContext.class);
491 when(context.findModule(qnamePath.getModule())).thenReturn(Optional.of(module));
492 final UsesNode usesNode = mock(UsesNode.class);
493 when(usesNode.getGroupingPath()).thenReturn(schemaPath);
496 AugmentToGenType.findOriginalTargetFromGrouping(context, schemaPath, usesNode);
498 } catch (final IllegalArgumentException e) {
499 assertEquals("Failed to generate code for augment in " + usesNode, e.getMessage());
504 public void findOriginalTargetFromGroupingAsUsesFailedTest() {
505 final Module module = mock(Module.class);
506 final QName qnamePath = QName.create("test", "2017-04-04", "test");
507 final SchemaPath schemaPath = SchemaPath.create(true, qnamePath);
508 final DataSchemaNode schNode = mock(DataSchemaNode.class);
509 when(schNode.getPath()).thenReturn(schemaPath);
510 when(schNode.isAddedByUses()).thenReturn(true);
511 final Set<GroupingDefinition> groupings = new HashSet<>();
512 final GroupingDefinition groupingDefinition = mock(GroupingDefinition.class);
513 when(groupingDefinition.getQName()).thenReturn(qnamePath);
514 groupings.add(groupingDefinition);
515 when(groupingDefinition.getDataChildByName(qnamePath)).thenReturn(schNode);
516 when(module.getGroupings()).thenReturn(groupings);
518 final SchemaContext context = mock(SchemaContext.class);
519 when(context.findModule(qnamePath.getModule())).thenReturn(Optional.of(module));
520 final UsesNode usesNode = mock(UsesNode.class);
521 when(usesNode.getGroupingPath()).thenReturn(schemaPath);
523 final Object[] args = { };
525 AugmentToGenType.findOriginalTargetFromGrouping(context, schemaPath, usesNode);
527 } catch (final IllegalStateException e) {
528 assertEquals("Failed to generate code for augment in " + usesNode, e.getMessage());
533 public void findOriginalTargetFromGroupingReturnNullTest() {
534 final Module module = mock(Module.class);
535 final QName qnamePath = QName.create("test", "2017-04-04", "test");
536 final SchemaPath schemaPath = SchemaPath.create(true, qnamePath);
537 final DataSchemaNode schNode = null;
538 final Set<GroupingDefinition> groupings = new HashSet<>();
539 final GroupingDefinition groupingDefinition = mock(GroupingDefinition.class);
540 when(groupingDefinition.getQName()).thenReturn(qnamePath);
541 groupings.add(groupingDefinition);
542 when(groupingDefinition.getDataChildByName(qnamePath)).thenReturn(schNode);
543 when(module.getGroupings()).thenReturn(groupings);
545 final SchemaContext context = mock(SchemaContext.class);
546 when(context.findModule(qnamePath.getModule())).thenReturn(Optional.of(module));
547 final UsesNode usesNode = mock(UsesNode.class);
548 when(usesNode.getGroupingPath()).thenReturn(schemaPath);
550 final Object[] args = { };
551 final DataSchemaNode result = AugmentToGenType.findOriginalTargetFromGrouping(context, schemaPath, usesNode);
552 assertEquals(null, result);
556 public void findOriginalTargetFromGroupingTest() {
557 final Module module = mock(Module.class);
558 final QName qnamePath = QName.create("test", "2017-04-04", "test");
559 final SchemaPath schemaPath = SchemaPath.create(true, qnamePath);
560 final DataSchemaNode schNode = mock(DataSchemaNode.class);
561 when(schNode.getPath()).thenReturn(schemaPath);
562 final Set<GroupingDefinition> groupings = new HashSet<>();
563 final GroupingDefinition groupingDefinition = mock(GroupingDefinition.class);
564 when(groupingDefinition.getQName()).thenReturn(qnamePath);
565 groupings.add(groupingDefinition);
566 final DerivableSchemaNode derivSchNode = mock(DerivableSchemaNode.class);
567 when(derivSchNode.isAddedByUses()).thenReturn(true);
568 final Optional optional = Optional.of(schNode);
569 when(derivSchNode.getOriginal()).thenReturn(optional);
570 when(groupingDefinition.getDataChildByName(qnamePath)).thenReturn(derivSchNode);
571 when(module.getGroupings()).thenReturn(groupings);
573 final SchemaContext context = mock(SchemaContext.class);
574 when(context.findModule(qnamePath.getModule())).thenReturn(Optional.of(module));
575 final UsesNode usesNode = mock(UsesNode.class);
576 when(usesNode.getGroupingPath()).thenReturn(schemaPath);
578 final DataSchemaNode result = AugmentToGenType.findOriginalTargetFromGrouping(context, schemaPath, usesNode);
579 assertEquals(schNode, result);
583 public void findOriginalTargetFromGroupingChoiceTest() {
584 final Module module = mock(Module.class);
585 final QName qnamePath = QName.create("test", "2017-04-04", "test");
586 final SchemaPath schemaPath = SchemaPath.create(true, qnamePath);
587 final ChoiceSchemaNode schNode = mock(ChoiceSchemaNode.class);
588 when(schNode.getPath()).thenReturn(schemaPath);
589 final Set<GroupingDefinition> groupings = new HashSet<>();
590 final GroupingDefinition groupingDefinition = mock(GroupingDefinition.class);
591 when(groupingDefinition.getQName()).thenReturn(qnamePath);
592 groupings.add(groupingDefinition);
593 when(groupingDefinition.getDataChildByName(qnamePath)).thenReturn(schNode);
594 when(module.getGroupings()).thenReturn(groupings);
596 final SchemaContext context = mock(SchemaContext.class);
597 when(context.findModule(qnamePath.getModule())).thenReturn(Optional.of(module));
598 final UsesNode usesNode = mock(UsesNode.class);
599 when(usesNode.getGroupingPath()).thenReturn(schemaPath);
601 final DataSchemaNode result = AugmentToGenType.findOriginalTargetFromGrouping(context, schemaPath, usesNode);
602 assertEquals(schNode, result);
606 public void generateTypesFromAugmentedChoiceCasesNullPckgNameTest() {
607 final SchemaContext schemaContext = null;
608 final Module module = null;
609 final String pckgName = null;
610 final GeneratedType targetType = null;
611 final ChoiceSchemaNode targetNode = null;
612 final List<AugmentationSchemaNode> schemaPathAugmentListEntry = null;
613 final Map<Module, ModuleContext> genCtx = new HashMap<>();
614 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilder = new HashMap<>();
617 AugmentToGenType.generateTypesFromAugmentedChoiceCases(schemaContext, module, pckgName, targetType,
618 targetNode, schemaPathAugmentListEntry, genCtx, false, genTypeBuilder, null,
619 BindingNamespaceType.Data);
621 } catch (final IllegalArgumentException e) {
622 assertEquals("Base Package Name cannot be NULL.", e.getMessage());
627 public void generateTypesFromAugmentedChoiceCasesNullTargetType() {
628 final SchemaContext schemaContext = null;
629 final Module module = null;
630 final String pckgName = "";
631 final GeneratedType targetType = null;
632 final ChoiceSchemaNode targetNode = null;
633 final List<AugmentationSchemaNode> schemaPathAugmentListEntry = null;
634 final Map<Module, ModuleContext> genCtx = new HashMap<>();
635 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilder = new HashMap<>();
638 AugmentToGenType.generateTypesFromAugmentedChoiceCases(schemaContext, module, pckgName, targetType,
639 targetNode, schemaPathAugmentListEntry, genCtx, false, genTypeBuilder, null,
640 BindingNamespaceType.Data);
642 } catch (final IllegalArgumentException e) {
643 assertEquals("Referenced Choice Type cannot be NULL.", e.getMessage());
648 public void generateTypesFromAugmentedChoiceCasesNullAugmentNodes() {
649 final SchemaContext schemaContext = null;
650 final Module module = null;
651 final String pckgName = "";
652 final GeneratedType targetType = mock(GeneratedType.class);
653 final ChoiceSchemaNode targetNode = null;
654 final List<AugmentationSchemaNode> schemaPathAugmentListEntry = null;
655 final Map<Module, ModuleContext> genCtx = new HashMap<>();
656 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilder = new HashMap<>();
659 AugmentToGenType.generateTypesFromAugmentedChoiceCases(schemaContext, module, pckgName, targetType,
660 targetNode, schemaPathAugmentListEntry, genCtx, false, genTypeBuilder, null,
661 BindingNamespaceType.Data);
663 } catch (final IllegalArgumentException e) {
664 assertEquals("Set of Choice Case Nodes cannot be NULL.", e.getMessage());
669 public void generateTypesFromAugmentedChoiceCasesNullCaseNodeTest() {
670 final SchemaContext schemaContext = null;
671 final Module module = null;
672 final String pckgName = "";
673 final GeneratedType targetType = mock(GeneratedType.class);
674 final ChoiceSchemaNode targetNode = null;
675 final Set<DataSchemaNode> augmentNodes = new HashSet<>();
676 final DataSchemaNode caseNode = null;
677 augmentNodes.add(caseNode);
679 final AugmentationSchemaNode AugmentationSchemaNode = mock(AugmentationSchemaNode.class);
680 when(AugmentationSchemaNode.getChildNodes()).thenReturn(augmentNodes);
681 final List<AugmentationSchemaNode> schemaPathAugmentListEntry = new ArrayList<>();
682 schemaPathAugmentListEntry.add(AugmentationSchemaNode);
684 final Map<Module, ModuleContext> genCtx = new HashMap<>();
685 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilder = new HashMap<>();
687 final Map<Module, ModuleContext> result = AugmentToGenType.generateTypesFromAugmentedChoiceCases(schemaContext,
688 module, pckgName, targetType, targetNode, schemaPathAugmentListEntry, genCtx, false,
689 genTypeBuilder, null, BindingNamespaceType.Data);
690 assertEquals(genCtx, result);
694 public void generateTypesFromAugmentedChoiceCasesTest() {
695 final QName qnamePath = QName.create("test", "2017-04-04", "chcase");
696 final QName qnamePath2 = QName.create("test", "2017-04-04", "chcase2");
697 final SchemaPath path = SchemaPath.create(true, qnamePath, qnamePath2);
699 final SchemaContext schemaContext = mock(SchemaContext.class);
700 final Module module = mock(Module.class);
701 when(module.getName()).thenReturn("test-module-case");
702 final CaseSchemaNode schemaNode = mock(CaseSchemaNode.class);
703 when(schemaNode.getPath()).thenReturn(path);
704 when(module.getDataChildByName(qnamePath)).thenReturn(schemaNode);
705 when(module.getRevision()).thenReturn(qnamePath.getRevision());
706 when(module.getNamespace()).thenReturn(qnamePath.getNamespace());
707 final String pckgName = "test.augment.choice.cases";
708 final GeneratedType targetType = mock(GeneratedType.class);
709 when(targetType.getFullyQualifiedName()).thenReturn(Augmentable.class.getName());
711 final Set<DataSchemaNode> augmentNodes = new HashSet<>();
712 final CaseSchemaNode caseNode = mock(CaseSchemaNode.class);
713 when(caseNode.getPath()).thenReturn(path);
714 when(caseNode.getQName()).thenReturn(qnamePath);
715 when(caseNode.getDescription()).thenReturn(Optional.empty());
716 when(caseNode.getReference()).thenReturn(Optional.empty());
717 augmentNodes.add(caseNode);
719 final AugmentationSchemaNode AugmentationSchemaNode = mock(AugmentationSchemaNode.class);
720 when(AugmentationSchemaNode.getChildNodes()).thenReturn(augmentNodes);
721 final List<AugmentationSchemaNode> schemaPathAugmentListEntry = new ArrayList<>();
722 schemaPathAugmentListEntry.add(AugmentationSchemaNode);
724 final ChoiceSchemaNode targetNode = mock(ChoiceSchemaNode.class);
725 when(targetNode.getPath()).thenReturn(path);
726 when(targetNode.getDescription()).thenReturn(Optional.empty());
727 when(targetNode.getReference()).thenReturn(Optional.empty());
728 final Map<Module, ModuleContext> genCtx = new HashMap<>();
729 final ModuleContext moduleContext = new ModuleContext();
730 final GeneratedTypeBuilder gtb = new GeneratedTypeBuilderImpl(pckgName, "test-case-node-augment", moduleContext);
731 when(targetType.getParentTypeForBuilder()).thenReturn(gtb);
732 genCtx.put(module, moduleContext);
733 final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilder = new HashMap<>();
735 when(schemaContext.findModule(qnamePath.getModule())).thenReturn(Optional.of(module));
737 final Map<Module, ModuleContext> result = AugmentToGenType.generateTypesFromAugmentedChoiceCases(schemaContext,
738 module, pckgName, targetType, targetNode, schemaPathAugmentListEntry, genCtx, false,
739 genTypeBuilder, null, BindingNamespaceType.Data);
740 assertNotNull(result);
741 assertEquals(result.get(module), moduleContext);