// © 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_