1 /* 2 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 /* 24 * @test 25 * @bug 8177552 26 * @summary Checks CNF.parse() when parseBigDecimal is set to true 27 * @modules jdk.localedata 28 * @run testng/othervm TestParseBigDecimal 29 */ 30 31 import org.testng.annotations.BeforeTest; 32 import org.testng.annotations.DataProvider; 33 import org.testng.annotations.Test; 34 35 import java.math.BigDecimal; 36 import java.text.CompactNumberFormat; 37 import java.text.NumberFormat; 38 import java.text.ParseException; 39 import java.util.Locale; 40 41 public class TestParseBigDecimal { 42 43 private static final CompactNumberFormat FORMAT_DZ_LONG = (CompactNumberFormat) NumberFormat 44 .getCompactNumberInstance(new Locale("dz"), NumberFormat.Style.LONG); 45 46 private static final CompactNumberFormat FORMAT_EN_US_SHORT = (CompactNumberFormat) NumberFormat 47 .getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT); 48 49 private static final CompactNumberFormat FORMAT_EN_LONG = (CompactNumberFormat) NumberFormat 50 .getCompactNumberInstance(new Locale("en"), NumberFormat.Style.LONG); 51 52 private static final CompactNumberFormat FORMAT_HI_IN_LONG = (CompactNumberFormat) NumberFormat 53 .getCompactNumberInstance(new Locale("hi", "IN"), NumberFormat.Style.LONG); 54 55 private static final CompactNumberFormat FORMAT_JA_JP_SHORT = (CompactNumberFormat) NumberFormat 56 .getCompactNumberInstance(Locale.JAPAN, NumberFormat.Style.SHORT); 57 58 private static final CompactNumberFormat FORMAT_IT_SHORT = (CompactNumberFormat) NumberFormat 59 .getCompactNumberInstance(new Locale("it"), NumberFormat.Style.SHORT); 60 61 private static final CompactNumberFormat FORMAT_SW_LONG = (CompactNumberFormat) NumberFormat 62 .getCompactNumberInstance(new Locale("sw"), NumberFormat.Style.LONG); 63 64 private static final CompactNumberFormat FORMAT_SE_SHORT = (CompactNumberFormat) NumberFormat 65 .getCompactNumberInstance(new Locale("se"), NumberFormat.Style.SHORT); 66 67 @BeforeTest 68 public void mutateInstances() { 69 FORMAT_DZ_LONG.setParseBigDecimal(true); 70 FORMAT_EN_US_SHORT.setParseBigDecimal(true); 71 FORMAT_EN_LONG.setParseBigDecimal(true); 72 FORMAT_HI_IN_LONG.setParseBigDecimal(true); 73 FORMAT_JA_JP_SHORT.setParseBigDecimal(true); 74 FORMAT_IT_SHORT.setParseBigDecimal(true); 75 FORMAT_SW_LONG.setParseBigDecimal(true); 76 FORMAT_SE_SHORT.setParseBigDecimal(true); 77 } 78 79 @DataProvider(name = "parse") 80 Object[][] compactParseData() { 81 return new Object[][]{ 82 // compact number format instance, string to parse, parsed number 83 {FORMAT_DZ_LONG, "\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55\u0FB2" 84 + "\u0F42 \u0F21", new BigDecimal("1000")}, 85 {FORMAT_DZ_LONG, "-\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55\u0FB2" 86 + "\u0F42 \u0F23", new BigDecimal("-3000")}, 87 {FORMAT_DZ_LONG, "\u0F51\u0F74\u0F44\u0F0B\u0F55\u0FB1\u0F74\u0F62" 88 + "\u0F0B\u0F66\u0F0B\u0F61\u0F0B \u0F21" 89 + "\u0F22\u0F23\u0F24\u0F25\u0F27", new BigDecimal("12345700000000000000")}, 90 {FORMAT_DZ_LONG, "-\u0F51\u0F74\u0F44\u0F0B\u0F55\u0FB1\u0F74\u0F62" 91 + "\u0F0B\u0F66\u0F0B\u0F61\u0F0B \u0F21" 92 + "\u0F22\u0F23\u0F24\u0F25\u0F27", new BigDecimal("-12345700000000000000")}, 93 {FORMAT_EN_US_SHORT, "-0.0", new BigDecimal("-0.0")}, 94 {FORMAT_EN_US_SHORT, "0", new BigDecimal("0")}, 95 {FORMAT_EN_US_SHORT, "499", new BigDecimal("499")}, 96 {FORMAT_EN_US_SHORT, "-499", new BigDecimal("-499")}, 97 {FORMAT_EN_US_SHORT, "499.89", new BigDecimal("499.89")}, 98 {FORMAT_EN_US_SHORT, "-499.89", new BigDecimal("-499.89")}, 99 {FORMAT_EN_US_SHORT, "1K", new BigDecimal("1000")}, 100 {FORMAT_EN_US_SHORT, "-1K", new BigDecimal("-1000")}, 101 {FORMAT_EN_US_SHORT, "3K", new BigDecimal("3000")}, 102 {FORMAT_EN_US_SHORT, "-3K", new BigDecimal("-3000")}, 103 {FORMAT_EN_US_SHORT, "17K", new BigDecimal("17000")}, 104 {FORMAT_EN_US_SHORT, "-17K", new BigDecimal("-17000")}, 105 {FORMAT_EN_US_SHORT, "12345678901234567890", 106 new BigDecimal("12345678901234567890")}, 107 {FORMAT_EN_US_SHORT, "12345679T", new BigDecimal("12345679000000000000")}, 108 {FORMAT_EN_US_SHORT, "-12345679T", new BigDecimal("-12345679000000000000")}, 109 {FORMAT_EN_US_SHORT, "599.01K", new BigDecimal("599010.00")}, 110 {FORMAT_EN_US_SHORT, "-599.01K", new BigDecimal("-599010.00")}, 111 {FORMAT_EN_US_SHORT, "599444444.90T", new BigDecimal("599444444900000000000.00")}, 112 {FORMAT_EN_US_SHORT, "-599444444.90T", new BigDecimal("-599444444900000000000.00")}, 113 {FORMAT_EN_US_SHORT, "123456789012345.5678K", 114 new BigDecimal("123456789012345567.8000")}, 115 {FORMAT_EN_US_SHORT, "17.000K", new BigDecimal("17000.000")}, 116 {FORMAT_EN_US_SHORT, "123.56678K", new BigDecimal("123566.78000")}, 117 {FORMAT_EN_US_SHORT, "-123.56678K", new BigDecimal("-123566.78000")}, 118 {FORMAT_EN_LONG, "999", new BigDecimal("999")}, 119 {FORMAT_EN_LONG, "1 thousand", new BigDecimal("1000")}, 120 {FORMAT_EN_LONG, "3 thousand", new BigDecimal("3000")}, 121 {FORMAT_EN_LONG, "12345679 trillion", new BigDecimal("12345679000000000000")}, 122 {FORMAT_HI_IN_LONG, "999", new BigDecimal("999")}, 123 {FORMAT_HI_IN_LONG, "-999", new BigDecimal("-999")}, 124 {FORMAT_HI_IN_LONG, "1 \u0939\u091C\u093C\u093E\u0930", new BigDecimal("1000")}, 125 {FORMAT_HI_IN_LONG, "-1 \u0939\u091C\u093C\u093E\u0930", new BigDecimal("-1000")}, 126 {FORMAT_HI_IN_LONG, "3 \u0939\u091C\u093C\u093E\u0930", new BigDecimal("3000")}, 127 {FORMAT_HI_IN_LONG, "12345679 \u0916\u0930\u092C", new BigDecimal("1234567900000000000")}, 128 {FORMAT_HI_IN_LONG, "-12345679 \u0916\u0930\u092C", new BigDecimal("-1234567900000000000")}, 129 {FORMAT_JA_JP_SHORT, "-99", new BigDecimal("-99")}, 130 {FORMAT_JA_JP_SHORT, "1\u4E07", new BigDecimal("10000")}, 131 {FORMAT_JA_JP_SHORT, "30\u4E07", new BigDecimal("300000")}, 132 {FORMAT_JA_JP_SHORT, "-30\u4E07", new BigDecimal("-300000")}, 133 {FORMAT_JA_JP_SHORT, "12345679\u5146", new BigDecimal("12345679000000000000")}, 134 {FORMAT_JA_JP_SHORT, "-12345679\u5146", new BigDecimal("-12345679000000000000")}, 135 {FORMAT_IT_SHORT, "-99", new BigDecimal("-99")}, 136 {FORMAT_IT_SHORT, "1\u00a0Mln", new BigDecimal("1000000")}, 137 {FORMAT_IT_SHORT, "30\u00a0Mln", new BigDecimal("30000000")}, 138 {FORMAT_IT_SHORT, "-30\u00a0Mln", new BigDecimal("-30000000")}, 139 {FORMAT_IT_SHORT, "12345679\u00a0Bln", new BigDecimal("12345679000000000000")}, 140 {FORMAT_IT_SHORT, "-12345679\u00a0Bln", new BigDecimal("-12345679000000000000")}, 141 {FORMAT_SW_LONG, "-0.0", new BigDecimal("-0.0")}, 142 {FORMAT_SW_LONG, "499", new BigDecimal("499")}, 143 {FORMAT_SW_LONG, "elfu 1", new BigDecimal("1000")}, 144 {FORMAT_SW_LONG, "elfu 3", new BigDecimal("3000")}, 145 {FORMAT_SW_LONG, "elfu 17", new BigDecimal("17000")}, 146 {FORMAT_SW_LONG, "elfu -3", new BigDecimal("-3000")}, 147 {FORMAT_SW_LONG, "-499", new BigDecimal("-499")}, 148 {FORMAT_SW_LONG, "elfu 1", new BigDecimal("1000")}, 149 {FORMAT_SW_LONG, "elfu 3", new BigDecimal("3000")}, 150 {FORMAT_SW_LONG, "elfu -3", new BigDecimal("-3000")}, 151 {FORMAT_SW_LONG, "elfu 17", new BigDecimal("17000")}, 152 {FORMAT_SW_LONG, "trilioni 12345679", new BigDecimal("12345679000000000000")}, 153 {FORMAT_SW_LONG, "trilioni -12345679", new BigDecimal("-12345679000000000000")}, 154 {FORMAT_SW_LONG, "elfu 599.01", new BigDecimal("599010.00")}, 155 {FORMAT_SW_LONG, "elfu -599.01", new BigDecimal("-599010.00")}, 156 {FORMAT_SE_SHORT, "999", new BigDecimal("999")}, 157 {FORMAT_SE_SHORT, "8\u00a0mn", new BigDecimal("8000000")}, 158 {FORMAT_SE_SHORT, "8\u00a0dt", new BigDecimal("8000")}, 159 {FORMAT_SE_SHORT, "12345679\u00a0bn", new BigDecimal("12345679000000000000")}, 160 {FORMAT_SE_SHORT, "12345679,89\u00a0bn", new BigDecimal("12345679890000000000.00")}, 161 {FORMAT_SE_SHORT, "\u2212999", new BigDecimal("-999")}, 162 {FORMAT_SE_SHORT, "\u22128\u00a0mn", new BigDecimal("-8000000")}, 163 {FORMAT_SE_SHORT, "\u22128\u00a0dt", new BigDecimal("-8000")}, 164 {FORMAT_SE_SHORT, "\u221212345679\u00a0bn", new BigDecimal("-12345679000000000000")}, 165 {FORMAT_SE_SHORT, "\u221212345679,89\u00a0bn", new BigDecimal("-12345679890000000000.00")},}; 166 } 167 168 @Test(dataProvider = "parse") 169 public void testParse(NumberFormat cnf, String parseString, 170 Number expected) throws ParseException { 171 CompactFormatAndParseHelper.testParse(cnf, parseString, expected, null, BigDecimal.class); 172 } 173 }