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;
16 import java.net.URISyntaxException;
17 import java.util.ArrayList;
18 import java.util.List;
19 import org.junit.Test;
20 import org.opendaylight.mdsal.binding.javav2.generator.api.BindingGenerator;
21 import org.opendaylight.mdsal.binding.javav2.model.api.Enumeration;
22 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedProperty;
23 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTransferObject;
24 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType;
25 import org.opendaylight.mdsal.binding.javav2.model.api.MethodSignature;
26 import org.opendaylight.mdsal.binding.javav2.model.api.Type;
27 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
28 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
30 public class BindingGeneratorImplTest {
33 public void genTypesTypeDefTest() throws Exception {
34 final BindingGeneratorImpl bg = new BindingGeneratorImpl(false);
35 final SchemaContext schemaContext = YangParserTestUtils
36 .parseYangFiles(new File(getClass().getResource("/generator/test-typedef.yang").toURI()));
37 final List<Type> generateTypes = bg.generateTypes(schemaContext);
38 assertNotNull(generateTypes);
39 for (final Type genType : generateTypes) {
40 if (genType.getName().equals("MyInnerCont") && genType.getPackageName()
41 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.rev170206.data.asteriskmy_cont")) {
42 final GeneratedType gt = (GeneratedType) genType;
43 for (final MethodSignature methodSignature : gt.getMethodDefinitions()) {
44 if (methodSignature.getName().equals("getMyLeaf2")) {
45 assertEquals(methodSignature.getReturnType().getName(), "MyType");
53 public void generatedTypesEnumTest() throws Exception {
54 final BindingGenerator bg = new BindingGeneratorImpl(false);
55 final SchemaContext context = YangParserTestUtils
56 .parseYangFiles(new File(getClass().getResource("/generator/apple-test.yang").toURI()));
57 final List<Type> generateTypes = bg.generateTypes(context);
58 assertNotNull(generateTypes);
59 assertTrue(!generateTypes.isEmpty());
60 for (final Type type : generateTypes) {
61 if (type.getName().equals("Apple") && type.getPackageName()
62 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.apple.rev170503.data")) {
63 final GeneratedType gt = (GeneratedType) type;
64 final Enumeration enumeration = gt.getEnumerations().get(0);
65 assertEquals("Apple1", enumeration.getName());
66 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.apple.rev170503.data.Apple",
67 enumeration.getPackageName());
68 assertEquals("apple", enumeration.getValues().get(0).getName());
69 assertEquals("APPLE", enumeration.getValues().get(0).getMappedName());
70 assertEquals("apple1", enumeration.getValues().get(1).getName());
71 assertEquals("APPLE1", enumeration.getValues().get(1).getMappedName());
77 public void generatedTypesUsesEnumLeafTest() throws Exception {
78 final BindingGenerator bg = new BindingGeneratorImpl(false);
79 final List<File> sources = new ArrayList<>();
80 sources.add(new File(getClass().getResource("/uses-statement/test-uses-leaf-innertype-base.yang").toURI()));
81 sources.add(new File(getClass().getResource("/uses-statement/test-uses-leaf-innertype.yang").toURI()));
82 final SchemaContext context = YangParserTestUtils.parseYangFiles(sources);
83 final List<Type> generateTypes = bg.generateTypes(context);
84 assertNotNull(generateTypes);
85 assertTrue(!generateTypes.isEmpty());
86 for (final Type type : generateTypes) {
87 if (type.getName().equals("MyCont") && type.getPackageName()
88 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype.base.rev170809.data")) {
89 final GeneratedType gt = (GeneratedType) type;
90 final MethodSignature methodSignature = gt.getMethodDefinitions().get(0);
91 assertEquals("ErrorType", methodSignature.getReturnType().getName());
94 if (type.getName().equals("MyCont") && type.getPackageName()
95 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype.rev170809.data")) {
96 final GeneratedType gt = (GeneratedType) type;
97 final MethodSignature methodSignature = gt.getMethodDefinitions().get(0);
98 assertEquals("ErrorType", methodSignature.getReturnType().getName());
104 public void generatedTypesUsesBitsLeafTest() throws Exception {
105 final BindingGenerator bg = new BindingGeneratorImpl(false);
106 final List<File> sources = new ArrayList<>();
107 sources.add(new File(getClass().getResource("/uses-statement/test-uses-leaf-innertype2-base.yang").toURI()));
108 sources.add(new File(getClass().getResource("/uses-statement/test-uses-leaf-innertype2.yang").toURI()));
109 final SchemaContext context = YangParserTestUtils.parseYangFiles(sources);
110 final List<Type> generateTypes = bg.generateTypes(context);
111 assertNotNull(generateTypes);
112 assertTrue(!generateTypes.isEmpty());
113 for (final Type type : generateTypes) {
114 if (type.getName().equals("MyCont") && type.getPackageName()
115 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.base.rev170809.data")) {
116 final GeneratedType gt = (GeneratedType) type;
117 for (final MethodSignature methodSignature : gt.getMethodDefinitions()) {
118 if (methodSignature.getName().equals("getLeafBits")) {
119 assertEquals("LeafBits", methodSignature.getReturnType().getName());
125 if (type.getName().equals("MyCont") && type.getPackageName()
126 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.rev170809.data")) {
127 final GeneratedType gt = (GeneratedType) type;
128 for (final MethodSignature methodSignature : gt.getMethodDefinitions()) {
129 if (methodSignature.getName().equals("getLeafBits")) {
130 assertEquals("LeafBits", methodSignature.getReturnType().getName());
138 public void generatedTypesUsesUnionLeafTest() throws Exception {
139 final BindingGenerator bg = new BindingGeneratorImpl(false);
140 final List<File> sources = new ArrayList<>();
141 sources.add(new File(getClass().getResource("/uses-statement/test-uses-leaf-innertype2-base.yang").toURI()));
142 sources.add(new File(getClass().getResource("/uses-statement/test-uses-leaf-innertype2.yang").toURI()));
143 final SchemaContext context = YangParserTestUtils.parseYangFiles(sources);
144 final List<Type> generateTypes = bg.generateTypes(context);
145 assertNotNull(generateTypes);
146 assertTrue(!generateTypes.isEmpty());
147 for (final Type type : generateTypes) {
148 if (type.getName().equals("MyCont") && type.getPackageName()
149 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.base.rev170809.data")) {
150 final GeneratedType gt = (GeneratedType) type;
151 for (final MethodSignature methodSignature : gt.getMethodDefinitions()) {
152 if (methodSignature.getName().equals("getLeafUnion")) {
153 assertEquals("LeafUnion", methodSignature.getReturnType().getName());
159 if (type.getName().equals("MyCont") && type.getPackageName()
160 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.rev170809.data")) {
161 final GeneratedType gt = (GeneratedType) type;
162 for (final MethodSignature methodSignature : gt.getMethodDefinitions()) {
163 if (methodSignature.getName().equals("getLeafUnion")) {
164 assertEquals("LeafUnion", methodSignature.getReturnType().getName());
172 public void generatedTypesUsesLeafTest() throws Exception {
173 final BindingGenerator bg = new BindingGeneratorImpl(false);
174 final List<File> sources = new ArrayList<>();
175 sources.add(new File(getClass().getResource("/uses-statement/test-uses-leaf-innertype2-base.yang").toURI()));
176 sources.add(new File(getClass().getResource("/uses-statement/test-uses-leaf-innertype2.yang").toURI()));
177 final SchemaContext context = YangParserTestUtils.parseYangFiles(sources);
178 final List<Type> generateTypes = bg.generateTypes(context);
179 assertNotNull(generateTypes);
180 assertTrue(!generateTypes.isEmpty());
181 for (final Type type : generateTypes) {
182 if (type.getName().equals("MyCont") && type.getPackageName()
183 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.base.rev170809.data")) {
184 final GeneratedType gt = (GeneratedType) type;
185 for (final MethodSignature methodSignature : gt.getMethodDefinitions()) {
186 if (methodSignature.getName().equals("getLeafDecimal64")) {
187 assertEquals("BigDecimal", methodSignature.getReturnType().getName());
193 if (type.getName().equals("MyCont") && type.getPackageName()
194 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype2.rev170809.data")) {
195 final GeneratedType gt = (GeneratedType) type;
196 for (final MethodSignature methodSignature : gt.getMethodDefinitions()) {
197 if (methodSignature.getName().equals("getLeafDecimal64")) {
198 assertEquals("BigDecimal", methodSignature.getReturnType().getName());
206 public void generatedTypesUsesLeafInnertype3Test() throws Exception {
207 final BindingGenerator bg = new BindingGeneratorImpl(false);
208 final List<File> sources = new ArrayList<>();
209 sources.add(new File(getClass().getResource("/uses-statement/test-uses-leaf-innertype3-base.yang").toURI()));
210 sources.add(new File(getClass().getResource("/uses-statement/test-uses-leaf-innertype3.yang").toURI()));
211 final SchemaContext context = YangParserTestUtils.parseYangFiles(sources);
212 final List<Type> generateTypes = bg.generateTypes(context);
213 assertNotNull(generateTypes);
214 assertTrue(!generateTypes.isEmpty());
215 for (final Type type : generateTypes) {
216 if (type.getName().equals("MyCont") && type.getPackageName()
217 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype3.rev170809.data")) {
218 final GeneratedType gt = (GeneratedType) type;
219 for (final MethodSignature methodSignature : gt.getMethodDefinitions()) {
220 if (methodSignature.getName().equals("getBandwidth")) {
221 assertEquals("Bandwidth", methodSignature.getReturnType().getName());
227 if (type.getName().equals("Open") && type.getPackageName()
228 .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype3.rev170809.data")) {
229 final GeneratedType gt = (GeneratedType) type;
230 for (final MethodSignature methodSignature : gt.getMethodDefinitions()) {
231 if (methodSignature.getName().equals("getVersion")) {
232 assertEquals("ProtocolVersion", methodSignature.getReturnType().getName());
235 if (methodSignature.getName().equals("getLeafUnion")) {
236 assertEquals("LeafUnion", methodSignature.getReturnType().getName());
245 public void generatedTypesTest() throws Exception {
246 final BindingGenerator bg = new BindingGeneratorImpl(false);
247 final SchemaContext context = YangParserTestUtils
248 .parseYangFiles(new File(getClass().getResource("/generator/test-list.yang").toURI()));
249 final List<Type> generateTypes = bg.generateTypes(context);
251 assertNotNull(generateTypes);
252 assertTrue(!generateTypes.isEmpty());
253 assertEquals(3, generateTypes.size());
254 final int[] test_i = { 0 };
255 for (final Type t : generateTypes) {
256 if (t instanceof GeneratedTransferObject) {
257 final GeneratedTransferObject genTransferObj = (GeneratedTransferObject) t;
258 assertBaseGeneratedType(genTransferObj, "MyListKey",
259 "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list");
260 assertEquals(3, genTransferObj.getProperties().size());
262 for (final GeneratedProperty generatedProperty : genTransferObj.getProperties()) {
263 switch (generatedProperty.getName()) {
264 case "keyReservedWord":
265 assertEquals("String", generatedProperty.getReturnType().getName());
269 assertEquals("String", generatedProperty.getReturnType().getName());
273 assertEquals("String", generatedProperty.getReturnType().getName());
280 assertEquals(3, test_j);
283 testActualType((GeneratedType) t, test_i);
286 assertEquals(3, test_i[0]);
290 public void generateTypesDescriptionsTest() throws Exception {
291 final BindingGenerator bg = new BindingGeneratorImpl(true);
292 final SchemaContext context = YangParserTestUtils.parseYangFiles(getFiles("/base/with_import/"));
293 assertNotNull(context);
295 final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
296 assertNotNull(generateTypes);
297 assertTrue(!generateTypes.isEmpty());
299 for (final Type type : generateTypes) {
300 if (type.getName().equals("TestData")) {
301 final String description = ((GeneratedType) type).getDescription().get();
303 .contains(" import test-import { prefix \"imported-test\"; revision-date 2017-04-21; }\n\n");
304 description.contains(" revision 2017-02-06;\n\n");
305 description.contains(" typedef my-type {\n type int8;\n }");
306 description.contains(" container *my-cont {\n }\n");
312 public void generateTypesIdentityTest() throws Exception {
313 final BindingGenerator bg = new BindingGeneratorImpl(true);
314 final SchemaContext context = YangParserTestUtils.parseYangFiles(getFiles("/identity/"));
315 assertNotNull(context);
317 final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
318 assertNotNull(generateTypes);
319 assertTrue(!generateTypes.isEmpty());
320 for (final Type type : generateTypes) {
321 if (type.getFullyQualifiedName()
322 .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1")) {
323 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
324 assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2",
325 genTO.getSuperType().getFullyQualifiedName());
328 if (type.getFullyQualifiedName()
329 .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2")) {
330 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
331 assertEquals("org.opendaylight.mdsal.gen.javav2.identity.import_.rev170602.ident.Iden1",
332 genTO.getSuperType().getFullyQualifiedName());
335 if (type.getFullyQualifiedName()
336 .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden3")) {
337 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
338 assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1",
339 genTO.getSuperType().getFullyQualifiedName());
345 private File[] getFiles(final String path) throws URISyntaxException {
346 return new File(getClass().getResource(path).toURI()).listFiles();
349 private void testActualType(final GeneratedType t, final int[] test_i) {
350 MethodSignature methodSignature = null;
351 switch (t.getName()) {
353 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314",
355 methodSignature = t.getMethodDefinitions().get(0);
356 assertMethod(t, "getMyList", "List", "java.util", methodSignature);
360 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
362 methodSignature = t.getMethodDefinitions().get(0);
363 assertMethod(t, "getKey", "String", "java.lang", methodSignature);
367 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
369 methodSignature = t.getMethodDefinitions().get(0);
370 assertMethod(t, "getKey1", "String", "java.lang", methodSignature);
374 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
376 methodSignature = t.getMethodDefinitions().get(0);
377 assertMethod(t, "getKey2", "String", "java.lang", methodSignature);
381 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data.my_list",
383 methodSignature = t.getMethodDefinitions().get(0);
384 assertMethod(t, "getFoo", "String", "java.lang", methodSignature);
388 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data",
390 assertEquals(5, t.getMethodDefinitions().size());
392 for (final MethodSignature m : t.getMethodDefinitions()) {
393 switch (m.getName()) {
395 assertMethod(t, "getKey", "MyListKey",
396 "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
401 assertMethod(t, "getKey1", "String","java.lang", m);
405 assertMethod(t, "getKey2", "String","java.lang", m);
409 assertMethod(t, "getFoo", "String","java.lang", m);
412 case "getKeyReservedWord":
413 assertMethod(t, "getKeyReservedWord", "String","java.lang", m);
420 assertEquals(5, test_j);
428 private void assertBaseGeneratedType(final GeneratedType genType, final String name, final String packageName) {
429 assertEquals(name, genType.getName());
433 private void assertMethod(final GeneratedType definingTypeExpected, final String nameExpected,
434 final String typeNameExpected, final String typePackageNameExpected,
435 final MethodSignature methodSignature) {
436 assertEquals(definingTypeExpected, methodSignature.getDefiningType());
437 assertEquals(nameExpected, methodSignature.getName());
438 assertEquals(typeNameExpected, methodSignature.getReturnType().getName());
439 assertEquals(typePackageNameExpected, methodSignature.getReturnType().getPackageName());