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);
+ }
}