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 |