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