Home | History | Annotate | Download | only in intltest
      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 "decimalformatpattern.h"
     17 #include "unicode/decimfmt.h"
     18 #include "unicode/ucurr.h"
     19 
     20 #define NFTT_GET_FIELD(tuple, fieldName, defaultValue) ((tuple).fieldName##Flag ? (tuple).fieldName : (defaultValue))
     21 
     22 U_NAMESPACE_USE
     23 
     24 enum ENumberFormatTestTupleField {
     25     kLocale,
     26     kCurrency,
     27     kPattern,
     28     kFormat,
     29     kOutput,
     30     kComment,
     31     kMinIntegerDigits,
     32     kMaxIntegerDigits,
     33     kMinFractionDigits,
     34     kMaxFractionDigits,
     35     kMinGroupingDigits,
     36     kBreaks,
     37     kUseSigDigits,
     38     kMinSigDigits,
     39     kMaxSigDigits,
     40     kUseGrouping,
     41     kMultiplier,
     42     kRoundingIncrement,
     43     kFormatWidth,
     44     kPadCharacter,
     45     kUseScientific,
     46     kGrouping,
     47     kGrouping2,
     48     kRoundingMode,
     49     kCurrencyUsage,
     50     kMinimumExponentDigits,
     51     kExponentSignAlwaysShown,
     52     kDecimalSeparatorAlwaysShown,
     53     kPadPosition,
     54     kPositivePrefix,
     55     kPositiveSuffix,
     56     kNegativePrefix,
     57     kNegativeSuffix,
     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     UnicodeString localizedPattern;
    122     UnicodeString toPattern;
    123     UnicodeString toLocalizedPattern;
    124     UNumberFormatStyle style;
    125     UnicodeString parse;
    126     int32_t lenient;
    127     UnicodeString plural;
    128     int32_t parseIntegerOnly;
    129     int32_t decimalPatternMatchRequired;
    130     int32_t parseNoExponent;
    131     int32_t parseCaseSensitive;
    132     UnicodeString outputCurrency;
    133 
    134     UBool localeFlag;
    135     UBool currencyFlag;
    136     UBool patternFlag;
    137     UBool formatFlag;
    138     UBool outputFlag;
    139     UBool commentFlag;
    140     UBool minIntegerDigitsFlag;
    141     UBool maxIntegerDigitsFlag;
    142     UBool minFractionDigitsFlag;
    143     UBool maxFractionDigitsFlag;
    144     UBool minGroupingDigitsFlag;
    145     UBool breaksFlag;
    146     UBool useSigDigitsFlag;
    147     UBool minSigDigitsFlag;
    148     UBool maxSigDigitsFlag;
    149     UBool useGroupingFlag;
    150     UBool multiplierFlag;
    151     UBool roundingIncrementFlag;
    152     UBool formatWidthFlag;
    153     UBool padCharacterFlag;
    154     UBool useScientificFlag;
    155     UBool groupingFlag;
    156     UBool grouping2Flag;
    157     UBool roundingModeFlag;
    158     UBool currencyUsageFlag;
    159     UBool minimumExponentDigitsFlag;
    160     UBool exponentSignAlwaysShownFlag;
    161     UBool decimalSeparatorAlwaysShownFlag;
    162     UBool padPositionFlag;
    163     UBool positivePrefixFlag;
    164     UBool positiveSuffixFlag;
    165     UBool negativePrefixFlag;
    166     UBool negativeSuffixFlag;
    167     UBool localizedPatternFlag;
    168     UBool toPatternFlag;
    169     UBool toLocalizedPatternFlag;
    170     UBool styleFlag;
    171     UBool parseFlag;
    172     UBool lenientFlag;
    173     UBool pluralFlag;
    174     UBool parseIntegerOnlyFlag;
    175     UBool decimalPatternMatchRequiredFlag;
    176     UBool parseNoExponentFlag;
    177     UBool parseCaseSensitiveFlag;
    178     UBool outputCurrencyFlag;
    179 
    180     NumberFormatTestTuple() {
    181         clear();
    182     }
    183 
    184     /**
    185      * Sets a particular field using the string representation of that field.
    186      * @param field the field to set.
    187      * @param fieldValue the string representation of the field value.
    188      * @param status error returned here such as when the string representation
    189      *  of the field value cannot be parsed.
    190      * @return TRUE on success or FALSE if an error was set in status.
    191      */
    192     UBool setField(
    193             ENumberFormatTestTupleField field,
    194             const UnicodeString &fieldValue,
    195             UErrorCode &status);
    196     /**
    197      * Clears a particular field.
    198      * @param field the field to clear.
    199      * @param status error set here.
    200      * @return TRUE on success or FALSE if error was set.
    201      */
    202     UBool clearField(
    203             ENumberFormatTestTupleField field,
    204             UErrorCode &status);
    205     /**
    206      * Clears every field.
    207      */
    208     void clear();
    209 
    210     /**
    211      * Returns the string representation of the test case this object
    212      * currently represents.
    213      * @param appendTo the result appended here.
    214      * @return appendTo
    215      */
    216     UnicodeString &toString(UnicodeString &appendTo) const;
    217 
    218     /**
    219      * Converts the name of a field to the corresponding enum value.
    220      * @param name the name of the field as a string.
    221      * @return the corresponding enum value or kNumberFormatTestFieldCount
    222      *   if name does not map to any recognized field name.
    223      */
    224     static ENumberFormatTestTupleField getFieldByName(const UnicodeString &name);
    225 private:
    226     const void *getFieldAddress(int32_t fieldId) const;
    227     void *getMutableFieldAddress(int32_t fieldId);
    228     void setFlag(int32_t fieldId, UBool value);
    229     UBool isFlag(int32_t fieldId) const;
    230 };
    231 
    232 #endif /* !UCONFIG_NO_FORMATTING */
    233 #endif
    234