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