ParameterizedTypeTest.java revision 173411f7a11c81bef07adc28c66ce4c417df67ff
1/* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package tests.api.java.lang.reflect; 18 19import dalvik.annotation.BrokenTest; 20import dalvik.annotation.KnownFailure; 21import dalvik.annotation.TestLevel; 22import dalvik.annotation.TestTargetClass; 23import dalvik.annotation.TestTargetNew; 24import dalvik.annotation.TestTargets; 25 26import java.lang.reflect.Field; 27import java.lang.reflect.ParameterizedType; 28import java.lang.reflect.Type; 29 30/** 31 * Tests parameterized types and their properties. 32 */ 33@TestTargetClass(ParameterizedType.class) 34public class ParameterizedTypeTest extends GenericReflectionTestsBase { 35 36 static class A<T>{} 37 static class B extends A<String>{} 38 39 @TestTargets({ 40 @TestTargetNew( 41 level = TestLevel.SUFFICIENT, 42 notes = "Missing tests for TypeNotPresentException, MalformedParametrizedTypeException", 43 method = "getActualTypeArguments", 44 args = {} 45 ), 46 @TestTargetNew( 47 level = TestLevel.SUFFICIENT, 48 notes = "Missing tests for TypeNotPresentException, MalformedParametrizedTypeException", 49 method = "getOwnerType", 50 args = {} 51 ), 52 @TestTargetNew( 53 level = TestLevel.SUFFICIENT, 54 notes = "Missing tests for TypeNotPresentException, MalformedParametrizedTypeException", 55 method = "getRawType", 56 args = {} 57 ) 58 }) 59 @BrokenTest(value = "fails when run using CTS harness bug 2155700") 60 public void testStringParameterizedSuperClass() { 61 Class<? extends B> clazz = B.class; 62 Type genericSuperclass = clazz.getGenericSuperclass(); 63 assertInstanceOf(ParameterizedType.class, genericSuperclass); 64 ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass; 65 assertEquals(ParameterizedTypeTest.class, parameterizedType.getOwnerType()); 66 assertEquals(A.class, parameterizedType.getRawType()); 67 68 Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); 69 assertLenghtOne(actualTypeArguments); 70 assertEquals(String.class, actualTypeArguments[0]); 71 } 72 73 static class C<T>{} 74 static class D<T> extends C<T>{} 75 76 @TestTargets({ 77 @TestTargetNew( 78 level = TestLevel.SUFFICIENT, 79 notes = "Missing tests for TypeNotPresentException, MalformedParametrizedTypeException", 80 method = "getActualTypeArguments", 81 args = {} 82 ), 83 @TestTargetNew( 84 level = TestLevel.SUFFICIENT, 85 notes = "Missing tests for TypeNotPresentException, MalformedParametrizedTypeException", 86 method = "getOwnerType", 87 args = {} 88 ), 89 @TestTargetNew( 90 level = TestLevel.SUFFICIENT, 91 notes = "Missing tests for TypeNotPresentException, MalformedParametrizedTypeException", 92 method = "getRawType", 93 args = {} 94 ) 95 }) 96 @BrokenTest(value = "fails when run using CTS harness bug 2155700") 97 public void testTypeParameterizedSuperClass() { 98 Class<? extends D> clazz = D.class; 99 Type genericSuperclass = clazz.getGenericSuperclass(); 100 assertInstanceOf(ParameterizedType.class, genericSuperclass); 101 ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass; 102 assertEquals(ParameterizedTypeTest.class, parameterizedType.getOwnerType()); 103 assertEquals(C.class, parameterizedType.getRawType()); 104 105 Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); 106 assertLenghtOne(actualTypeArguments); 107 assertEquals(getTypeParameter(D.class), actualTypeArguments[0]); 108 } 109 110 static class E<T>{} 111 static class F<T>{ 112 E<T> e; 113 } 114 115 @TestTargets({ 116 @TestTargetNew( 117 level = TestLevel.SUFFICIENT, 118 notes = "Missing tests for TypeNotPresentException, MalformedParametrizedTypeException", 119 method = "getActualTypeArguments", 120 args = {} 121 ), 122 @TestTargetNew( 123 level = TestLevel.SUFFICIENT, 124 notes = "Missing tests for TypeNotPresentException, MalformedParametrizedTypeException", 125 method = "getOwnerType", 126 args = {} 127 ), 128 @TestTargetNew( 129 level = TestLevel.SUFFICIENT, 130 notes = "Missing tests for TypeNotPresentException, MalformedParametrizedTypeException", 131 method = "getRawType", 132 args = {} 133 ) 134 }) 135 public void testParameterizedMemeber() throws Exception{ 136 Class<? extends F> clazz = F.class; 137 Field field = clazz.getDeclaredField("e"); 138 assertInstanceOf(ParameterizedType.class, field.getGenericType()); 139 ParameterizedType parameterizedType = (ParameterizedType) field.getGenericType(); 140 assertEquals(ParameterizedTypeTest.class, parameterizedType.getOwnerType()); 141 assertEquals(E.class, parameterizedType.getRawType()); 142 143 Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); 144 assertLenghtOne(actualTypeArguments); 145 assertEquals(getTypeParameter(clazz), actualTypeArguments[0]); 146 } 147} 148