View Javadoc
1   /**
2    *    Copyright 2006-2016 the original author or authors.
3    *
4    *    Licensed under the Apache License, Version 2.0 (the "License");
5    *    you may not use this file except in compliance with the License.
6    *    You may obtain a copy of the License at
7    *
8    *       http://www.apache.org/licenses/LICENSE-2.0
9    *
10   *    Unless required by applicable law or agreed to in writing, software
11   *    distributed under the License is distributed on an "AS IS" BASIS,
12   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *    See the License for the specific language governing permissions and
14   *    limitations under the License.
15   */
16  package org.mybatis.generator.api.dom.java;
17  
18  import static org.junit.Assert.assertEquals;
19  import static org.junit.Assert.assertFalse;
20  import static org.junit.Assert.assertTrue;
21  
22  import java.util.Set;
23  import java.util.TreeSet;
24  
25  import org.junit.Test;
26  import org.mybatis.generator.api.dom.OutputUtilities;
27  import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
28  
29  /**
30   * @author Jeff Butler
31   *
32   */
33  public class FullyQualifiedJavaTypeTest {
34  
35      @Test
36      public void testJavaType() {
37          FullyQualifiedJavaType fqjt =
38              new FullyQualifiedJavaType("java.lang.String"); //$NON-NLS-1$
39          assertFalse(fqjt.isExplicitlyImported());
40          assertEquals("String", fqjt.getShortName()); //$NON-NLS-1$
41          assertEquals("java.lang.String", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
42          assertEquals("java.lang", fqjt.getPackageName()); //$NON-NLS-1$
43          assertEquals(0, fqjt.getImportList().size());
44      }
45  
46      @Test
47      public void testSimpleType() {
48          FullyQualifiedJavaType fqjt =
49              new FullyQualifiedJavaType("com.foo.Bar"); //$NON-NLS-1$
50          assertTrue(fqjt.isExplicitlyImported());
51          assertEquals("Bar", fqjt.getShortName()); //$NON-NLS-1$
52          assertEquals("com.foo.Bar", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
53          assertEquals("com.foo", fqjt.getPackageName()); //$NON-NLS-1$
54          assertEquals(1, fqjt.getImportList().size());
55          assertEquals("com.foo.Bar", fqjt.getImportList().get(0));
56      }
57  
58      @Test
59      public void testSimpleType2() {
60          FullyQualifiedJavaType fqjt =
61              new FullyQualifiedJavaType("com.foo.bar"); //$NON-NLS-1$
62          assertTrue(fqjt.isExplicitlyImported());
63          assertEquals("bar", fqjt.getShortName()); //$NON-NLS-1$
64          assertEquals("com.foo.bar", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
65          assertEquals("com.foo", fqjt.getPackageName()); //$NON-NLS-1$
66          assertEquals(1, fqjt.getImportList().size());
67          assertEquals("com.foo.bar", fqjt.getImportList().get(0));
68      }
69      
70      @Test
71      public void testSimpleType3() {
72          FullyQualifiedJavaType fqjt =
73              new FullyQualifiedJavaType("int"); //$NON-NLS-1$
74          assertFalse(fqjt.isExplicitlyImported());
75          assertEquals("int", fqjt.getShortName()); //$NON-NLS-1$
76          assertEquals("int", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
77          assertEquals("", fqjt.getPackageName()); //$NON-NLS-1$
78          assertEquals(0, fqjt.getImportList().size());
79      }
80      
81      @Test
82      public void testGenericType1() {
83          FullyQualifiedJavaType fqjt =
84              new FullyQualifiedJavaType("java.util.List<java.lang.String>"); //$NON-NLS-1$
85          assertTrue(fqjt.isExplicitlyImported());
86          assertEquals("List<String>", fqjt.getShortName()); //$NON-NLS-1$
87          assertEquals("java.util.List<java.lang.String>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
88          assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
89          assertEquals(1, fqjt.getImportList().size());
90          assertEquals("java.util.List", fqjt.getImportList().get(0));
91          assertEquals("java.util.List", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$
92      }
93  
94  
95      @Test
96      public void testGenericType2() {
97          FullyQualifiedJavaType fqjt =
98              new FullyQualifiedJavaType("java.util.Map<java.lang.String, java.util.List<java.lang.String>>"); //$NON-NLS-1$
99          assertTrue(fqjt.isExplicitlyImported());
100         assertEquals("Map<String, List<String>>", fqjt.getShortName()); //$NON-NLS-1$
101         assertEquals("java.util.Map<java.lang.String, java.util.List<java.lang.String>>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
102         assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
103         assertEquals(2, fqjt.getImportList().size());
104         assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$
105     }
106 
107 
108     @Test
109     public void testGenericType3() {
110         FullyQualifiedJavaType listOfStrings = new FullyQualifiedJavaType("java.util.List"); //$NON-NLS-1$
111         listOfStrings.addTypeArgument(new FullyQualifiedJavaType("java.lang.String")); //$NON-NLS-1$
112 
113         FullyQualifiedJavaType fqjt =
114             new FullyQualifiedJavaType("java.util.Map"); //$NON-NLS-1$
115         fqjt.addTypeArgument(new FullyQualifiedJavaType("java.lang.String")); //$NON-NLS-1$
116         fqjt.addTypeArgument(listOfStrings);
117 
118         assertTrue(fqjt.isExplicitlyImported());
119         assertEquals("Map<String, List<String>>", fqjt.getShortName()); //$NON-NLS-1$
120         assertEquals("java.util.Map<java.lang.String, java.util.List<java.lang.String>>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
121         assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
122         assertEquals(2, fqjt.getImportList().size());
123         assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$
124     }
125 
126     @Test
127     public void testGenericType4() {
128         FullyQualifiedJavaType fqjt =
129             new FullyQualifiedJavaType("java.util.List<java.util.Map<java.lang.String, java.lang.Object>>"); //$NON-NLS-1$
130         assertTrue(fqjt.isExplicitlyImported());
131         assertEquals("List<Map<String, Object>>", fqjt.getShortName()); //$NON-NLS-1$
132         assertEquals("java.util.List<java.util.Map<java.lang.String, java.lang.Object>>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
133         assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
134         assertEquals(2, fqjt.getImportList().size());
135         assertEquals("java.util.List", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$
136     }
137 
138     @Test
139     public void testWildcardType1() {
140         FullyQualifiedJavaType fqjt =
141             new FullyQualifiedJavaType("java.util.Map<java.lang.String, ? extends com.foo.Bar>");
142         assertTrue(fqjt.isExplicitlyImported());
143         assertEquals("Map<String, ? extends Bar>", fqjt.getShortName()); //$NON-NLS-1$
144         assertEquals("java.util.Map<java.lang.String, ? extends com.foo.Bar>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
145         assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
146         assertEquals(2, fqjt.getImportList().size());
147         assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$
148     }
149 
150     @Test
151     public void testWildcardType2() {
152         FullyQualifiedJavaType fqjt =
153             new FullyQualifiedJavaType("java.util.Map<java.lang.String, ?>");
154         assertTrue(fqjt.isExplicitlyImported());
155         assertEquals("Map<String, ?>", fqjt.getShortName()); //$NON-NLS-1$
156         assertEquals("java.util.Map<java.lang.String, ?>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
157         assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
158         assertEquals(1, fqjt.getImportList().size());
159         assertEquals("java.util.Map", fqjt.getImportList().get(0));
160         assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$
161     }
162 
163     @Test
164     public void testWildcardType3() {
165         FullyQualifiedJavaType fqjt =
166             new FullyQualifiedJavaType("java.util.Map<? extends java.util.List<?>, ?>");
167         assertTrue(fqjt.isExplicitlyImported());
168         assertEquals("Map<? extends List<?>, ?>", fqjt.getShortName()); //$NON-NLS-1$
169         assertEquals("java.util.Map<? extends java.util.List<?>, ?>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
170         assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
171         assertEquals(2, fqjt.getImportList().size());
172         assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$
173     }
174 
175     @Test
176     public void testWildcardType4() {
177         FullyQualifiedJavaType fqjt =
178             new FullyQualifiedJavaType("java.util.Map<?, ?>");
179         assertTrue(fqjt.isExplicitlyImported());
180         assertEquals("Map<?, ?>", fqjt.getShortName()); //$NON-NLS-1$
181         assertEquals("java.util.Map<?, ?>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
182         assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
183         assertEquals(1, fqjt.getImportList().size());
184         assertEquals("java.util.Map", fqjt.getImportList().get(0));
185         assertEquals("java.util.Map", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$
186     }
187 
188     @Test
189     public void testWildcardType5() {
190         FullyQualifiedJavaType fqjt =
191             new FullyQualifiedJavaType("java.util.List<? extends java.util.Map<? super java.lang.Object, ?>>");
192         assertTrue(fqjt.isExplicitlyImported());
193         assertEquals("List<? extends Map<? super Object, ?>>", fqjt.getShortName()); //$NON-NLS-1$
194         assertEquals("java.util.List<? extends java.util.Map<? super java.lang.Object, ?>>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
195         assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
196         assertEquals(2, fqjt.getImportList().size());
197         assertEquals("java.util.List", fqjt.getFullyQualifiedNameWithoutTypeParameters()); //$NON-NLS-1$
198     }
199 
200     @Test
201     public void testUppercasePackage1() {
202         FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("org.foo.Bar.Inner");
203         assertTrue(fqjt.isExplicitlyImported());
204         assertEquals("Inner", fqjt.getShortName()); //$NON-NLS-1$
205         assertEquals("org.foo.Bar.Inner", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
206         assertEquals("org.foo.Bar", fqjt.getPackageName()); //$NON-NLS-1$
207         assertEquals(1, fqjt.getImportList().size());
208         assertEquals("org.foo.Bar.Inner", fqjt.getImportList().get(0));
209     }
210 
211     @Test
212     public void testUppercasePackage2() {
213         FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("org.foo.Bar.Inner.Inner");
214         assertTrue(fqjt.isExplicitlyImported());
215         assertEquals("Inner", fqjt.getShortName()); //$NON-NLS-1$
216         assertEquals("org.foo.Bar.Inner.Inner", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
217         assertEquals("org.foo.Bar.Inner", fqjt.getPackageName()); //$NON-NLS-1$
218         assertEquals(1, fqjt.getImportList().size());
219         assertEquals("org.foo.Bar.Inner.Inner", fqjt.getImportList().get(0));
220     }
221 
222     @Test
223     public void testUppercasePackage3() {
224         FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.List<org.foo.Bar.Inner>");
225         assertTrue(fqjt.isExplicitlyImported());
226         assertEquals("List<Inner>", fqjt.getShortName()); //$NON-NLS-1$
227         assertEquals("java.util.List<org.foo.Bar.Inner>", fqjt.getFullyQualifiedName()); //$NON-NLS-1$
228         assertEquals("java.util", fqjt.getPackageName()); //$NON-NLS-1$
229         assertEquals(2, fqjt.getImportList().size());
230         assertTrue(fqjt.getImportList().contains("java.util.List"));
231         assertTrue(fqjt.getImportList().contains("org.foo.Bar.Inner"));
232     }
233     
234     @Test
235     public void testImportList() {
236         Set<FullyQualifiedJavaType> types = new TreeSet<FullyQualifiedJavaType>();
237         
238         types.add(new FullyQualifiedJavaType("foo.bar.Example"));
239         types.add(new FullyQualifiedJavaType("foo.bar.Example.Criteria"));
240         types.add(new FullyQualifiedJavaType("foo.bar.Example.Criterion"));
241         assertEquals(3, types.size());
242         
243         Set<String> imports = OutputUtilities.calculateImports(types);
244         assertEquals(3, imports.size());
245     }
246     
247     @Test
248     public void testByteArray1() {
249         FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("byte[]");
250         assertFalse(fqjt.isPrimitive());
251         assertTrue(fqjt.isArray());
252     }
253 
254     @Test
255     public void testByteArray2() {
256         FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("byte[ ]");
257         assertFalse(fqjt.isPrimitive());
258         assertTrue(fqjt.isArray());
259     }
260 
261     @Test
262     public void testStringArray() {
263         FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.lang.String[]");
264         assertFalse(fqjt.isPrimitive());
265         assertTrue(fqjt.isArray());
266     }
267 
268     @Test
269     public void testComplexArray() {
270         FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType("java.util.List<String>[]");
271         assertFalse(fqjt.isPrimitive());
272         assertTrue(fqjt.isArray());
273     }
274 }