test/java/lang/Integer/ParsingTest.java

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

*** 21,62 **** * questions. */ /* * @test ! * @bug 5017980 6576055 * @summary Test parsing methods * @author Joseph D. Darcy */ /** ! * There are six methods in java.lang.Integer which transform strings * into an int or Integer value: * * public Integer(String s) * public static Integer decode(String nm) * public static int parseInt(String s, int radix) * public static int parseInt(String s) * public static Integer valueOf(String s, int radix) * 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. */ public class ParsingTest { 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("0", 0); check("1", 1); check("9", 9); checkFailure("\u0000"); --- 21,72 ---- * questions. */ /* * @test ! * @bug 5017980 6576055 8041972 * @summary Test parsing methods * @author Joseph D. Darcy */ + import java.lang.IllegalArgumentException; + import java.lang.IndexOutOfBoundsException; + import java.lang.NullPointerException; /** ! * There are eight methods in java.lang.Integer which transform strings * into an int or Integer value: * * public Integer(String s) * public static Integer decode(String nm) + * public static int parseInt(CharSequence s, int radix, int beginIndex, int endIndex) + * public static int parseInt(CharSequence s, int radix, int beginIndex) * public static int parseInt(String s, int radix) * public static int parseInt(String s) * public static Integer valueOf(String s, int radix) * public static Integer valueOf(String s) * * Besides decode, all the methods and constructor call down into ! * parseInt(CharSequence, int, int, int) to do the actual work. Therefore, the ! * behavior of parseInt(CharSequence, int, int, int) will be tested here. ! * */ public class ParsingTest { + 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,85 **** checkFailure("++100"); checkFailure("--100"); checkFailure("+-6"); checkFailure("-+6"); checkFailure("*100"); } private static void check(String val, int expected) { int n = Integer.parseInt(val); if (n != expected) ! throw new RuntimeException("Integer.parsedInt failed. String:" + val + " Result:" + n); } private static void checkFailure(String val) { int n = 0; --- 80,120 ---- 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); + + checkNumberFormatException("+-6", 10, 0, 3); + checkNumberFormatException("1000000", Character.MAX_RADIX + 1, 0, 2); + checkNumberFormatException("1000000", Character.MIN_RADIX - 1, 0, 2); + checkNumberFormatException("1000000", Character.MAX_RADIX + 1, -1, 2); + checkNumberFormatException("1000000", Character.MIN_RADIX - 1, -1, 2); + + checkIllegalArgumentException("1000000", 10, 7, 7); + checkIllegalArgumentException("1000000", 10, 10, 4); + checkIllegalArgumentException("1000000", Character.MAX_RADIX + 1, 10, 2); + checkIllegalArgumentException("1000000", Character.MIN_RADIX - 1, 10, 2); + + checkIndexOutOfBoundsException("-1", 10, 0, 3); + checkIndexOutOfBoundsException("-1", 10, 2, 3); + checkIndexOutOfBoundsException("-1", 10, -1, 2); + + checkNull(10, 0, 1); + checkNull(10, -1, 0); + checkNull(10, 0, 0); + checkNull(10, 0, -1); + checkNull(-1, -1, -1); } private static void check(String val, int expected) { int n = Integer.parseInt(val); if (n != expected) ! throw new RuntimeException("Integer.parseInt failed. String:" + val + " Result:" + n); } private static void checkFailure(String val) { int n = 0;
*** 89,94 **** --- 124,185 ---- throw new RuntimeException(); } catch (NumberFormatException nfe) { ; // Expected } } + + private static void checkNumberFormatException(String val, int radix, int start, int end) { + int n = 0; + try { + n = Integer.parseInt(val, radix, start, end); + System.err.println("parseInt(" + val + ", " + radix + ", " + start + ", " + end + + ") incorrectly returned " + n); + throw new RuntimeException(); + } catch (NumberFormatException nfe) { + ; // Expected + } + } + + private static void checkIndexOutOfBoundsException(String val, int radix, int start, int end) { + int n = 0; + try { + n = Integer.parseInt(val, radix, start, end); + System.err.println("parseInt(" + val + ", " + radix + ", " + start + ", " + end + + ") incorrectly returned " + n); + throw new RuntimeException(); + } catch (IndexOutOfBoundsException ioob) { + ; // Expected + } + } + + private static void checkIllegalArgumentException(String val, int radix, int start, int end) { + int n = 0; + try { + n = Integer.parseInt(val, radix, start, end); + System.err.println("parseInt(" + val + ", " + radix + ", " + start + ", " + end + + ") incorrectly returned " + n); + throw new RuntimeException(); + } catch (IllegalArgumentException nfe) { + ; // Expected + } + } + + + private static void checkNull(int radix, int start, int end) { + int n = 0; + try { + n = Integer.parseInt(null, 10, start, end); + System.err.println("parseInt(null, " + radix + ", " + start + ", " + end + + ") incorrectly returned " + n); + throw new RuntimeException(); + } catch (NullPointerException npe) { + ; // Expected + } + } + + private static void check(String val, int expected, int start, int end) { + int n = Integer.parseInt(val, 10, start, end); + if (n != expected) + throw new RuntimeException("Integer.parsedInt failed. String:" + + val + ", start: " + start + ", end: " + end + " Result:" + n); + } }