2 * Copyright (c) 2013 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.yangtools.sal.java.api.generator.test;
10 import static org.junit.Assert.*;
11 import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.*;
14 import java.math.BigDecimal;
16 import java.net.URLClassLoader;
17 import java.util.HashSet;
18 import java.util.List;
21 import org.junit.Test;
22 import org.opendaylight.yangtools.sal.binding.model.api.Type;
23 import org.opendaylight.yangtools.sal.java.api.generator.GeneratorJavaFile;
24 import org.opendaylight.yangtools.yang.model.api.Module;
25 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
28 * Test correct code generation.
31 public class TypedefCompilationTest extends BaseCompilationTest {
32 private static final String VAL = "_value";
33 private static final String UNITS = "_UNITS";
36 public void test() throws Exception {
37 final File sourcesOutputDir = new File(GENERATOR_OUTPUT_PATH + FS + "typedef");
38 assertTrue("Failed to create test file '" + sourcesOutputDir + "'", sourcesOutputDir.mkdir());
39 final File compiledOutputDir = new File(COMPILER_OUTPUT_PATH + FS + "typedef");
40 assertTrue("Failed to create test file '" + compiledOutputDir + "'", compiledOutputDir.mkdir());
42 final List<File> sourceFiles = getSourceFiles("/compilation/typedef");
43 final Set<Module> modulesToBuild = parser.parseYangModels(sourceFiles);
44 final SchemaContext context = parser.resolveSchemaContext(modulesToBuild);
45 final List<Type> types = bindingGenerator.generateTypes(context);
46 final GeneratorJavaFile generator = new GeneratorJavaFile(new HashSet<>(types));
47 generator.generateToFile(sourcesOutputDir);
49 File parent = new File(sourcesOutputDir, NS_FOO);
50 File int32Ext0 = new File(parent, "Int32Ext0.java");
51 File int32Ext1 = new File(parent, "Int32Ext1.java");
52 File int32Ext2 = new File(parent, "Int32Ext2.java");
53 File myDecimalType = new File(parent, "MyDecimalType.java");
54 File stringExt1 = new File(parent, "StringExt1.java");
55 File stringExt2 = new File(parent, "StringExt2.java");
56 File stringExt3 = new File(parent, "StringExt3.java");
57 File unionExt1 = new File(parent, "UnionExt1.java");
58 File unionExt2 = new File(parent, "UnionExt2.java");
59 File unionExt3 = new File(parent, "UnionExt3.java");
60 File unionExt4 = new File(parent, "UnionExt4.java");
61 assertTrue(int32Ext0.exists());
62 assertTrue(int32Ext1.exists());
63 assertTrue(int32Ext2.exists());
64 assertTrue(myDecimalType.exists());
65 assertTrue(stringExt1.exists());
66 assertTrue(stringExt2.exists());
67 assertTrue(stringExt3.exists());
68 assertTrue(unionExt1.exists());
69 assertTrue(unionExt2.exists());
70 assertTrue(unionExt3.exists());
71 assertTrue(unionExt4.exists());
72 assertFilesCount(parent, 25);
74 // Test if sources are compilable
75 testCompilation(sourcesOutputDir, compiledOutputDir);
77 String pkg = BASE_PKG + ".urn.opendaylight.foo.rev131008";
78 ClassLoader loader = new URLClassLoader(new URL[] { compiledOutputDir.toURI().toURL() });
79 Class<?> int32Ext1Class = Class.forName(pkg + ".Int32Ext1", true, loader);
80 Class<?> int32Ext2Class = Class.forName(pkg + ".Int32Ext2", true, loader);
81 Class<?> myDecimalTypeClass = Class.forName(pkg + ".MyDecimalType", true, loader);
82 Class<?> stringExt1Class = Class.forName(pkg + ".StringExt1", true, loader);
83 Class<?> stringExt2Class = Class.forName(pkg + ".StringExt2", true, loader);
84 Class<?> stringExt3Class = Class.forName(pkg + ".StringExt3", true, loader);
85 Class<?> unionExt1Class = Class.forName(pkg + ".UnionExt1", true, loader);
86 Class<?> unionExt2Class = Class.forName(pkg + ".UnionExt2", true, loader);
87 Class<?> unionExt3Class = Class.forName(pkg + ".UnionExt3", true, loader);
88 Class<?> unionExt4Class = Class.forName(pkg + ".UnionExt4", true, loader);
91 assertFalse(int32Ext1Class.isInterface());
92 assertContainsField(int32Ext1Class, VAL, Integer.class);
93 assertEquals(1, int32Ext1Class.getDeclaredFields().length);
94 assertContainsConstructor(int32Ext1Class, Integer.class);
95 assertContainsConstructor(int32Ext1Class, int32Ext1Class);
96 assertEquals(2, int32Ext1Class.getConstructors().length);
97 assertContainsDefaultMethods(int32Ext1Class);
100 assertFalse(int32Ext2Class.isInterface());
101 assertContainsFieldWithValue(int32Ext2Class, UNITS, String.class, "mile", Integer.class);
102 assertEquals(1, int32Ext2Class.getDeclaredFields().length);
103 assertContainsConstructor(int32Ext2Class, Integer.class);
104 assertContainsConstructor(int32Ext2Class, int32Ext2Class);
105 assertContainsConstructor(int32Ext2Class, int32Ext1Class);
106 assertEquals(3, int32Ext2Class.getDeclaredConstructors().length);
107 assertContainsMethod(int32Ext2Class, String.class, "toString");
108 assertEquals(1, int32Ext2Class.getDeclaredMethods().length);
110 // typedef string-ext1
111 assertFalse(stringExt1Class.isInterface());
112 assertContainsField(stringExt1Class, VAL, String.class);
113 assertContainsField(stringExt1Class, "patterns", List.class);
114 assertContainsField(stringExt1Class, "PATTERN_CONSTANTS", List.class);
115 assertContainsMethod(stringExt1Class, String.class, "getValue");
116 assertEquals(3, stringExt1Class.getDeclaredFields().length);
117 assertContainsConstructor(stringExt1Class, String.class);
118 assertContainsConstructor(stringExt1Class, stringExt1Class);
119 assertEquals(2, stringExt1Class.getDeclaredConstructors().length);
120 assertContainsGetLength(stringExt1Class);
121 assertContainsDefaultMethods(stringExt1Class);
123 // typedef string-ext2
124 assertFalse(stringExt2Class.isInterface());
125 assertEquals(0, stringExt2Class.getDeclaredFields().length);
126 assertContainsConstructor(stringExt2Class, String.class);
127 assertContainsConstructor(stringExt2Class, stringExt2Class);
128 assertContainsConstructor(stringExt2Class, stringExt1Class);
129 assertEquals(3, stringExt2Class.getDeclaredConstructors().length);
130 assertContainsGetLength(stringExt2Class);
131 assertEquals(1, stringExt2Class.getDeclaredMethods().length);
133 // typedef string-ext3
134 assertFalse(stringExt3Class.isInterface());
135 assertEquals(0, stringExt3Class.getDeclaredFields().length);
136 assertContainsConstructor(stringExt3Class, String.class);
137 assertContainsConstructor(stringExt3Class, stringExt3Class);
138 assertContainsConstructor(stringExt3Class, stringExt2Class);
139 assertEquals(3, stringExt3Class.getDeclaredConstructors().length);
140 assertEquals(0, stringExt3Class.getDeclaredMethods().length);
142 // typedef my-decimal-type
143 assertFalse(myDecimalTypeClass.isInterface());
144 assertContainsField(myDecimalTypeClass, VAL, BigDecimal.class);
145 assertEquals(1, myDecimalTypeClass.getDeclaredFields().length);
146 assertContainsMethod(myDecimalTypeClass, BigDecimal.class, "getValue");
147 assertContainsConstructor(myDecimalTypeClass, BigDecimal.class);
148 assertContainsConstructor(myDecimalTypeClass, myDecimalTypeClass);
149 assertEquals(2, myDecimalTypeClass.getDeclaredConstructors().length);
150 assertContainsDefaultMethods(myDecimalTypeClass);
152 // typedef union-ext1
153 assertFalse(unionExt1Class.isInterface());
154 assertContainsField(unionExt1Class, "_int16", Short.class);
155 assertContainsField(unionExt1Class, "_int32", Integer.class);
156 assertEquals(2, unionExt1Class.getDeclaredFields().length);
157 assertContainsMethod(unionExt1Class, Short.class, "getInt16");
158 assertContainsMethod(unionExt1Class, Integer.class, "getInt32");
159 assertContainsConstructor(unionExt1Class, Short.class);
160 assertContainsConstructor(unionExt1Class, Integer.class);
161 assertContainsConstructor(unionExt1Class, unionExt1Class);
162 assertEquals(3, unionExt1Class.getDeclaredConstructors().length);
163 assertContainsDefaultMethods(unionExt1Class);
165 // typedef union-ext2
166 assertFalse(unionExt2Class.isInterface());
167 assertEquals(0, unionExt2Class.getDeclaredFields().length);
168 assertEquals(0, unionExt2Class.getDeclaredMethods().length);
169 assertContainsConstructor(unionExt2Class, Short.class);
170 assertContainsConstructor(unionExt2Class, Integer.class);
171 assertContainsConstructor(unionExt2Class, unionExt2Class);
172 assertContainsConstructor(unionExt2Class, unionExt1Class);
173 assertEquals(4, unionExt2Class.getDeclaredConstructors().length);
175 // typedef union-ext3
176 assertFalse(unionExt3Class.isInterface());
177 assertContainsField(unionExt3Class, "_string", String.class);
178 assertContainsField(unionExt3Class, "_unionExt2", unionExt2Class);
179 assertContainsFieldWithValue(unionExt3Class, UNITS, String.class, "object id", String.class);
180 assertEquals(3, unionExt3Class.getDeclaredFields().length);
181 assertContainsMethod(unionExt3Class, String.class, "getString");
182 assertContainsMethod(unionExt3Class, unionExt2Class, "getUnionExt2");
183 assertContainsConstructor(unionExt3Class, String.class);
184 assertContainsConstructor(unionExt3Class, unionExt2Class);
185 assertContainsConstructor(unionExt3Class, unionExt3Class);
186 assertEquals(3, unionExt3Class.getDeclaredConstructors().length);
187 assertContainsDefaultMethods(unionExt3Class);
189 // typedef union-ext4
190 assertFalse(unionExt4Class.isInterface());
191 assertContainsField(unionExt4Class, "_unionExt3", unionExt3Class);
192 assertContainsField(unionExt4Class, "_int32Ext2", int32Ext2Class);
193 assertContainsField(unionExt4Class, "_empty", Boolean.class);
194 assertContainsField(unionExt4Class, "_myDecimalType", myDecimalTypeClass);
195 assertEquals(4, unionExt4Class.getDeclaredFields().length);
196 assertContainsMethod(unionExt4Class, unionExt3Class, "getUnionExt3");
197 assertContainsMethod(unionExt4Class, int32Ext2Class, "getInt32Ext2");
198 assertContainsMethod(unionExt4Class, Boolean.class, "isEmpty");
199 assertContainsMethod(unionExt4Class, myDecimalTypeClass, "getMyDecimalType");
200 assertContainsConstructor(unionExt4Class, unionExt3Class);
201 assertContainsConstructor(unionExt4Class, int32Ext2Class);
202 assertContainsConstructor(unionExt4Class, Boolean.class);
203 assertContainsConstructor(unionExt4Class, myDecimalTypeClass);
204 assertContainsConstructor(unionExt4Class, unionExt4Class);
205 assertEquals(5, unionExt4Class.getDeclaredConstructors().length);
206 assertContainsDefaultMethods(unionExt4Class);
208 cleanUp(sourcesOutputDir, compiledOutputDir);