1683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti/* 2683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * Copyright 2016 Federico Tomassetti 3683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * 4683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * Licensed under the Apache License, Version 2.0 (the "License"); 5683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * you may not use this file except in compliance with the License. 6683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * You may obtain a copy of the License at 7683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * 8683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * http://www.apache.org/licenses/LICENSE-2.0 9683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * 10683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * Unless required by applicable law or agreed to in writing, software 11683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * distributed under the License is distributed on an "AS IS" BASIS, 12683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * See the License for the specific language governing permissions and 14683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti * limitations under the License. 15683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti */ 16683012de2a3a28358e848f8b145d462eb8b322baFederico Tomassetti 1708322b4714f672bed5ec424d3ace0a40da9ccd47Federico Tomassettipackage com.github.javaparser.symbolsolver.model.typesystem; 18ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 1918ca9b376e741092b802dac32d950af3ef6d289aFederico Tomassettiimport com.github.javaparser.resolution.declarations.ResolvedTypeParameterDeclaration; 2018ca9b376e741092b802dac32d950af3ef6d289aFederico Tomassettiimport com.github.javaparser.resolution.types.ResolvedArrayType; 2118ca9b376e741092b802dac32d950af3ef6d289aFederico Tomassettiimport com.github.javaparser.resolution.types.ResolvedPrimitiveType; 2218ca9b376e741092b802dac32d950af3ef6d289aFederico Tomassettiimport com.github.javaparser.resolution.types.ResolvedTypeVariable; 2318ca9b376e741092b802dac32d950af3ef6d289aFederico Tomassettiimport com.github.javaparser.resolution.types.ResolvedVoidType; 249c53c2cbc607ea694438ade8630be0c155a33162Federico Tomassettiimport com.github.javaparser.symbolsolver.model.resolution.TypeSolver; 259c53c2cbc607ea694438ade8630be0c155a33162Federico Tomassettiimport com.github.javaparser.symbolsolver.reflectionmodel.ReflectionClassDeclaration; 269c53c2cbc607ea694438ade8630be0c155a33162Federico Tomassettiimport com.github.javaparser.symbolsolver.reflectionmodel.ReflectionInterfaceDeclaration; 2778ee47e2e07cdb0b3cf80664a4e892c9dc76df00Federico Tomassettiimport com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver; 281e7780e554428a10c73de88ca64e5933b2291593Federico Tomassettiimport com.google.common.collect.ImmutableList; 29ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassettiimport org.junit.Before; 30ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassettiimport org.junit.Test; 31ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 32ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassettiimport java.util.Collections; 33ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassettiimport java.util.List; 34ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 35ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassettiimport static org.junit.Assert.*; 36ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 3782eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassettipublic class NullTypeTest { 38ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 3918ca9b376e741092b802dac32d950af3ef6d289aFederico Tomassetti private ResolvedArrayType arrayOfBooleans; 4018ca9b376e741092b802dac32d950af3ef6d289aFederico Tomassetti private ResolvedArrayType arrayOfListOfA; 4182eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti private ReferenceTypeImpl OBJECT; 4282eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti private ReferenceTypeImpl STRING; 43ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti private TypeSolver typeSolver; 44ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 45ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti @Before 46ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti public void setup() { 4778ee47e2e07cdb0b3cf80664a4e892c9dc76df00Federico Tomassetti typeSolver = new ReflectionTypeSolver(); 4882eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti OBJECT = new ReferenceTypeImpl(new ReflectionClassDeclaration(Object.class, typeSolver), typeSolver); 4982eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti STRING = new ReferenceTypeImpl(new ReflectionClassDeclaration(String.class, typeSolver), typeSolver); 5018ca9b376e741092b802dac32d950af3ef6d289aFederico Tomassetti arrayOfBooleans = new ResolvedArrayType(ResolvedPrimitiveType.BOOLEAN); 5118ca9b376e741092b802dac32d950af3ef6d289aFederico Tomassetti arrayOfListOfA = new ResolvedArrayType(new ReferenceTypeImpl( 52ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti new ReflectionInterfaceDeclaration(List.class, typeSolver), 5318ca9b376e741092b802dac32d950af3ef6d289aFederico Tomassetti ImmutableList.of(new ResolvedTypeVariable(ResolvedTypeParameterDeclaration.onType("A", "foo.Bar", Collections.emptyList()))), typeSolver)); 54ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 55ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 56ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti @Test 57ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti public void testIsArray() { 5882eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti assertEquals(false, NullType.INSTANCE.isArray()); 59ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 60ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 61ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti @Test 62ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti public void testIsPrimitive() { 6382eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti assertEquals(false, NullType.INSTANCE.isPrimitive()); 64ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 65ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 66ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti @Test 67ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti public void testIsNull() { 6882eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti assertEquals(true, NullType.INSTANCE.isNull()); 69ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 70ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 71ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti @Test 72ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti public void testIsReference() { 7382eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti assertEquals(true, NullType.INSTANCE.isReference()); 74ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 75ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 76ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti @Test 77ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti public void testIsReferenceType() { 7882eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti assertEquals(false, NullType.INSTANCE.isReferenceType()); 79ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 80ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 81ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti @Test 82ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti public void testIsVoid() { 8382eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti assertEquals(false, NullType.INSTANCE.isVoid()); 84ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 85ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 86ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti @Test 87ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti public void testIsTypeVariable() { 8882eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti assertEquals(false, NullType.INSTANCE.isTypeVariable()); 89ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 90ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 91ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti @Test(expected = UnsupportedOperationException.class) 92ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti public void testAsReferenceTypeUsage() { 93051dbd94c17c4f142d3fe9e8fbd03c29d09ace54Federico Tomassetti NullType.INSTANCE.asReferenceType(); 94ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 95ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 96ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti @Test(expected = UnsupportedOperationException.class) 97ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti public void testAsTypeParameter() { 9882eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti NullType.INSTANCE.asTypeParameter(); 99ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 100ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 101ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti @Test(expected = UnsupportedOperationException.class) 102ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti public void testAsArrayTypeUsage() { 103051dbd94c17c4f142d3fe9e8fbd03c29d09ace54Federico Tomassetti NullType.INSTANCE.asArrayType(); 104ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 105ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 106ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti @Test 107ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti public void testAsDescribe() { 10882eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti assertEquals("null", NullType.INSTANCE.describe()); 109ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 110ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 111ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti @Test 112ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti public void testIsAssignableBy() { 113ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti try { 11482eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti assertEquals(false, NullType.INSTANCE.isAssignableBy(NullType.INSTANCE)); 115ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti fail(); 116ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } catch (UnsupportedOperationException e) { 117ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 118ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 119ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti try { 12082eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti assertEquals(false, NullType.INSTANCE.isAssignableBy(OBJECT)); 121ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti fail(); 122ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } catch (UnsupportedOperationException e) { 123ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 124ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 125ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti try { 12682eb44707b620803d424188a1eb8708fcaf093cbFederico Tomassetti assertEquals(false, NullType.INSTANCE.isAssignableBy(STRING)); 127ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti fail(); 128ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } catch (UnsupportedOperationException e) { 129ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 130ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 131ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti try { 13218ca9b376e741092b802dac32d950af3ef6d289aFederico Tomassetti assertEquals(false, NullType.INSTANCE.isAssignableBy(ResolvedPrimitiveType.BOOLEAN)); 133ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti fail(); 134ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } catch (UnsupportedOperationException e) { 135ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 136ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 137ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti try { 13818ca9b376e741092b802dac32d950af3ef6d289aFederico Tomassetti assertEquals(false, NullType.INSTANCE.isAssignableBy(ResolvedVoidType.INSTANCE)); 139ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti fail(); 140ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } catch (UnsupportedOperationException e) { 141ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 142ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 143ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti } 144ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti 145ae8fbbc8d59e9fcc495168ea2d3f1d1159bc8a4aFederico Tomassetti} 146