8217254: CompactNumberFormat:: CompactNumberFormat​() constructor does not comply with spec

8217721: CompactNumberFormat:: format​() method spec for IAEx is not complaint

Reviewed-by: naoto
This commit is contained in:
Nishit Jain 2019-03-11 14:22:23 +05:30
parent 472d55d722
commit 0b082fcc1d
3 changed files with 24 additions and 7 deletions

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -406,6 +406,11 @@ public final class CompactNumberFormat extends NumberFormat {
public final StringBuffer format(Object number, public final StringBuffer format(Object number,
StringBuffer toAppendTo, StringBuffer toAppendTo,
FieldPosition fieldPosition) { FieldPosition fieldPosition) {
if (number == null) {
throw new IllegalArgumentException("Cannot format null as a number");
}
if (number instanceof Long || number instanceof Integer if (number instanceof Long || number instanceof Integer
|| number instanceof Short || number instanceof Byte || number instanceof Short || number instanceof Byte
|| number instanceof AtomicInteger || number instanceof AtomicInteger
@ -1053,6 +1058,11 @@ public final class CompactNumberFormat extends NumberFormat {
*/ */
private void applyPattern(String pattern, int index) { private void applyPattern(String pattern, int index) {
if (pattern == null) {
throw new IllegalArgumentException("A null compact pattern" +
" encountered at index: " + index);
}
int start = 0; int start = 0;
boolean gotNegative = false; boolean gotNegative = false;

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -22,7 +22,7 @@
*/ */
/* /*
* @test * @test
* @bug 8177552 * @bug 8177552 8217721
* @summary Checks the functioning of compact number format * @summary Checks the functioning of compact number format
* @modules jdk.localedata * @modules jdk.localedata
* @run testng/othervm TestCompactNumber * @run testng/othervm TestCompactNumber
@ -528,6 +528,11 @@ public class TestCompactNumber {
.getCompactNumberInstance(l, NumberFormat.Style.LONG).format(10000)); .getCompactNumberInstance(l, NumberFormat.Style.LONG).format(10000));
} }
@Test(expectedExceptions = IllegalArgumentException.class)
public void testFormatWithNullParam() {
FORMAT_EN_US_SHORT.format(null);
}
@Test(dataProvider = "format") @Test(dataProvider = "format")
public void testFormat(NumberFormat cnf, Object number, public void testFormat(NumberFormat cnf, Object number,
String expected) { String expected) {

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -22,7 +22,7 @@
*/ */
/* /*
* @test * @test
* @bug 8177552 * @bug 8177552 8217254
* @summary Checks the validity of compact number patterns specified through * @summary Checks the validity of compact number patterns specified through
* CompactNumberFormat constructor * CompactNumberFormat constructor
* @run testng/othervm TestCompactPatternsValidity * @run testng/othervm TestCompactPatternsValidity
@ -80,7 +80,9 @@ public class TestCompactPatternsValidity {
// A non empty pattern containing no 0s (min integer digits) // A non empty pattern containing no 0s (min integer digits)
{new String[]{"K", "0K", "00K"}}, {new String[]{"K", "0K", "00K"}},
// 0s (min integer digits) exceeding for the range at index 3 // 0s (min integer digits) exceeding for the range at index 3
{new String[]{"", "", "0K", "00000K"}},}; {new String[]{"", "", "0K", "00000K"}},
// null as a compact pattern
{new String[]{"", "", null, "00K"}},};
} }
@DataProvider(name = "validPatternsFormat") @DataProvider(name = "validPatternsFormat")
@ -124,7 +126,7 @@ public class TestCompactPatternsValidity {
} }
@Test(dataProvider = "invalidPatterns", @Test(dataProvider = "invalidPatterns",
expectedExceptions = RuntimeException.class) expectedExceptions = IllegalArgumentException.class)
public void testInvalidCompactPatterns(String[] compactPatterns) { public void testInvalidCompactPatterns(String[] compactPatterns) {
new CompactNumberFormat("#,##0.0#", DecimalFormatSymbols new CompactNumberFormat("#,##0.0#", DecimalFormatSymbols
.getInstance(Locale.US), compactPatterns); .getInstance(Locale.US), compactPatterns);