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