jdk/test/java/lang/Enum/ValueOf.java
changeset 1938 23526f724210
child 5506 202f599c92aa
equal deleted inserted replaced
1937:28c31d4a9597 1938:23526f724210
       
     1 /*
       
     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 
       
    34 import java.util.*;
       
    35 import java.lang.reflect.Method;
       
    36 
       
    37 public 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 }