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.mdsal.binding.javav2.model.api.type.builder.GeneratedTOBuilder;
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 generatedTypesTest() throws Exception {
74 final BindingGenerator bg = new BindingGeneratorImpl(false);
75 final SchemaContext context = YangParserTestUtils.parseYangSource("/generator/test-list.yang");
76 final List<Type> generateTypes = bg.generateTypes(context);
78 assertNotNull(generateTypes);
79 assertTrue(!generateTypes.isEmpty());
80 assertEquals(3, generateTypes.size());
81 final int[] test_i = { 0 };
82 for (final Type t : generateTypes) {
83 if (t instanceof GeneratedTransferObject) {
84 final GeneratedTransferObject genTransferObj = (GeneratedTransferObject) t;
85 assertBaseGeneratedType(genTransferObj, "MyListKey",
86 "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list");
87 assertEquals(3, genTransferObj.getProperties().size());
89 for (final GeneratedProperty generatedProperty : genTransferObj.getProperties()) {
90 switch (generatedProperty.getName()) {
92 assertEquals("String", generatedProperty.getReturnType().getName());
96 assertEquals("String", generatedProperty.getReturnType().getName());
100 assertEquals("String", generatedProperty.getReturnType().getName());
107 assertEquals(3, test_j);
110 testActualType((GeneratedType) t, test_i);
113 assertEquals(3, test_i[0]);
117 public void generateTypesDescriptionsTest() throws Exception {
118 final BindingGenerator bg = new BindingGeneratorImpl(true);
119 final SchemaContext context = YangParserTestUtils.parseYangSources("/base/with_import/");
120 assertNotNull(context);
122 final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
123 assertNotNull(generateTypes);
124 assertTrue(!generateTypes.isEmpty());
126 for (final Type type : generateTypes) {
127 if (type.getName().equals("TestData")) {
128 final String description = ((GeneratedType) type).getDescription().get();
130 .contains(" import test-import { prefix \"imported-test\"; revision-date 2017-04-21; }\n\n");
131 description.contains(" revision 2017-02-06;\n\n");
132 description.contains(" typedef my-type {\n type int8;\n }");
133 description.contains(" container *my-cont {\n }\n");
139 public void generateTypesIdentityTest() throws Exception {
140 final BindingGenerator bg = new BindingGeneratorImpl(true);
141 final SchemaContext context = YangParserTestUtils.parseYangSources("/identity/");
142 assertNotNull(context);
144 final List<Type> generateTypes = bg.generateTypes(context, context.getModules());
145 assertNotNull(generateTypes);
146 assertTrue(!generateTypes.isEmpty());
147 for (final Type type : generateTypes) {
148 if (type.getFullyQualifiedName()
149 .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1")) {
150 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
151 assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2",
152 genTO.getSuperType().getFullyQualifiedName());
155 if (type.getFullyQualifiedName()
156 .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden2")) {
157 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
158 assertEquals("org.opendaylight.mdsal.gen.javav2.identity.import_.rev170602.ident.Iden1",
159 genTO.getSuperType().getFullyQualifiedName());
162 if (type.getFullyQualifiedName()
163 .equals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden3")) {
164 final GeneratedTransferObject genTO = (GeneratedTransferObject)type;
165 assertEquals("org.opendaylight.mdsal.gen.javav2.identity3.module.rev170708.ident.Iden1",
166 genTO.getSuperType().getFullyQualifiedName());
172 private void testActualType(final GeneratedType t, final int[] test_i) {
173 MethodSignature methodSignature = null;
174 switch (t.getName()) {
176 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314",
178 methodSignature = t.getMethodDefinitions().get(0);
179 assertMethod(t, "getMyList", "List", "java.util", methodSignature);
183 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
185 methodSignature = t.getMethodDefinitions().get(0);
186 assertMethod(t, "getKey", "String", "java.lang", methodSignature);
190 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
192 methodSignature = t.getMethodDefinitions().get(0);
193 assertMethod(t, "getKey1", "String", "java.lang", methodSignature);
197 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
199 methodSignature = t.getMethodDefinitions().get(0);
200 assertMethod(t, "getKey2", "String", "java.lang", methodSignature);
204 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data.my_list",
206 methodSignature = t.getMethodDefinitions().get(0);
207 assertMethod(t, "getFoo", "String", "java.lang", methodSignature);
211 assertEquals("org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data",
213 assertEquals(5, t.getMethodDefinitions().size());
215 for (final MethodSignature m : t.getMethodDefinitions()) {
216 switch (m.getName()) {
218 assertMethod(t, "getKey", "MyListKey",
219 "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
223 case "getMyListKey1":
224 assertMethod(t, "getMyListKey1", "String","java.lang", m);
227 case "getMyListKey2":
228 assertMethod(t, "getMyListKey2", "String","java.lang", m);
232 assertMethod(t, "getMyListFoo", "String","java.lang", m);
236 assertMethod(t, "getMyListKey", "String","java.lang", m);
243 assertEquals(5, test_j);
251 private void assertBaseGeneratedType(final GeneratedType genType, final String name, final String packageName) {
252 assertEquals(name, genType.getName());
256 private void assertMethod(final GeneratedType definingTypeExpected, final String nameExpected,
257 final String typeNameExpected, final String typePackageNameExpected,
258 final MethodSignature methodSignature) {
259 assertEquals(definingTypeExpected, methodSignature.getDefiningType());
260 assertEquals(nameExpected, methodSignature.getName());
261 assertEquals(typeNameExpected, methodSignature.getReturnType().getName());
262 assertEquals(typePackageNameExpected, methodSignature.getReturnType().getPackageName());