• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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