GenericStringTest.java revision 0:37a05a11f281
1/*
2 * Copyright 2004-2006 Sun Microsystems, Inc.  All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 */
23
24/*
25 * @test
26 * @bug 5033583 6316717 6470106
27 * @summary Check toGenericString() and toString() methods
28 * @author Joseph D. Darcy
29 * @compile -source 1.5 GenericStringTest.java
30 * @run main GenericStringTest
31 */
32
33import java.lang.reflect.*;
34import java.lang.annotation.*;
35import java.util.*;
36
37public class GenericStringTest {
38    public static void main(String argv[]) throws Exception{
39        int failures = 0;
40        List<Class<?>> classList = new LinkedList<Class<?>>();
41        classList.add(TestClass1.class);
42        classList.add(TestClass2.class);
43
44
45        for(Class<?> clazz: classList)
46            for(Constructor<?> ctor: clazz.getDeclaredConstructors()) {
47                ExpectedGenericString egs = ctor.getAnnotation(ExpectedGenericString.class);
48                String actual = ctor.toGenericString();
49                System.out.println(actual);
50                if (! egs.value().equals(actual)) {
51                    failures++;
52                    System.err.printf("ERROR: Expected generic string ''%s''; got ''%s''.\n",
53                                      egs.value(), actual);
54                }
55
56                if (ctor.isAnnotationPresent(ExpectedString.class)) {
57                    ExpectedString es = ctor.getAnnotation(ExpectedString.class);
58                    String result = ctor.toString();
59                    if (! es.value().equals(result)) {
60                        failures++;
61                        System.err.printf("ERROR: Expected ''%s''; got ''%s''.\n",
62                                          es.value(), result);
63                    }
64                }
65            }
66
67        if (failures > 0) {
68            System.err.println("Test failed.");
69            throw new RuntimeException();
70        }
71    }
72}
73
74class TestClass1 {
75    @ExpectedGenericString(
76   "TestClass1(int,double)")
77    TestClass1(int x, double y) {}
78
79    @ExpectedGenericString(
80   "private TestClass1(int,int)")
81    private TestClass1(int x, int param2) {}
82
83    @ExpectedGenericString(
84   "private TestClass1(java.lang.Object) throws java.lang.RuntimeException")
85    private TestClass1(Object o) throws RuntimeException {}
86
87    @ExpectedGenericString(
88   "protected <S,T> TestClass1(S,T) throws java.lang.Exception")
89    protected <S, T> TestClass1(S s, T t) throws Exception{}
90
91    @ExpectedGenericString(
92   "TestClass1(java.lang.Object...)")
93    @ExpectedString(
94   "TestClass1(java.lang.Object[])")
95    TestClass1(Object... o){}
96}
97
98class TestClass2<E> {
99    @ExpectedGenericString(
100   "public <T> TestClass2(E,T)")
101    public <T> TestClass2(E e, T t) {}
102}
103
104@Retention(RetentionPolicy.RUNTIME)
105@interface ExpectedGenericString {
106    String value();
107}
108
109@Retention(RetentionPolicy.RUNTIME)
110@interface ExpectedString {
111    String value();
112}
113