| /* |
| * Copyright 2007 Google Inc. |
| * |
| * 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.google.gwt.dev.javac.typemodel; |
| |
| import com.google.gwt.core.ext.TreeLogger; |
| import com.google.gwt.core.ext.UnableToCompleteException; |
| import com.google.gwt.core.ext.typeinfo.JPrimitiveType; |
| import com.google.gwt.core.ext.typeinfo.NotFoundException; |
| import com.google.gwt.dev.javac.typemodel.test.CB; |
| import com.google.gwt.dev.javac.typemodel.test.MyCustomList; |
| import com.google.gwt.dev.javac.typemodel.test.MyList; |
| import com.google.gwt.dev.util.log.PrintWriterTreeLogger; |
| |
| import junit.framework.TestCase; |
| |
| /** |
| * Tests for {@link JArrayType}. |
| */ |
| public class JArrayTypeTest extends TestCase { |
| /* |
| * Returns int[][] |
| */ |
| private static JArrayType getIntArray(TypeOracle oracle) { |
| return oracle.getArrayType(getIntVector(oracle)); |
| } |
| |
| /* |
| * Returns int[]. |
| */ |
| private static JArrayType getIntVector(TypeOracle oracle) { |
| return oracle.getArrayType(JPrimitiveType.INT); |
| } |
| |
| /* |
| * Returns Object[][] |
| */ |
| private static JArrayType getObjectArray(TypeOracle oracle) { |
| return oracle.getArrayType(getObjectVector(oracle)); |
| } |
| |
| /* |
| * Returns Object[]. |
| */ |
| private static JArrayType getObjectVector(TypeOracle oracle) { |
| return oracle.getArrayType(oracle.getJavaLangObject()); |
| } |
| |
| private final boolean logToConsole = false; |
| |
| private final ModuleContext moduleContext = new ModuleContext(logToConsole |
| ? new PrintWriterTreeLogger() : TreeLogger.NULL, |
| "com.google.gwt.dev.javac.typemodel.TypeOracleTest"); |
| |
| public JArrayTypeTest() throws UnableToCompleteException { |
| } |
| |
| public void testGetSubtypes() throws NotFoundException { |
| JArrayType testArrayType = getTestArrayType(); |
| |
| JArrayType[] arraySubtypes = testArrayType.getSubtypes(); |
| assertEquals(2, arraySubtypes.length); |
| |
| for (int i = 0; i < arraySubtypes.length; ++i) { |
| assertTrue(testArrayType.isAssignableFrom(arraySubtypes[i])); |
| } |
| } |
| |
| public void testGetSuperclass() throws NotFoundException { |
| TypeOracle oracle = moduleContext.getOracle(); |
| JArrayType intVector = getIntVector(oracle); |
| JArrayType intArray = getIntArray(oracle); |
| |
| // Check that superclass of int[][] is Object |
| assertEquals(oracle.getJavaLangObject(), intArray.getSuperclass()); |
| |
| // Check that superclass of int[] is Object |
| assertEquals(oracle.getJavaLangObject(), intVector.getSuperclass()); |
| |
| // CB |
| JClassType cbType = oracle.getType(CB.class.getCanonicalName()); |
| |
| // CB[] |
| JArrayType cbVector = oracle.getArrayType(cbType); |
| |
| // CB[][] |
| JArrayType cbArray = oracle.getArrayType(cbVector); |
| assertEquals(oracle.getJavaLangObject(), cbArray.getSuperclass()); |
| |
| // Check that CA[][] has a supertype of Object |
| assertEquals(oracle.getJavaLangObject(), cbArray.getSuperclass()); |
| |
| // Check that Object[] has supertype of Object |
| JArrayType objVector = getObjectVector(oracle); |
| assertEquals(oracle.getJavaLangObject(), objVector.getSuperclass()); |
| } |
| |
| public void testIsAssignableFrom() throws NotFoundException { |
| TypeOracle oracle = moduleContext.getOracle(); |
| |
| JArrayType intVector = getIntVector(oracle); |
| JArrayType intArray = getIntArray(oracle); |
| JArrayType objVector = getObjectVector(oracle); |
| JArrayType objArray = getObjectArray(oracle); |
| |
| // Object[] is not assignable from int[] |
| assertFalse(objVector.isAssignableFrom(intVector)); |
| assertFalse(intVector.isAssignableFrom(objVector)); |
| |
| // Object[] is assignable from int[][] |
| assertTrue(objVector.isAssignableFrom(intArray)); |
| |
| // Object[] is assignable from Object[][] |
| assertTrue(objVector.isAssignableFrom(objArray)); |
| |
| // int[] is assignable from int[] |
| assertTrue(intVector.isAssignableFrom(intVector)); |
| |
| // int[] is assignable from int[][] |
| assertFalse(intArray.isAssignableFrom(intVector)); |
| |
| JClassType testSubtype = oracle.getType(MyCustomList.class.getName()); |
| |
| // MyCustomList[] |
| JArrayType testArraySubtype = oracle.getArrayType(testSubtype); |
| |
| // MyList[] is assignable from MyCustomList[] |
| assertTrue(getTestArrayType().isAssignableFrom(testArraySubtype)); |
| |
| // MyCustomList[] |
| JArrayType testVectorSubtype = oracle.getArrayType(testArraySubtype); |
| |
| // MyList[] is not assignable from MyCustomList[][] |
| assertFalse(getTestArrayType().isAssignableFrom(testVectorSubtype)); |
| |
| // MyCustomList[] is not assignable from MyList[] |
| assertFalse(testArraySubtype.isAssignableFrom(getTestArrayType())); |
| } |
| |
| public void testIsAssignableTo() throws NotFoundException { |
| TypeOracle oracle = moduleContext.getOracle(); |
| JClassType testSubtype = oracle.getType(MyCustomList.class.getName()); |
| JArrayType testArraySubtype = oracle.getArrayType(testSubtype); |
| |
| // MyCustomList[] is assignable to MyList[] |
| assertTrue(testArraySubtype.isAssignableTo(getTestArrayType())); |
| |
| // MyCustomList[] is assignable to Object |
| assertTrue(testArraySubtype.isAssignableTo(oracle.getJavaLangObject())); |
| |
| // MyList[] is not assignable to MyCustomList[] |
| assertFalse(getTestArrayType().isAssignableTo(testArraySubtype)); |
| |
| // MyList[] is assignable to MyCustomList[] |
| assertFalse(getTestArrayType().isAssignableTo(testArraySubtype)); |
| |
| } |
| |
| private JArrayType getTestArrayType() throws NotFoundException { |
| TypeOracle oracle = moduleContext.getOracle(); |
| JGenericType genericComponentType = oracle.getType(MyList.class.getName()).isGenericType(); |
| |
| return oracle.getArrayType(genericComponentType); |
| } |
| } |