OLD | NEW |
| (Empty) |
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_W
HM/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 | |
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 | |
OLD | NEW |