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 */ 30 31 import java.lang.reflect.*; 32 import java.lang.annotation.*; 33 import java.util.*; 34 35 public class GenericStringTest { 36 public static void main(String argv[]) throws Exception{ 37 int failures = 0; 38 List<Class<?>> classList = new LinkedList<Class<?>>(); 39 classList.add(TestClass1.class); 40 classList.add(TestClass2.class); 41 42 43 for(Class<?> clazz: classList) 44 for(Constructor<?> ctor: clazz.getDeclaredConstructors()) { 45 ExpectedGenericString egs = ctor.getAnnotation(ExpectedGenericString.class); 46 String actual = ctor.toGenericString(); 47 System.out.println(actual); 48 if (! egs.value().equals(actual)) { 49 failures++; 50 System.err.printf("ERROR: Expected generic string ''%s''; got ''%s''.\n", 51 egs.value(), actual); 52 } 53 54 if (ctor.isAnnotationPresent(ExpectedString.class)) { 55 ExpectedString es = ctor.getAnnotation(ExpectedString.class); 56 String result = ctor.toString(); 57 if (! es.value().equals(result)) { 58 failures++; 59 System.err.printf("ERROR: Expected ''%s''; got ''%s''.\n", 60 es.value(), result); 61 } 62 } 63 } 64 65 if (failures > 0) { 66 System.err.println("Test failed."); 67 throw new RuntimeException(); 68 } 69 } 70 } 71 72 class TestClass1 { 73 @ExpectedGenericString( 74 "TestClass1(int,double)") 75 TestClass1(int x, double y) {} 76 77 @ExpectedGenericString( 78 "private TestClass1(int,int)") 79 private TestClass1(int x, int param2) {} 80 81 @ExpectedGenericString( 82 "private TestClass1(java.lang.Object) throws java.lang.RuntimeException") 83 private TestClass1(Object o) throws RuntimeException {} 84 85 @ExpectedGenericString( 86 "protected <S,T> TestClass1(S,T) throws java.lang.Exception") 87 protected <S, T> TestClass1(S s, T t) throws Exception{} 88 89 @ExpectedGenericString( 90 "TestClass1(java.lang.Object...)") 91 @ExpectedString( 92 "TestClass1(java.lang.Object[])") 93 TestClass1(Object... o){} 94 } 95 96 class TestClass2<E> { 97 @ExpectedGenericString( 98 "public <T> TestClass2(E,T)") 99 public <T> TestClass2(E e, T t) {} 100 } 101 102 @Retention(RetentionPolicy.RUNTIME) 103 @interface ExpectedGenericString { 104 String value(); 105 } 106 107 @Retention(RetentionPolicy.RUNTIME) 108 @interface ExpectedString { 109 String value(); 110 }