7040572: Fix broken java/nio/charset/StandardCharset/Standard.java and add more tests.
authormduigou
Fri, 29 Apr 2011 14:09:46 -0700
changeset 9540 2cb19a76b1bf
parent 9539 e35e3b92c340
child 9541 7ce475045bf0
7040572: Fix broken java/nio/charset/StandardCharset/Standard.java and add more tests. Reviewed-by: alanb
jdk/test/java/nio/charset/StandardCharset/Standard.java
--- a/jdk/test/java/nio/charset/StandardCharset/Standard.java	Fri Apr 29 13:31:13 2011 -0700
+++ b/jdk/test/java/nio/charset/StandardCharset/Standard.java	Fri Apr 29 14:09:46 2011 -0700
@@ -29,10 +29,20 @@
  * @run main Standard
  */
 
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.io.*;
 import java.nio.charset.*;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
 
 public class Standard {
 
+    private final static String standardCharsets[] = {
+        "US-ASCII", "ISO-8859-1", "UTF-8",
+        "UTF-16BE", "UTF-16LE", "UTF-16" };
+
     public static void realMain(String[] args) {
         check(StandardCharset.US_ASCII instanceof Charset);
         check(StandardCharset.ISO_8859_1 instanceof Charset);
@@ -41,12 +51,35 @@
         check(StandardCharset.UTF_16LE instanceof Charset);
         check(StandardCharset.UTF_16 instanceof Charset);
 
-        check("US-ASCII".equals(StandardCharset.US_ASCII.name());
-        check("ISO-8859-1".equals(StandardCharset.ISO_8859_1.name());
-        check("UTF-8".equals(StandardCharset.UTF_8.name());
-        check("UTF-16BE".equals(StandardCharset.UTF_16BE.name());
-        check("UTF-16LE".equals(StandardCharset.UTF_16LE.name());
-        check("UTF-16".equals(StandardCharset.UTF_16.name());
+        check("US-ASCII".equals(StandardCharset.US_ASCII.name()));
+        check("ISO-8859-1".equals(StandardCharset.ISO_8859_1.name()));
+        check("UTF-8".equals(StandardCharset.UTF_8.name()));
+        check("UTF-16BE".equals(StandardCharset.UTF_16BE.name()));
+        check("UTF-16LE".equals(StandardCharset.UTF_16LE.name()));
+        check("UTF-16".equals(StandardCharset.UTF_16.name()));
+
+        Set<String> charsets = new HashSet<>();
+        Field standardCharsetFields[] = StandardCharset.class.getFields();
+
+        for(Field charsetField : standardCharsetFields) {
+            check(StandardCharset.class == charsetField.getDeclaringClass());
+            check(Modifier.isFinal(charsetField.getModifiers()));
+            check(Modifier.isStatic(charsetField.getModifiers()));
+            check(Modifier.isPublic(charsetField.getModifiers()));
+            Object value;
+            try {
+                value = charsetField.get(null);
+            } catch(IllegalAccessException failure) {
+                unexpected(failure);
+                continue;
+            }
+            check(value instanceof Charset);
+            charsets.add(((Charset)value).name());
+        }
+
+        check(charsets.containsAll(Arrays.asList(standardCharsets)));
+        charsets.removeAll(Arrays.asList(standardCharsets));
+        check(charsets.isEmpty());
     }
 
     //--------------------- Infrastructure ---------------------------