1 /* GENERATED SOURCE. DO NOT MODIFY. */ 2 // © 2016 and later: Unicode, Inc. and others. 3 // License & terms of use: http://www.unicode.org/copyright.html#License 4 /* 5 ******************************************************************************* 6 * Copyright (C) 2015, International Business Machines Corporation and * 7 * others. All Rights Reserved. * 8 ******************************************************************************* 9 */ 10 package ohos.global.icu.dev.test.format; 11 12 import java.lang.reflect.Field; 13 import java.lang.reflect.InvocationTargetException; 14 import java.lang.reflect.Method; 15 import java.util.HashMap; 16 import java.util.HashSet; 17 import java.util.Map; 18 19 import ohos.global.icu.math.BigDecimal; 20 import ohos.global.icu.text.DecimalFormat; 21 import ohos.global.icu.text.NumberFormat; 22 import ohos.global.icu.util.Currency; 23 import ohos.global.icu.util.ULocale; 24 25 26 /** 27 * A representation of a single NumberFormat specification test from a data driven test file. 28 * <p> 29 * The purpose of this class is to hide the details of the data driven test file from the 30 * main testing code. 31 * <p> 32 * This class contains fields describing an attribute of the test that may or may 33 * not be set. The name of each attribute corresponds to the name used in the 34 * data driven test file. 35 * <p> 36 * <b>Adding new attributes</b> 37 * <p> 38 * Each attribute name is lower case. Moreover, for each attribute there is also a 39 * setXXX method for that attribute that is used to initialize the attribute from a 40 * String value read from the data file. For example, there is a setLocale(String) method 41 * for the locale attribute and a setCurrency(String) method for the currency attribute. 42 * In general, for an attribute named abcd, the setter will be setAbcd(String). 43 * This naming rule must be strictly followed or else the test runner will not know how to 44 * initialize instances of this class. 45 * <p> 46 * In addition each attribute is listed in the fieldOrdering static array which specifies 47 * The order that attributes are printed whenever there is a test failure. 48 * <p> 49 * To add a new attribute, first create a public field for it. 50 * Next, add the attribute name to the fieldOrdering array. 51 * Finally, create a setter method for it. 52 * 53 * @author rocketman 54 */ 55 56 public class DataDrivenNumberFormatTestData { 57 58 /** 59 * The locale. 60 */ 61 public ULocale locale = null; 62 63 /** 64 * The currency. 65 */ 66 public Currency currency = null; 67 68 /** 69 * The pattern to initialize the formatter, for example 0.00" 70 */ 71 public String pattern = null; 72 73 /** 74 * The value to format as a string. For example 1234.5 would be "1234.5" 75 */ 76 public String format = null; 77 78 /** 79 * The formatted value. 80 */ 81 public String output = null; 82 83 /** 84 * Field for arbitrary comments. 85 */ 86 public String comment = null; 87 88 public Integer minIntegerDigits = null; 89 public Integer maxIntegerDigits = null; 90 public Integer minFractionDigits = null; 91 public Integer maxFractionDigits = null; 92 public Integer minGroupingDigits = null; 93 public Integer useSigDigits = null; 94 public Integer minSigDigits = null; 95 public Integer maxSigDigits = null; 96 public Integer useGrouping = null; 97 public Integer multiplier = null; 98 public Double roundingIncrement = null; 99 public Integer formatWidth = null; 100 public String padCharacter = null; 101 public Integer useScientific = null; 102 public Integer grouping = null; 103 public Integer grouping2 = null; 104 public Integer roundingMode = null; 105 public Currency.CurrencyUsage currencyUsage = null; 106 public Integer minimumExponentDigits = null; 107 public Integer exponentSignAlwaysShown = null; 108 public Integer decimalSeparatorAlwaysShown = null; 109 public Integer padPosition = null; 110 public String positivePrefix = null; 111 public String positiveSuffix = null; 112 public String negativePrefix = null; 113 public String negativeSuffix = null; 114 public Integer signAlwaysShown = null; 115 public String localizedPattern = null; 116 public String toPattern = null; 117 public String toLocalizedPattern = null; 118 public Integer style = null; 119 public String parse = null; 120 public Integer lenient = null; 121 public String plural = null; 122 public Integer parseIntegerOnly = null; 123 public Integer decimalPatternMatchRequired = null; 124 public Integer parseCaseSensitive = null; 125 public Integer parseNoExponent = null; 126 public String outputCurrency = null; 127 128 129 130 /** 131 * nothing or empty means that test ought to work for both C and JAVA; 132 * "C" means test is known to fail in C. "J" means test is known to fail in JAVA. 133 * "CJ" means test is known to fail for both languages. 134 */ 135 public String breaks = null; 136 137 private static Map<String, Integer> roundingModeMap = 138 new HashMap<String, Integer>(); 139 140 static { 141 roundingModeMap.put("ceiling", BigDecimal.ROUND_CEILING); 142 roundingModeMap.put("floor", BigDecimal.ROUND_FLOOR); 143 roundingModeMap.put("down", BigDecimal.ROUND_DOWN); 144 roundingModeMap.put("up", BigDecimal.ROUND_UP); 145 roundingModeMap.put("halfEven", BigDecimal.ROUND_HALF_EVEN); 146 roundingModeMap.put("halfDown", BigDecimal.ROUND_HALF_DOWN); 147 roundingModeMap.put("halfUp", BigDecimal.ROUND_HALF_UP); 148 roundingModeMap.put("unnecessary", BigDecimal.ROUND_UNNECESSARY); 149 } 150 151 private static Map<String, Currency.CurrencyUsage> currencyUsageMap = 152 new HashMap<String, Currency.CurrencyUsage>(); 153 154 static { 155 currencyUsageMap.put("standard", Currency.CurrencyUsage.STANDARD); 156 currencyUsageMap.put("cash", Currency.CurrencyUsage.CASH); 157 } 158 159 private static Map<String, Integer> padPositionMap = 160 new HashMap<String, Integer>(); 161 162 static { 163 // TODO: Fix so that it doesn't depend on DecimalFormat. 164 padPositionMap.put("beforePrefix", DecimalFormat.PAD_BEFORE_PREFIX); 165 padPositionMap.put("afterPrefix", DecimalFormat.PAD_AFTER_PREFIX); 166 padPositionMap.put("beforeSuffix", DecimalFormat.PAD_BEFORE_SUFFIX); 167 padPositionMap.put("afterSuffix", DecimalFormat.PAD_AFTER_SUFFIX); 168 } 169 170 private static Map<String, Integer> formatStyleMap = 171 new HashMap<String, Integer>(); 172 173 static { 174 formatStyleMap.put("decimal", NumberFormat.NUMBERSTYLE); 175 formatStyleMap.put("currency", NumberFormat.CURRENCYSTYLE); 176 formatStyleMap.put("percent", NumberFormat.PERCENTSTYLE); 177 formatStyleMap.put("scientific", NumberFormat.SCIENTIFICSTYLE); 178 formatStyleMap.put("currencyIso", NumberFormat.ISOCURRENCYSTYLE); 179 formatStyleMap.put("currencyPlural", NumberFormat.PLURALCURRENCYSTYLE); 180 formatStyleMap.put("currencyAccounting", NumberFormat.ACCOUNTINGCURRENCYSTYLE); 181 formatStyleMap.put("cashCurrency", NumberFormat.CASHCURRENCYSTYLE); 182 } 183 184 // Add any new fields here. On test failures, fields are printed in the same order they 185 // appear here. 186 private static String[] fieldOrdering = { 187 "locale", 188 "currency", 189 "pattern", 190 "format", 191 "output", 192 "comment", 193 "minIntegerDigits", 194 "maxIntegerDigits", 195 "minFractionDigits", 196 "maxFractionDigits", 197 "minGroupingDigits", 198 "breaks", 199 "useSigDigits", 200 "minSigDigits", 201 "maxSigDigits", 202 "useGrouping", 203 "multiplier", 204 "roundingIncrement", 205 "formatWidth", 206 "padCharacter", 207 "useScientific", 208 "grouping", 209 "grouping2", 210 "roundingMode", 211 "currencyUsage", 212 "minimumExponentDigits", 213 "exponentSignAlwaysShown", 214 "decimalSeparatorAlwaysShown", 215 "padPosition", 216 "positivePrefix", 217 "positiveSuffix", 218 "negativePrefix", 219 "negativeSuffix", 220 "signAlwaysShown", 221 "localizedPattern", 222 "toPattern", 223 "toLocalizedPattern", 224 "style", 225 "parse", 226 "lenient", 227 "plural", 228 "parseIntegerOnly", 229 "decimalPatternMatchRequired", 230 "parseNoExponent", 231 "outputCurrency" 232 }; 233 234 static { 235 HashSet<String> set = new HashSet<String>(); 236 for (String s : fieldOrdering) { 237 if (!set.add(s)) { 238 throw new ExceptionInInitializerError(s + "is a duplicate field."); 239 } 240 } 241 } 242 fromString(Map<String, T> map, String key)243 private static <T> T fromString(Map<String, T> map, String key) { 244 T value = map.get(key); 245 if (value == null) { 246 throw new IllegalArgumentException("Bad value: "+ key); 247 } 248 return value; 249 } 250 251 // start field setters. 252 // add setter for each new field in this block. 253 setLocale(String value)254 public void setLocale(String value) { 255 locale = new ULocale(value); 256 } 257 setCurrency(String value)258 public void setCurrency(String value) { 259 currency = Currency.getInstance(value); 260 } 261 setPattern(String value)262 public void setPattern(String value) { 263 pattern = value; 264 } 265 setFormat(String value)266 public void setFormat(String value) { 267 format = value; 268 } 269 setOutput(String value)270 public void setOutput(String value) { 271 output = value; 272 } 273 setComment(String value)274 public void setComment(String value) { 275 comment = value; 276 } 277 setMinIntegerDigits(String value)278 public void setMinIntegerDigits(String value) { 279 minIntegerDigits = Integer.valueOf(value); 280 } 281 setMaxIntegerDigits(String value)282 public void setMaxIntegerDigits(String value) { 283 maxIntegerDigits = Integer.valueOf(value); 284 } 285 setMinFractionDigits(String value)286 public void setMinFractionDigits(String value) { 287 minFractionDigits = Integer.valueOf(value); 288 } 289 setMaxFractionDigits(String value)290 public void setMaxFractionDigits(String value) { 291 maxFractionDigits = Integer.valueOf(value); 292 } 293 setMinGroupingDigits(String value)294 public void setMinGroupingDigits(String value) { 295 minGroupingDigits = Integer.valueOf(value); 296 } 297 setBreaks(String value)298 public void setBreaks(String value) { 299 breaks = value; 300 } 301 setUseSigDigits(String value)302 public void setUseSigDigits(String value) { 303 useSigDigits = Integer.valueOf(value); 304 } 305 setMinSigDigits(String value)306 public void setMinSigDigits(String value) { 307 minSigDigits = Integer.valueOf(value); 308 } 309 setMaxSigDigits(String value)310 public void setMaxSigDigits(String value) { 311 maxSigDigits = Integer.valueOf(value); 312 } 313 setUseGrouping(String value)314 public void setUseGrouping(String value) { 315 useGrouping = Integer.valueOf(value); 316 } 317 setMultiplier(String value)318 public void setMultiplier(String value) { 319 multiplier = Integer.valueOf(value); 320 } 321 setRoundingIncrement(String value)322 public void setRoundingIncrement(String value) { 323 roundingIncrement = Double.valueOf(value); 324 } 325 setFormatWidth(String value)326 public void setFormatWidth(String value) { 327 formatWidth = Integer.valueOf(value); 328 } 329 setPadCharacter(String value)330 public void setPadCharacter(String value) { 331 padCharacter = value; 332 } 333 setUseScientific(String value)334 public void setUseScientific(String value) { 335 useScientific = Integer.valueOf(value); 336 } 337 setGrouping(String value)338 public void setGrouping(String value) { 339 grouping = Integer.valueOf(value); 340 } 341 setGrouping2(String value)342 public void setGrouping2(String value) { 343 grouping2 = Integer.valueOf(value); 344 } 345 setRoundingMode(String value)346 public void setRoundingMode(String value) { 347 roundingMode = fromString(roundingModeMap, value); 348 } 349 setCurrencyUsage(String value)350 public void setCurrencyUsage(String value) { 351 currencyUsage = fromString(currencyUsageMap, value); 352 } 353 setMinimumExponentDigits(String value)354 public void setMinimumExponentDigits(String value) { 355 minimumExponentDigits = Integer.valueOf(value); 356 } 357 setExponentSignAlwaysShown(String value)358 public void setExponentSignAlwaysShown(String value) { 359 exponentSignAlwaysShown = Integer.valueOf(value); 360 } 361 setDecimalSeparatorAlwaysShown(String value)362 public void setDecimalSeparatorAlwaysShown(String value) { 363 decimalSeparatorAlwaysShown = Integer.valueOf(value); 364 } 365 setPadPosition(String value)366 public void setPadPosition(String value) { 367 padPosition = fromString(padPositionMap, value); 368 } 369 setPositivePrefix(String value)370 public void setPositivePrefix(String value) { 371 positivePrefix = value; 372 } 373 setPositiveSuffix(String value)374 public void setPositiveSuffix(String value) { 375 positiveSuffix = value; 376 } 377 setNegativePrefix(String value)378 public void setNegativePrefix(String value) { 379 negativePrefix = value; 380 } 381 setNegativeSuffix(String value)382 public void setNegativeSuffix(String value) { 383 negativeSuffix = value; 384 } 385 setSignAlwaysShown(String value)386 public void setSignAlwaysShown(String value) { 387 signAlwaysShown = Integer.valueOf(value); 388 } 389 setLocalizedPattern(String value)390 public void setLocalizedPattern(String value) { 391 localizedPattern = value; 392 } 393 setToPattern(String value)394 public void setToPattern(String value) { 395 toPattern = value; 396 } 397 setToLocalizedPattern(String value)398 public void setToLocalizedPattern(String value) { 399 toLocalizedPattern = value; 400 } 401 setStyle(String value)402 public void setStyle(String value) { 403 style = fromString(formatStyleMap, value); 404 } 405 setParse(String value)406 public void setParse(String value) { 407 parse = value; 408 } 409 setLenient(String value)410 public void setLenient(String value) { 411 lenient = Integer.valueOf(value); 412 } 413 setPlural(String value)414 public void setPlural(String value) { 415 plural = value; 416 } 417 setParseIntegerOnly(String value)418 public void setParseIntegerOnly(String value) { 419 parseIntegerOnly = Integer.valueOf(value); 420 } 421 setParseCaseSensitive(String value)422 public void setParseCaseSensitive(String value) { 423 parseCaseSensitive = Integer.valueOf(value); 424 } 425 setDecimalPatternMatchRequired(String value)426 public void setDecimalPatternMatchRequired(String value) { 427 decimalPatternMatchRequired = Integer.valueOf(value); 428 } 429 setParseNoExponent(String value)430 public void setParseNoExponent(String value) { 431 parseNoExponent = Integer.valueOf(value); 432 } 433 setOutputCurrency(String value)434 public void setOutputCurrency(String value) { 435 outputCurrency = value; 436 } 437 438 // end field setters. 439 440 // start of field clearers 441 // Add clear methods that can be set in one test and cleared 442 // in the next i.e the breaks field. 443 clearBreaks()444 public void clearBreaks() { 445 breaks = null; 446 } 447 clearUseGrouping()448 public void clearUseGrouping() { 449 useGrouping = null; 450 } 451 clearGrouping2()452 public void clearGrouping2() { 453 grouping2 = null; 454 } 455 clearGrouping()456 public void clearGrouping() { 457 grouping = null; 458 } 459 clearMinGroupingDigits()460 public void clearMinGroupingDigits() { 461 minGroupingDigits = null; 462 } 463 clearUseScientific()464 public void clearUseScientific() { 465 useScientific = null; 466 } 467 clearDecimalSeparatorAlwaysShown()468 public void clearDecimalSeparatorAlwaysShown() { 469 decimalSeparatorAlwaysShown = null; 470 } 471 472 // end field clearers 473 setField(String fieldName, String valueString)474 public void setField(String fieldName, String valueString) 475 throws NoSuchMethodException { 476 Method m = getClass().getMethod( 477 fieldToSetter(fieldName), String.class); 478 try { 479 m.invoke(this, valueString); 480 } catch (IllegalAccessException e) { 481 throw new RuntimeException(e); 482 } catch (InvocationTargetException e) { 483 throw new RuntimeException(e); 484 } 485 } 486 clearField(String fieldName)487 public void clearField(String fieldName) 488 throws NoSuchMethodException { 489 Method m = getClass().getMethod(fieldToClearer(fieldName)); 490 try { 491 m.invoke(this); 492 } catch (IllegalAccessException e) { 493 throw new RuntimeException(e); 494 } catch (InvocationTargetException e) { 495 throw new RuntimeException(e); 496 } 497 } 498 499 @Override toString()500 public String toString() { 501 StringBuilder result = new StringBuilder(); 502 result.append("{"); 503 boolean first = true; 504 for (String fieldName : fieldOrdering) { 505 try { 506 Field field = getClass().getField(fieldName); 507 Object optionalValue = field.get(this); 508 if (optionalValue == null) { 509 continue; 510 } 511 if (!first) { 512 result.append(", "); 513 } 514 first = false; 515 result.append(fieldName); 516 result.append(": "); 517 result.append(optionalValue); 518 } catch (NoSuchFieldException e) { 519 throw new RuntimeException(e); 520 } catch (SecurityException e) { 521 throw new RuntimeException(e); 522 } catch (IllegalAccessException e) { 523 throw new RuntimeException(e); 524 } 525 } 526 result.append("}"); 527 return result.toString(); 528 } 529 fieldToSetter(String fieldName)530 private static String fieldToSetter(String fieldName) { 531 return "set" 532 + Character.toUpperCase(fieldName.charAt(0)) 533 + fieldName.substring(1); 534 } 535 fieldToClearer(String fieldName)536 private static String fieldToClearer(String fieldName) { 537 return "clear" 538 + Character.toUpperCase(fieldName.charAt(0)) 539 + fieldName.substring(1); 540 } 541 542 } 543