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