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.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;
27 public class BindingGeneratorImplTest {
30 public void genTypesTypeDefTest() throws Exception {
31 final BindingGeneratorImpl bg = new BindingGeneratorImpl(false);
32 final SchemaContext schemaContext = YangParserTestUtils.parseYangResource("/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");
49 public void generatedTypesEnumTest() throws Exception {
50 final BindingGenerator bg = new BindingGeneratorImpl(false);
51 final SchemaContext context = YangParserTestUtils.parseYangResource("/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());
72 public void generatedTypesUsesEnumLeafTest() {
73 final BindingGenerator bg = new BindingGeneratorImpl(false);
74 final SchemaContext context = YangParserTestUtils.parseYangResources(BindingGeneratorImplTest.class,
75 "/uses-statement/test-uses-leaf-innertype-base.yang", "/uses-statement/test-uses-leaf-innertype.yang");
76 final List<Type> generateTypes = bg.generateTypes(context);
77 assertNotNull(generateTypes);
78 assertTrue(!generateTypes.isEmpty());
79 for (final Type type : generateTypes) {
80 if (type.getName().equals("MyCont") && type.getPackageName()
81 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype.base.rev170809.data")) {
82 final GeneratedType gt = (GeneratedType) type;
83 final MethodSignature methodSignature = gt.getMethodDefinitions().get(0);
84 assertEquals("ErrorType", methodSignature.getReturnType().getName());
87 if (type.getName().equals("MyCont") && type.getPackageName()
88 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype.rev170809.data")) {
89 final GeneratedType gt = (GeneratedType) type;
90 final MethodSignature methodSignature = gt.getMethodDefinitions().get(0);
91 assertEquals("ErrorType", methodSignature.getReturnType().getName());
97 public void generatedTypesUsesBitsLeafTest() {
98 final BindingGenerator bg = new BindingGeneratorImpl(false);
99 final SchemaContext context = YangParserTestUtils.parseYangResources(BindingGeneratorImplTest.class,
100 "/uses-statement/test-uses-leaf-innertype2-base.yang", "/uses-statement/test-uses-leaf-innertype2.yang");
101 final List<Type> generateTypes = bg.generateTypes(context);
102 assertNotNull(generateTypes);
103 assertTrue(!generateTypes.isEmpty());
104 for (final Type type : generateTypes) {
105 if (type.getName().equals("MyCont") && type.getPackageName()
106 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.base.rev170809.data")) {
107 final GeneratedType gt = (GeneratedType) type;
108 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
109 if (methodSignature.getName().equals("getLeafBits")) {
110 assertEquals("LeafBits", methodSignature.getReturnType().getName());
116 if (type.getName().equals("MyCont") && type.getPackageName()
117 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.rev170809.data")) {
118 final GeneratedType gt = (GeneratedType) type;
119 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
120 if (methodSignature.getName().equals("getLeafBits")) {
121 assertEquals("LeafBits", methodSignature.getReturnType().getName());
129 public void generatedTypesUsesUnionLeafTest() {
130 final BindingGenerator bg = new BindingGeneratorImpl(false);
131 final SchemaContext context = YangParserTestUtils.parseYangResources(BindingGeneratorImplTest.class,
132 "/uses-statement/test-uses-leaf-innertype2-base.yang", "/uses-statement/test-uses-leaf-innertype2.yang");
133 final List<Type> generateTypes = bg.generateTypes(context);
134 assertNotNull(generateTypes);
135 assertTrue(!generateTypes.isEmpty());
136 for (final Type type : generateTypes) {
137 if (type.getName().equals("MyCont") && type.getPackageName()
138 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.base.rev170809.data")) {
139 final GeneratedType gt = (GeneratedType) type;
140 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
141 if (methodSignature.getName().equals("getLeafUnion")) {
142 assertEquals("LeafUnion", methodSignature.getReturnType().getName());
148 if (type.getName().equals("MyCont") && type.getPackageName()
149 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.rev170809.data")) {
150 final GeneratedType gt = (GeneratedType) type;
151 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
152 if (methodSignature.getName().equals("getLeafUnion")) {
153 assertEquals("LeafUnion", methodSignature.getReturnType().getName());
161 public void generatedTypesUsesLeafTest() {
162 final BindingGenerator bg = new BindingGeneratorImpl(false);
163 final SchemaContext context = YangParserTestUtils.parseYangResources(BindingGeneratorImplTest.class,
164 "/uses-statement/test-uses-leaf-innertype2-base.yang", "/uses-statement/test-uses-leaf-innertype2.yang");
165 final List<Type> generateTypes = bg.generateTypes(context);
166 assertNotNull(generateTypes);
167 assertTrue(!generateTypes.isEmpty());
168 for (final Type type : generateTypes) {
169 if (type.getName().equals("MyCont") && type.getPackageName()
170 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.base.rev170809.data")) {
171 final GeneratedType gt = (GeneratedType) type;
172 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
173 if (methodSignature.getName().equals("getLeafDecimal64")) {
174 assertEquals("BigDecimal", methodSignature.getReturnType().getName());
180 if (type.getName().equals("MyCont") && type.getPackageName()
181 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.rev170809.data")) {
182 final GeneratedType gt = (GeneratedType) type;
183 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
184 if (methodSignature.getName().equals("getLeafDecimal64")) {
185 assertEquals("BigDecimal", methodSignature.getReturnType().getName());
193 public void generatedTypesUsesLeafInnertype3Test() {
194 final BindingGenerator bg = new BindingGeneratorImpl(false);
195 final SchemaContext context = YangParserTestUtils.parseYangResources(BindingGeneratorImplTest.class,
196 "/uses-statement/test-uses-leaf-innertype3-base.yang",
197 "/uses-statement/test-uses-leaf-innertype3.yang");
198 final List<Type> generateTypes = bg.generateTypes(context);
199 assertNotNull(generateTypes);
200 assertTrue(!generateTypes.isEmpty());
201 for (final Type type : generateTypes) {
202 if (type.getName().equals("MyCont") && type.getPackageName()
203 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype3.rev170809.data")) {
204 final GeneratedType gt = (GeneratedType) type;
205 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
206 if (methodSignature.getName().equals("getBandwidth")) {
207 assertEquals("Bandwidth", methodSignature.getReturnType().getName());
213 if (type.getName().equals("Open") && type.getPackageName()
214 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype3.rev170809.data")) {
215 final GeneratedType gt = (GeneratedType) type;
216 for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
217 if (methodSignature.getName().equals("getVersion")) {
218 assertEquals("ProtocolVersion", methodSignature.getReturnType().getName());
221 if (methodSignature.getName().equals("getLeafUnion")) {
222 assertEquals("LeafUnion", methodSignature.getReturnType().getName());
231 public void generatedTypesTest() {
232 final BindingGenerator bg = new BindingGeneratorImpl(false);
233 final SchemaContext context = YangParserTestUtils.parseYangResource("/generator/test-list.yang");
234 final List<Type> generateTypes = bg.generateTypes(context);
236 assertNotNull(generateTypes);
237 assertTrue(!generateTypes.isEmpty());
238 assertEquals(3, generateTypes.size());
239 final int[] test_i = { 0 };
240 for (final Type t : generateTypes) {
241 if (t instanceof GeneratedTransferObject) {
242 final GeneratedTransferObject genTransferObj = (GeneratedTransferObject) t;
243 assertBaseGeneratedType(genTransferObj, "MyListKey",
244 "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list");
245 assertEquals(3, genTransferObj.getProperties().size());
247 for (final GeneratedProperty generatedProperty : genTransferObj.getProperties()) {
248 switch (generatedProperty.getName()) {
249 case "keyReservedWord":
250 assertEquals("String", generatedProperty.getReturnType().getName());
254 assertEquals("String", generatedProperty.getReturnType().getName());
258 assertEquals("String", generatedProperty.getReturnType().getName());
265 assertEquals(3, test_j);
268 testActualType((GeneratedType) t, test_i);
271 assertEquals(3, test_i[0]);
275 public void generateTypesDescriptionsTest() {
276 final BindingGenerator bg = new BindingGeneratorImpl(true);
277 final SchemaContext context = YangParserTestUtils.parseYangResourceDirectory("/base/with_import/");
278 assertNotNull(context);
280 final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
281 assertNotNull(generateTypes);
282 assertTrue(!generateTypes.isEmpty());
284 for (final Type type : generateTypes) {
285 if (type.getName().equals("TestData")) {
286 final String description = ((GeneratedType) type).getDescription().get();
288 .contains(" import test-import { prefix \"imported-test\"; revision-date 2017-04-21; }\n\n");
289 description.contains(" revision 2017-02-06;\n\n");
290 description.contains(" typedef my-type {\n type int8;\n }");
291 description.contains(" container *my-cont {\n }\n");
297 public void generateTypesIdentityTest() throws Exception {
298 final BindingGenerator bg = new BindingGeneratorImpl(true);
299 final SchemaContext context = YangParserTestUtils.parseYangResourceDirectory("/identity/");
300 assertNotNull(context);
302 final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
303 assertNotNull(generateTypes);
304 assertTrue(!generateTypes.isEmpty());
305 for (final Type type : generateTypes) {
306 if (type.getFullyQualifiedName()
307 .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1")) {
308 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
309 assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2",
310 genTO.getSuperType().getFullyQualifiedName());
313 if (type.getFullyQualifiedName()
314 .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2")) {
315 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
316 assertEquals("org.opendaylight.mdsal.gen.javav2.identity.import_.rev170602.ident.Iden1",
317 genTO.getSuperType().getFullyQualifiedName());
320 if (type.getFullyQualifiedName()
321 .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden3")) {
322 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
323 assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1",
324 genTO.getSuperType().getFullyQualifiedName());
330 private void testActualType(final GeneratedType t, final int[] test_i) {
331 MethodSignature methodSignature = null;
332 switch (t.getName()) {
334 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314",
336 methodSignature = t.getMethodDefinitions().get(0);
337 assertMethod(t, "getMyList", "List", "java.util", methodSignature);
341 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
343 methodSignature = t.getMethodDefinitions().get(0);
344 assertMethod(t, "getKey", "String", "java.lang", methodSignature);
348 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
350 methodSignature = t.getMethodDefinitions().get(0);
351 assertMethod(t, "getKey1", "String", "java.lang", methodSignature);
355 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
357 methodSignature = t.getMethodDefinitions().get(0);
358 assertMethod(t, "getKey2", "String", "java.lang", methodSignature);
362 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data.my_list",
364 methodSignature = t.getMethodDefinitions().get(0);
365 assertMethod(t, "getFoo", "String", "java.lang", methodSignature);
369 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data",
371 assertEquals(5, t.getMethodDefinitions().size());
373 for (final MethodSignature m : t.getMethodDefinitions()) {
374 switch (m.getName()) {
375 case "getIdentifier":
376 assertMethod(t, "getIdentifier", "MyListKey",
377 "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
382 assertMethod(t, "getKey1", "String","java.lang", m);
386 assertMethod(t, "getKey2", "String","java.lang", m);
390 assertMethod(t, "getFoo", "String","java.lang", m);
393 case "getKeyReservedWord":
394 assertMethod(t, "getKeyReservedWord", "String","java.lang", m);
401 assertEquals(5, test_j);
409 private void assertBaseGeneratedType(final GeneratedType genType, final String name, final String packageName) {
410 assertEquals(name, genType.getName());
414 private void assertMethod(final GeneratedType definingTypeExpected, final String nameExpected,
415 final String typeNameExpected, final String typePackageNameExpected,
416 final MethodSignature methodSignature) {
417 assertEquals(definingTypeExpected, methodSignature.getDefiningType());
418 assertEquals(nameExpected, methodSignature.getName());
419 assertEquals(typeNameExpected, methodSignature.getReturnType().getName());
420 assertEquals(typePackageNameExpected, methodSignature.getReturnType().getPackageName());