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.mockito.Mockito.mock;
14 import static org.mockito.Mockito.when;
16 import java.io.FileNotFoundException;
17 import java.lang.reflect.Constructor;
18 import java.lang.reflect.InvocationTargetException;
19 import java.lang.reflect.Method;
20 import java.net.URISyntaxException;
21 import java.util.ArrayList;
22 import java.util.Collection;
23 import java.util.HashMap;
24 import java.util.HashSet;
25 import java.util.List;
28 import org.junit.Test;
29 import org.opendaylight.mdsal.binding.javav2.generator.context.ModuleContext;
30 import org.opendaylight.mdsal.binding.javav2.generator.spi.TypeProvider;
31 import org.opendaylight.mdsal.binding.javav2.generator.util.Types;
32 import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder.GeneratedTOBuilderImpl;
33 import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder.GeneratedTypeBuilderImpl;
34 import org.opendaylight.mdsal.binding.javav2.generator.yang.types.TypeProviderImpl;
35 import org.opendaylight.mdsal.binding.javav2.model.api.Constant;
36 import org.opendaylight.mdsal.binding.javav2.model.api.Type;
37 import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.EnumBuilder;
38 import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTOBuilder;
39 import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilder;
40 import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilderBase;
41 import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.MethodSignatureBuilder;
42 import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType;
43 import org.opendaylight.yangtools.yang.common.QName;
44 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
45 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
46 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
47 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
48 import org.opendaylight.yangtools.yang.model.api.Module;
49 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
50 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
51 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
52 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
53 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
54 import org.opendaylight.yangtools.yang.model.api.Status;
55 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
56 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
57 import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition;
58 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
59 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
60 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
62 public class AuxiliaryGenUtilsTest {
64 @SuppressWarnings("unchecked")
65 @Test(expected = UnsupportedOperationException.class)
66 public void constructorTest() throws Throwable {
67 final Constructor<AuxiliaryGenUtils> constructor =
68 (Constructor<AuxiliaryGenUtils>) AuxiliaryGenUtils.class.getDeclaredConstructors()[0];
69 constructor.setAccessible(true);
70 final Object[] objs = {};
72 constructor.newInstance(objs);
73 } catch (final Exception e) {
78 @SuppressWarnings("rawtypes")
80 public void annotateDeprecatedIfNecessaryNonDepricatedTest() throws Exception {
81 final Class[] parameterTypes = { Status.class, GeneratedTypeBuilder.class };
82 final Method generate =
83 AuxiliaryGenUtils.class.getDeclaredMethod("annotateDeprecatedIfNecessary", parameterTypes);
84 assertNotNull(generate);
85 generate.setAccessible(true);
87 final GeneratedTypeBuilderImpl generatedTypeBuilder =
88 new GeneratedTypeBuilderImpl("test.deprecated", "Non_Deprecated", new ModuleContext());
89 final Status status = Status.CURRENT;
91 final Object[] args = { status, generatedTypeBuilder };
92 generate.invoke(AuxiliaryGenUtils.class, args);
93 assertTrue(generatedTypeBuilder.toInstance().getAnnotations().isEmpty());
96 @SuppressWarnings("rawtypes")
98 public void annotateDeprecatedIfNecessaryDepricatedTest() throws Exception {
99 final Class[] parameterTypes = { Status.class, GeneratedTypeBuilder.class };
100 final Method generate =
101 AuxiliaryGenUtils.class.getDeclaredMethod("annotateDeprecatedIfNecessary", parameterTypes);
102 assertNotNull(generate);
103 generate.setAccessible(true);
105 final GeneratedTypeBuilderImpl generatedTypeBuilder =
106 new GeneratedTypeBuilderImpl("test.deprecated", "Deprecated", new ModuleContext());
107 final Status status = Status.DEPRECATED;
109 final Object[] args = { status, generatedTypeBuilder };
110 generate.invoke(AuxiliaryGenUtils.class, args);
111 assertTrue(!generatedTypeBuilder.toInstance().getAnnotations().isEmpty());
112 assertEquals("Deprecated", generatedTypeBuilder.toInstance().getAnnotations().get(0).getName());
116 public void hasBuilderClassFalseTest() throws Exception {
117 assertEquals(false, hasBuilderClass(LeafSchemaNode.class));
121 public void hasBuilderClassContainerTest() throws Exception {
122 assertEquals(true, hasBuilderClass(ContainerSchemaNode.class));
126 public void hasBuilderClassListTest() throws Exception {
127 assertEquals(true, hasBuilderClass(ListSchemaNode.class));
131 public void hasBuilderClassRpcTest() throws Exception {
132 assertEquals(true, hasBuilderClass(RpcDefinition.class));
136 public void hasBuilderClassNotificationTest() throws Exception {
137 assertEquals(true, hasBuilderClass(NotificationDefinition.class));
140 @SuppressWarnings("rawtypes")
142 public void qNameConstantTest() throws Exception {
143 final Class[] parameterTypes = { GeneratedTypeBuilderBase.class, String.class, QName.class };
144 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("qNameConstant", parameterTypes);
145 assertNotNull(generate);
146 generate.setAccessible(true);
148 final GeneratedTypeBuilderBase gtbb = new GeneratedTypeBuilderImpl("test", "qname_constants", new ModuleContext());
149 final String constantName = "ConstantName";
150 final QName constantQName = QName.create("urn:constant", "2017-04-06", constantName);
152 final Object[] args = { gtbb, constantName, constantQName };
153 final Constant result = (Constant) generate.invoke(AuxiliaryGenUtils.class, args);
154 assertEquals(constantName, result.getName());
157 @SuppressWarnings("rawtypes")
159 public void constructGetterTest() throws Exception {
160 final Class[] parameterTypes =
161 { GeneratedTypeBuilder.class, String.class, String.class, Type.class, Status.class };
162 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("constructGetter", parameterTypes);
163 assertNotNull(generate);
164 generate.setAccessible(true);
166 final GeneratedTypeBuilder gtb = new GeneratedTypeBuilderImpl("test", "Getter_of", new ModuleContext());
167 final String schemaNodeName = "schema_node_getter";
168 final String comment = null;
169 final Type returnType = Types.STRING;
170 final Status status = Status.DEPRECATED;
172 final Object[] args = { gtb, schemaNodeName, comment, returnType, status };
173 final MethodSignatureBuilder result = (MethodSignatureBuilder) generate.invoke(AuxiliaryGenUtils.class, args);
174 assertEquals(new StringBuilder("get").append("SchemaNodeGetter").toString(),
175 result.toInstance(returnType).getName());
179 public void getterMethodNameBooleanTest() throws Exception {
180 assertEquals("isBooleanMethod", getterMethodName("boolean_method", Types.BOOLEAN));
184 public void getterMethodNameTest() throws Exception {
185 assertEquals("getClazz", getterMethodName("clazz", Types.CLASS));
188 @SuppressWarnings("rawtypes")
190 public void createDescriptionWithSchemaNodeTest() throws Exception {
191 final Class[] parameterTypes = { SchemaNode.class, String.class, SchemaContext.class, boolean.class,
192 BindingNamespaceType.class};
193 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("createDescription", parameterTypes);
194 assertNotNull(generate);
195 generate.setAccessible(true);
197 final SchemaContext schemaContext = YangParserTestUtils
198 .parseYangFiles(new File(getClass().getResource("/generator/test-list.yang").toURI()));
199 final ListSchemaNode containerSchemaNode =
200 (ListSchemaNode) schemaContext.getModules().iterator().next().getChildNodes().iterator().next();
201 final String fullyQualifiedName =
202 "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data.MyList";
204 final Object[] args = { containerSchemaNode, fullyQualifiedName, schemaContext, true, BindingNamespaceType.Data };
205 final String result = (String) generate.invoke(AuxiliaryGenUtils.class, args);
206 assertNotNull(result);
207 assertTrue(result.contains("list my-list"));
208 assertTrue(result.contains("leaf key"));
209 assertTrue(result.contains("leaf key1"));
210 assertTrue(result.contains("leaf key2"));
211 assertTrue(result.contains("leaf foo"));
212 assertTrue(result.contains("@see org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.dto.MyListBuilder"));
213 assertTrue(result.contains("@see org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list.MyListKey"));
216 @SuppressWarnings("rawtypes")
218 public void createDescriptionWithSchemaNodeWithDescriptionTest() throws Exception {
219 final Class[] parameterTypes = { SchemaNode.class, String.class, SchemaContext.class, boolean.class,
220 BindingNamespaceType.class};
221 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("createDescription", parameterTypes);
222 assertNotNull(generate);
223 generate.setAccessible(true);
225 final SchemaContext schemaContext =
226 YangParserTestUtils.parseYangFiles(
227 new File(getClass().getResource("/base/test-leaf-with-description.yang").toURI()));
228 final LeafSchemaNode containerSchemaNode =
229 (LeafSchemaNode) schemaContext.getModules().iterator().next().getChildNodes().iterator().next();
230 final String fullyQualifiedName = "test.base.cont.with.leaf.MyList";
232 final Object[] args = { containerSchemaNode, fullyQualifiedName, schemaContext, true, BindingNamespaceType.Data};
233 final String result = (String) generate.invoke(AuxiliaryGenUtils.class, args);
234 assertNotNull(result);
235 assertTrue(result.contains("I am leaf."));
238 @SuppressWarnings("rawtypes")
240 public void createDescriptionTest() throws Exception {
241 final Class[] parameterTypes = { Module.class, boolean.class };
242 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("createDescription", parameterTypes);
243 assertNotNull(generate);
244 generate.setAccessible(true);
246 final SchemaContext schemaContext =
247 YangParserTestUtils.parseYangFiles(new File(getClass().getResource("/base/test-module.yang").toURI()));
249 final Object[] args = { schemaContext.getModules().iterator().next(), true };
250 final String result = (String) generate.invoke(AuxiliaryGenUtils.class, args);
251 assertNotNull(result);
252 assertTrue(result.contains("Base test module description"));
253 assertTrue(result.contains("test-module"));
256 @SuppressWarnings({ "rawtypes", "unchecked" })
258 public void createDescriptionWithSchemaNodesTest() throws Exception {
259 final Class[] parameterTypes = { Set.class, Module.class, boolean.class };
260 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("createDescription", parameterTypes);
261 assertNotNull(generate);
262 generate.setAccessible(true);
264 final SchemaContext schemaContext = YangParserTestUtils
265 .parseYangFiles(new File(getClass().getResource("/base/test-rpc-and-notification.yang").toURI()));
266 final Module module = schemaContext.getModules().iterator().next();
267 Set schemaNodes = new HashSet<>();
268 schemaNodes.add(module.getRpcs().iterator().next());
270 final Object[] args = { schemaNodes, module, true };
271 String result = (String) generate.invoke(AuxiliaryGenUtils.class, args);
272 assertNotNull(result);
273 assertTrue(result.contains(
274 "Interface for implementing the following YANG RPCs defined in module <b>test-rpc-and-notification-module</b>"));
275 assertTrue(result.contains("rpc my-rpc"));
276 assertTrue(!result.contains("notification my-notification"));
278 schemaNodes = new HashSet<>();
279 schemaNodes.add(module.getNotifications().iterator().next());
281 final Object[] args_n = { schemaNodes, module, true };
282 result = (String) generate.invoke(AuxiliaryGenUtils.class, args_n);
283 assertNotNull(result);
284 assertTrue(result.contains(
285 "Interface for receiving the following YANG notifications defined in module <b>test-rpc-and-notification-module</b>"));
286 assertTrue(!result.contains("rpc my-rpc"));
287 assertTrue(result.contains("notification my-notification"));
290 @SuppressWarnings({ "rawtypes" })
292 public void isNullOrEmptyIsNullTest() throws Exception {
293 final Class[] parameterTypes = { Collection.class };
294 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("isNullOrEmpty", parameterTypes);
295 assertNotNull(generate);
296 generate.setAccessible(true);
298 final Collection list = null;
300 final Object[] args_n = { list };
301 final boolean result = (boolean) generate.invoke(AuxiliaryGenUtils.class, args_n);
305 @SuppressWarnings({ "rawtypes" })
307 public void isNullOrEmptyIsEmptyTest() throws Exception {
308 final Class[] parameterTypes = { Collection.class };
309 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("isNullOrEmpty", parameterTypes);
310 assertNotNull(generate);
311 generate.setAccessible(true);
313 final Collection list = new ArrayList<>();
315 final Object[] args_n = { list };
316 final boolean result = (boolean) generate.invoke(AuxiliaryGenUtils.class, args_n);
320 @SuppressWarnings({ "rawtypes", "unchecked" })
322 public void isNullOrEmptyNotNullNotEmptyTest() throws Exception {
323 final Class[] parameterTypes = { Collection.class };
324 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("isNullOrEmpty", parameterTypes);
325 assertNotNull(generate);
326 generate.setAccessible(true);
328 final Collection list = new ArrayList<>();
329 list.add(new Object());
331 final Object[] args_n = { list };
332 final boolean result = (boolean) generate.invoke(AuxiliaryGenUtils.class, args_n);
336 @SuppressWarnings({ "rawtypes" })
338 public void augGenTypeNameTest() throws Exception {
339 final Class[] parameterTypes = { Map.class, String.class };
340 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("augGenTypeName", parameterTypes);
341 assertNotNull(generate);
342 generate.setAccessible(true);
344 final Map<String, GeneratedTypeBuilder> builders = new HashMap<>();
345 builders.put("genTypeName1", new GeneratedTypeBuilderImpl("pckg.a1", "gen_a_1", new ModuleContext()));
346 builders.put("genTypeName2", new GeneratedTypeBuilderImpl("pckg.a2", "gen_a_2", new ModuleContext()));
347 final String genTypeName = "genTypeName";
349 final Object[] args_n = { builders, genTypeName };
350 final String result = (String) generate.invoke(AuxiliaryGenUtils.class, args_n);
351 assertEquals("genTypeName3", result);
354 @SuppressWarnings({ "rawtypes" })
356 public void getAugmentIdentifierNullTest() throws Exception {
357 final Class[] parameterTypes = { List.class };
358 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("getAugmentIdentifier", parameterTypes);
359 assertNotNull(generate);
360 generate.setAccessible(true);
362 final List<UnknownSchemaNode> list = new ArrayList<>();
364 final Object[] args_n = { list };
365 final String result = (String) generate.invoke(AuxiliaryGenUtils.class, args_n);
366 assertEquals(null, result);
369 @SuppressWarnings({ "rawtypes" })
371 public void getAugmentIdentifierTest() throws Exception {
372 final Class[] parameterTypes = { List.class };
373 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("getAugmentIdentifier", parameterTypes);
374 assertNotNull(generate);
375 generate.setAccessible(true);
377 final List<UnknownSchemaNode> list = new ArrayList<>();
378 final UnknownSchemaNode unknownSchemaNode = mock(UnknownSchemaNode.class);
380 QName.create("urn:opendaylight:yang:extension:yang-ext", "2017-10-04", "augment-identifier");
381 when(unknownSchemaNode.getNodeType()).thenReturn(qname);
382 final String value = "node parameter";
383 when(unknownSchemaNode.getNodeParameter()).thenReturn(value);
384 list.add(unknownSchemaNode);
386 final Object[] args_n = { list };
387 final String result = (String) generate.invoke(AuxiliaryGenUtils.class, args_n);
388 assertEquals(value, result);
391 @SuppressWarnings({ "rawtypes" })
393 public void resolveInnerEnumFromTypeDefinitionNullTest() throws Exception {
394 final Class[] parameterTypes =
395 { EnumTypeDefinition.class, QName.class, Map.class, GeneratedTypeBuilder.class, Module.class };
396 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("resolveInnerEnumFromTypeDefinition", parameterTypes);
397 assertNotNull(generate);
398 generate.setAccessible(true);
400 EnumTypeDefinition enumTypeDefinition = null;
401 final QName qname = null;
402 final GeneratedTypeBuilder gtb = null;
403 final Map map = new HashMap<>();
404 final Module module = null;
406 final Object[] args_n = { enumTypeDefinition, qname, map, gtb, module };
407 EnumBuilder result = (EnumBuilder) generate.invoke(AuxiliaryGenUtils.class, args_n);
408 assertEquals(null, result);
410 enumTypeDefinition = mock(EnumTypeDefinition.class);
411 final Object[] args1 = { enumTypeDefinition, qname, map, gtb, module };
412 result = (EnumBuilder) generate.invoke(AuxiliaryGenUtils.class, args1);
413 assertEquals(null, result);
416 @SuppressWarnings({ "rawtypes" })
418 public void resolveInnerEnumFromTypeDefinitionTest() throws Exception {
419 final Class[] parameterTypes =
420 { EnumTypeDefinition.class, QName.class, Map.class, GeneratedTypeBuilder.class, Module.class };
421 final Method generate =
422 AuxiliaryGenUtils.class.getDeclaredMethod("resolveInnerEnumFromTypeDefinition", parameterTypes);
423 assertNotNull(generate);
424 generate.setAccessible(true);
426 final QName qname = QName.create("urn:enum:test", "2017-12-04", "enum-test");
427 final EnumTypeDefinition enumTypeDefinition = mock(EnumTypeDefinition.class);
428 final QName enumQName = QName.create(qname, "enum-qname-test");
429 when(enumTypeDefinition.getQName()).thenReturn(enumQName);
430 final SchemaPath schemaPath = SchemaPath.create(true, enumQName);
431 when(enumTypeDefinition.getPath()).thenReturn(schemaPath);
432 final GeneratedTypeBuilder gtb = new GeneratedTypeBuilderImpl("urn.enum.test.pckg", "enum-test", new ModuleContext());
433 final Map<Module, ModuleContext> map = new HashMap<>();
434 final Module module = mock(Module.class);
435 final ModuleContext moduleContext = new ModuleContext();
436 map.put(module, moduleContext);
438 final Object[] args1 = { enumTypeDefinition, qname, map, gtb, module };
439 final EnumBuilder result = (EnumBuilder) generate.invoke(AuxiliaryGenUtils.class, args1);
440 assertNotNull(result);
443 @SuppressWarnings({ "rawtypes" })
445 public void addTOToTypeBuilderNullTest() throws Exception {
446 final Class[] parameterTypes =
447 { TypeDefinition.class, GeneratedTypeBuilder.class, DataSchemaNode.class, Module.class,
448 TypeProvider.class, SchemaContext.class, ModuleContext.class, Map.class };
449 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("addTOToTypeBuilder", parameterTypes);
450 assertNotNull(generate);
451 generate.setAccessible(true);
453 final BooleanTypeDefinition typeDef = mock(BooleanTypeDefinition.class);
454 final GeneratedTypeBuilder typeBuilder =
455 new GeneratedTypeBuilderImpl("test.boolean.type.def", "boolean-type-def", new ModuleContext());
456 final DataSchemaNode leaf = mock(DataSchemaNode.class);
457 final QName qnameLeaf = QName.create("urn:leaf:qname:test", "2017-12-04", "leaf-qname-test");
458 when(leaf.getQName()).thenReturn(qnameLeaf);
459 final Module parentModule = mock(Module.class);
460 final SchemaContext schemaContext = mock(SchemaContext.class);
461 final Set<Module> modules = new HashSet<>();
462 when(schemaContext.getModules()).thenReturn(modules);
463 final TypeProviderImpl typeProvider = new TypeProviderImpl(schemaContext);
464 final Map<Module, ModuleContext> genCtx = new HashMap<>();
465 genCtx.put(parentModule, new ModuleContext());
467 final Object[] args1 = { typeDef, typeBuilder, leaf, parentModule, typeProvider, schemaContext, new ModuleContext(), genCtx };
468 final GeneratedTOBuilder result = (GeneratedTOBuilder) generate.invoke(AuxiliaryGenUtils.class, args1);
469 assertEquals(null, result);
473 public void addTOToTypeBuilderUnionTest() throws Exception {
474 assertNotNull(addTOToBuilder("/base/test-union.yang"));
478 public void addTOToTypeBuilderBitsTest() throws Exception {
479 assertNotNull(addTOToBuilder("/base/test-bits.yang"));
482 @SuppressWarnings({ "rawtypes" })
483 private GeneratedTOBuilder addTOToBuilder(final String yangPath)
484 throws NoSuchMethodException, ReactorException, FileNotFoundException, URISyntaxException,
485 IllegalAccessException, InvocationTargetException {
486 final Class[] parameterTypes = { TypeDefinition.class, GeneratedTypeBuilder.class, DataSchemaNode.class,
487 Module.class, TypeProvider.class, SchemaContext.class, ModuleContext.class, Map.class };
488 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("addTOToTypeBuilder", parameterTypes);
489 assertNotNull(generate);
490 generate.setAccessible(true);
492 final GeneratedTypeBuilder typeBuilder =
493 new GeneratedTypeBuilderImpl("test.boolean.spc.def", "spec-type-def", new ModuleContext());
494 final SchemaContext schemaContext =
495 YangParserTestUtils.parseYangFiles(new File(getClass().getResource(yangPath).toURI()));
496 final TypeProviderImpl typeProvider = new TypeProviderImpl(schemaContext);
497 final LeafSchemaNode leafSchemaNode =
498 (LeafSchemaNode) schemaContext.getModules().iterator().next().getChildNodes().iterator().next();
499 final TypeDefinition<? extends TypeDefinition<?>> typeDef = leafSchemaNode.getType();
500 final Map<Module, ModuleContext> genCtx = new HashMap<>();
501 genCtx.put(schemaContext.getModules().iterator().next(), new ModuleContext());
503 final Object[] args1 = { typeDef, typeBuilder, leafSchemaNode, schemaContext.getModules().iterator().next(),
504 typeProvider, schemaContext, new ModuleContext(), genCtx };
505 return (GeneratedTOBuilder) generate.invoke(AuxiliaryGenUtils.class, args1);
508 @SuppressWarnings({ "rawtypes" })
510 public void createReturnTypeForUnionTest() throws Exception {
511 final Class[] parameterTypes = { GeneratedTOBuilder.class, TypeDefinition.class, GeneratedTypeBuilder.class,
512 Module.class, TypeProvider.class };
513 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("createReturnTypeForUnion", parameterTypes);
514 assertNotNull(generate);
515 generate.setAccessible(true);
517 final GeneratedTypeBuilder typeBuilder = new GeneratedTypeBuilderImpl("test.boolean.spc.def",
518 "spec-type-def", new ModuleContext());
519 final SchemaContext schemaContext =
520 YangParserTestUtils.parseYangFiles(new File(getClass().getResource("/base/test-union.yang").toURI()));
521 final TypeProviderImpl typeProvider = new TypeProviderImpl(schemaContext);
522 final LeafSchemaNode leafSchemaNode =
523 (LeafSchemaNode) schemaContext.getModules().iterator().next().getChildNodes().iterator().next();
524 final TypeDefinition<? extends TypeDefinition<?>> typeDef = leafSchemaNode.getType();
526 final Object[] args1 = { addTOToBuilder("/base/test-union.yang"), typeDef, typeBuilder,
527 schemaContext.getModules().iterator().next(), typeProvider };
528 final Type result = (Type) generate.invoke(AuxiliaryGenUtils.class, args1);
529 assertNotNull(result);
532 @SuppressWarnings({ "rawtypes" })
534 public void isInnerTypeTrueTest() throws Exception {
535 final Class[] parameterTypes = { LeafSchemaNode.class, TypeDefinition.class };
536 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("isInnerType", parameterTypes);
537 assertNotNull(generate);
538 generate.setAccessible(true);
540 final LeafSchemaNode leaf = mock(LeafSchemaNode.class);
541 final TypeDefinition type = mock(TypeDefinition.class);
542 final QName qname = QName.create("namespace", "2017-12-04", "localName");
543 final SchemaPath path = SchemaPath.create(true, qname);
544 when(leaf.getPath()).thenReturn(path);
545 when(type.getPath()).thenReturn(path);
547 final Object[] args1 = { leaf, type };
548 boolean result = (boolean) generate.invoke(AuxiliaryGenUtils.class, args1);
549 assertNotNull(result);
552 final QName qnameParent = QName.create(qname, "qnameParent");
553 final SchemaPath parent = SchemaPath.create(true, qname, qnameParent);
554 when(type.getPath()).thenReturn(parent);
556 final Object[] args2 = { leaf, type };
557 result = (boolean) generate.invoke(AuxiliaryGenUtils.class, args2);
558 assertNotNull(result);
562 @SuppressWarnings({ "rawtypes" })
564 public void isInnerTypeFalseTest() throws Exception {
565 final Class[] parameterTypes = { LeafSchemaNode.class, TypeDefinition.class };
566 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("isInnerType", parameterTypes);
567 assertNotNull(generate);
568 generate.setAccessible(true);
570 final LeafSchemaNode leaf = mock(LeafSchemaNode.class);
571 final TypeDefinition type = mock(TypeDefinition.class);
572 final QName qname = QName.create("namespace", "2017-12-04", "localName");
573 final SchemaPath path = SchemaPath.create(true, qname);
574 when(leaf.getPath()).thenReturn(path);
576 final QName qnameChild = QName.create(qname, "qnameChild");
577 final QName qnameParent = QName.create(qname, "qnameParent");
578 final SchemaPath parent = SchemaPath.create(true, qnameChild, qnameParent);
580 when(type.getPath()).thenReturn(parent);
582 final Object[] args2 = { leaf, type };
583 final boolean result = (boolean) generate.invoke(AuxiliaryGenUtils.class, args2);
584 assertNotNull(result);
588 @SuppressWarnings({ "rawtypes" })
590 public void resolveListKeyTOBuilderTest() throws Exception {
591 final Class[] parameterTypes = { String.class, ListSchemaNode.class, ModuleContext.class };
592 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("resolveListKeyTOBuilder", parameterTypes);
593 assertNotNull(generate);
594 generate.setAccessible(true);
596 final String pckgName = "pckg.name.test";
597 final ListSchemaNode list = mock(ListSchemaNode.class);
598 final List<QName> keyDefs = new ArrayList<>();
599 final QName qname = QName.create("namespace", "2017-12-04", "localname");
601 when(list.getKeyDefinition()).thenReturn(keyDefs);
602 when(list.getQName()).thenReturn(qname);
604 final Object[] args1 = { pckgName, list, new ModuleContext() };
605 final GeneratedTOBuilder result = (GeneratedTOBuilder) generate.invoke(AuxiliaryGenUtils.class, args1);
606 assertNotNull(result);
607 assertEquals("LocalnameKey", result.getName());
610 @SuppressWarnings({ "rawtypes" })
612 public void resolveLeafSchemaNodeAsPropertyFalseTest() throws Exception {
613 final Class[] parameterTypes = { String.class, GeneratedTOBuilder.class, LeafSchemaNode.class, Type.class, boolean.class };
614 final Method generate =
615 AuxiliaryGenUtils.class.getDeclaredMethod("resolveLeafSchemaNodeAsProperty", parameterTypes);
616 assertNotNull(generate);
617 generate.setAccessible(true);
619 final GeneratedTOBuilder gtob = mock(GeneratedTOBuilder.class);
620 final LeafSchemaNode leaf = mock(LeafSchemaNode.class);
621 final boolean isReadOnly = true;
622 final Type type = null;
624 final Object[] args2 = { "list", gtob, leaf, type, isReadOnly };
625 final boolean result = (boolean) generate.invoke(AuxiliaryGenUtils.class, args2);
626 assertNotNull(result);
630 @SuppressWarnings({ "rawtypes" })
632 public void resolveLeafSchemaNodeAsPropertyTrueTest() throws Exception {
633 final Class[] parameterTypes = { String.class, GeneratedTOBuilder.class, LeafSchemaNode.class, Type.class, boolean.class };
634 final Method generate =
635 AuxiliaryGenUtils.class.getDeclaredMethod("resolveLeafSchemaNodeAsProperty", parameterTypes);
636 assertNotNull(generate);
637 generate.setAccessible(true);
639 final GeneratedTOBuilder gtob = new GeneratedTOBuilderImpl("pckg.name.gto.tst", "gto_name", true);
640 final LeafSchemaNode leaf = mock(LeafSchemaNode.class);
641 final boolean isReadOnly = true;
642 final Type type = mock(Type.class);
643 when(leaf.getQName()).thenReturn(QName.create("ns", "2017-12-04", "ln"));
645 final Object[] args2 = { "list", gtob, leaf, type, isReadOnly };
646 final boolean result = (boolean) generate.invoke(AuxiliaryGenUtils.class, args2);
647 assertNotNull(result);
651 @SuppressWarnings({ "rawtypes" })
653 public void checkModuleAndModuleNameTest() throws Exception {
654 final Class[] parameterTypes = { Module.class };
655 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("checkModuleAndModuleName", parameterTypes);
656 assertNotNull(generate);
657 generate.setAccessible(true);
659 final Module module = mock(Module.class);
660 when(module.getName()).thenReturn("moduleName");
661 final Object[] args2 = { module };
662 generate.invoke(AuxiliaryGenUtils.class, args2);
665 @SuppressWarnings("rawtypes")
666 private String getterMethodName(final String schemaNodeName, final Type returnType)
667 throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
668 final Class[] parameterTypes =
669 { String.class, Type.class };
670 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("getterMethodName", parameterTypes);
671 assertNotNull(generate);
672 generate.setAccessible(true);
674 final Object[] args = { schemaNodeName, returnType };
675 return (String) generate.invoke(AuxiliaryGenUtils.class, args);
678 @SuppressWarnings("rawtypes")
679 private <T extends SchemaNode> boolean hasBuilderClass(final Class<T> clazz) throws Exception {
680 final Class[] parameterTypes = { SchemaNode.class, BindingNamespaceType.class };
681 final Method generate = AuxiliaryGenUtils.class.getDeclaredMethod("hasBuilderClass", parameterTypes);
682 assertNotNull(generate);
683 generate.setAccessible(true);
685 final T schemaNode = mock(clazz);
687 final Object[] args = { schemaNode, BindingNamespaceType.Data };
688 return (boolean) generate.invoke(AuxiliaryGenUtils.class, args);