diff options
Diffstat (limited to 'javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/model/typesystem/PrimitiveTypeTest.java')
-rw-r--r-- | javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/model/typesystem/PrimitiveTypeTest.java | 331 |
1 files changed, 331 insertions, 0 deletions
diff --git a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/model/typesystem/PrimitiveTypeTest.java b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/model/typesystem/PrimitiveTypeTest.java new file mode 100644 index 000000000..3679dbd41 --- /dev/null +++ b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/model/typesystem/PrimitiveTypeTest.java @@ -0,0 +1,331 @@ +/* + * Copyright 2016 Federico Tomassetti + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.github.javaparser.symbolsolver.model.typesystem; + +import com.github.javaparser.resolution.declarations.ResolvedTypeParameterDeclaration; +import com.github.javaparser.resolution.types.ResolvedArrayType; +import com.github.javaparser.resolution.types.ResolvedPrimitiveType; +import com.github.javaparser.resolution.types.ResolvedTypeVariable; +import com.github.javaparser.resolution.types.ResolvedVoidType; +import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; +import com.github.javaparser.symbolsolver.reflectionmodel.ReflectionClassDeclaration; +import com.github.javaparser.symbolsolver.reflectionmodel.ReflectionInterfaceDeclaration; +import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver; +import com.google.common.collect.ImmutableList; +import org.junit.Before; +import org.junit.Test; + +import java.util.Collections; +import java.util.List; + +import static org.junit.Assert.*; + +public class PrimitiveTypeTest { + + private ResolvedArrayType arrayOfBooleans; + private ResolvedArrayType arrayOfListOfA; + private ReferenceTypeImpl OBJECT; + private ReferenceTypeImpl STRING; + private TypeSolver typeSolver; + + private ReferenceTypeImpl booleanBox; + private ReferenceTypeImpl characterBox; + private ReferenceTypeImpl byteBox; + private ReferenceTypeImpl shortBox; + private ReferenceTypeImpl integerBox; + private ReferenceTypeImpl longBox; + private ReferenceTypeImpl floatBox; + private ReferenceTypeImpl doubleBox; + + @Before + public void setup() { + typeSolver = new ReflectionTypeSolver(); + OBJECT = new ReferenceTypeImpl(new ReflectionClassDeclaration(Object.class, typeSolver), typeSolver); + STRING = new ReferenceTypeImpl(new ReflectionClassDeclaration(String.class, typeSolver), typeSolver); + arrayOfBooleans = new ResolvedArrayType(ResolvedPrimitiveType.BOOLEAN); + arrayOfListOfA = new ResolvedArrayType(new ReferenceTypeImpl( + new ReflectionInterfaceDeclaration(List.class, typeSolver), + ImmutableList.of(new ResolvedTypeVariable(ResolvedTypeParameterDeclaration.onType("A", "foo.Bar", Collections.emptyList()))), typeSolver)); + + booleanBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Boolean.class, typeSolver), typeSolver); + characterBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Character.class, typeSolver), typeSolver); + byteBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Byte.class, typeSolver), typeSolver); + shortBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Short.class, typeSolver), typeSolver); + integerBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Integer.class, typeSolver), typeSolver); + longBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Long.class, typeSolver), typeSolver); + floatBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Float.class, typeSolver), typeSolver); + doubleBox = new ReferenceTypeImpl(new ReflectionClassDeclaration(Double.class, typeSolver), typeSolver); + + } + + @Test + public void testIsArray() { + for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) { + assertEquals(false, ptu.isArray()); + } + } + + @Test + public void testIsPrimitive() { + for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) { + assertEquals(true, ptu.isPrimitive()); + } + } + + @Test + public void testIsNull() { + for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) { + assertEquals(false, ptu.isNull()); + } + } + + @Test + public void testIsReference() { + for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) { + assertEquals(false, ptu.isReference()); + } + } + + @Test + public void testIsReferenceType() { + for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) { + assertEquals(false, ptu.isReferenceType()); + } + } + + @Test + public void testIsVoid() { + for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) { + assertEquals(false, ptu.isVoid()); + } + } + + @Test + public void testIsTypeVariable() { + for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) { + assertEquals(false, ptu.isTypeVariable()); + } + } + + @Test + public void testAsReferenceTypeUsage() { + for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) { + try { + ptu.asReferenceType(); + fail(); + } catch (UnsupportedOperationException e) { + } + } + } + + @Test + public void testAsTypeParameter() { + for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) { + try { + ptu.asTypeParameter(); + fail(); + } catch (UnsupportedOperationException e) { + } + } + } + + @Test + public void testAsArrayTypeUsage() { + for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) { + try { + ptu.asArrayType(); + fail(); + } catch (UnsupportedOperationException e) { + } + } + } + + @Test + public void testAsDescribe() { + assertEquals("boolean", ResolvedPrimitiveType.BOOLEAN.describe()); + assertEquals("char", ResolvedPrimitiveType.CHAR.describe()); + assertEquals("byte", ResolvedPrimitiveType.BYTE.describe()); + assertEquals("short", ResolvedPrimitiveType.SHORT.describe()); + assertEquals("int", ResolvedPrimitiveType.INT.describe()); + assertEquals("long", ResolvedPrimitiveType.LONG.describe()); + assertEquals("float", ResolvedPrimitiveType.FLOAT.describe()); + assertEquals("double", ResolvedPrimitiveType.DOUBLE.describe()); + } + + @Test + public void testIsAssignableByOtherPrimitiveTypes() { + assertEquals(true, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.BOOLEAN)); + assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.CHAR)); + assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.BYTE)); + assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.SHORT)); + assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.INT)); + assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.LONG)); + assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.FLOAT)); + assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(ResolvedPrimitiveType.DOUBLE)); + + assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.BOOLEAN)); + assertEquals(true, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.CHAR)); + assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.BYTE)); + assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.SHORT)); + assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.INT)); + assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.LONG)); + assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.FLOAT)); + assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(ResolvedPrimitiveType.DOUBLE)); + + assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.BOOLEAN)); + assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.CHAR)); + assertEquals(true, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.BYTE)); + assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.SHORT)); + assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.INT)); + assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.LONG)); + assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.FLOAT)); + assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(ResolvedPrimitiveType.DOUBLE)); + + assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.BOOLEAN)); + assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.CHAR)); + assertEquals(true, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.BYTE)); + assertEquals(true, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.SHORT)); + assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.INT)); + assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.LONG)); + assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.FLOAT)); + assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(ResolvedPrimitiveType.DOUBLE)); + + assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.BOOLEAN)); + assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.CHAR)); + assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.BYTE)); + assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.SHORT)); + assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.INT)); + assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.LONG)); + assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.FLOAT)); + assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(ResolvedPrimitiveType.DOUBLE)); + + assertEquals(false, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.BOOLEAN)); + assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.CHAR)); + assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.BYTE)); + assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.SHORT)); + assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.INT)); + assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.LONG)); + assertEquals(false, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.FLOAT)); + assertEquals(false, ResolvedPrimitiveType.LONG.isAssignableBy(ResolvedPrimitiveType.DOUBLE)); + + assertEquals(false, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.BOOLEAN)); + assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.CHAR)); + assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.BYTE)); + assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.SHORT)); + assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.INT)); + assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.LONG)); + assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.FLOAT)); + assertEquals(false, ResolvedPrimitiveType.FLOAT.isAssignableBy(ResolvedPrimitiveType.DOUBLE)); + + assertEquals(false, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.BOOLEAN)); + assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.CHAR)); + assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.BYTE)); + assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.SHORT)); + assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.INT)); + assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.LONG)); + assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.FLOAT)); + assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(ResolvedPrimitiveType.DOUBLE)); + } + + @Test + public void testIsAssignableByBoxedTypes() { + assertEquals(true, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(booleanBox)); + assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(characterBox)); + assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(byteBox)); + assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(shortBox)); + assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(integerBox)); + assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(longBox)); + assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(floatBox)); + assertEquals(false, ResolvedPrimitiveType.BOOLEAN.isAssignableBy(doubleBox)); + + assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(booleanBox)); + assertEquals(true, ResolvedPrimitiveType.CHAR.isAssignableBy(characterBox)); + assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(byteBox)); + assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(shortBox)); + assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(integerBox)); + assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(longBox)); + assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(floatBox)); + assertEquals(false, ResolvedPrimitiveType.CHAR.isAssignableBy(doubleBox)); + + assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(booleanBox)); + assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(characterBox)); + assertEquals(true, ResolvedPrimitiveType.BYTE.isAssignableBy(byteBox)); + assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(shortBox)); + assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(integerBox)); + assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(longBox)); + assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(floatBox)); + assertEquals(false, ResolvedPrimitiveType.BYTE.isAssignableBy(doubleBox)); + + assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(booleanBox)); + assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(characterBox)); + assertEquals(true, ResolvedPrimitiveType.SHORT.isAssignableBy(byteBox)); + assertEquals(true, ResolvedPrimitiveType.SHORT.isAssignableBy(shortBox)); + assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(integerBox)); + assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(longBox)); + assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(floatBox)); + assertEquals(false, ResolvedPrimitiveType.SHORT.isAssignableBy(doubleBox)); + + assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(booleanBox)); + assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(characterBox)); + assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(byteBox)); + assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(shortBox)); + assertEquals(true, ResolvedPrimitiveType.INT.isAssignableBy(integerBox)); + assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(longBox)); + assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(floatBox)); + assertEquals(false, ResolvedPrimitiveType.INT.isAssignableBy(doubleBox)); + + assertEquals(false, ResolvedPrimitiveType.LONG.isAssignableBy(booleanBox)); + assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(characterBox)); + assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(byteBox)); + assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(shortBox)); + assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(integerBox)); + assertEquals(true, ResolvedPrimitiveType.LONG.isAssignableBy(longBox)); + assertEquals(false, ResolvedPrimitiveType.LONG.isAssignableBy(floatBox)); + assertEquals(false, ResolvedPrimitiveType.LONG.isAssignableBy(doubleBox)); + + assertEquals(false, ResolvedPrimitiveType.FLOAT.isAssignableBy(booleanBox)); + assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(characterBox)); + assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(byteBox)); + assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(shortBox)); + assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(integerBox)); + assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(longBox)); + assertEquals(true, ResolvedPrimitiveType.FLOAT.isAssignableBy(floatBox)); + assertEquals(false, ResolvedPrimitiveType.FLOAT.isAssignableBy(doubleBox)); + + assertEquals(false, ResolvedPrimitiveType.DOUBLE.isAssignableBy(booleanBox)); + assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(characterBox)); + assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(byteBox)); + assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(shortBox)); + assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(integerBox)); + assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(longBox)); + assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(floatBox)); + assertEquals(true, ResolvedPrimitiveType.DOUBLE.isAssignableBy(doubleBox)); + } + + @Test + public void testIsAssignableByAnythingElse() { + for (ResolvedPrimitiveType ptu : ResolvedPrimitiveType.values()) { + assertEquals(false, ptu.isAssignableBy(OBJECT)); + assertEquals(false, ptu.isAssignableBy(STRING)); + assertEquals(false, ptu.isAssignableBy(NullType.INSTANCE)); + assertEquals(false, ptu.isAssignableBy(ResolvedVoidType.INSTANCE)); + assertEquals(false, ptu.isAssignableBy(arrayOfBooleans)); + assertEquals(false, ptu.isAssignableBy(arrayOfListOfA)); + } + } + +} |