|
1 /* |
|
2 * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
20 * or visit www.oracle.com if you need additional information or have any |
|
21 * questions. |
|
22 */ |
|
23 |
|
24 import java.lang.annotation.*; |
|
25 import java.lang.reflect.*; |
|
26 |
|
27 /* |
|
28 * @test |
|
29 * @bug 8054307 |
|
30 * @summary Tests the correct encoding of latin1/UTF16 Strings used in annotations. |
|
31 */ |
|
32 public class TestAnnotatedStringEncoding { |
|
33 @Retention(RetentionPolicy.RUNTIME) |
|
34 @Target(ElementType.METHOD) |
|
35 @interface Test { |
|
36 String str(); |
|
37 int index(); |
|
38 } |
|
39 |
|
40 public static void main(String[] args) throws Exception { |
|
41 new TestAnnotatedStringEncoding().run(); |
|
42 } |
|
43 |
|
44 public void run() { |
|
45 // Iterate over annotated methods and retrieve the string |
|
46 for (Method m : this.getClass().getMethods()) { |
|
47 if (m.isAnnotationPresent(Test.class)) { |
|
48 // Check if string equals expected value |
|
49 Test test = m.getAnnotation(Test.class); |
|
50 String str = test.str(); |
|
51 int index = test.index(); |
|
52 if (!str.equals(strValue[index])) { |
|
53 throw new RuntimeException(m.getName() + " failed: \"" + str + "\" (0x" + Integer.toHexString(str.charAt(0)) + |
|
54 ") does not equal \"" + strValue[index] + "\" (0x" + Integer.toHexString(strValue[index].charAt(0)) + ") ."); |
|
55 } |
|
56 } |
|
57 } |
|
58 System.out.println("Test passed."); |
|
59 } |
|
60 |
|
61 public static String[] strValue = { |
|
62 "\u0000", "\u0020", "\u0021", "\u0080", |
|
63 "\u00FF", "\u0100", "\u017F", "\u01FF", |
|
64 "\u07FF", "\u0800", "\uC280", "\uC2BF", |
|
65 "\uC380", "\uC3BF", "\uC5BF", "\uFFFF", |
|
66 "\u10000", "\u1FFFFF", "\u200000", |
|
67 "\u3FFFFFF", "\u4000000", "\u7FFFFFFF", |
|
68 "ab\uff23\uff24ef\uff27", "\uff21\uff22cd\uff25g", "\u00FF\u00FF\u00FF", "\u00A1\u00A1\u00A1\u00A1", ""}; |
|
69 |
|
70 @Test(str = "\u0000", index = 0) |
|
71 public static void check0() { } |
|
72 |
|
73 @Test(str = "\u0020", index = 1) |
|
74 public static void check1() { } |
|
75 |
|
76 @Test(str = "\u0021", index = 2) |
|
77 public static void check2() { } |
|
78 |
|
79 @Test(str = "\u0080", index = 3) |
|
80 public static void check3() { } |
|
81 |
|
82 @Test(str = "\u00FF", index = 4) |
|
83 public static void check4() { } |
|
84 |
|
85 @Test(str = "\u0100", index = 5) |
|
86 public static void check5() { } |
|
87 |
|
88 @Test(str = "\u017F", index = 6) |
|
89 public static void check6() { } |
|
90 |
|
91 @Test(str = "\u01FF", index = 7) |
|
92 public static void check7() { } |
|
93 |
|
94 @Test(str = "\u07FF", index = 8) |
|
95 public static void check8() { } |
|
96 |
|
97 @Test(str = "\u0800", index = 9) |
|
98 public static void check9() { } |
|
99 |
|
100 @Test(str = "\uC280", index = 10) |
|
101 public static void check10() { } |
|
102 |
|
103 @Test(str = "\uC2BF", index = 11) |
|
104 public static void check11() { } |
|
105 |
|
106 @Test(str = "\uC380", index = 12) |
|
107 public static void check12() { } |
|
108 |
|
109 @Test(str = "\uC3BF", index = 13) |
|
110 public static void check13() { } |
|
111 |
|
112 @Test(str = "\uC5BF", index = 14) |
|
113 public static void check14() { } |
|
114 |
|
115 @Test(str = "\uFFFF", index = 15) |
|
116 public static void check15() { } |
|
117 |
|
118 @Test(str = "\u10000", index = 16) |
|
119 public static void check16() { } |
|
120 |
|
121 @Test(str = "\u1FFFFF", index = 17) |
|
122 public static void check17() { } |
|
123 |
|
124 @Test(str = "\u200000", index = 18) |
|
125 public static void check18() { } |
|
126 |
|
127 @Test(str = "\u3FFFFFF", index = 19) |
|
128 public static void check19() { } |
|
129 |
|
130 @Test(str = "\u4000000", index = 20) |
|
131 public static void check20() { } |
|
132 |
|
133 @Test(str = "\u7FFFFFFF", index = 21) |
|
134 public static void check21() { } |
|
135 |
|
136 @Test(str = "ab\uff23\uff24ef\uff27", index = 22) |
|
137 public static void check22() { } |
|
138 |
|
139 @Test(str = "\uff21\uff22cd\uff25g", index = 23) |
|
140 public static void check23() { } |
|
141 |
|
142 @Test(str = "\u00FF\u00FF\u00FF", index = 24) |
|
143 public static void check24() { } |
|
144 |
|
145 @Test(str = "\u00A1\u00A1\u00A1\u00A1", index = 25) |
|
146 public static void check25() { } |
|
147 |
|
148 @Test(str = "", index = 26) |
|
149 public static void check26() { } |
|
150 } |