a0187c22b98082a4592c80f434fb07d522b4bfd7
[mdsal.git] / binding2 / mdsal-binding2-generator-impl / src / test / java / org / opendaylight / mdsal / binding / javav2 / generator / impl / BindingGeneratorImplTest.java
1 /*
2  * Copyright (c) 2017 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.mdsal.binding.javav2.generator.impl;
9
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
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;
28
29 public class BindingGeneratorImplTest {
30
31     @Test
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");
44                     }
45                 }
46             }
47         }
48     }
49
50     @Test
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());
69             }
70         }
71     }
72
73     @Test
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());
89             }
90
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());
96             }
97         }
98     }
99
100     @Test
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());
117                     }
118                 }
119
120             }
121
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());
128                     }
129                 }
130             }
131         }
132     }
133
134     @Test
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());
151                     }
152                 }
153
154             }
155
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());
162                     }
163                 }
164             }
165         }
166     }
167
168     @Test
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());
185                     }
186                 }
187
188             }
189
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());
196                     }
197                 }
198             }
199         }
200     }
201
202     @Test
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);
207
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());
218                 int test_j = 0;
219                 for (final GeneratedProperty generatedProperty : genTransferObj.getProperties()) {
220                     switch (generatedProperty.getName()) {
221                         case "keyReservedWord":
222                             assertEquals("String", generatedProperty.getReturnType().getName());
223                             test_j++;
224                             break;
225                         case "key1":
226                             assertEquals("String", generatedProperty.getReturnType().getName());
227                             test_j++;
228                             break;
229                         case "key2":
230                             assertEquals("String", generatedProperty.getReturnType().getName());
231                             test_j++;
232                             break;
233                         default:
234                             fail();
235                     }
236                 }
237                 assertEquals(3, test_j);
238                 test_i[0] += 1;
239             } else {
240                 testActualType((GeneratedType) t, test_i);
241             }
242         }
243         assertEquals(3, test_i[0]);
244     }
245
246     @Test
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);
251
252         final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
253         assertNotNull(generateTypes);
254         assertTrue(!generateTypes.isEmpty());
255
256         for (final Type type : generateTypes) {
257             if (type.getName().equals("TestData")) {
258                 final String description = ((GeneratedType) type).getDescription().get();
259                 description
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");
264             }
265         }
266     }
267
268     @Test
269     public void generateTypesIdentityTest() throws Exception {
270         final BindingGenerator bg = new BindingGeneratorImpl(true);
271         final SchemaContext context = YangParserTestUtils.parseYangSources("/identity/");
272         assertNotNull(context);
273
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());
283
284             }
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());
290
291             }
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());
297
298             }
299         }
300     }
301
302     private void testActualType(final GeneratedType t, final int[] test_i) {
303         MethodSignature methodSignature = null;
304         switch (t.getName()) {
305             case "TestListData":
306                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314",
307                         t.getPackageName());
308                 methodSignature = t.getMethodDefinitions().get(0);
309                 assertMethod(t, "getMyList", "List", "java.util", methodSignature);
310                 test_i[0] += 1;
311                 break;
312             case "MyListKey":
313                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
314                         t.getPackageName());
315                 methodSignature = t.getMethodDefinitions().get(0);
316                 assertMethod(t, "getKey", "String", "java.lang", methodSignature);
317                 test_i[0] += 1;
318                 break;
319             case "MyListKey1":
320                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
321                         t.getPackageName());
322                 methodSignature = t.getMethodDefinitions().get(0);
323                 assertMethod(t, "getKey1", "String", "java.lang", methodSignature);
324                 test_i[0] += 1;
325                 break;
326             case "MyListKey2":
327                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
328                         t.getPackageName());
329                 methodSignature = t.getMethodDefinitions().get(0);
330                 assertMethod(t, "getKey2", "String", "java.lang", methodSignature);
331                 test_i[0] += 1;
332                 break;
333             case "MyListFoo":
334                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data.my_list",
335                         t.getPackageName());
336                 methodSignature = t.getMethodDefinitions().get(0);
337                 assertMethod(t, "getFoo", "String", "java.lang", methodSignature);
338                 test_i[0] += 1;
339                 break;
340             case "MyList":
341                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data",
342                         t.getPackageName());
343                 assertEquals(5, t.getMethodDefinitions().size());
344                 int test_j = 0;
345                 for (final MethodSignature m : t.getMethodDefinitions()) {
346                     switch (m.getName()) {
347                         case "getKey":
348                                 assertMethod(t, "getKey", "MyListKey",
349                                         "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
350                                         m);
351                             test_j++;
352                             break;
353                         case "getKey1":
354                             assertMethod(t, "getKey1", "String","java.lang", m);
355                             test_j++;
356                             break;
357                         case "getKey2":
358                             assertMethod(t, "getKey2", "String","java.lang", m);
359                             test_j++;
360                             break;
361                         case "getFoo":
362                             assertMethod(t, "getFoo", "String","java.lang", m);
363                             test_j++;
364                             break;
365                         case "getKeyReservedWord":
366                             assertMethod(t, "getKeyReservedWord", "String","java.lang", m);
367                             test_j++;
368                             break;
369                         default:
370                             fail();
371                     }
372                 }
373                 assertEquals(5, test_j);
374                 test_i[0] += 1;
375                 break;
376             default:
377                 fail();
378         }
379     }
380
381     private void assertBaseGeneratedType(final GeneratedType genType, final String name, final String packageName) {
382         assertEquals(name, genType.getName());
383
384     }
385
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());
393     }
394
395 }