| // © 2016 and later: Unicode, Inc. and others. |
| // License & terms of use: http://www.unicode.org/copyright.html |
| /************************************************************************ |
| * COPYRIGHT: |
| * Copyright (c) 2015, International Business Machines Corporation |
| * and others. All Rights Reserved. |
| ************************************************************************/ |
| |
| #ifndef _DATADRIVENNUMBERFORMATTESTSUITE_H__ |
| #define _DATADRIVENNUMBERFORMATTESTSUITE_H__ |
| |
| #include "unicode/utypes.h" |
| |
| #if !UCONFIG_NO_FORMATTING |
| |
| #include "unicode/uobject.h" |
| #include "unicode/unistr.h" |
| #include "numberformattesttuple.h" |
| #include "intltest.h" |
| #include "cmemory.h" |
| |
| struct UCHARBUF; |
| class IntlTest; |
| |
| /** |
| * Performs various in-depth test on NumberFormat |
| **/ |
| class DataDrivenNumberFormatTestSuite : public IntlTest { |
| |
| public: |
| DataDrivenNumberFormatTestSuite() { |
| for (int32_t i = 0; i < UPRV_LENGTHOF(fPreviousFormatters); ++i) { |
| fPreviousFormatters[i] = NULL; |
| } |
| } |
| |
| /** |
| * Runs the data driven test suite. |
| * |
| * @param fileName is the name of the file in the source/test/testdata. |
| * This should be just a filename such as "numberformattest.txt" |
| * @param runAllTests If TRUE, runs every test in fileName. if FALSE, |
| * skips the tests that are known to break for ICU4C. |
| */ |
| void run(const char *fileName, UBool runAllTests); |
| virtual ~DataDrivenNumberFormatTestSuite(); |
| protected: |
| /** |
| * Subclasses override this method to test formatting numbers. |
| * Subclasses must not override both isFormatPass methods. |
| * @param tuple the test data for current test. The format method can |
| * assume that the format and output fields are populated. |
| * @param appendErrorMessage any message describing failures appended |
| * here. |
| * @param status any error returned here. |
| * @return TRUE if test passed or FALSE if test failed. |
| */ |
| virtual UBool isFormatPass( |
| const NumberFormatTestTuple &tuple, |
| UnicodeString &appendErrorMessage, |
| UErrorCode &status); |
| |
| |
| /** |
| * Subclasses override this method to test formatting numbers. |
| * Along with copy and assignment operators. |
| * @param tuple the test data for current test. The format method can |
| * assume that the format and output fields are populated. |
| * @param somePreviousFormatter A pointer to a previous formatter |
| * that the test framework owns. This formatter changes as tests |
| * are run. Subclasses should initialize a formatter and assign |
| * the newly initialized formatter to this formatter. In this way, |
| * assignment gets tested with multiple previous states. |
| * @param appendErrorMessage any message describing failures appended |
| * here. |
| * @param status any error returned here. |
| * @return TRUE if test passed or FALSE if test failed. |
| */ |
| virtual UBool isFormatPass( |
| const NumberFormatTestTuple &tuple, |
| UObject *somePreviousFormatter, |
| UnicodeString &appendErrorMessage, |
| UErrorCode &status); |
| /** |
| * If subclass is testing formatting with copy and assignmet, it |
| * needs to override this method to return a newly allocated formatter. |
| */ |
| virtual UObject *newFormatter(UErrorCode &status); |
| |
| /** |
| * Tests toPattern method. |
| */ |
| virtual UBool isToPatternPass( |
| const NumberFormatTestTuple &tuple, |
| UnicodeString &appendErrorMessage, |
| UErrorCode &status); |
| /** |
| * Test parsing. |
| */ |
| virtual UBool isParsePass( |
| const NumberFormatTestTuple &tuple, |
| UnicodeString &appendErrorMessage, |
| UErrorCode &status); |
| |
| /** |
| * Test parsing with currency. |
| */ |
| virtual UBool isParseCurrencyPass( |
| const NumberFormatTestTuple &tuple, |
| UnicodeString &appendErrorMessage, |
| UErrorCode &status); |
| |
| /** |
| * Test plural selection. |
| */ |
| virtual UBool isSelectPass( |
| const NumberFormatTestTuple &tuple, |
| UnicodeString &appendErrorMessage, |
| UErrorCode &status); |
| private: |
| UnicodeString fFileLine; |
| int32_t fFileLineNumber; |
| UnicodeString fFileTestName; |
| NumberFormatTestTuple fTuple; |
| int32_t fFormatTestNumber; |
| UObject *fPreviousFormatters[13]; |
| |
| void setTupleField(UErrorCode &); |
| int32_t splitBy( |
| UnicodeString *columnValues, |
| int32_t columnValueCount, |
| UChar delimiter); |
| void showError(const char *message); |
| void showFailure(const UnicodeString &message); |
| void showLineInfo(); |
| UBool breaksC(); |
| UBool readLine(UCHARBUF *f, UErrorCode &); |
| UBool isPass( |
| const NumberFormatTestTuple &tuple, |
| UnicodeString &appendErrorMessage, |
| UErrorCode &status); |
| }; |
| #endif /* !UCONFIG_NO_FORMATTING */ |
| #endif // _DATADRIVENNUMBERFORMATTESTSUITE_ |