X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/4388f060552cc537e71e957d32f35e9d75a61233..57a6839dcb3bba09e8228b822b290604668416fe:/icuSources/test/intltest/intltest.h diff --git a/icuSources/test/intltest/intltest.h b/icuSources/test/intltest/intltest.h index be6993e8..4e78ec5c 100644 --- a/icuSources/test/intltest/intltest.h +++ b/icuSources/test/intltest/intltest.h @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2011, International Business Machines Corporation and + * Copyright (c) 1997-2014, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ @@ -15,6 +15,29 @@ #include "unicode/fmtable.h" #include "unicode/testlog.h" + +#if U_NO_DEFAULT_INCLUDE_UTF_HEADERS +/* deprecated - make tests pass with U_NO_DEFAULT_INCLUDE_UTF_HEADERS */ +#include "unicode/utf_old.h" +#endif + +/** + * \def ICU_USE_THREADS + * + * Enables multi-threaded testing. Moved here from uconfig.h. + * Default: enabled + * + * This switch used to allow thread support (use of mutexes) to be compiled out of ICU. + */ +#ifdef ICU_USE_THREADS + /* Use the predefined value. */ +#elif defined(APP_NO_THREADS) + /* APP_NO_THREADS is an old symbol. We'll honour it if present. */ +# define ICU_USE_THREADS 0 +#else +# define ICU_USE_THREADS 1 +#endif + U_NAMESPACE_USE #if U_PLATFORM == U_PF_OS390 @@ -32,17 +55,19 @@ UnicodeString Int64ToUnicodeString(int64_t num); UnicodeString operator+(const UnicodeString& left, long num); UnicodeString operator+(const UnicodeString& left, unsigned long num); UnicodeString operator+(const UnicodeString& left, double num); -UnicodeString operator+(const UnicodeString& left, char num); -UnicodeString operator+(const UnicodeString& left, short num); -UnicodeString operator+(const UnicodeString& left, int num); -UnicodeString operator+(const UnicodeString& left, unsigned char num); -UnicodeString operator+(const UnicodeString& left, unsigned short num); -UnicodeString operator+(const UnicodeString& left, unsigned int num); +UnicodeString operator+(const UnicodeString& left, char num); +UnicodeString operator+(const UnicodeString& left, short num); +UnicodeString operator+(const UnicodeString& left, int num); +UnicodeString operator+(const UnicodeString& left, unsigned char num); +UnicodeString operator+(const UnicodeString& left, unsigned short num); +UnicodeString operator+(const UnicodeString& left, unsigned int num); UnicodeString operator+(const UnicodeString& left, float num); #if !UCONFIG_NO_FORMATTING UnicodeString toString(const Formattable& f); // liu UnicodeString toString(int32_t n); #endif +UnicodeString toString(UBool b); + //----------------------------------------------------------------------------- // Use the TESTCASE macro in subclasses of IntlTest. Define the @@ -92,11 +117,41 @@ UnicodeString toString(int32_t n); break; \ } +#define TESTCASE_AUTO_CLASS(TestClass) \ + if (index == testCaseAutoNumber++) { \ + name = #TestClass; \ + if (exec) { \ + logln(#TestClass "---"); \ + logln(); \ + TestClass test; \ + callTest(test, par); \ + } \ + break; \ + } + +#define TESTCASE_AUTO_CREATE_CLASS(TestClass) \ + if (index == testCaseAutoNumber++) { \ + name = #TestClass; \ + if (exec) { \ + logln(#TestClass "---"); \ + logln(); \ + LocalPointer test(create##TestClass()); \ + callTest(*test, par); \ + } \ + break; \ + } + #define TESTCASE_AUTO_END \ name = ""; \ break; \ } +#define TEST_ASSERT_TRUE(x) \ + assertTrue(#x, (x), FALSE, FALSE, __FILE__, __LINE__) + +#define TEST_ASSERT_STATUS(x) \ + assertSuccess(#x, (x), FALSE, __FILE__, __LINE__) + class IntlTest : public TestLog { public: @@ -109,6 +164,7 @@ public: virtual UBool setNoErrMsg( UBool no_err_msg = TRUE ); virtual UBool setQuick( UBool quick = TRUE ); virtual UBool setLeaks( UBool leaks = TRUE ); + virtual UBool setNotime( UBool no_time = TRUE ); virtual UBool setWarnOnMissingData( UBool warn_on_missing_data = TRUE ); virtual int32_t setThreadCount( int32_t count = 1); @@ -124,6 +180,36 @@ public: virtual void logln( void ); + /** + * Replaces isICUVersionAtLeast and isICUVersionBefore + * log that an issue is known. + * Usually used this way: + * if( ... && logKnownIssue("12345", "some bug")) continue; + * @param ticket ticket string, "12345" or "cldrbug:1234" + * @param message optional message string + * @return true if test should be skipped + */ + UBool logKnownIssue( const char *ticket, const UnicodeString &message ); + /** + * Replaces isICUVersionAtLeast and isICUVersionBefore + * log that an issue is known. + * Usually used this way: + * if( ... && logKnownIssue("12345", "some bug")) continue; + * @param ticket ticket string, "12345" or "cldrbug:1234" + * @return true if test should be skipped + */ + UBool logKnownIssue( const char *ticket ); + /** + * Replaces isICUVersionAtLeast and isICUVersionBefore + * log that an issue is known. + * Usually used this way: + * if( ... && logKnownIssue("12345", "some bug")) continue; + * @param ticket ticket string, "12345" or "cldrbug:1234" + * @param message optional message string + * @return true if test should be skipped + */ + UBool logKnownIssue( const char *ticket, const char *fmt, ...); + virtual void info( const UnicodeString &message ); virtual void infoln( const UnicodeString &message ); @@ -131,7 +217,7 @@ public: virtual void infoln( void ); virtual void err(void); - + virtual void err( const UnicodeString &message ); virtual void errln( const UnicodeString &message ); @@ -139,7 +225,7 @@ public: virtual void dataerr( const UnicodeString &message ); virtual void dataerrln( const UnicodeString &message ); - + void errcheckln(UErrorCode status, const UnicodeString &message ); // convenience functions: sprintf() + errln() etc. @@ -151,10 +237,20 @@ public: void errln(const char *fmt, ...); void dataerr(const char *fmt, ...); void dataerrln(const char *fmt, ...); + + /** + * logs an error (even if status==U_ZERO_ERROR), but + * calls dataerrln() or errln() depending on the type of error. + * Does not report the status code. + * @param status parameter for selecting whether errln or dataerrln is called. + */ void errcheckln(UErrorCode status, const char *fmt, ...); // Print ALL named errors encountered so far void printErrors(); + + // print known issues. return TRUE if there were any. + UBool printKnownIssues(); virtual void usage( void ) ; @@ -174,32 +270,6 @@ public: */ static float random(); - /** - * Returns true if u_getVersion() < major.minor. - */ - static UBool isICUVersionBefore(int major, int minor) { - return isICUVersionBefore(major, minor, 0); - } - - /** - * Returns true if u_getVersion() < major.minor.milli. - */ - static UBool isICUVersionBefore(int major, int minor, int milli); - - /** - * Returns true if u_getVersion() >= major.minor. - */ - static UBool isICUVersionAtLeast(int major, int minor) { - return isICUVersionAtLeast(major, minor, 0); - } - - /** - * Returns true if u_getVersion() >= major.minor.milli. - */ - static UBool isICUVersionAtLeast(int major, int minor, int milli) { - return !isICUVersionBefore(major, minor, milli); - } - enum { kMaxProps = 16 }; virtual void setProperty(const char* propline); @@ -207,16 +277,24 @@ public: protected: /* JUnit-like assertions. Each returns TRUE if it succeeds. */ - UBool assertTrue(const char* message, UBool condition, UBool quiet=FALSE, UBool possibleDataError=FALSE); + UBool assertTrue(const char* message, UBool condition, UBool quiet=FALSE, UBool possibleDataError=FALSE, const char *file=NULL, int line=0); UBool assertFalse(const char* message, UBool condition, UBool quiet=FALSE); - UBool assertSuccess(const char* message, UErrorCode ec, UBool possibleDataError=FALSE); + /** + * @param possibleDataError - if TRUE, use dataerrln instead of errcheckln on failure + * @return TRUE on success, FALSE on failure. + */ + UBool assertSuccess(const char* message, UErrorCode ec, UBool possibleDataError=FALSE, const char *file=NULL, int line=0); UBool assertEquals(const char* message, const UnicodeString& expected, const UnicodeString& actual, UBool possibleDataError=FALSE); UBool assertEquals(const char* message, const char* expected, const char* actual); + UBool assertEquals(const char* message, UBool expected, + UBool actual); + UBool assertEquals(const char* message, int32_t expected, int32_t actual); + UBool assertEquals(const char* message, int64_t expected, int64_t actual); #if !UCONFIG_NO_FORMATTING UBool assertEquals(const char* message, const Formattable& expected, - const Formattable& actual); + const Formattable& actual, UBool possibleDataError=FALSE); UBool assertEquals(const UnicodeString& message, const Formattable& expected, const Formattable& actual); #endif @@ -224,9 +302,12 @@ protected: UBool assertFalse(const UnicodeString& message, UBool condition, UBool quiet=FALSE); UBool assertSuccess(const UnicodeString& message, UErrorCode ec); UBool assertEquals(const UnicodeString& message, const UnicodeString& expected, - const UnicodeString& actual); + const UnicodeString& actual, UBool possibleDataError=FALSE); UBool assertEquals(const UnicodeString& message, const char* expected, const char* actual); + UBool assertEquals(const UnicodeString& message, UBool expected, UBool actual); + UBool assertEquals(const UnicodeString& message, int32_t expected, int32_t actual); + UBool assertEquals(const UnicodeString& message, int64_t expected, int64_t actual); virtual void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ); // overide ! @@ -244,6 +325,7 @@ protected: UBool quick; UBool leaks; UBool warn_on_missing_data; + UBool no_time; int32_t threadCount; private: @@ -256,6 +338,7 @@ private: char* testPath; // specifies subtests char basePath[1024]; + char currName[1024]; // current test name //FILE *testoutfp; void *testoutfp; @@ -271,7 +354,12 @@ protected: static UnicodeString &prettify(const UnicodeString &source, UnicodeString &target); static UnicodeString prettify(const UnicodeString &source, UBool parseBackslash=FALSE); + // digits=-1 determines the number of digits automatically static UnicodeString &appendHex(uint32_t number, int32_t digits, UnicodeString &target); + static UnicodeString toHex(uint32_t number, int32_t digits=-1); + static inline UnicodeString toHex(int32_t number, int32_t digits=-1) { + return toHex((uint32_t)number, digits); + } public: static void setICU_DATA(); // Set up ICU_DATA if necessary.