2 * Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.mdsal.binding.javav2.generator.impl;
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;
15 import java.util.ArrayList;
16 import java.util.List;
17 import org.junit.Test;
18 import org.opendaylight.mdsal.binding.javav2.generator.api.BindingGenerator;
19 import org.opendaylight.mdsal.binding.javav2.model.api.Enumeration;
20 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedProperty;
21 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTransferObject;
22 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType;
23 import org.opendaylight.mdsal.binding.javav2.model.api.MethodSignature;
24 import org.opendaylight.mdsal.binding.javav2.model.api.Type;
25 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
26 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
28 public class BindingGeneratorImplTest {
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");
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());
73 public void generatedTypesUsesEnumLeafTest() throws Exception {
74 final BindingGenerator bg = new BindingGeneratorImpl(false);
75 final List<String> sources = new ArrayList<>();
76 sources.add("/uses-statement/test-uses-leaf-innertype-base.yang");
77 sources.add("/uses-statement/test-uses-leaf-innertype.yang");
78 final SchemaContext context = YangParserTestUtils.parseYangSources(sources);
79 final List<Type> generateTypes = bg.generateTypes(context);
80 assertNotNull(generateTypes);
81 assertTrue(!generateTypes.isEmpty());
82 for (final Type type : generateTypes) {
83 if (type.getName().equals("MyCont") && type.getPackageName()
84 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype.base.rev170809.data")) {
85 final GeneratedType gt = (GeneratedType) type;
86 final MethodSignature methodSignature = gt.getMethodDefinitions().get(0);
87 assertEquals("ErrorType", methodSignature.getReturnType().getName());
90 if (type.getName().equals("MyCont") && type.getPackageName()
91 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype.rev170809.data")) {
92 final GeneratedType gt = (GeneratedType) type;
93 final MethodSignature methodSignature = gt.getMethodDefinitions().get(0);
94 assertEquals("ErrorType", methodSignature.getReturnType().getName());
100 public void generatedTypesUsesBitsLeafTest() throws Exception {
101 final BindingGenerator bg = new BindingGeneratorImpl(false);
102 final List<String> sources = new ArrayList<>();
103 sources.add("/uses-statement/test-uses-leaf-innertype2-base.yang");
104 sources.add("/uses-statement/test-uses-leaf-innertype2.yang");
105 final SchemaContext context = YangParserTestUtils.parseYangSources(sources);
106 final List<Type> generateTypes = bg.generateTypes(context);
107 assertNotNull(generateTypes);
108 assertTrue(!generateTypes.isEmpty());
109 for (final Type type : generateTypes) {
110 if (type.getName().equals("MyCont") && type.getPackageName()
111 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.base.rev170809.data")) {
112 final GeneratedType gt = (GeneratedType) type;
113 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
114 if (methodSignature.getName().equals("getLeafBits")) {
115 assertEquals("LeafBits", methodSignature.getReturnType().getName());
121 if (type.getName().equals("MyCont") && type.getPackageName()
122 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.rev170809.data")) {
123 final GeneratedType gt = (GeneratedType) type;
124 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
125 if (methodSignature.getName().equals("getLeafBits")) {
126 assertEquals("LeafBits", methodSignature.getReturnType().getName());
134 public void generatedTypesUsesUnionLeafTest() throws Exception {
135 final BindingGenerator bg = new BindingGeneratorImpl(false);
136 final List<String> sources = new ArrayList<>();
137 sources.add("/uses-statement/test-uses-leaf-innertype2-base.yang");
138 sources.add("/uses-statement/test-uses-leaf-innertype2.yang");
139 final SchemaContext context = YangParserTestUtils.parseYangSources(sources);
140 final List<Type> generateTypes = bg.generateTypes(context);
141 assertNotNull(generateTypes);
142 assertTrue(!generateTypes.isEmpty());
143 for (final Type type : generateTypes) {
144 if (type.getName().equals("MyCont") && type.getPackageName()
145 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.base.rev170809.data")) {
146 final GeneratedType gt = (GeneratedType) type;
147 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
148 if (methodSignature.getName().equals("getLeafUnion")) {
149 assertEquals("LeafUnion", methodSignature.getReturnType().getName());
155 if (type.getName().equals("MyCont") && type.getPackageName()
156 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.rev170809.data")) {
157 final GeneratedType gt = (GeneratedType) type;
158 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
159 if (methodSignature.getName().equals("getLeafUnion")) {
160 assertEquals("LeafUnion", methodSignature.getReturnType().getName());
168 public void generatedTypesUsesLeafTest() throws Exception {
169 final BindingGenerator bg = new BindingGeneratorImpl(false);
170 final List<String> sources = new ArrayList<>();
171 sources.add("/uses-statement/test-uses-leaf-innertype2-base.yang");
172 sources.add("/uses-statement/test-uses-leaf-innertype2.yang");
173 final SchemaContext context = YangParserTestUtils.parseYangSources(sources);
174 final List<Type> generateTypes = bg.generateTypes(context);
175 assertNotNull(generateTypes);
176 assertTrue(!generateTypes.isEmpty());
177 for (final Type type : generateTypes) {
178 if (type.getName().equals("MyCont") && type.getPackageName()
179 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.base.rev170809.data")) {
180 final GeneratedType gt = (GeneratedType) type;
181 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
182 if (methodSignature.getName().equals("getLeafDecimal64")) {
183 assertEquals("BigDecimal", methodSignature.getReturnType().getName());
189 if (type.getName().equals("MyCont") && type.getPackageName()
190 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.rev170809.data")) {
191 final GeneratedType gt = (GeneratedType) type;
192 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
193 if (methodSignature.getName().equals("getLeafDecimal64")) {
194 assertEquals("BigDecimal", methodSignature.getReturnType().getName());
202 public void generatedTypesUsesLeafInnertype3Test() throws Exception {
203 final BindingGenerator bg = new BindingGeneratorImpl(false);
204 final List<String> sources = new ArrayList<>();
205 sources.add("/uses-statement/test-uses-leaf-innertype3-base.yang");
206 sources.add("/uses-statement/test-uses-leaf-innertype3.yang");
207 final SchemaContext context = YangParserTestUtils.parseYangSources(sources);
208 final List<Type> generateTypes = bg.generateTypes(context);
209 assertNotNull(generateTypes);
210 assertTrue(!generateTypes.isEmpty());
211 for (final Type type : generateTypes) {
212 if (type.getName().equals("MyCont") && type.getPackageName()
213 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype3.rev170809.data")) {
214 final GeneratedType gt = (GeneratedType) type;
215 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
216 if (methodSignature.getName().equals("getBandwidth")) {
217 assertEquals("Bandwidth", methodSignature.getReturnType().getName());
223 if (type.getName().equals("Open") && type.getPackageName()
224 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype3.rev170809.data")) {
225 final GeneratedType gt = (GeneratedType) type;
226 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
227 if (methodSignature.getName().equals("getVersion")) {
228 assertEquals("ProtocolVersion", methodSignature.getReturnType().getName());
231 if (methodSignature.getName().equals("getLeafUnion")) {
232 assertEquals("LeafUnion", methodSignature.getReturnType().getName());
241 public void generatedTypesTest() throws Exception {
242 final BindingGenerator bg = new BindingGeneratorImpl(false);
243 final SchemaContext context = YangParserTestUtils.parseYangSource("/generator/test-list.yang");
244 final List<Type> generateTypes = bg.generateTypes(context);
246 assertNotNull(generateTypes);
247 assertTrue(!generateTypes.isEmpty());
248 assertEquals(3, generateTypes.size());
249 final int[] test_i = { 0 };
250 for (final Type t : generateTypes) {
251 if (t instanceof GeneratedTransferObject) {
252 final GeneratedTransferObject genTransferObj = (GeneratedTransferObject) t;
253 assertBaseGeneratedType(genTransferObj, "MyListKey",
254 "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list");
255 assertEquals(3, genTransferObj.getProperties().size());
257 for (final GeneratedProperty generatedProperty : genTransferObj.getProperties()) {
258 switch (generatedProperty.getName()) {
259 case "keyReservedWord":
260 assertEquals("String", generatedProperty.getReturnType().getName());
264 assertEquals("String", generatedProperty.getReturnType().getName());
268 assertEquals("String", generatedProperty.getReturnType().getName());
275 assertEquals(3, test_j);
278 testActualType((GeneratedType) t, test_i);
281 assertEquals(3, test_i[0]);
285 public void generateTypesDescriptionsTest() throws Exception {
286 final BindingGenerator bg = new BindingGeneratorImpl(true);
287 final SchemaContext context = YangParserTestUtils.parseYangSources("/base/with_import/");
288 assertNotNull(context);
290 final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
291 assertNotNull(generateTypes);
292 assertTrue(!generateTypes.isEmpty());
294 for (final Type type : generateTypes) {
295 if (type.getName().equals("TestData")) {
296 final String description = ((GeneratedType) type).getDescription().get();
298 .contains(" import test-import { prefix \"imported-test\"; revision-date 2017-04-21; }\n\n");
299 description.contains(" revision 2017-02-06;\n\n");
300 description.contains(" typedef my-type {\n type int8;\n }");
301 description.contains(" container *my-cont {\n }\n");
307 public void generateTypesIdentityTest() throws Exception {
308 final BindingGenerator bg = new BindingGeneratorImpl(true);
309 final SchemaContext context = YangParserTestUtils.parseYangSources("/identity/");
310 assertNotNull(context);
312 final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
313 assertNotNull(generateTypes);
314 assertTrue(!generateTypes.isEmpty());
315 for (final Type type : generateTypes) {
316 if (type.getFullyQualifiedName()
317 .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1")) {
318 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
319 assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2",
320 genTO.getSuperType().getFullyQualifiedName());
323 if (type.getFullyQualifiedName()
324 .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2")) {
325 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
326 assertEquals("org.opendaylight.mdsal.gen.javav2.identity.import_.rev170602.ident.Iden1",
327 genTO.getSuperType().getFullyQualifiedName());
330 if (type.getFullyQualifiedName()
331 .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden3")) {
332 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
333 assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1",
334 genTO.getSuperType().getFullyQualifiedName());
340 private void testActualType(final GeneratedType t, final int[] test_i) {
341 MethodSignature methodSignature = null;
342 switch (t.getName()) {
344 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314",
346 methodSignature = t.getMethodDefinitions().get(0);
347 assertMethod(t, "getMyList", "List", "java.util", methodSignature);
351 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
353 methodSignature = t.getMethodDefinitions().get(0);
354 assertMethod(t, "getKey", "String", "java.lang", methodSignature);
358 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
360 methodSignature = t.getMethodDefinitions().get(0);
361 assertMethod(t, "getKey1", "String", "java.lang", methodSignature);
365 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
367 methodSignature = t.getMethodDefinitions().get(0);
368 assertMethod(t, "getKey2", "String", "java.lang", methodSignature);
372 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data.my_list",
374 methodSignature = t.getMethodDefinitions().get(0);
375 assertMethod(t, "getFoo", "String", "java.lang", methodSignature);
379 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data",
381 assertEquals(5, t.getMethodDefinitions().size());
383 for (final MethodSignature m : t.getMethodDefinitions()) {
384 switch (m.getName()) {
385 case "getIdentifier":
386 assertMethod(t, "getIdentifier", "MyListKey",
387 "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
392 assertMethod(t, "getKey1", "String","java.lang", m);
396 assertMethod(t, "getKey2", "String","java.lang", m);
400 assertMethod(t, "getFoo", "String","java.lang", m);
403 case "getKeyReservedWord":
404 assertMethod(t, "getKeyReservedWord", "String","java.lang", m);
411 assertEquals(5, test_j);
419 private void assertBaseGeneratedType(final GeneratedType genType, final String name, final String packageName) {
420 assertEquals(name, genType.getName());
424 private void assertMethod(final GeneratedType definingTypeExpected, final String nameExpected,
425 final String typeNameExpected, final String typePackageNameExpected,
426 final MethodSignature methodSignature) {
427 assertEquals(definingTypeExpected, methodSignature.getDefiningType());
428 assertEquals(nameExpected, methodSignature.getName());
429 assertEquals(typeNameExpected, methodSignature.getReturnType().getName());
430 assertEquals(typePackageNameExpected, methodSignature.getReturnType().getPackageName());