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