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;
15 import java.util.ArrayList;
16 import java.util.List;
17 import org.junit.Test;
18 import org.opendaylight.mdsal.binding.javav2.generator.api.BindingGenerator;
19 import org.opendaylight.mdsal.binding.javav2.model.api.Enumeration;
20 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedProperty;
21 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTransferObject;
22 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType;
23 import org.opendaylight.mdsal.binding.javav2.model.api.MethodSignature;
24 import org.opendaylight.mdsal.binding.javav2.model.api.Type;
25 import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTOBuilder;
26 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
27 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
29 public class BindingGeneratorImplTest {
32 public void genTypesTypeDefTest() throws Exception {
33 final BindingGeneratorImpl bg = new BindingGeneratorImpl(false);
34 final SchemaContext schemaContext = YangParserTestUtils.parseYangSource("/generator/test-typedef.yang");
35 final List<Type> generateTypes = bg.generateTypes(schemaContext);
36 assertNotNull(generateTypes);
37 for (final Type genType : generateTypes) {
38 if (genType.getName().equals("MyInnerCont") && genType.getPackageName()
39 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.rev170206.data.asteriskmy_cont")) {
40 final GeneratedType gt = (GeneratedType) genType;
41 for (final MethodSignature methodSignature : gt.getMethodDefinitions()) {
42 if (methodSignature.getName().equals("getMyLeaf2")) {
43 assertEquals(methodSignature.getReturnType().getName(), "MyType");
51 public void generatedTypesEnumTest() throws Exception {
52 final BindingGenerator bg = new BindingGeneratorImpl(false);
53 final SchemaContext context = YangParserTestUtils.parseYangSource("/generator/apple-test.yang");
54 final List<Type> generateTypes = bg.generateTypes(context);
55 assertNotNull(generateTypes);
56 assertTrue(!generateTypes.isEmpty());
57 for (final Type type : generateTypes) {
58 if (type.getName().equals("Apple") && type.getPackageName()
59 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.apple.rev170503.data")) {
60 final GeneratedType gt = (GeneratedType) type;
61 final Enumeration enumeration = gt.getEnumerations().get(0);
62 assertEquals("Apple1", enumeration.getName());
63 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.apple.rev170503.data.Apple",
64 enumeration.getPackageName());
65 assertEquals("apple", enumeration.getValues().get(0).getName());
66 assertEquals("APPLE", enumeration.getValues().get(0).getMappedName());
67 assertEquals("apple1", enumeration.getValues().get(1).getName());
68 assertEquals("APPLE1", enumeration.getValues().get(1).getMappedName());
74 public void generatedTypesUsesEnumLeafTest() throws Exception {
75 final BindingGenerator bg = new BindingGeneratorImpl(false);
76 final List<String> sources = new ArrayList<>();
77 sources.add("/uses-statement/test-uses-leaf-innertype-base.yang");
78 sources.add("/uses-statement/test-uses-leaf-innertype.yang");
79 final SchemaContext context = YangParserTestUtils.parseYangSources(sources);
80 final List<Type> generateTypes = bg.generateTypes(context);
81 assertNotNull(generateTypes);
82 assertTrue(!generateTypes.isEmpty());
83 for (final Type type : generateTypes) {
84 if (type.getName().equals("MyCont") && type.getPackageName()
85 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype.base.rev170809.data")) {
86 final GeneratedType gt = (GeneratedType) type;
87 final MethodSignature methodSignature = gt.getMethodDefinitions().get(0);
88 assertEquals("ErrorType", methodSignature.getReturnType().getName());
91 if (type.getName().equals("MyCont") && type.getPackageName()
92 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype.rev170809.data")) {
93 final GeneratedType gt = (GeneratedType) type;
94 final MethodSignature methodSignature = gt.getMethodDefinitions().get(0);
95 assertEquals("ErrorType", methodSignature.getReturnType().getName());
101 public void generatedTypesUsesBitsLeafTest() throws Exception {
102 final BindingGenerator bg = new BindingGeneratorImpl(false);
103 final List<String> sources = new ArrayList<>();
104 sources.add("/uses-statement/test-uses-leaf-innertype2-base.yang");
105 sources.add("/uses-statement/test-uses-leaf-innertype2.yang");
106 final SchemaContext context = YangParserTestUtils.parseYangSources(sources);
107 final List<Type> generateTypes = bg.generateTypes(context);
108 assertNotNull(generateTypes);
109 assertTrue(!generateTypes.isEmpty());
110 for (final Type type : generateTypes) {
111 if (type.getName().equals("MyCont") && type.getPackageName()
112 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.base.rev170809.data")) {
113 final GeneratedType gt = (GeneratedType) type;
114 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
115 if (methodSignature.getName().equals("getLeafBits")) {
116 assertEquals("LeafBits", methodSignature.getReturnType().getName());
122 if (type.getName().equals("MyCont") && type.getPackageName()
123 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.rev170809.data")) {
124 final GeneratedType gt = (GeneratedType) type;
125 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
126 if (methodSignature.getName().equals("getLeafBits")) {
127 assertEquals("LeafBits", methodSignature.getReturnType().getName());
135 public void generatedTypesUsesUnionLeafTest() throws Exception {
136 final BindingGenerator bg = new BindingGeneratorImpl(false);
137 final List<String> sources = new ArrayList<>();
138 sources.add("/uses-statement/test-uses-leaf-innertype2-base.yang");
139 sources.add("/uses-statement/test-uses-leaf-innertype2.yang");
140 final SchemaContext context = YangParserTestUtils.parseYangSources(sources);
141 final List<Type> generateTypes = bg.generateTypes(context);
142 assertNotNull(generateTypes);
143 assertTrue(!generateTypes.isEmpty());
144 for (final Type type : generateTypes) {
145 if (type.getName().equals("MyCont") && type.getPackageName()
146 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.base.rev170809.data")) {
147 final GeneratedType gt = (GeneratedType) type;
148 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
149 if (methodSignature.getName().equals("getLeafUnion")) {
150 assertEquals("LeafUnion", methodSignature.getReturnType().getName());
156 if (type.getName().equals("MyCont") && type.getPackageName()
157 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.rev170809.data")) {
158 final GeneratedType gt = (GeneratedType) type;
159 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
160 if (methodSignature.getName().equals("getLeafUnion")) {
161 assertEquals("LeafUnion", methodSignature.getReturnType().getName());
169 public void generatedTypesUsesLeafTest() throws Exception {
170 final BindingGenerator bg = new BindingGeneratorImpl(false);
171 final List<String> sources = new ArrayList<>();
172 sources.add("/uses-statement/test-uses-leaf-innertype2-base.yang");
173 sources.add("/uses-statement/test-uses-leaf-innertype2.yang");
174 final SchemaContext context = YangParserTestUtils.parseYangSources(sources);
175 final List<Type> generateTypes = bg.generateTypes(context);
176 assertNotNull(generateTypes);
177 assertTrue(!generateTypes.isEmpty());
178 for (final Type type : generateTypes) {
179 if (type.getName().equals("MyCont") && type.getPackageName()
180 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.base.rev170809.data")) {
181 final GeneratedType gt = (GeneratedType) type;
182 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
183 if (methodSignature.getName().equals("getLeafDecimal64")) {
184 assertEquals("BigDecimal", methodSignature.getReturnType().getName());
190 if (type.getName().equals("MyCont") && type.getPackageName()
191 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.rev170809.data")) {
192 final GeneratedType gt = (GeneratedType) type;
193 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
194 if (methodSignature.getName().equals("getLeafDecimal64")) {
195 assertEquals("BigDecimal", methodSignature.getReturnType().getName());
203 public void generatedTypesTest() throws Exception {
204 final BindingGenerator bg = new BindingGeneratorImpl(false);
205 final SchemaContext context = YangParserTestUtils.parseYangSource("/generator/test-list.yang");
206 final List<Type> generateTypes = bg.generateTypes(context);
208 assertNotNull(generateTypes);
209 assertTrue(!generateTypes.isEmpty());
210 assertEquals(3, generateTypes.size());
211 final int[] test_i = { 0 };
212 for (final Type t : generateTypes) {
213 if (t instanceof GeneratedTransferObject) {
214 final GeneratedTransferObject genTransferObj = (GeneratedTransferObject) t;
215 assertBaseGeneratedType(genTransferObj, "MyListKey",
216 "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list");
217 assertEquals(3, genTransferObj.getProperties().size());
219 for (final GeneratedProperty generatedProperty : genTransferObj.getProperties()) {
220 switch (generatedProperty.getName()) {
221 case "keyReservedWord":
222 assertEquals("String", generatedProperty.getReturnType().getName());
226 assertEquals("String", generatedProperty.getReturnType().getName());
230 assertEquals("String", generatedProperty.getReturnType().getName());
237 assertEquals(3, test_j);
240 testActualType((GeneratedType) t, test_i);
243 assertEquals(3, test_i[0]);
247 public void generateTypesDescriptionsTest() throws Exception {
248 final BindingGenerator bg = new BindingGeneratorImpl(true);
249 final SchemaContext context = YangParserTestUtils.parseYangSources("/base/with_import/");
250 assertNotNull(context);
252 final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
253 assertNotNull(generateTypes);
254 assertTrue(!generateTypes.isEmpty());
256 for (final Type type : generateTypes) {
257 if (type.getName().equals("TestData")) {
258 final String description = ((GeneratedType) type).getDescription().get();
260 .contains(" import test-import { prefix \"imported-test\"; revision-date 2017-04-21; }\n\n");
261 description.contains(" revision 2017-02-06;\n\n");
262 description.contains(" typedef my-type {\n type int8;\n }");
263 description.contains(" container *my-cont {\n }\n");
269 public void generateTypesIdentityTest() throws Exception {
270 final BindingGenerator bg = new BindingGeneratorImpl(true);
271 final SchemaContext context = YangParserTestUtils.parseYangSources("/identity/");
272 assertNotNull(context);
274 final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
275 assertNotNull(generateTypes);
276 assertTrue(!generateTypes.isEmpty());
277 for (final Type type : generateTypes) {
278 if (type.getFullyQualifiedName()
279 .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1")) {
280 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
281 assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2",
282 genTO.getSuperType().getFullyQualifiedName());
285 if (type.getFullyQualifiedName()
286 .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2")) {
287 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
288 assertEquals("org.opendaylight.mdsal.gen.javav2.identity.import_.rev170602.ident.Iden1",
289 genTO.getSuperType().getFullyQualifiedName());
292 if (type.getFullyQualifiedName()
293 .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden3")) {
294 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
295 assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1",
296 genTO.getSuperType().getFullyQualifiedName());
302 private void testActualType(final GeneratedType t, final int[] test_i) {
303 MethodSignature methodSignature = null;
304 switch (t.getName()) {
306 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314",
308 methodSignature = t.getMethodDefinitions().get(0);
309 assertMethod(t, "getMyList", "List", "java.util", methodSignature);
313 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
315 methodSignature = t.getMethodDefinitions().get(0);
316 assertMethod(t, "getKey", "String", "java.lang", methodSignature);
320 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
322 methodSignature = t.getMethodDefinitions().get(0);
323 assertMethod(t, "getKey1", "String", "java.lang", methodSignature);
327 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
329 methodSignature = t.getMethodDefinitions().get(0);
330 assertMethod(t, "getKey2", "String", "java.lang", methodSignature);
334 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data.my_list",
336 methodSignature = t.getMethodDefinitions().get(0);
337 assertMethod(t, "getFoo", "String", "java.lang", methodSignature);
341 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data",
343 assertEquals(5, t.getMethodDefinitions().size());
345 for (final MethodSignature m : t.getMethodDefinitions()) {
346 switch (m.getName()) {
348 assertMethod(t, "getKey", "MyListKey",
349 "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
354 assertMethod(t, "getKey1", "String","java.lang", m);
358 assertMethod(t, "getKey2", "String","java.lang", m);
362 assertMethod(t, "getFoo", "String","java.lang", m);
365 case "getKeyReservedWord":
366 assertMethod(t, "getKeyReservedWord", "String","java.lang", m);
373 assertEquals(5, test_j);
381 private void assertBaseGeneratedType(final GeneratedType genType, final String name, final String packageName) {
382 assertEquals(name, genType.getName());
386 private void assertMethod(final GeneratedType definingTypeExpected, final String nameExpected,
387 final String typeNameExpected, final String typePackageNameExpected,
388 final MethodSignature methodSignature) {
389 assertEquals(definingTypeExpected, methodSignature.getDefiningType());
390 assertEquals(nameExpected, methodSignature.getName());
391 assertEquals(typeNameExpected, methodSignature.getReturnType().getName());
392 assertEquals(typePackageNameExpected, methodSignature.getReturnType().getPackageName());