/* * SonarQube Java * Copyright (C) 2012-2016 SonarSource SA * mailto:contact AT sonarsource DOT com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.sonar.java.resolve; import com.google.common.collect.Lists; import org.assertj.core.api.Fail; import org.junit.Test; import java.io.File; import static org.assertj.core.api.Assertions.assertThat; public class SymbolsTest { private Symbols symbols = new Symbols(new BytecodeCompleter(Lists.<File>newArrayList(), new ParametrizedTypeCache())); @Test public void root_package() { assertThat(symbols.rootPackage.name).isEqualTo(""); assertThat(symbols.rootPackage.owner()).isNull(); } @Test public void builtin_types() { assertThat(symbols.byteType.tag).isEqualTo(JavaType.BYTE); assertThat(symbols.byteType.symbol.name).isEqualTo("byte"); assertThat(symbols.byteType.symbol.flags()).isEqualTo(Flags.PUBLIC); assertThat(symbols.byteType.symbol.owner()).isSameAs(symbols.rootPackage); assertThat(symbols.byteType.primitiveType()).isNull(); assertThat(symbols.byteType.primitiveWrapperType()).isNotNull(); assertThat(symbols.charType.tag).isEqualTo(JavaType.CHAR); assertThat(symbols.charType.symbol.name).isEqualTo("char"); assertThat(symbols.charType.symbol.flags()).isEqualTo(Flags.PUBLIC); assertThat(symbols.charType.symbol.owner()).isSameAs(symbols.rootPackage); assertThat(symbols.charType.primitiveType()).isNull(); assertThat(symbols.charType.primitiveWrapperType()).isNotNull(); assertThat(symbols.shortType.tag).isEqualTo(JavaType.SHORT); assertThat(symbols.shortType.symbol.name).isEqualTo("short"); assertThat(symbols.shortType.symbol.flags()).isEqualTo(Flags.PUBLIC); assertThat(symbols.shortType.symbol.owner()).isSameAs(symbols.rootPackage); assertThat(symbols.shortType.primitiveType()).isNull(); assertThat(symbols.shortType.primitiveWrapperType()).isNotNull(); assertThat(symbols.intType.tag).isEqualTo(JavaType.INT); assertThat(symbols.intType.symbol.name).isEqualTo("int"); assertThat(symbols.intType.symbol.flags()).isEqualTo(Flags.PUBLIC); assertThat(symbols.intType.symbol.owner()).isSameAs(symbols.rootPackage); assertThat(symbols.intType.primitiveType()).isNull(); assertThat(symbols.intType.primitiveWrapperType()).isNotNull(); assertThat(symbols.longType.tag).isEqualTo(JavaType.LONG); assertThat(symbols.longType.symbol.name).isEqualTo("long"); assertThat(symbols.longType.symbol.flags()).isEqualTo(Flags.PUBLIC); assertThat(symbols.longType.symbol.owner()).isSameAs(symbols.rootPackage); assertThat(symbols.longType.primitiveType()).isNull(); assertThat(symbols.longType.primitiveWrapperType()).isNotNull(); assertThat(symbols.floatType.tag).isEqualTo(JavaType.FLOAT); assertThat(symbols.floatType.symbol.name).isEqualTo("float"); assertThat(symbols.floatType.symbol.flags()).isEqualTo(Flags.PUBLIC); assertThat(symbols.floatType.symbol.owner()).isSameAs(symbols.rootPackage); assertThat(symbols.floatType.primitiveType()).isNull(); assertThat(symbols.floatType.primitiveWrapperType()).isNotNull(); assertThat(symbols.doubleType.tag).isEqualTo(JavaType.DOUBLE); assertThat(symbols.doubleType.symbol.name).isEqualTo("double"); assertThat(symbols.doubleType.symbol.flags()).isEqualTo(Flags.PUBLIC); assertThat(symbols.doubleType.symbol.owner()).isSameAs(symbols.rootPackage); assertThat(symbols.doubleType.primitiveType()).isNull(); assertThat(symbols.doubleType.primitiveWrapperType()).isNotNull(); assertThat(symbols.booleanType.tag).isEqualTo(JavaType.BOOLEAN); assertThat(symbols.booleanType.symbol.name).isEqualTo("boolean"); assertThat(symbols.booleanType.symbol.flags()).isEqualTo(Flags.PUBLIC); assertThat(symbols.booleanType.symbol.owner()).isSameAs(symbols.rootPackage); assertThat(symbols.booleanType.primitiveType()).isNull(); assertThat(symbols.booleanType.primitiveWrapperType()).isNotNull(); assertThat(symbols.nullType.tag).isEqualTo(JavaType.BOT); assertThat(symbols.nullType.symbol.name).isEqualTo("<nulltype>"); assertThat(symbols.nullType.symbol.flags()).isEqualTo(Flags.PUBLIC); assertThat(symbols.nullType.symbol.owner()).isSameAs(symbols.rootPackage); } @Test public void array_class() { assertThat(symbols.arrayClass.owner()).isSameAs(symbols.noSymbol); assertThat(symbols.arrayClass.name).isEqualTo("Array"); assertThat(symbols.arrayClass.flags()).isEqualTo(Flags.PUBLIC); assertThat(symbols.arrayClass.members.lookup("length")).hasSize(1); JavaSymbol.VariableJavaSymbol lengthSymbol = (JavaSymbol.VariableJavaSymbol) symbols.arrayClass.members.lookup("length").get(0); assertThat(lengthSymbol.name).isEqualTo("length"); assertThat(lengthSymbol.owner()).isSameAs(symbols.arrayClass); assertThat(lengthSymbol.flags()).isEqualTo(Flags.PUBLIC | Flags.FINAL); assertThat(lengthSymbol.type).isSameAs(symbols.intType); ClassJavaType arrayClassType = ((ClassJavaType) symbols.arrayClass.type); assertThat(arrayClassType.supertype).isSameAs(symbols.objectType); assertThat(arrayClassType.interfaces).containsOnly(symbols.cloneableType, symbols.serializableType); } @Test public void primitive_type_from_descriptor() { assertThat(symbols.getPrimitiveFromDescriptor('S')).isSameAs(symbols.shortType); assertThat(symbols.getPrimitiveFromDescriptor('I')).isSameAs(symbols.intType); assertThat(symbols.getPrimitiveFromDescriptor('C')).isSameAs(symbols.charType); assertThat(symbols.getPrimitiveFromDescriptor('Z')).isSameAs(symbols.booleanType); assertThat(symbols.getPrimitiveFromDescriptor('B')).isSameAs(symbols.byteType); assertThat(symbols.getPrimitiveFromDescriptor('J')).isSameAs(symbols.longType); assertThat(symbols.getPrimitiveFromDescriptor('F')).isSameAs(symbols.floatType); assertThat(symbols.getPrimitiveFromDescriptor('D')).isSameAs(symbols.doubleType); assertThat(symbols.getPrimitiveFromDescriptor('V')).isSameAs(symbols.voidType); try { symbols.getPrimitiveFromDescriptor('P'); Fail.fail("should have thrown an exception"); }catch (IllegalStateException ise) { assertThat(ise.getMessage()).contains("'P'"); } } }