• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2016 Federico Tomassetti
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 
17 package com.github.javaparser.symbolsolver.model.typesystem;
18 
19 import com.github.javaparser.resolution.declarations.ResolvedTypeParameterDeclaration;
20 import com.github.javaparser.resolution.types.ResolvedArrayType;
21 import com.github.javaparser.resolution.types.ResolvedPrimitiveType;
22 import com.github.javaparser.resolution.types.ResolvedTypeVariable;
23 import com.github.javaparser.resolution.types.ResolvedVoidType;
24 import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
25 import com.github.javaparser.symbolsolver.reflectionmodel.ReflectionClassDeclaration;
26 import com.github.javaparser.symbolsolver.reflectionmodel.ReflectionInterfaceDeclaration;
27 import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver;
28 import com.google.common.collect.ImmutableList;
29 import org.junit.jupiter.api.BeforeEach;
30 import org.junit.jupiter.api.Test;
31 
32 import java.util.Collections;
33 import java.util.List;
34 
35 import static org.junit.jupiter.api.Assertions.*;
36 
37 class PrimitiveTypeTest {
38 
39     private ResolvedArrayType arrayOfBooleans;
40     private ResolvedArrayType arrayOfListOfA;
41     private ReferenceTypeImpl OBJECT;
42     private ReferenceTypeImpl STRING;
43     private TypeSolver typeSolver;
44 
45     private ReferenceTypeImpl booleanBox;
46     private ReferenceTypeImpl characterBox;
47     private ReferenceTypeImpl byteBox;
48     private ReferenceTypeImpl shortBox;
49     private ReferenceTypeImpl integerBox;
50     private ReferenceTypeImpl longBox;
51     private ReferenceTypeImpl floatBox;
52     private ReferenceTypeImpl doubleBox;
53 
54     @BeforeEach
setup()55     void setup() {
56         typeSolver = new ReflectionTypeSolver();
57         OBJECT = new ReferenceTypeImpl(new ReflectionClassDeclaration(Object.class, typeSolver), typeSolver);
58         STRING = new ReferenceTypeImpl(new ReflectionClassDeclaration(String.class, typeSolver), typeSolver);
59         arrayOfBooleans = new ResolvedArrayType(ResolvedPrimitiveType.BOOLEAN);
60         arrayOfListOfA = new ResolvedArrayType(new ReferenceTypeImpl(
61                 new ReflectionInterfaceDeclaration(List.class, typeSolver),
62                 ImmutableList.of(new ResolvedTypeVariable(ResolvedTypeParameterDeclaration.onType("A", "foo.Bar", Collections.emptyList()))), typeSolver));
63 
64         booleanBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Boolean.class, typeSolver), typeSolver);
65         characterBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Character.class, typeSolver), typeSolver);
66         byteBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Byte.class, typeSolver), typeSolver);
67         shortBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Short.class, typeSolver), typeSolver);
68         integerBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Integer.class, typeSolver), typeSolver);
69         longBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Long.class, typeSolver), typeSolver);
70         floatBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Float.class, typeSolver), typeSolver);
71         doubleBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Double.class, typeSolver), typeSolver);
72 
73     }
74 
75     @Test
testIsArray()76     void testIsArray() {
77         for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) {
78             assertEquals(false, ptu.isArray());
79         }
80     }
81 
82     @Test
testIsPrimitive()83     void testIsPrimitive() {
84         for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) {
85             assertEquals(true, ptu.isPrimitive());
86         }
87     }
88 
89     @Test
testIsNull()90     void testIsNull() {
91         for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) {
92             assertEquals(false, ptu.isNull());
93         }
94     }
95 
96     @Test
testIsReference()97     void testIsReference() {
98         for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) {
99             assertEquals(false, ptu.isReference());
100         }
101     }
102 
103     @Test
testIsReferenceType()104     void testIsReferenceType() {
105         for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) {
106             assertEquals(false, ptu.isReferenceType());
107         }
108     }
109 
110     @Test
testIsVoid()111     void testIsVoid() {
112         for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) {
113             assertEquals(false, ptu.isVoid());
114         }
115     }
116 
117     @Test
testIsTypeVariable()118     void testIsTypeVariable() {
119         for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) {
120             assertEquals(false, ptu.isTypeVariable());
121         }
122     }
123 
124     @Test
testAsReferenceTypeUsage()125     void testAsReferenceTypeUsage() {
126         for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) {
127             try {
128                 ptu.asReferenceType();
129                 fail();
130             } catch (UnsupportedOperationException e) {
131             }
132         }
133     }
134 
135     @Test
testAsTypeParameter()136     void testAsTypeParameter() {
137         for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) {
138             try {
139                 ptu.asTypeParameter();
140                 fail();
141             } catch (UnsupportedOperationException e) {
142             }
143         }
144     }
145 
146     @Test
testAsArrayTypeUsage()147     void testAsArrayTypeUsage() {
148         for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) {
149             try {
150                 ptu.asArrayType();
151                 fail();
152             } catch (UnsupportedOperationException e) {
153             }
154         }
155     }
156 
157     @Test
testAsDescribe()158     void testAsDescribe() {
159         assertEquals("boolean", ResolvedPrimitiveType.BOOLEAN.describe());
160         assertEquals("char", ResolvedPrimitiveType.CHAR.describe());
161         assertEquals("byte", ResolvedPrimitiveType.BYTE.describe());
162         assertEquals("short", ResolvedPrimitiveType.SHORT.describe());
163         assertEquals("int", ResolvedPrimitiveType.INT.describe());
164         assertEquals("long", ResolvedPrimitiveType.LONG.describe());
165         assertEquals("float", ResolvedPrimitiveType.FLOAT.describe());
166         assertEquals("double", ResolvedPrimitiveType.DOUBLE.describe());
167     }
168 
169     @Test
testIsAssignableByOtherPrimitiveTypes()170     void testIsAssignableByOtherPrimitiveTypes() {
171         assertEquals(true, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.BOOLEAN));
172         assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.CHAR));
173         assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.BYTE));
174         assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.SHORT));
175         assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.INT));
176         assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.LONG));
177         assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.FLOAT));
178         assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.DOUBLE));
179 
180         assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.BOOLEAN));
181         assertEquals(true, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.CHAR));
182         assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.BYTE));
183         assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.SHORT));
184         assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.INT));
185         assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.LONG));
186         assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.FLOAT));
187         assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.DOUBLE));
188 
189         assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.BOOLEAN));
190         assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.CHAR));
191         assertEquals(true, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.BYTE));
192         assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.SHORT));
193         assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.INT));
194         assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.LONG));
195         assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.FLOAT));
196         assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.DOUBLE));
197 
198         assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.BOOLEAN));
199         assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.CHAR));
200         assertEquals(true, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.BYTE));
201         assertEquals(true, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.SHORT));
202         assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.INT));
203         assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.LONG));
204         assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.FLOAT));
205         assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.DOUBLE));
206 
207         assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.BOOLEAN));
208         assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.CHAR));
209         assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.BYTE));
210         assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.SHORT));
211         assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.INT));
212         assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.LONG));
213         assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.FLOAT));
214         assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.DOUBLE));
215 
216         assertEquals(false, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.BOOLEAN));
217         assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.CHAR));
218         assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.BYTE));
219         assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.SHORT));
220         assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.INT));
221         assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.LONG));
222         assertEquals(false, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.FLOAT));
223         assertEquals(false, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.DOUBLE));
224 
225         assertEquals(false, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.BOOLEAN));
226         assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.CHAR));
227         assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.BYTE));
228         assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.SHORT));
229         assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.INT));
230         assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.LONG));
231         assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.FLOAT));
232         assertEquals(false, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.DOUBLE));
233 
234         assertEquals(false, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.BOOLEAN));
235         assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.CHAR));
236         assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.BYTE));
237         assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.SHORT));
238         assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.INT));
239         assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.LONG));
240         assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.FLOAT));
241         assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.DOUBLE));
242     }
243 
244     @Test
testIsAssignableByBoxedTypes()245     void testIsAssignableByBoxedTypes() {
246         assertEquals(true, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(booleanBox));
247         assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(characterBox));
248         assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(byteBox));
249         assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(shortBox));
250         assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(integerBox));
251         assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(longBox));
252         assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(floatBox));
253         assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(doubleBox));
254 
255         assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(booleanBox));
256         assertEquals(true, ResolvedPrimitiveType.CHAR.isAssignableBy(characterBox));
257         assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(byteBox));
258         assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(shortBox));
259         assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(integerBox));
260         assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(longBox));
261         assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(floatBox));
262         assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(doubleBox));
263 
264         assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(booleanBox));
265         assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(characterBox));
266         assertEquals(true, ResolvedPrimitiveType.BYTE.isAssignableBy(byteBox));
267         assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(shortBox));
268         assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(integerBox));
269         assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(longBox));
270         assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(floatBox));
271         assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(doubleBox));
272 
273         assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(booleanBox));
274         assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(characterBox));
275         assertEquals(true, ResolvedPrimitiveType.SHORT.isAssignableBy(byteBox));
276         assertEquals(true, ResolvedPrimitiveType.SHORT.isAssignableBy(shortBox));
277         assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(integerBox));
278         assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(longBox));
279         assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(floatBox));
280         assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(doubleBox));
281 
282         assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(booleanBox));
283         assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(characterBox));
284         assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(byteBox));
285         assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(shortBox));
286         assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(integerBox));
287         assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(longBox));
288         assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(floatBox));
289         assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(doubleBox));
290 
291         assertEquals(false, ResolvedPrimitiveType.LONG.isAssignableBy(booleanBox));
292         assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(characterBox));
293         assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(byteBox));
294         assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(shortBox));
295         assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(integerBox));
296         assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(longBox));
297         assertEquals(false, ResolvedPrimitiveType.LONG.isAssignableBy(floatBox));
298         assertEquals(false, ResolvedPrimitiveType.LONG.isAssignableBy(doubleBox));
299 
300         assertEquals(false, ResolvedPrimitiveType.FLOAT.isAssignableBy(booleanBox));
301         assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(characterBox));
302         assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(byteBox));
303         assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(shortBox));
304         assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(integerBox));
305         assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(longBox));
306         assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(floatBox));
307         assertEquals(false, ResolvedPrimitiveType.FLOAT.isAssignableBy(doubleBox));
308 
309         assertEquals(false, ResolvedPrimitiveType.DOUBLE.isAssignableBy(booleanBox));
310         assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(characterBox));
311         assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(byteBox));
312         assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(shortBox));
313         assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(integerBox));
314         assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(longBox));
315         assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(floatBox));
316         assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(doubleBox));
317     }
318 
319     @Test
testIsAssignableByAnythingElse()320     void testIsAssignableByAnythingElse() {
321         for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) {
322             assertEquals(false, ptu.isAssignableBy(OBJECT));
323             assertEquals(false, ptu.isAssignableBy(STRING));
324             assertEquals(false, ptu.isAssignableBy(NullType.INSTANCE));
325             assertEquals(false, ptu.isAssignableBy(ResolvedVoidType.INSTANCE));
326             assertEquals(false, ptu.isAssignableBy(arrayOfBooleans));
327             assertEquals(false, ptu.isAssignableBy(arrayOfListOfA));
328         }
329     }
330 
331 }
332