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