Revert "Fix broken tests according to yangtools...
[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.yangtools.yang.model.api.SchemaContext;
26 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
27
28 public class BindingGeneratorImplTest {
29
30     @Test
31     public void genTypesTypeDefTest() throws Exception {
32         final BindingGeneratorImpl bg = new BindingGeneratorImpl(false);
33         final SchemaContext schemaContext = YangParserTestUtils.parseYangSource("/generator/test-typedef.yang");
34         final List<Type> generateTypes = bg.generateTypes(schemaContext);
35         assertNotNull(generateTypes);
36         for (final Type genType : generateTypes) {
37             if (genType.getName().equals("MyInnerCont") && genType.getPackageName()
38                     .equals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.rev170206.data.asteriskmy_cont")) {
39                 final GeneratedType gt = (GeneratedType) genType;
40                 for (final MethodSignature methodSignature : gt.getMethodDefinitions()) {
41                     if (methodSignature.getName().equals("getMyLeaf2")) {
42                         assertEquals(methodSignature.getReturnType().getName(), "MyType");
43                     }
44                 }
45             }
46         }
47     }
48
49     @Test
50     public void generatedTypesEnumTest() throws Exception {
51         final BindingGenerator bg = new BindingGeneratorImpl(false);
52         final SchemaContext context = YangParserTestUtils.parseYangSource("/generator/apple-test.yang");
53         final List<Type> generateTypes = bg.generateTypes(context);
54         assertNotNull(generateTypes);
55         assertTrue(!generateTypes.isEmpty());
56         for (final Type type : generateTypes) {
57             if (type.getName().equals("Apple") && type.getPackageName()
58                     .equals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.apple.rev170503.data")) {
59                 final GeneratedType gt = (GeneratedType) type;
60                 final Enumeration enumeration = gt.getEnumerations().get(0);
61                 assertEquals("Apple1", enumeration.getName());
62                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.apple.rev170503.data.Apple",
63                         enumeration.getPackageName());
64                 assertEquals("apple", enumeration.getValues().get(0).getName());
65                 assertEquals("APPLE", enumeration.getValues().get(0).getMappedName());
66                 assertEquals("apple1", enumeration.getValues().get(1).getName());
67                 assertEquals("APPLE1", enumeration.getValues().get(1).getMappedName());
68             }
69         }
70     }
71
72     @Test
73     public void generatedTypesUsesEnumLeafTest() throws Exception {
74         final BindingGenerator bg = new BindingGeneratorImpl(false);
75         final List<String> sources = new ArrayList<>();
76         sources.add("/uses-statement/test-uses-leaf-innertype-base.yang");
77         sources.add("/uses-statement/test-uses-leaf-innertype.yang");
78         final SchemaContext context = YangParserTestUtils.parseYangSources(sources);
79         final List<Type> generateTypes = bg.generateTypes(context);
80         assertNotNull(generateTypes);
81         assertTrue(!generateTypes.isEmpty());
82         for (final Type type : generateTypes) {
83             if (type.getName().equals("MyCont") && type.getPackageName()
84                     .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype.base.rev170809.data")) {
85                 final GeneratedType gt = (GeneratedType) type;
86                 final MethodSignature methodSignature = gt.getMethodDefinitions().get(0);
87                 assertEquals("ErrorType", methodSignature.getReturnType().getName());
88             }
89
90             if (type.getName().equals("MyCont") && type.getPackageName()
91                     .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype.rev170809.data")) {
92                 final GeneratedType gt = (GeneratedType) type;
93                 final MethodSignature methodSignature = gt.getMethodDefinitions().get(0);
94                 assertEquals("ErrorType", methodSignature.getReturnType().getName());
95             }
96         }
97     }
98
99     @Test
100     public void generatedTypesUsesBitsLeafTest() throws Exception {
101         final BindingGenerator bg = new BindingGeneratorImpl(false);
102         final List<String> sources = new ArrayList<>();
103         sources.add("/uses-statement/test-uses-leaf-innertype2-base.yang");
104         sources.add("/uses-statement/test-uses-leaf-innertype2.yang");
105         final SchemaContext context = YangParserTestUtils.parseYangSources(sources);
106         final List<Type> generateTypes = bg.generateTypes(context);
107         assertNotNull(generateTypes);
108         assertTrue(!generateTypes.isEmpty());
109         for (final Type type : generateTypes) {
110             if (type.getName().equals("MyCont") && type.getPackageName()
111                     .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.base.rev170809.data")) {
112                 final GeneratedType gt = (GeneratedType) type;
113                 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
114                     if (methodSignature.getName().equals("getLeafBits")) {
115                         assertEquals("LeafBits", methodSignature.getReturnType().getName());
116                     }
117                 }
118
119             }
120
121             if (type.getName().equals("MyCont") && type.getPackageName()
122                     .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.rev170809.data")) {
123                 final GeneratedType gt = (GeneratedType) type;
124                 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
125                     if (methodSignature.getName().equals("getLeafBits")) {
126                         assertEquals("LeafBits", methodSignature.getReturnType().getName());
127                     }
128                 }
129             }
130         }
131     }
132
133     @Test
134     public void generatedTypesUsesUnionLeafTest() throws Exception {
135         final BindingGenerator bg = new BindingGeneratorImpl(false);
136         final List<String> sources = new ArrayList<>();
137         sources.add("/uses-statement/test-uses-leaf-innertype2-base.yang");
138         sources.add("/uses-statement/test-uses-leaf-innertype2.yang");
139         final SchemaContext context = YangParserTestUtils.parseYangSources(sources);
140         final List<Type> generateTypes = bg.generateTypes(context);
141         assertNotNull(generateTypes);
142         assertTrue(!generateTypes.isEmpty());
143         for (final Type type : generateTypes) {
144             if (type.getName().equals("MyCont") && type.getPackageName()
145                     .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.base.rev170809.data")) {
146                 final GeneratedType gt = (GeneratedType) type;
147                 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
148                     if (methodSignature.getName().equals("getLeafUnion")) {
149                         assertEquals("LeafUnion", methodSignature.getReturnType().getName());
150                     }
151                 }
152
153             }
154
155             if (type.getName().equals("MyCont") && type.getPackageName()
156                     .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.rev170809.data")) {
157                 final GeneratedType gt = (GeneratedType) type;
158                 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
159                     if (methodSignature.getName().equals("getLeafUnion")) {
160                         assertEquals("LeafUnion", methodSignature.getReturnType().getName());
161                     }
162                 }
163             }
164         }
165     }
166
167     @Test
168     public void generatedTypesUsesLeafTest() throws Exception {
169         final BindingGenerator bg = new BindingGeneratorImpl(false);
170         final List<String> sources = new ArrayList<>();
171         sources.add("/uses-statement/test-uses-leaf-innertype2-base.yang");
172         sources.add("/uses-statement/test-uses-leaf-innertype2.yang");
173         final SchemaContext context = YangParserTestUtils.parseYangSources(sources);
174         final List<Type> generateTypes = bg.generateTypes(context);
175         assertNotNull(generateTypes);
176         assertTrue(!generateTypes.isEmpty());
177         for (final Type type : generateTypes) {
178             if (type.getName().equals("MyCont") && type.getPackageName()
179                     .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.base.rev170809.data")) {
180                 final GeneratedType gt = (GeneratedType) type;
181                 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
182                     if (methodSignature.getName().equals("getLeafDecimal64")) {
183                         assertEquals("BigDecimal", methodSignature.getReturnType().getName());
184                     }
185                 }
186
187             }
188
189             if (type.getName().equals("MyCont") && type.getPackageName()
190                     .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.rev170809.data")) {
191                 final GeneratedType gt = (GeneratedType) type;
192                 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
193                     if (methodSignature.getName().equals("getLeafDecimal64")) {
194                         assertEquals("BigDecimal", methodSignature.getReturnType().getName());
195                     }
196                 }
197             }
198         }
199     }
200
201     @Test
202     public void generatedTypesUsesLeafInnertype3Test() throws Exception {
203         final BindingGenerator bg = new BindingGeneratorImpl(false);
204         final List<String> sources = new ArrayList<>();
205         sources.add("/uses-statement/test-uses-leaf-innertype3-base.yang");
206         sources.add("/uses-statement/test-uses-leaf-innertype3.yang");
207         final SchemaContext context = YangParserTestUtils.parseYangSources(sources);
208         final List<Type> generateTypes = bg.generateTypes(context);
209         assertNotNull(generateTypes);
210         assertTrue(!generateTypes.isEmpty());
211         for (final Type type : generateTypes) {
212             if (type.getName().equals("MyCont") && type.getPackageName()
213                     .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype3.rev170809.data")) {
214                 final GeneratedType gt = (GeneratedType) type;
215                 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
216                     if (methodSignature.getName().equals("getBandwidth")) {
217                         assertEquals("Bandwidth", methodSignature.getReturnType().getName());
218                     }
219                 }
220
221             }
222
223             if (type.getName().equals("Open") && type.getPackageName()
224                     .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype3.rev170809.data")) {
225                 final GeneratedType gt = (GeneratedType) type;
226                 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
227                     if (methodSignature.getName().equals("getVersion")) {
228                         assertEquals("ProtocolVersion", methodSignature.getReturnType().getName());
229                     }
230
231                     if (methodSignature.getName().equals("getLeafUnion")) {
232                         assertEquals("LeafUnion", methodSignature.getReturnType().getName());
233                     }
234                 }
235
236             }
237         }
238     }
239
240     @Test
241     public void generatedTypesTest() throws Exception {
242         final BindingGenerator bg = new BindingGeneratorImpl(false);
243         final SchemaContext context = YangParserTestUtils.parseYangSource("/generator/test-list.yang");
244         final List<Type> generateTypes = bg.generateTypes(context);
245
246         assertNotNull(generateTypes);
247         assertTrue(!generateTypes.isEmpty());
248         assertEquals(3, generateTypes.size());
249         final int[] test_i = { 0 };
250         for (final Type t : generateTypes) {
251             if (t instanceof GeneratedTransferObject) {
252                 final GeneratedTransferObject genTransferObj = (GeneratedTransferObject) t;
253                 assertBaseGeneratedType(genTransferObj, "MyListKey",
254                         "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list");
255                 assertEquals(3, genTransferObj.getProperties().size());
256                 int test_j = 0;
257                 for (final GeneratedProperty generatedProperty : genTransferObj.getProperties()) {
258                     switch (generatedProperty.getName()) {
259                         case "keyReservedWord":
260                             assertEquals("String", generatedProperty.getReturnType().getName());
261                             test_j++;
262                             break;
263                         case "key1":
264                             assertEquals("String", generatedProperty.getReturnType().getName());
265                             test_j++;
266                             break;
267                         case "key2":
268                             assertEquals("String", generatedProperty.getReturnType().getName());
269                             test_j++;
270                             break;
271                         default:
272                             fail();
273                     }
274                 }
275                 assertEquals(3, test_j);
276                 test_i[0] += 1;
277             } else {
278                 testActualType((GeneratedType) t, test_i);
279             }
280         }
281         assertEquals(3, test_i[0]);
282     }
283
284     @Test
285     public void generateTypesDescriptionsTest() throws Exception {
286         final BindingGenerator bg = new BindingGeneratorImpl(true);
287         final SchemaContext context = YangParserTestUtils.parseYangSources("/base/with_import/");
288         assertNotNull(context);
289
290         final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
291         assertNotNull(generateTypes);
292         assertTrue(!generateTypes.isEmpty());
293
294         for (final Type type : generateTypes) {
295             if (type.getName().equals("TestData")) {
296                 final String description = ((GeneratedType) type).getDescription().get();
297                 description
298                         .contains("    import test-import { prefix \"imported-test\"; revision-date 2017-04-21; }\n\n");
299                 description.contains("    revision 2017-02-06;\n\n");
300                 description.contains("    typedef my-type {\n        type int8;\n    }");
301                 description.contains("    container *my-cont {\n    }\n");
302             }
303         }
304     }
305
306     @Test
307     public void generateTypesIdentityTest() throws Exception {
308         final BindingGenerator bg = new BindingGeneratorImpl(true);
309         final SchemaContext context = YangParserTestUtils.parseYangSources("/identity/");
310         assertNotNull(context);
311
312         final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
313         assertNotNull(generateTypes);
314         assertTrue(!generateTypes.isEmpty());
315         for (final Type type : generateTypes) {
316             if (type.getFullyQualifiedName()
317                     .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1")) {
318                 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
319                 assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2",
320                         genTO.getSuperType().getFullyQualifiedName());
321
322             }
323             if (type.getFullyQualifiedName()
324                     .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2")) {
325                 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
326                 assertEquals("org.opendaylight.mdsal.gen.javav2.identity.import_.rev170602.ident.Iden1",
327                         genTO.getSuperType().getFullyQualifiedName());
328
329             }
330             if (type.getFullyQualifiedName()
331                     .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden3")) {
332                 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
333                 assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1",
334                         genTO.getSuperType().getFullyQualifiedName());
335
336             }
337         }
338     }
339
340     private void testActualType(final GeneratedType t, final int[] test_i) {
341         MethodSignature methodSignature = null;
342         switch (t.getName()) {
343             case "TestListData":
344                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314",
345                         t.getPackageName());
346                 methodSignature = t.getMethodDefinitions().get(0);
347                 assertMethod(t, "getMyList", "List", "java.util", methodSignature);
348                 test_i[0] += 1;
349                 break;
350             case "MyListKey":
351                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
352                         t.getPackageName());
353                 methodSignature = t.getMethodDefinitions().get(0);
354                 assertMethod(t, "getKey", "String", "java.lang", methodSignature);
355                 test_i[0] += 1;
356                 break;
357             case "MyListKey1":
358                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
359                         t.getPackageName());
360                 methodSignature = t.getMethodDefinitions().get(0);
361                 assertMethod(t, "getKey1", "String", "java.lang", methodSignature);
362                 test_i[0] += 1;
363                 break;
364             case "MyListKey2":
365                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
366                         t.getPackageName());
367                 methodSignature = t.getMethodDefinitions().get(0);
368                 assertMethod(t, "getKey2", "String", "java.lang", methodSignature);
369                 test_i[0] += 1;
370                 break;
371             case "MyListFoo":
372                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data.my_list",
373                         t.getPackageName());
374                 methodSignature = t.getMethodDefinitions().get(0);
375                 assertMethod(t, "getFoo", "String", "java.lang", methodSignature);
376                 test_i[0] += 1;
377                 break;
378             case "MyList":
379                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data",
380                         t.getPackageName());
381                 assertEquals(5, t.getMethodDefinitions().size());
382                 int test_j = 0;
383                 for (final MethodSignature m : t.getMethodDefinitions()) {
384                     switch (m.getName()) {
385                         case "getKey":
386                                 assertMethod(t, "getKey", "MyListKey",
387                                         "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
388                                         m);
389                             test_j++;
390                             break;
391                         case "getKey1":
392                             assertMethod(t, "getKey1", "String","java.lang", m);
393                             test_j++;
394                             break;
395                         case "getKey2":
396                             assertMethod(t, "getKey2", "String","java.lang", m);
397                             test_j++;
398                             break;
399                         case "getFoo":
400                             assertMethod(t, "getFoo", "String","java.lang", m);
401                             test_j++;
402                             break;
403                         case "getKeyReservedWord":
404                             assertMethod(t, "getKeyReservedWord", "String","java.lang", m);
405                             test_j++;
406                             break;
407                         default:
408                             fail();
409                     }
410                 }
411                 assertEquals(5, test_j);
412                 test_i[0] += 1;
413                 break;
414             default:
415                 fail();
416         }
417     }
418
419     private void assertBaseGeneratedType(final GeneratedType genType, final String name, final String packageName) {
420         assertEquals(name, genType.getName());
421
422     }
423
424     private void assertMethod(final GeneratedType definingTypeExpected, final String nameExpected,
425             final String typeNameExpected, final String typePackageNameExpected,
426             final MethodSignature methodSignature) {
427         assertEquals(definingTypeExpected, methodSignature.getDefiningType());
428         assertEquals(nameExpected, methodSignature.getName());
429         assertEquals(typeNameExpected, methodSignature.getReturnType().getName());
430         assertEquals(typePackageNameExpected, methodSignature.getReturnType().getPackageName());
431     }
432
433 }