• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 *******************************************************************************
3 * Copyright (C) 2015, International Business Machines Corporation and         *
4 * others. All Rights Reserved.                                                *
5 *******************************************************************************
6 */
7 #ifndef _NUMBER_FORMAT_TEST_TUPLE
8 #define _NUMBER_FORMAT_TEST_TUPLE
9 
10 #include "unicode/utypes.h"
11 
12 #if !UCONFIG_NO_FORMATTING
13 
14 #include "decimalformatpattern.h"
15 #include "unicode/decimfmt.h"
16 #include "unicode/ucurr.h"
17 
18 #define NFTT_GET_FIELD(tuple, fieldName, defaultValue) ((tuple).fieldName##Flag ? (tuple).fieldName : (defaultValue))
19 
20 U_NAMESPACE_USE
21 
22 enum ENumberFormatTestTupleField {
23     kLocale,
24     kCurrency,
25     kPattern,
26     kFormat,
27     kOutput,
28     kComment,
29     kMinIntegerDigits,
30     kMaxIntegerDigits,
31     kMinFractionDigits,
32     kMaxFractionDigits,
33     kMinGroupingDigits,
34     kBreaks,
35     kUseSigDigits,
36     kMinSigDigits,
37     kMaxSigDigits,
38     kUseGrouping,
39     kMultiplier,
40     kRoundingIncrement,
41     kFormatWidth,
42     kPadCharacter,
43     kUseScientific,
44     kGrouping,
45     kGrouping2,
46     kRoundingMode,
47     kCurrencyUsage,
48     kMinimumExponentDigits,
49     kExponentSignAlwaysShown,
50     kDecimalSeparatorAlwaysShown,
51     kPadPosition,
52     kPositivePrefix,
53     kPositiveSuffix,
54     kNegativePrefix,
55     kNegativeSuffix,
56     kLocalizedPattern,
57     kToPattern,
58     kToLocalizedPattern,
59     kStyle,
60     kParse,
61     kLenient,
62     kPlural,
63     kParseIntegerOnly,
64     kDecimalPatternMatchRequired,
65     kParseNoExponent,
66     kOutputCurrency,
67     kNumberFormatTestTupleFieldCount
68 };
69 
70 /**
71  * NumberFormatTestTuple represents the data for a single data driven test.
72  * It consist of named fields each of which may or may not be set. Each field
73  * has a particular meaning in the test. For more information on what each
74  * field means and how the data drive tests work, please see
75  * https://docs.google.com/document/d/1T2P0p953_Lh1pRwo-5CuPVrHlIBa_wcXElG-Hhg_WHM/edit?usp=sharing
76  * Each field is optional. That is, a certain field may be unset for a given
77  * test. The UBool fields ending in "Flag" indicate whether the corrresponding
78  * field is set or not. TRUE means set; FALSE means unset. An unset field
79  * generally means that the corresponding setter method is not called on
80  * the NumberFormat object.
81  */
82 
83 class NumberFormatTestTuple {
84 public:
85     Locale locale;
86     UnicodeString currency;
87     UnicodeString pattern;
88     UnicodeString format;
89     UnicodeString output;
90     UnicodeString comment;
91     int32_t minIntegerDigits;
92     int32_t maxIntegerDigits;
93     int32_t minFractionDigits;
94     int32_t maxFractionDigits;
95     int32_t minGroupingDigits;
96     UnicodeString breaks;
97     int32_t useSigDigits;
98     int32_t minSigDigits;
99     int32_t maxSigDigits;
100     int32_t useGrouping;
101     int32_t multiplier;
102     double roundingIncrement;
103     int32_t formatWidth;
104     UnicodeString padCharacter;
105     int32_t useScientific;
106     int32_t grouping;
107     int32_t grouping2;
108     DecimalFormat::ERoundingMode roundingMode;
109     UCurrencyUsage currencyUsage;
110     int32_t minimumExponentDigits;
111     int32_t exponentSignAlwaysShown;
112     int32_t decimalSeparatorAlwaysShown;
113     DecimalFormat::EPadPosition padPosition;
114     UnicodeString positivePrefix;
115     UnicodeString positiveSuffix;
116     UnicodeString negativePrefix;
117     UnicodeString negativeSuffix;
118     UnicodeString localizedPattern;
119     UnicodeString toPattern;
120     UnicodeString toLocalizedPattern;
121     UNumberFormatStyle style;
122     UnicodeString parse;
123     int32_t lenient;
124     UnicodeString plural;
125     int32_t parseIntegerOnly;
126     int32_t decimalPatternMatchRequired;
127     int32_t parseNoExponent;
128     UnicodeString outputCurrency;
129 
130     UBool localeFlag;
131     UBool currencyFlag;
132     UBool patternFlag;
133     UBool formatFlag;
134     UBool outputFlag;
135     UBool commentFlag;
136     UBool minIntegerDigitsFlag;
137     UBool maxIntegerDigitsFlag;
138     UBool minFractionDigitsFlag;
139     UBool maxFractionDigitsFlag;
140     UBool minGroupingDigitsFlag;
141     UBool breaksFlag;
142     UBool useSigDigitsFlag;
143     UBool minSigDigitsFlag;
144     UBool maxSigDigitsFlag;
145     UBool useGroupingFlag;
146     UBool multiplierFlag;
147     UBool roundingIncrementFlag;
148     UBool formatWidthFlag;
149     UBool padCharacterFlag;
150     UBool useScientificFlag;
151     UBool groupingFlag;
152     UBool grouping2Flag;
153     UBool roundingModeFlag;
154     UBool currencyUsageFlag;
155     UBool minimumExponentDigitsFlag;
156     UBool exponentSignAlwaysShownFlag;
157     UBool decimalSeparatorAlwaysShownFlag;
158     UBool padPositionFlag;
159     UBool positivePrefixFlag;
160     UBool positiveSuffixFlag;
161     UBool negativePrefixFlag;
162     UBool negativeSuffixFlag;
163     UBool localizedPatternFlag;
164     UBool toPatternFlag;
165     UBool toLocalizedPatternFlag;
166     UBool styleFlag;
167     UBool parseFlag;
168     UBool lenientFlag;
169     UBool pluralFlag;
170     UBool parseIntegerOnlyFlag;
171     UBool decimalPatternMatchRequiredFlag;
172     UBool parseNoExponentFlag;
173     UBool outputCurrencyFlag;
174 
NumberFormatTestTuple()175     NumberFormatTestTuple() {
176         clear();
177     }
178 
179     /**
180      * Sets a particular field using the string representation of that field.
181      * @param field the field to set.
182      * @param fieldValue the string representation of the field value.
183      * @param status error returned here such as when the string representation
184      *  of the field value cannot be parsed.
185      * @return TRUE on success or FALSE if an error was set in status.
186      */
187     UBool setField(
188             ENumberFormatTestTupleField field,
189             const UnicodeString &fieldValue,
190             UErrorCode &status);
191     /**
192      * Clears a particular field.
193      * @param field the field to clear.
194      * @param status error set here.
195      * @return TRUE on success or FALSE if error was set.
196      */
197     UBool clearField(
198             ENumberFormatTestTupleField field,
199             UErrorCode &status);
200     /**
201      * Clears every field.
202      */
203     void clear();
204 
205     /**
206      * Returns the string representation of the test case this object
207      * currently represents.
208      * @param appendTo the result appended here.
209      * @return appendTo
210      */
211     UnicodeString &toString(UnicodeString &appendTo) const;
212 
213     /**
214      * Converts the name of a field to the corresponding enum value.
215      * @param name the name of the field as a string.
216      * @return the corresponding enum value or kNumberFormatTestFieldCount
217      *   if name does not map to any recognized field name.
218      */
219     static ENumberFormatTestTupleField getFieldByName(const UnicodeString &name);
220 private:
221     const void *getFieldAddress(int32_t fieldId) const;
222     void *getMutableFieldAddress(int32_t fieldId);
223     void setFlag(int32_t fieldId, UBool value);
224     UBool isFlag(int32_t fieldId) const;
225 };
226 
227 #endif /* !UCONFIG_NO_FORMATTING */
228 #endif
229