test/java/lang/Integer/ParsingTest.java

Print this page
rev 9925 : 8041972: Add improved parse/format methods for Long/Integer
Contributed-by: redestad

@@ -21,15 +21,17 @@
  * questions.
  */
 
 /*
  * @test
- * @bug 5017980 6576055
+ * @bug 5017980 6576055 8041972
  * @summary Test parsing methods
  * @author Joseph D. Darcy
  */
 
+import sun.misc.SharedSecrets;
+import sun.misc.JavaLangAccess;
 
 /**
  * There are six methods in java.lang.Integer which transform strings
  * into an int or Integer value:
  *

@@ -41,22 +43,32 @@
  * public static Integer valueOf(String s)
  *
  * Besides decode, all the methods and constructor call down into
  * parseInt(String, int) to do the actual work.  Therefore, the
  * behavior of parseInt(String, int) will be tested here.
+ *
+ * Internally, parseInt(String, int, int, int) has been added to
+ * support parsing subsequences without explicit substrings. These will also
+ * be tested here
  */
 
 public class ParsingTest {
+
+    private static JavaLangAccess jla = SharedSecrets.getJavaLangAccess();
+
     public static void main(String... argv) {
         check("+100", +100);
         check("-100", -100);
 
         check("+0", 0);
         check("-0", 0);
         check("+00000", 0);
         check("-00000", 0);
 
+        check("+00000", 0, 0, 6);
+        check("-00000", 0, 0, 6);
+
         check("0", 0);
         check("1", 1);
         check("9", 9);
 
         checkFailure("\u0000");

@@ -70,16 +82,26 @@
         checkFailure("++100");
         checkFailure("--100");
         checkFailure("+-6");
         checkFailure("-+6");
         checkFailure("*100");
+
+        check("test-00000", 0, 4, 10);
+        check("test-12345", -12345, 4, 10);
+        check("xx12345yy", 12345, 2, 7);
+
+        checkFailure("+00000", 0, 7);
+        checkFailure("-00000", 0, 7);
+        checkFailure("-00000", 6, 6);
+        checkFailure("-00000", 6, 0);
+        checkFailure("+-6", 0, 3);
     }
 
     private static void check(String val, int expected) {
         int n = Integer.parseInt(val);
         if (n != expected)
-            throw new RuntimeException("Integer.parsedInt failed. String:" +
+            throw new RuntimeException("Integer.parseInt failed. String:" +
                                                 val + " Result:" + n);
     }
 
     private static void checkFailure(String val) {
         int n = 0;

@@ -89,6 +111,24 @@
             throw new RuntimeException();
         } catch (NumberFormatException nfe) {
             ; // Expected
         }
     }
+
+    private static void checkFailure(String val, int start, int end) {
+        int n = 0;
+        try {
+            n = jla.parseInt(val, 10, start, end);
+            System.err.println("parseInt(" + val + ") incorrectly returned " + n);
+            throw new RuntimeException();
+        } catch (NumberFormatException nfe) {
+            ; // Expected
+        }
+    }
+
+    private static void check(String val, int expected, int start, int end) {
+        int n = jla.parseInt(val, 10, start, end);
+        if (n != expected)
+            throw new RuntimeException("Integer.parsedInt failed. String:" +
+                    val + " Result:" + n);
+    }
 }