aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Gregory <garydgregory@gmail.com>2024-04-24 16:51:21 -0400
committerGary Gregory <garydgregory@gmail.com>2024-04-24 16:51:21 -0400
commitbdff802a85306ac8246a80876c0a44baec57ff10 (patch)
treec8dc6c67e97487c9fa6db335ea4e8f3c368db937
parentfff3db29be4a0d4065ea42d697630d935b0e96eb (diff)
downloadapache-commons-lang-bdff802a85306ac8246a80876c0a44baec57ff10.tar.gz
[LANG-1729] NumberUtils.isParsable() returns true for Fullwidth Unicode
digits Refactor tests
-rw-r--r--src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java122
1 files changed, 80 insertions, 42 deletions
diff --git a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java
index 912109690..29404044d 100644
--- a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java
@@ -30,6 +30,7 @@ import java.math.BigInteger;
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.text.ParseException;
+import java.util.function.Function;
import org.apache.commons.lang3.AbstractLangTest;
import org.junit.jupiter.api.Test;
@@ -97,68 +98,87 @@ public class NumberUtilsTest extends AbstractLangTest {
assertTrue(NumberUtils.compare((short) 213, (short) 32) > 0);
}
- private boolean isParsableByte(final String s) {
- final NumberFormat instance = NumberFormat.getInstance();
- instance.setParseIntegerOnly(false);
- try {
- instance.parse(s);
- } catch (final ParseException e) {
- return false;
- }
+ private boolean isApplyNonNull(final String s, final Function<String, ?> function) {
try {
- Byte.parseByte(s);
- } catch (final NumberFormatException e) {
+ assertNotNull(function.apply(s));
+ return true;
+ } catch (final Exception e) {
+ if (!s.matches(".*\\s.*")) {
+ e.printStackTrace();
+ }
return false;
}
- return NumberUtils.isParsable(s);
}
- private boolean isParsableInteger(final String s) {
+ private boolean isNumberFormatParsable(final String s) {
final NumberFormat instance = NumberFormat.getInstance();
- instance.setParseIntegerOnly(false);
try {
- instance.parse(s);
+ // Stops parsing when a space is found, then returns an object.
+ assertNotNull(instance.parse(s));
+ return true;
} catch (final ParseException e) {
return false;
}
- try {
- Integer.parseInt(s);
- } catch (final NumberFormatException e) {
- return false;
- }
- return NumberUtils.isParsable(s);
}
- private boolean isParsableLong(final String s) {
+ private boolean isNumberIntegerOnlyFormatParsable(final String s) {
final NumberFormat instance = NumberFormat.getInstance();
- instance.setParseIntegerOnly(false);
+ instance.setParseIntegerOnly(true);
try {
- instance.parse(s);
+ // Stops parsing when a space is found, then returns an object.
+ assertNotNull(instance.parse(s));
+ return true;
} catch (final ParseException e) {
return false;
}
- try {
- Long.parseLong(s);
- } catch (final NumberFormatException e) {
- return false;
- }
- return NumberUtils.isParsable(s);
+ }
+
+ private boolean isParsableByte(final String s) {
+ final boolean parsable = NumberUtils.isParsable(s);
+ assertTrue(isNumberFormatParsable(s), s);
+ assertTrue(isNumberIntegerOnlyFormatParsable(s), s);
+ assertEquals(parsable, isApplyNonNull(s, Byte::parseByte), s);
+ return parsable;
+ }
+
+ private boolean isParsableFloat(final String s) {
+ final boolean parsable = NumberUtils.isParsable(s);
+ assertTrue(isNumberFormatParsable(s), s);
+ assertTrue(isNumberIntegerOnlyFormatParsable(s), s);
+ assertEquals(parsable, isApplyNonNull(s, Float::parseFloat), s);
+ return parsable;
+ }
+
+ private boolean isParsableDouble(final String s) {
+ final boolean parsable = NumberUtils.isParsable(s);
+ assertTrue(isNumberFormatParsable(s), s);
+ assertTrue(isNumberIntegerOnlyFormatParsable(s), s);
+ assertEquals(parsable, isApplyNonNull(s, Double::parseDouble), s);
+ return parsable;
+ }
+
+ private boolean isParsableInteger(final String s) {
+ final boolean parsable = NumberUtils.isParsable(s);
+ assertTrue(isNumberFormatParsable(s), s);
+ assertTrue(isNumberIntegerOnlyFormatParsable(s), s);
+ assertEquals(parsable, isApplyNonNull(s, Integer::parseInt), s);
+ return parsable;
+ }
+
+ private boolean isParsableLong(final String s) {
+ final boolean parsable = NumberUtils.isParsable(s);
+ assertTrue(isNumberFormatParsable(s), s);
+ assertTrue(isNumberIntegerOnlyFormatParsable(s), s);
+ assertEquals(parsable, isApplyNonNull(s, Long::parseLong), s);
+ return parsable;
}
private boolean isParsableShort(final String s) {
- final NumberFormat instance = NumberFormat.getInstance();
- instance.setParseIntegerOnly(false);
- try {
- instance.parse(s);
- } catch (final ParseException e) {
- return false;
- }
- try {
- Short.parseShort(s);
- } catch (final NumberFormatException e) {
- return false;
- }
- return NumberUtils.isParsable(s);
+ final boolean parsable = NumberUtils.isParsable(s);
+ assertTrue(isNumberFormatParsable(s), s);
+ assertTrue(isNumberIntegerOnlyFormatParsable(s), s);
+ assertEquals(parsable, isApplyNonNull(s, Short::parseShort), s);
+ return parsable;
}
/**
@@ -1032,6 +1052,24 @@ public class NumberUtilsTest extends AbstractLangTest {
}
@Test
+ public void testLang1729IsParsableDouble() {
+ assertTrue(isParsableDouble("1"));
+ assertFalse(isParsableDouble("1 2 3"));
+ // TODO Expected to be fixed in Java 23
+ // assertTrue(isParsableDouble("123"));
+ assertFalse(isParsableDouble("1 2 3"));
+ }
+
+ @Test
+ public void testLang1729IsParsableFloat() {
+ assertTrue(isParsableFloat("1"));
+ assertFalse(isParsableFloat("1 2 3"));
+ // TODO Expected to be fixed in Java 23
+ // assertTrue(isParsableFloat("123"));
+ assertFalse(isParsableFloat("1 2 3"));
+ }
+
+ @Test
public void testLang1729IsParsableInteger() {
assertTrue(isParsableInteger("1"));
assertFalse(isParsableInteger("1 2 3"));