001: /*
002: * Copyright 2007 Google Inc.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005: * use this file except in compliance with the License. You may obtain a copy of
006: * the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012: * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013: * License for the specific language governing permissions and limitations under
014: * the License.
015: */
016: package com.google.gwt.core.ext.typeinfo;
017:
018: import com.google.gwt.core.ext.TreeLogger;
019: import com.google.gwt.core.ext.UnableToCompleteException;
020: import com.google.gwt.core.ext.typeinfo.test.CA;
021: import com.google.gwt.core.ext.typeinfo.test.CB;
022: import com.google.gwt.core.ext.typeinfo.test.MyCustomList;
023: import com.google.gwt.core.ext.typeinfo.test.MyList;
024: import com.google.gwt.dev.util.log.PrintWriterTreeLogger;
025:
026: import junit.framework.TestCase;
027:
028: /**
029: * Tests for {@link JArrayType}.
030: */
031: public class JArrayTypeTest extends TestCase {
032: /*
033: * Returns int[][]
034: */
035: private static JArrayType getIntArray(TypeOracle oracle) {
036: return oracle.getArrayType(getIntVector(oracle));
037: }
038:
039: /*
040: * Returns int[].
041: */
042: private static JArrayType getIntVector(TypeOracle oracle) {
043: return oracle.getArrayType(JPrimitiveType.INT);
044: }
045:
046: /*
047: * Returns Object[][]
048: */
049: private static JArrayType getObjectArray(TypeOracle oracle) {
050: return oracle.getArrayType(getObjectVector(oracle));
051: }
052:
053: /*
054: * Returns Object[].
055: */
056: private static JArrayType getObjectVector(TypeOracle oracle) {
057: return oracle.getArrayType(oracle.getJavaLangObject());
058: }
059:
060: private final boolean logToConsole = false;
061:
062: private final ModuleContext moduleContext = new ModuleContext(
063: logToConsole ? new PrintWriterTreeLogger()
064: : TreeLogger.NULL,
065: "com.google.gwt.core.ext.typeinfo.TypeOracleTest");
066:
067: public JArrayTypeTest() throws UnableToCompleteException {
068: }
069:
070: public void testGetSubtypes() throws NotFoundException {
071: JArrayType testArrayType = getTestArrayType();
072:
073: JArrayType[] arraySubtypes = testArrayType.getSubtypes();
074: assertEquals(2, arraySubtypes.length);
075:
076: for (int i = 0; i < arraySubtypes.length; ++i) {
077: assertTrue(testArrayType.isAssignableFrom(arraySubtypes[i]));
078: }
079: }
080:
081: public void testGetSuperclass() throws NotFoundException {
082: TypeOracle oracle = moduleContext.getOracle();
083: JArrayType intVector = getIntVector(oracle);
084: JArrayType intArray = getIntArray(oracle);
085:
086: // Check that superclass of int[][] is Object
087: assertEquals(oracle.getJavaLangObject(), intArray
088: .getSuperclass());
089:
090: // Check that superclass of int[] is Object
091: assertEquals(oracle.getJavaLangObject(), intVector
092: .getSuperclass());
093:
094: // CB
095: JClassType cbType = oracle.getType(CB.class.getCanonicalName());
096:
097: // CB[]
098: JArrayType cbVector = oracle.getArrayType(cbType);
099:
100: // CB[][]
101: JArrayType cbArray = oracle.getArrayType(cbVector);
102: assertEquals(oracle.getJavaLangObject(), cbArray
103: .getSuperclass());
104:
105: // Check that CA[][] has a supertype of Object
106: assertEquals(oracle.getJavaLangObject(), cbArray
107: .getSuperclass());
108:
109: // Check that Object[] has supertype of Object
110: JArrayType objVector = getObjectVector(oracle);
111: assertEquals(oracle.getJavaLangObject(), objVector
112: .getSuperclass());
113: }
114:
115: public void testIsAssignableFrom() throws NotFoundException {
116: TypeOracle oracle = moduleContext.getOracle();
117:
118: JArrayType intVector = getIntVector(oracle);
119: JArrayType intArray = getIntArray(oracle);
120: JArrayType objVector = getObjectVector(oracle);
121: JArrayType objArray = getObjectArray(oracle);
122:
123: // Object[] is not assignable from int[]
124: assertFalse(objVector.isAssignableFrom(intVector));
125: assertFalse(intVector.isAssignableFrom(objVector));
126:
127: // Object[] is assignable from int[][]
128: assertTrue(objVector.isAssignableFrom(intArray));
129:
130: // Object[] is assignable from Object[][]
131: assertTrue(objVector.isAssignableFrom(objArray));
132:
133: // int[] is assignable from int[]
134: assertTrue(intVector.isAssignableFrom(intVector));
135:
136: // int[] is assignable from int[][]
137: assertFalse(intArray.isAssignableFrom(intVector));
138:
139: JClassType testSubtype = oracle.getType(MyCustomList.class
140: .getName());
141:
142: // MyCustomList[]
143: JArrayType testArraySubtype = oracle.getArrayType(testSubtype);
144:
145: // MyList[] is assignable from MyCustomList[]
146: assertTrue(getTestArrayType()
147: .isAssignableFrom(testArraySubtype));
148:
149: // MyCustomList[]
150: JArrayType testVectorSubtype = oracle
151: .getArrayType(testArraySubtype);
152:
153: // MyList[] is not assignable from MyCustomList[][]
154: assertFalse(getTestArrayType().isAssignableFrom(
155: testVectorSubtype));
156:
157: // MyCustomList[] is not assignable from MyList[]
158: assertFalse(testArraySubtype
159: .isAssignableFrom(getTestArrayType()));
160: }
161:
162: public void testIsAssignableTo() throws NotFoundException {
163: TypeOracle oracle = moduleContext.getOracle();
164: JClassType testSubtype = oracle.getType(MyCustomList.class
165: .getName());
166: JArrayType testArraySubtype = oracle.getArrayType(testSubtype);
167:
168: // MyCustomList[] is assignable to MyList[]
169: assertTrue(testArraySubtype.isAssignableTo(getTestArrayType()));
170:
171: // MyCustomList[] is assignable to Object
172: assertTrue(testArraySubtype.isAssignableTo(oracle
173: .getJavaLangObject()));
174:
175: // MyList[] is not assignable to MyCustomList[]
176: assertFalse(getTestArrayType().isAssignableTo(testArraySubtype));
177:
178: // MyList[] is assignable to MyCustomList[]
179: assertFalse(getTestArrayType().isAssignableTo(testArraySubtype));
180:
181: }
182:
183: private JArrayType getTestArrayType() throws NotFoundException {
184: TypeOracle oracle = moduleContext.getOracle();
185: JGenericType genericComponentType = oracle.getType(
186: MyList.class.getName()).isGenericType();
187:
188: return oracle.getArrayType(genericComponentType);
189: }
190: }
|