blob: 6af4a9fd8e96a68c8063bfd98132453b5e3f7e14 [file] [log] [blame]
darcybf596bc2009-01-29 13:04:44 -08001/*
2 * Copyright 2004-2009 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 4984908 5058132 6653154
27 * @summary Basic test of valueOf(String)
28 * @author Josh Bloch
29 *
30 * @compile ValueOf.java
31 * @run main ValueOf
32 */
33
34import java.util.*;
35import java.lang.reflect.Method;
36
37public class ValueOf {
38 static Random rnd = new Random();
39
40 public static void main(String[] args) throws Exception {
41 test(Silly0.class);
42 test(Silly1.class);
43 test(Silly31.class);
44 test(Silly32.class);
45 test(Silly33.class);
46 test(Silly63.class);
47 test(Silly64.class);
48 test(Silly65.class);
49 test(Silly127.class);
50 test(Silly128.class);
51 test(Silly129.class);
52 test(Silly500.class);
53 test(Specialized.class);
54
55 testMissingException();
56 }
57
58 static <T extends Enum<T>> void test(Class<T> enumClass) throws Exception {
59 Set<T> s = EnumSet.allOf(enumClass);
60 test(enumClass, s);
61
62 // Delete half the elements from set at random
63 for (Iterator<T> i = s.iterator(); i.hasNext(); ) {
64 i.next();
65 if (rnd.nextBoolean())
66 i.remove();
67 }
68
69 test(enumClass, s);
70 }
71
72 static <T extends Enum<T>> void test(Class<T> enumClass, Set<T> s)
73 throws Exception
74 {
75 Method valueOf = enumClass.getDeclaredMethod("valueOf", String.class);
76 Set<T> copy = EnumSet.noneOf(enumClass);
77 for (T e : s)
78 copy.add((T) valueOf.invoke(null, e.name()));
79 if (!copy.equals(s))
80 throw new Exception(copy + " != " + s);
81 }
82
83 static void testMissingException() {
84 try {
85 Enum.valueOf(Specialized.class, "BAZ");
86 throw new RuntimeException("Expected IllegalArgumentException not thrown.");
87 } catch(IllegalArgumentException iae) {
88 String message = iae.getMessage();
89 if (! "No enum constant ValueOf.Specialized.BAZ".equals(message))
90 throw new RuntimeException("Unexpected detail message: ``" + message + "''.");
91 }
92 }
93
94 enum Silly0 { };
95
96 enum Silly1 { e1 }
97
98 enum Silly31 {
99 e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
100 e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30
101 }
102
103 enum Silly32 {
104 e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
105 e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31
106 }
107
108 enum Silly33 {
109 e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
110 e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
111 e32
112 }
113
114 enum Silly63 {
115 e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
116 e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
117 e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46,
118 e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61,
119 e62
120 }
121
122 enum Silly64 {
123 e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
124 e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
125 e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46,
126 e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61,
127 e62, e63
128 }
129
130 enum Silly65 {
131 e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
132 e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
133 e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46,
134 e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61,
135 e62, e63, e64
136 }
137
138 enum Silly127 {
139 e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
140 e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
141 e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46,
142 e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61,
143 e62, e63, e64, e65, e66, e67, e68, e69, e70, e71, e72, e73, e74, e75, e76,
144 e77, e78, e79, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e90, e91,
145 e92, e93, e94, e95, e96, e97, e98, e99, e100, e101, e102, e103, e104, e105,
146 e106, e107, e108, e109, e110, e111, e112, e113, e114, e115, e116, e117,
147 e118, e119, e120, e121, e122, e123, e124, e125, e126
148 }
149
150 enum Silly128 {
151 e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
152 e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
153 e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46,
154 e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61,
155 e62, e63, e64, e65, e66, e67, e68, e69, e70, e71, e72, e73, e74, e75, e76,
156 e77, e78, e79, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e90, e91,
157 e92, e93, e94, e95, e96, e97, e98, e99, e100, e101, e102, e103, e104, e105,
158 e106, e107, e108, e109, e110, e111, e112, e113, e114, e115, e116, e117,
159 e118, e119, e120, e121, e122, e123, e124, e125, e126, e127
160 }
161
162 enum Silly129 {
163 e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
164 e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
165 e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46,
166 e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61,
167 e62, e63, e64, e65, e66, e67, e68, e69, e70, e71, e72, e73, e74, e75, e76,
168 e77, e78, e79, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e90, e91,
169 e92, e93, e94, e95, e96, e97, e98, e99, e100, e101, e102, e103, e104, e105,
170 e106, e107, e108, e109, e110, e111, e112, e113, e114, e115, e116, e117,
171 e118, e119, e120, e121, e122, e123, e124, e125, e126, e127, e128
172 }
173
174 enum Silly500 {
175 e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
176 e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
177 e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46,
178 e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61,
179 e62, e63, e64, e65, e66, e67, e68, e69, e70, e71, e72, e73, e74, e75, e76,
180 e77, e78, e79, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e90, e91,
181 e92, e93, e94, e95, e96, e97, e98, e99, e100, e101, e102, e103, e104, e105,
182 e106, e107, e108, e109, e110, e111, e112, e113, e114, e115, e116, e117,
183 e118, e119, e120, e121, e122, e123, e124, e125, e126, e127, e128, e129,
184 e130, e131, e132, e133, e134, e135, e136, e137, e138, e139, e140, e141,
185 e142, e143, e144, e145, e146, e147, e148, e149, e150, e151, e152, e153,
186 e154, e155, e156, e157, e158, e159, e160, e161, e162, e163, e164, e165,
187 e166, e167, e168, e169, e170, e171, e172, e173, e174, e175, e176, e177,
188 e178, e179, e180, e181, e182, e183, e184, e185, e186, e187, e188, e189,
189 e190, e191, e192, e193, e194, e195, e196, e197, e198, e199, e200, e201,
190 e202, e203, e204, e205, e206, e207, e208, e209, e210, e211, e212, e213,
191 e214, e215, e216, e217, e218, e219, e220, e221, e222, e223, e224, e225,
192 e226, e227, e228, e229, e230, e231, e232, e233, e234, e235, e236, e237,
193 e238, e239, e240, e241, e242, e243, e244, e245, e246, e247, e248, e249,
194 e250, e251, e252, e253, e254, e255, e256, e257, e258, e259, e260, e261,
195 e262, e263, e264, e265, e266, e267, e268, e269, e270, e271, e272, e273,
196 e274, e275, e276, e277, e278, e279, e280, e281, e282, e283, e284, e285,
197 e286, e287, e288, e289, e290, e291, e292, e293, e294, e295, e296, e297,
198 e298, e299, e300, e301, e302, e303, e304, e305, e306, e307, e308, e309,
199 e310, e311, e312, e313, e314, e315, e316, e317, e318, e319, e320, e321,
200 e322, e323, e324, e325, e326, e327, e328, e329, e330, e331, e332, e333,
201 e334, e335, e336, e337, e338, e339, e340, e341, e342, e343, e344, e345,
202 e346, e347, e348, e349, e350, e351, e352, e353, e354, e355, e356, e357,
203 e358, e359, e360, e361, e362, e363, e364, e365, e366, e367, e368, e369,
204 e370, e371, e372, e373, e374, e375, e376, e377, e378, e379, e380, e381,
205 e382, e383, e384, e385, e386, e387, e388, e389, e390, e391, e392, e393,
206 e394, e395, e396, e397, e398, e399, e400, e401, e402, e403, e404, e405,
207 e406, e407, e408, e409, e410, e411, e412, e413, e414, e415, e416, e417,
208 e418, e419, e420, e421, e422, e423, e424, e425, e426, e427, e428, e429,
209 e430, e431, e432, e433, e434, e435, e436, e437, e438, e439, e440, e441,
210 e442, e443, e444, e445, e446, e447, e448, e449, e450, e451, e452, e453,
211 e454, e455, e456, e457, e458, e459, e460, e461, e462, e463, e464, e465,
212 e466, e467, e468, e469, e470, e471, e472, e473, e474, e475, e476, e477,
213 e478, e479, e480, e481, e482, e483, e484, e485, e486, e487, e488, e489,
214 e490, e491, e492, e493, e494, e495, e496, e497, e498, e499
215 }
216
217 enum Specialized {
218 FOO {
219 public void foo() {}
220 };
221 abstract public void foo();
222 };
223
224}