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 33 import java.lang.reflect.*; 34 import java.lang.annotation.*; 35 import java.util.*; 36 37 public 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 74 class 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 98 class 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 }