8217254: CompactNumberFormat:: CompactNumberFormat​() constructor does not comply with spec.
authornishjain
Mon, 11 Mar 2019 14:22:23 +0530
changeset 54050 95978e7e8da0
parent 54049 e4cc94318c37
child 54051 9a1dd1203a4f
8217254: CompactNumberFormat:: CompactNumberFormat​() constructor does not comply with spec. 8217721: CompactNumberFormat:: format​() method spec for IAEx is not complaint Reviewed-by: naoto
src/java.base/share/classes/java/text/CompactNumberFormat.java
test/jdk/java/text/Format/CompactNumberFormat/TestCompactNumber.java
test/jdk/java/text/Format/CompactNumberFormat/TestCompactPatternsValidity.java
--- a/src/java.base/share/classes/java/text/CompactNumberFormat.java	Mon Mar 11 14:17:08 2019 +0530
+++ b/src/java.base/share/classes/java/text/CompactNumberFormat.java	Mon Mar 11 14:22:23 2019 +0530
@@ -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 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 @@
      */
     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;
 
--- a/test/jdk/java/text/Format/CompactNumberFormat/TestCompactNumber.java	Mon Mar 11 14:17:08 2019 +0530
+++ b/test/jdk/java/text/Format/CompactNumberFormat/TestCompactNumber.java	Mon Mar 11 14:22:23 2019 +0530
@@ -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 @@
                 .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) {
--- a/test/jdk/java/text/Format/CompactNumberFormat/TestCompactPatternsValidity.java	Mon Mar 11 14:17:08 2019 +0530
+++ b/test/jdk/java/text/Format/CompactNumberFormat/TestCompactPatternsValidity.java	Mon Mar 11 14:22:23 2019 +0530
@@ -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 @@
             // 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 @@
     }
 
     @Test(dataProvider = "invalidPatterns",
-            expectedExceptions = RuntimeException.class)
+            expectedExceptions = IllegalArgumentException.class)
     public void testInvalidCompactPatterns(String[] compactPatterns) {
         new CompactNumberFormat("#,##0.0#", DecimalFormatSymbols
                 .getInstance(Locale.US), compactPatterns);