blob: 49709884f5605c9e359786a07f15b67085c432a0 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
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}