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.
*
* 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,
StringBuffer toAppendTo,
FieldPosition fieldPosition) {
if (number == null) {
throw new IllegalArgumentException("Cannot format null as a number");
}
if (number instanceof Long || number instanceof Integer
|| number instanceof Short || number instanceof Byte
|| number instanceof AtomicInteger
@ -1053,6 +1058,11 @@ public final class CompactNumberFormat extends NumberFormat {
*/
private void applyPattern(String pattern, int index) {
if (pattern == null) {
throw new IllegalArgumentException("A null compact pattern" +
" encountered at index: " + index);
}
int start = 0;
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.
*
* This code is free software; you can redistribute it and/or modify it
@ -22,7 +22,7 @@
*/
/*
* @test
* @bug 8177552
* @bug 8177552 8217721
* @summary Checks the functioning of compact number format
* @modules jdk.localedata
* @run testng/othervm TestCompactNumber
@ -528,6 +528,11 @@ public class TestCompactNumber {
.getCompactNumberInstance(l, NumberFormat.Style.LONG).format(10000));
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testFormatWithNullParam() {
FORMAT_EN_US_SHORT.format(null);
}
@Test(dataProvider = "format")
public void testFormat(NumberFormat cnf, Object number,
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.
*
* This code is free software; you can redistribute it and/or modify it
@ -22,7 +22,7 @@
*/
/*
* @test
* @bug 8177552
* @bug 8177552 8217254
* @summary Checks the validity of compact number patterns specified through
* CompactNumberFormat constructor
* @run testng/othervm TestCompactPatternsValidity
@ -80,7 +80,9 @@ public class TestCompactPatternsValidity {
// A non empty pattern containing no 0s (min integer digits)
{new String[]{"K", "0K", "00K"}},
// 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")
@ -124,7 +126,7 @@ public class TestCompactPatternsValidity {
}
@Test(dataProvider = "invalidPatterns",
expectedExceptions = RuntimeException.class)
expectedExceptions = IllegalArgumentException.class)
public void testInvalidCompactPatterns(String[] compactPatterns) {
new CompactNumberFormat("#,##0.0#", DecimalFormatSymbols
.getInstance(Locale.US), compactPatterns);