Binding generator v2 - uses statement - uses of list
[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.mdsal.binding.javav2.model.api.type.builder.GeneratedTOBuilder;
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 generatedTypesTest() throws Exception {
74         final BindingGenerator bg = new BindingGeneratorImpl(false);
75         final SchemaContext context = YangParserTestUtils.parseYangSource("/generator/test-list.yang");
76         final List<Type> generateTypes = bg.generateTypes(context);
77
78         assertNotNull(generateTypes);
79         assertTrue(!generateTypes.isEmpty());
80         assertEquals(3, generateTypes.size());
81         final int[] test_i = { 0 };
82         for (final Type t : generateTypes) {
83             if (t instanceof GeneratedTransferObject) {
84                 final GeneratedTransferObject genTransferObj = (GeneratedTransferObject) t;
85                 assertBaseGeneratedType(genTransferObj, "MyListKey",
86                         "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list");
87                 assertEquals(3, genTransferObj.getProperties().size());
88                 int test_j = 0;
89                 for (final GeneratedProperty generatedProperty : genTransferObj.getProperties()) {
90                     switch (generatedProperty.getName()) {
91                         case "keyReservedWord":
92                             assertEquals("String", generatedProperty.getReturnType().getName());
93                             test_j++;
94                             break;
95                         case "key1":
96                             assertEquals("String", generatedProperty.getReturnType().getName());
97                             test_j++;
98                             break;
99                         case "key2":
100                             assertEquals("String", generatedProperty.getReturnType().getName());
101                             test_j++;
102                             break;
103                         default:
104                             fail();
105                     }
106                 }
107                 assertEquals(3, test_j);
108                 test_i[0] += 1;
109             } else {
110                 testActualType((GeneratedType) t, test_i);
111             }
112         }
113         assertEquals(3, test_i[0]);
114     }
115
116     @Test
117     public void generateTypesDescriptionsTest() throws Exception {
118         final BindingGenerator bg = new BindingGeneratorImpl(true);
119         final SchemaContext context = YangParserTestUtils.parseYangSources("/base/with_import/");
120         assertNotNull(context);
121
122         final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
123         assertNotNull(generateTypes);
124         assertTrue(!generateTypes.isEmpty());
125
126         for (final Type type : generateTypes) {
127             if (type.getName().equals("TestData")) {
128                 final String description = ((GeneratedType) type).getDescription().get();
129                 description
130                         .contains("    import test-import { prefix \"imported-test\"; revision-date 2017-04-21; }\n\n");
131                 description.contains("    revision 2017-02-06;\n\n");
132                 description.contains("    typedef my-type {\n        type int8;\n    }");
133                 description.contains("    container *my-cont {\n    }\n");
134             }
135         }
136     }
137
138     @Test
139     public void generateTypesIdentityTest() throws Exception {
140         final BindingGenerator bg = new BindingGeneratorImpl(true);
141         final SchemaContext context = YangParserTestUtils.parseYangSources("/identity/");
142         assertNotNull(context);
143
144         final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
145         assertNotNull(generateTypes);
146         assertTrue(!generateTypes.isEmpty());
147         for (final Type type : generateTypes) {
148             if (type.getFullyQualifiedName()
149                     .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1")) {
150                 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
151                 assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2",
152                         genTO.getSuperType().getFullyQualifiedName());
153
154             }
155             if (type.getFullyQualifiedName()
156                     .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2")) {
157                 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
158                 assertEquals("org.opendaylight.mdsal.gen.javav2.identity.import_.rev170602.ident.Iden1",
159                         genTO.getSuperType().getFullyQualifiedName());
160
161             }
162             if (type.getFullyQualifiedName()
163                     .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden3")) {
164                 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
165                 assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1",
166                         genTO.getSuperType().getFullyQualifiedName());
167
168             }
169         }
170     }
171
172     private void testActualType(final GeneratedType t, final int[] test_i) {
173         MethodSignature methodSignature = null;
174         switch (t.getName()) {
175             case "TestListData":
176                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314",
177                         t.getPackageName());
178                 methodSignature = t.getMethodDefinitions().get(0);
179                 assertMethod(t, "getMyList", "List", "java.util", methodSignature);
180                 test_i[0] += 1;
181                 break;
182             case "MyListKey":
183                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
184                         t.getPackageName());
185                 methodSignature = t.getMethodDefinitions().get(0);
186                 assertMethod(t, "getKey", "String", "java.lang", methodSignature);
187                 test_i[0] += 1;
188                 break;
189             case "MyListKey1":
190                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
191                         t.getPackageName());
192                 methodSignature = t.getMethodDefinitions().get(0);
193                 assertMethod(t, "getKey1", "String", "java.lang", methodSignature);
194                 test_i[0] += 1;
195                 break;
196             case "MyListKey2":
197                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
198                         t.getPackageName());
199                 methodSignature = t.getMethodDefinitions().get(0);
200                 assertMethod(t, "getKey2", "String", "java.lang", methodSignature);
201                 test_i[0] += 1;
202                 break;
203             case "MyListFoo":
204                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data.my_list",
205                         t.getPackageName());
206                 methodSignature = t.getMethodDefinitions().get(0);
207                 assertMethod(t, "getFoo", "String", "java.lang", methodSignature);
208                 test_i[0] += 1;
209                 break;
210             case "MyList":
211                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data",
212                         t.getPackageName());
213                 assertEquals(5, t.getMethodDefinitions().size());
214                 int test_j = 0;
215                 for (final MethodSignature m : t.getMethodDefinitions()) {
216                     switch (m.getName()) {
217                         case "getKey":
218                                 assertMethod(t, "getKey", "MyListKey",
219                                         "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
220                                         m);
221                             test_j++;
222                             break;
223                         case "getKey1":
224                             assertMethod(t, "getKey1", "String","java.lang", m);
225                             test_j++;
226                             break;
227                         case "getKey2":
228                             assertMethod(t, "getKey2", "String","java.lang", m);
229                             test_j++;
230                             break;
231                         case "getFoo":
232                             assertMethod(t, "getFoo", "String","java.lang", m);
233                             test_j++;
234                             break;
235                         case "getKeyReservedWord":
236                             assertMethod(t, "getKeyReservedWord", "String","java.lang", m);
237                             test_j++;
238                             break;
239                         default:
240                             fail();
241                     }
242                 }
243                 assertEquals(5, test_j);
244                 test_i[0] += 1;
245                 break;
246             default:
247                 fail();
248         }
249     }
250
251     private void assertBaseGeneratedType(final GeneratedType genType, final String name, final String packageName) {
252         assertEquals(name, genType.getName());
253
254     }
255
256     private void assertMethod(final GeneratedType definingTypeExpected, final String nameExpected,
257             final String typeNameExpected, final String typePackageNameExpected,
258             final MethodSignature methodSignature) {
259         assertEquals(definingTypeExpected, methodSignature.getDefiningType());
260         assertEquals(nameExpected, methodSignature.getName());
261         assertEquals(typeNameExpected, methodSignature.getReturnType().getName());
262         assertEquals(typePackageNameExpected, methodSignature.getReturnType().getPackageName());
263     }
264
265 }