1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.api.dom.java;
17
18 import static org.assertj.core.api.Assertions.assertThat;
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertFalse;
21 import static org.junit.jupiter.api.Assertions.assertTrue;
22
23 import org.junit.jupiter.api.Test;
24 import org.mybatis.generator.api.dom.java.render.TopLevelInterfaceRenderer;
25
26
27
28
29 class FullyQualifiedJavaTypeTest {
30
31 @Test
32 void testJavaType() {
33 FullyQualifiedJavaType fqjt =
34 new FullyQualifiedJavaType("java.lang.String");
35 assertFalse(fqjt.isExplicitlyImported());
36 assertEquals("String", fqjt.getShortName());
37 assertEquals("java.lang.String", fqjt.getFullyQualifiedName());
38 assertEquals("java.lang", fqjt.getPackageName());
39 assertEquals(0, fqjt.getImportList().size());
40 }
41
42 @Test
43 void testSimpleType() {
44 FullyQualifiedJavaType fqjt =
45 new FullyQualifiedJavaType("com.foo.Bar");
46 assertTrue(fqjt.isExplicitlyImported());
47 assertEquals("Bar", fqjt.getShortName());
48 assertEquals("com.foo.Bar", fqjt.getFullyQualifiedName());
49 assertEquals("com.foo", fqjt.getPackageName());
50 assertEquals(1, fqjt.getImportList().size());
51 assertEquals("com.foo.Bar", fqjt.getImportList().get(0));
52 }
53
54 @Test
55 void testSimpleType2() {
56 FullyQualifiedJavaType fqjt =
57 new FullyQualifiedJavaType("com.foo.bar");
58 assertTrue(fqjt.isExplicitlyImported());
59 assertEquals("bar", fqjt.getShortName());
60 assertEquals("com.foo.bar", fqjt.getFullyQualifiedName());
61 assertEquals("com.foo", fqjt.getPackageName());
62 assertEquals(1, fqjt.getImportList().size());
63 assertEquals("com.foo.bar", fqjt.getImportList().get(0));
64 }
65
66 @Test
67 void testSimpleType3() {
68 FullyQualifiedJavaType fqjt =
69 new FullyQualifiedJavaType("int");
70 assertFalse(fqjt.isExplicitlyImported());
71 assertEquals("int", fqjt.getShortName());
72 assertEquals("int", fqjt.getFullyQualifiedName());
73 assertEquals("", fqjt.getPackageName());
74 assertEquals(0, fqjt.getImportList().size());
75 }
76
77 @Test
78 void testGenericType1() {
79 FullyQualifiedJavaType fqjt =
80 new FullyQualifiedJavaType("java.util.List<java.lang.String>");
81 assertTrue(fqjt.isExplicitlyImported());
82 assertEquals("List<String>", fqjt.getShortName());
83 assertEquals("java.util.List<java.lang.String>", fqjt.getFullyQualifiedName());
84 assertEquals("java.util", fqjt.getPackageName());
85 assertEquals(1, fqjt.getImportList().size());
86 assertEquals("java.util.List", fqjt.getImportList().get(0));
87 assertEquals("java.util.List", fqjt.getFullyQualifiedNameWithoutTypeParameters());
88 }
89
90 @Test
91 void testGenericType2() {
92 FullyQualifiedJavaType fqjt =
93 new FullyQualifiedJavaType("java.util.Map<java.lang.String, java.util.List<java.lang.String>>");
94 assertTrue(fqjt.isExplicitlyImported());
95 assertEquals("Map<String, List<String>>", fqjt.getShortName());
96 assertEquals("java.util.Map<java.lang.String, java.util.List<java.lang.String>>", fqjt.getFullyQualifiedName());
97 assertEquals("java.util", fqjt.getPackageName());
98 assertEquals(2, fqjt.getImportList().size());
99 assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters());
100 }
101
102 @Test
103 void testGenericType3() {
104 FullyQualifiedJavaType listOfStrings = new FullyQualifiedJavaType("java.util.List");
105 listOfStrings.addTypeArgument(new FullyQualifiedJavaType("java.lang.String"));
106
107 FullyQualifiedJavaType fqjt =
108 new FullyQualifiedJavaType("java.util.Map");
109 fqjt.addTypeArgument(new FullyQualifiedJavaType("java.lang.String"));
110 fqjt.addTypeArgument(listOfStrings);
111
112 assertTrue(fqjt.isExplicitlyImported());
113 assertEquals("Map<String, List<String>>", fqjt.getShortName());
114 assertEquals("java.util.Map<java.lang.String, java.util.List<java.lang.String>>", fqjt.getFullyQualifiedName());
115 assertEquals("java.util", fqjt.getPackageName());
116 assertEquals(2, fqjt.getImportList().size());
117 assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters());
118 }
119
120 @Test
121 void testGenericType4() {
122 FullyQualifiedJavaType fqjt =
123 new FullyQualifiedJavaType("java.util.List<java.util.Map<java.lang.String, java.lang.Object>>");
124 assertTrue(fqjt.isExplicitlyImported());
125 assertEquals("List<Map<String, Object>>", fqjt.getShortName());
126 assertEquals("java.util.List<java.util.Map<java.lang.String, java.lang.Object>>", fqjt.getFullyQualifiedName());
127 assertEquals("java.util", fqjt.getPackageName());
128 assertEquals(2, fqjt.getImportList().size());
129 assertEquals("java.util.List", fqjt.getFullyQualifiedNameWithoutTypeParameters());
130 }
131
132 @Test
133 void testWildcardType1() {
134 FullyQualifiedJavaType fqjt =
135 new FullyQualifiedJavaType("java.util.Map<java.lang.String, ? extends com.foo.Bar>");
136 assertTrue(fqjt.isExplicitlyImported());
137 assertEquals("Map<String, ? extends Bar>", fqjt.getShortName());
138 assertEquals("java.util.Map<java.lang.String, ? extends com.foo.Bar>", fqjt.getFullyQualifiedName());
139 assertEquals("java.util", fqjt.getPackageName());
140 assertEquals(2, fqjt.getImportList().size());
141 assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters());
142 }
143
144 @Test
145 void testWildcardType2() {
146 FullyQualifiedJavaType fqjt =
147 new FullyQualifiedJavaType("java.util.Map<java.lang.String, ?>");
148 assertTrue(fqjt.isExplicitlyImported());
149 assertEquals("Map<String, ?>", fqjt.getShortName());
150 assertEquals("java.util.Map<java.lang.String, ?>", fqjt.getFullyQualifiedName());
151 assertEquals("java.util", fqjt.getPackageName());
152 assertEquals(1, fqjt.getImportList().size());
153 assertEquals("java.util.Map", fqjt.getImportList().get(0));
154 assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters());
155 }
156
157 @Test
158 void testWildcardType3() {
159 FullyQualifiedJavaType fqjt =
160 new FullyQualifiedJavaType("java.util.Map<? extends java.util.List<?>, ?>");
161 assertTrue(fqjt.isExplicitlyImported());
162 assertEquals("Map<? extends List<?>, ?>", fqjt.getShortName());
163 assertEquals("java.util.Map<? extends java.util.List<?>, ?>", fqjt.getFullyQualifiedName());
164 assertEquals("java.util", fqjt.getPackageName());
165 assertEquals(2, fqjt.getImportList().size());
166 assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters());
167 }
168
169 @Test
170 void testWildcardType4() {
171 FullyQualifiedJavaType fqjt =
172 new FullyQualifiedJavaType("java.util.Map<?, ?>");
173 assertTrue(fqjt.isExplicitlyImported());
174 assertEquals("Map<?, ?>", fqjt.getShortName());
175 assertEquals("java.util.Map<?, ?>", fqjt.getFullyQualifiedName());
176 assertEquals("java.util", fqjt.getPackageName());
177 assertEquals(1, fqjt.getImportList().size());
178 assertEquals("java.util.Map", fqjt.getImportList().get(0));
179 assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters());
180 }
181
182 @Test
183 void testWildcardType5() {
184 FullyQualifiedJavaType fqjt =
185 new FullyQualifiedJavaType("java.util.List<? extends java.util.Map<? super java.lang.Object, ?>>");
186 assertTrue(fqjt.isExplicitlyImported());
187 assertEquals("List<? extends Map<? super Object, ?>>", fqjt.getShortName());
188 assertEquals("java.util.List<? extends java.util.Map<? super java.lang.Object, ?>>", fqjt.getFullyQualifiedName());
189 assertEquals("java.util", fqjt.getPackageName());
190 assertEquals(2, fqjt.getImportList().size());
191 assertEquals("java.util.List", fqjt.getFullyQualifiedNameWithoutTypeParameters());
192 }
193
194 @Test
195 void testUppercasePackage1() {
196 FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("org.foo.Bar.Inner");
197 assertTrue(fqjt.isExplicitlyImported());
198 assertEquals("Inner", fqjt.getShortName());
199 assertEquals("org.foo.Bar.Inner", fqjt.getFullyQualifiedName());
200 assertEquals("org.foo.Bar", fqjt.getPackageName());
201 assertEquals(1, fqjt.getImportList().size());
202 assertEquals("org.foo.Bar.Inner", fqjt.getImportList().get(0));
203 }
204
205 @Test
206 void testUppercasePackage2() {
207 FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("org.foo.Bar.Inner.Inner");
208 assertTrue(fqjt.isExplicitlyImported());
209 assertEquals("Inner", fqjt.getShortName());
210 assertEquals("org.foo.Bar.Inner.Inner", fqjt.getFullyQualifiedName());
211 assertEquals("org.foo.Bar.Inner", fqjt.getPackageName());
212 assertEquals(1, fqjt.getImportList().size());
213 assertEquals("org.foo.Bar.Inner.Inner", fqjt.getImportList().get(0));
214 }
215
216 @Test
217 void testUppercasePackage3() {
218 FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.List<org.foo.Bar.Inner>");
219 assertTrue(fqjt.isExplicitlyImported());
220 assertEquals("List<Inner>", fqjt.getShortName());
221 assertEquals("java.util.List<org.foo.Bar.Inner>", fqjt.getFullyQualifiedName());
222 assertEquals("java.util", fqjt.getPackageName());
223 assertEquals(2, fqjt.getImportList().size());
224 assertTrue(fqjt.getImportList().contains("java.util.List"));
225 assertTrue(fqjt.getImportList().contains("org.foo.Bar.Inner"));
226 }
227
228 @Test
229 void testByteArray1() {
230 FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("byte[]");
231 assertFalse(fqjt.isPrimitive());
232 assertTrue(fqjt.isArray());
233 }
234
235 @Test
236 void testByteArray2() {
237 FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("byte[ ]");
238 assertFalse(fqjt.isPrimitive());
239 assertTrue(fqjt.isArray());
240 }
241
242 @Test
243 void testStringArray() {
244 FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.lang.String[]");
245 assertFalse(fqjt.isPrimitive());
246 assertTrue(fqjt.isArray());
247 }
248
249 @Test
250 void testStringArray2() {
251 FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.math.BigDecimal[]");
252 assertEquals(1, fqjt.getImportList().size());
253 assertEquals("java.math.BigDecimal", fqjt.getImportList().get(0));
254 assertEquals("BigDecimal[]", fqjt.getShortName());
255 assertFalse(fqjt.isPrimitive());
256 assertTrue(fqjt.isArray());
257 }
258
259 @Test
260 void testComplexArray() {
261 FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.List<String>[]");
262 assertFalse(fqjt.isPrimitive());
263 assertTrue(fqjt.isArray());
264 }
265
266 @Test
267 void testComplexArrayWithoutGenerics() {
268 FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.List[]");
269 assertFalse(fqjt.isPrimitive());
270 assertTrue(fqjt.isArray());
271 assertTrue(fqjt.getImportList().contains("java.util.List"));
272 assertFalse(fqjt.getImportList().contains("java.util.List[]"));
273 }
274
275 @Test
276 void gh1288Test1() {
277 FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("Class<?>");
278 assertThat(fqjt.getFullyQualifiedName()).isEqualTo("Class<?>");
279
280 Method method = new Method("setConverter");
281 Parameter parameter = new Parameter(fqjt, "converterType");
282 method.addParameter(parameter);
283 method.setAbstract(true);
284
285 Interface interfaze = new Interface("foo.Bar");
286 interfaze.setVisibility(JavaVisibility.PUBLIC);
287 interfaze.addMethod(method);
288
289 TopLevelInterfaceRenderer renderer = new TopLevelInterfaceRenderer();
290 String out = renderer.render(interfaze);
291
292 assertThat(out).isEqualToNormalizingNewlines("package foo;\n\npublic interface Bar {\n void setConverter(Class<?> converterType);\n}");
293 }
294
295 @Test
296 void gh1288Test2() {
297 FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("Class<? extends String>");
298 assertThat(fqjt.getFullyQualifiedName()).isEqualTo("Class<? extends String>");
299
300 Method method = new Method("setConverter");
301 Parameter parameter = new Parameter(fqjt, "converterType");
302 method.addParameter(parameter);
303 method.setAbstract(true);
304
305 Interface interfaze = new Interface("foo.Bar");
306 interfaze.setVisibility(JavaVisibility.PUBLIC);
307 interfaze.addMethod(method);
308
309 TopLevelInterfaceRenderer renderer = new TopLevelInterfaceRenderer();
310 String out = renderer.render(interfaze);
311
312 assertThat(out).isEqualToNormalizingNewlines("package foo;\n\npublic interface Bar {\n void setConverter(Class<? extends String> converterType);\n}");
313 }
314
315 @Test
316 void gh1288Test3() {
317 FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("Class");
318 fqjt.addTypeArgument(new FullyQualifiedJavaType("? extends HttpMessageConverter<?>"));
319 assertThat(fqjt.getFullyQualifiedName()).isEqualTo("Class<? extends HttpMessageConverter<?>>");
320
321 Method method = new Method("setConverter");
322 Parameter parameter = new Parameter(fqjt, "converterType");
323 method.addParameter(parameter);
324 method.setAbstract(true);
325
326 Interface interfaze = new Interface("foo.Bar");
327 interfaze.setVisibility(JavaVisibility.PUBLIC);
328 interfaze.addMethod(method);
329
330 TopLevelInterfaceRenderer renderer = new TopLevelInterfaceRenderer();
331 String out = renderer.render(interfaze);
332
333 assertThat(out).isEqualToNormalizingNewlines("package foo;\n\npublic interface Bar {\n void setConverter(Class<? extends HttpMessageConverter<?>> converterType);\n}");
334 }
335
336 @Test
337 void gh1288Test3Minified() {
338 FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("Class");
339 fqjt.addTypeArgument(new FullyQualifiedJavaType("? extends HttpMessageConverter<?>"));
340 assertThat(fqjt.getFullyQualifiedName()).isEqualTo("Class<? extends HttpMessageConverter<?>>");
341
342 Parameter parameter = new Parameter(fqjt, "converterType");
343 String out = parameter.toString();
344 assertThat(out).isEqualTo("Class<? extends HttpMessageConverter<?>> converterType");
345 }
346 }