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