Bug 1411 #4 BindingGeneratorImpl decomposition - Lists
[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.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 generatedTypesTest() throws Exception {
30         final BindingGenerator bg = new BindingGeneratorImpl(false);
31         final SchemaContext context = YangParserTestUtils.parseYangSource("/generator/test-list.yang");
32         final List<Type> generateTypes = bg.generateTypes(context);
33
34         assertNotNull(generateTypes);
35         assertTrue(!generateTypes.isEmpty());
36         assertEquals(7, generateTypes.size());
37         final int[] test_i = { 0 };
38         for (final Type t : generateTypes) {
39             if (t instanceof GeneratedTransferObject) {
40                 final GeneratedTransferObject genTransferObj = (GeneratedTransferObject) t;
41                 assertBaseGeneratedType(genTransferObj, "MyListKey",
42                         "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list.wrapper");
43                 assertEquals(3, genTransferObj.getProperties().size());
44                 int test_j = 0;
45                 for (final GeneratedProperty generatedProperty : genTransferObj.getProperties()) {
46                     switch (generatedProperty.getName()) {
47                         case "key":
48                             assertEquals("MyListKey", generatedProperty.getReturnType().getName());
49                             test_j++;
50                             break;
51                         case "key1":
52                             assertEquals("MyListKey1", generatedProperty.getReturnType().getName());
53                             test_j++;
54                             break;
55                         case "key2":
56                             assertEquals("MyListKey2", generatedProperty.getReturnType().getName());
57                             test_j++;
58                             break;
59                         default:
60                             fail();
61                     }
62                 }
63                 assertEquals(3, test_j);
64                 test_i[0] += 1;
65             } else {
66                 testActualType((GeneratedType) t, test_i);
67             }
68         }
69         assertEquals(7, test_i[0]);
70     }
71
72     private void testActualType(final GeneratedType t, final int[] test_i) {
73         MethodSignature methodSignature = null;
74         switch (t.getName()) {
75             case "TestListData":
76                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314",
77                         t.getPackageName());
78                 methodSignature = t.getMethodDefinitions().get(0);
79                 assertMethod(t, "getMyList", "List", "java.util", methodSignature);
80                 test_i[0] += 1;
81                 break;
82             case "MyListKey":
83                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
84                         t.getPackageName());
85                 methodSignature = t.getMethodDefinitions().get(0);
86                 assertMethod(t, "getKey", "String", "java.lang", methodSignature);
87                 test_i[0] += 1;
88                 break;
89             case "MyListKey1":
90                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
91                         t.getPackageName());
92                 methodSignature = t.getMethodDefinitions().get(0);
93                 assertMethod(t, "getKey1", "String", "java.lang", methodSignature);
94                 test_i[0] += 1;
95                 break;
96             case "MyListKey2":
97                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
98                         t.getPackageName());
99                 methodSignature = t.getMethodDefinitions().get(0);
100                 assertMethod(t, "getKey2", "String", "java.lang", methodSignature);
101                 test_i[0] += 1;
102                 break;
103             case "MyListFoo":
104                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data.my_list",
105                         t.getPackageName());
106                 methodSignature = t.getMethodDefinitions().get(0);
107                 assertMethod(t, "getFoo", "String", "java.lang", methodSignature);
108                 test_i[0] += 1;
109                 break;
110             case "MyList":
111                 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data",
112                         t.getPackageName());
113                 assertEquals(5, t.getMethodDefinitions().size());
114                 int test_j = 0;
115                 for (final MethodSignature m : t.getMethodDefinitions()) {
116                     switch (m.getName()) {
117                         case "getKey":
118                                 assertMethod(t, "getKey", "MyListKey",
119                                         "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list.wrapper",
120                                         m);
121                             test_j++;
122                             break;
123                         case "getMyListKey1":
124                             assertMethod(t, "getMyListKey1", "MyListKey1",
125                                     "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
126                                     m);
127                             test_j++;
128                             break;
129                         case "getMyListKey2":
130                             assertMethod(t, "getMyListKey2", "MyListKey2",
131                                     "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
132                                     m);
133                             test_j++;
134                             break;
135                         case "getMyListFoo":
136                             assertMethod(t, "getMyListFoo", "MyListFoo",
137                                     "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data.my_list",
138                                     m);
139                             test_j++;
140                             break;
141                         case "getMyListKey":
142                             assertMethod(t, "getMyListKey", "MyListKey",
143                                     "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
144                                     m);
145                             test_j++;
146                             break;
147                         default:
148                             fail();
149                     }
150                 }
151                 assertEquals(5, test_j);
152                 test_i[0] += 1;
153                 break;
154             default:
155                 fail();
156         }
157     }
158
159     private void assertBaseGeneratedType(final GeneratedType genType, final String name, final String packageName) {
160         assertEquals(name, genType.getName());
161
162     }
163
164     private void assertMethod(final GeneratedType definingTypeExpected, final String nameExpected,
165             final String typeNameExpected, final String typePackageNameExpected,
166             final MethodSignature methodSignature) {
167         assertEquals(definingTypeExpected, methodSignature.getDefiningType());
168         assertEquals(nameExpected, methodSignature.getName());
169         assertEquals(typeNameExpected, methodSignature.getReturnType().getName());
170         assertEquals(typePackageNameExpected, methodSignature.getReturnType().getPackageName());
171     }
172
173 }