Binding generator v2 - Unions fix
[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 import java.util.List;
15 import org.junit.Test;
16 import org.opendaylight.mdsal.binding.javav2.generator.api.BindingGenerator;
17 import org.opendaylight.mdsal.binding.javav2.model.api.Enumeration;
18 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedProperty;
19 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTransferObject;
20 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType;
21 import org.opendaylight.mdsal.binding.javav2.model.api.MethodSignature;
22 import org.opendaylight.mdsal.binding.javav2.model.api.Type;
23 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
24 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
25
26 public class BindingGeneratorImplTest {
27
28     @Test
29     public void genTypesTypeDefTest() throws Exception {
30         final BindingGeneratorImpl bg = new BindingGeneratorImpl(false);
31         final SchemaContext schemaContext = YangParserTestUtils.parseYangSource("/generator/test-typedef.yang");
32         final List<Type> generateTypes = bg.generateTypes(schemaContext);
33         assertNotNull(generateTypes);
34         for (final Type genType : generateTypes) {
35             if (genType.getName().equals("MyInnerCont") && genType.getPackageName()
36                     .equals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.rev170206.data.asteriskmy_cont")) {
37                 final GeneratedType gt = (GeneratedType) genType;
38                 for (final MethodSignature methodSignature : gt.getMethodDefinitions()) {
39                     if (methodSignature.getName().equals("getMyLeaf2")) {
40                         assertEquals(methodSignature.getReturnType().getName(), "MyType");
41                     }
42                 }
43             }
44         }
45     }
46
47     @Test
48     public void generatedTypesEnumTest() throws Exception {
49         final BindingGenerator bg = new BindingGeneratorImpl(false);
50         final SchemaContext context = YangParserTestUtils.parseYangSource("/generator/apple-test.yang");
51         final List<Type> generateTypes = bg.generateTypes(context);
52         assertNotNull(generateTypes);
53         assertTrue(!generateTypes.isEmpty());
54         for (final Type type : generateTypes) {
55             if (type.getName().equals("Apple") && type.getPackageName()
56                     .equals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.apple.rev170503.data")) {
57                 final GeneratedType gt = (GeneratedType) type;
58                 final Enumeration enumeration = gt.getEnumerations().get(0);
59                 assertEquals("Apple1", enumeration.getName());
60                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.apple.rev170503.data.Apple",
61                         enumeration.getPackageName());
62                 assertEquals("apple", enumeration.getValues().get(0).getName());
63                 assertEquals("APPLE", enumeration.getValues().get(0).getMappedName());
64                 assertEquals("apple1", enumeration.getValues().get(1).getName());
65                 assertEquals("APPLE1", enumeration.getValues().get(1).getMappedName());
66             }
67         }
68     }
69
70     @Test
71     public void generatedTypesTest() throws Exception {
72         final BindingGenerator bg = new BindingGeneratorImpl(false);
73         final SchemaContext context = YangParserTestUtils.parseYangSource("/generator/test-list.yang");
74         final List<Type> generateTypes = bg.generateTypes(context);
75
76         assertNotNull(generateTypes);
77         assertTrue(!generateTypes.isEmpty());
78         assertEquals(3, generateTypes.size());
79         final int[] test_i = { 0 };
80         for (final Type t : generateTypes) {
81             if (t instanceof GeneratedTransferObject) {
82                 final GeneratedTransferObject genTransferObj = (GeneratedTransferObject) t;
83                 assertBaseGeneratedType(genTransferObj, "MyListKey",
84                         "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list.wrapper");
85                 assertEquals(3, genTransferObj.getProperties().size());
86                 int test_j = 0;
87                 for (final GeneratedProperty generatedProperty : genTransferObj.getProperties()) {
88                     switch (generatedProperty.getName()) {
89                         case "key":
90                             assertEquals("MyListKey", generatedProperty.getReturnType().getName());
91                             test_j++;
92                             break;
93                         case "key1":
94                             assertEquals("MyListKey1", generatedProperty.getReturnType().getName());
95                             test_j++;
96                             break;
97                         case "key2":
98                             assertEquals("MyListKey2", generatedProperty.getReturnType().getName());
99                             test_j++;
100                             break;
101                         default:
102                             fail();
103                     }
104                 }
105                 assertEquals(3, test_j);
106                 test_i[0] += 1;
107             } else {
108                 testActualType((GeneratedType) t, test_i);
109             }
110         }
111         assertEquals(3, test_i[0]);
112     }
113
114     @Test
115     public void generateTypesDescriptionsTest() throws Exception {
116         final BindingGenerator bg = new BindingGeneratorImpl(true);
117         final SchemaContext context = YangParserTestUtils.parseYangSources("/base/with_import/");
118         assertNotNull(context);
119
120         final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
121         assertNotNull(generateTypes);
122         assertTrue(!generateTypes.isEmpty());
123
124         for (final Type type : generateTypes) {
125             if (type.getName().equals("TestData")) {
126                 final String description = ((GeneratedType) type).getDescription().get();
127                 description
128                         .contains("    import test-import { prefix \"imported-test\"; revision-date 2017-04-21; }\n\n");
129                 description.contains("    revision 2017-02-06;\n\n");
130                 description.contains("    typedef my-type {\n        type int8;\n    }");
131                 description.contains("    container *my-cont {\n    }\n");
132             }
133         }
134     }
135
136     private void testActualType(final GeneratedType t, final int[] test_i) {
137         MethodSignature methodSignature = null;
138         switch (t.getName()) {
139             case "TestListData":
140                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314",
141                         t.getPackageName());
142                 methodSignature = t.getMethodDefinitions().get(0);
143                 assertMethod(t, "getMyList", "List", "java.util", methodSignature);
144                 test_i[0] += 1;
145                 break;
146             case "MyListKey":
147                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
148                         t.getPackageName());
149                 methodSignature = t.getMethodDefinitions().get(0);
150                 assertMethod(t, "getKey", "String", "java.lang", methodSignature);
151                 test_i[0] += 1;
152                 break;
153             case "MyListKey1":
154                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
155                         t.getPackageName());
156                 methodSignature = t.getMethodDefinitions().get(0);
157                 assertMethod(t, "getKey1", "String", "java.lang", methodSignature);
158                 test_i[0] += 1;
159                 break;
160             case "MyListKey2":
161                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
162                         t.getPackageName());
163                 methodSignature = t.getMethodDefinitions().get(0);
164                 assertMethod(t, "getKey2", "String", "java.lang", methodSignature);
165                 test_i[0] += 1;
166                 break;
167             case "MyListFoo":
168                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data.my_list",
169                         t.getPackageName());
170                 methodSignature = t.getMethodDefinitions().get(0);
171                 assertMethod(t, "getFoo", "String", "java.lang", methodSignature);
172                 test_i[0] += 1;
173                 break;
174             case "MyList":
175                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data",
176                         t.getPackageName());
177                 assertEquals(5, t.getMethodDefinitions().size());
178                 int test_j = 0;
179                 for (final MethodSignature m : t.getMethodDefinitions()) {
180                     switch (m.getName()) {
181                         case "getKey":
182                                 assertMethod(t, "getKey", "MyListKey",
183                                         "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list.wrapper",
184                                         m);
185                             test_j++;
186                             break;
187                         case "getMyListKey1":
188                             assertMethod(t, "getMyListKey1", "MyListKey1",
189                                     "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
190                                     m);
191                             test_j++;
192                             break;
193                         case "getMyListKey2":
194                             assertMethod(t, "getMyListKey2", "MyListKey2",
195                                     "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
196                                     m);
197                             test_j++;
198                             break;
199                         case "getMyListFoo":
200                             assertMethod(t, "getMyListFoo", "MyListFoo",
201                                     "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data.my_list",
202                                     m);
203                             test_j++;
204                             break;
205                         case "getMyListKey":
206                             assertMethod(t, "getMyListKey", "MyListKey",
207                                     "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
208                                     m);
209                             test_j++;
210                             break;
211                         default:
212                             fail();
213                     }
214                 }
215                 assertEquals(5, test_j);
216                 test_i[0] += 1;
217                 break;
218             default:
219                 fail();
220         }
221     }
222
223     private void assertBaseGeneratedType(final GeneratedType genType, final String name, final String packageName) {
224         assertEquals(name, genType.getName());
225
226     }
227
228     private void assertMethod(final GeneratedType definingTypeExpected, final String nameExpected,
229             final String typeNameExpected, final String typePackageNameExpected,
230             final MethodSignature methodSignature) {
231         assertEquals(definingTypeExpected, methodSignature.getDefiningType());
232         assertEquals(nameExpected, methodSignature.getName());
233         assertEquals(typeNameExpected, methodSignature.getReturnType().getName());
234         assertEquals(typePackageNameExpected, methodSignature.getReturnType().getPackageName());
235     }
236
237 }