OLD | NEW |
(Empty) | |
| 1 /******************************************************************** |
| 2 * COPYRIGHT: |
| 3 * Copyright (c) 1997-2010, International Business Machines Corporation and |
| 4 * others. All Rights Reserved. |
| 5 ********************************************************************/ |
| 6 |
| 7 |
| 8 /** |
| 9 * IntlTest is a base class for tests. */ |
| 10 |
| 11 #ifndef _INTLTEST |
| 12 #define _INTLTEST |
| 13 |
| 14 // The following includes utypes.h, uobject.h and unistr.h |
| 15 #include "unicode/fmtable.h" |
| 16 #include "unicode/testlog.h" |
| 17 |
| 18 U_NAMESPACE_USE |
| 19 |
| 20 #ifdef OS390 |
| 21 // avoid collision with math.h/log() |
| 22 // this must be after including utypes.h so that OS390 is actually defined |
| 23 #pragma map(IntlTest::log( const UnicodeString &message ),"logos390") |
| 24 #endif |
| 25 |
| 26 //----------------------------------------------------------------------------- |
| 27 //convenience classes to ease porting code that uses the Java |
| 28 //string-concatenation operator (moved from findword test by rtg) |
| 29 UnicodeString UCharToUnicodeString(UChar c); |
| 30 UnicodeString Int64ToUnicodeString(int64_t num); |
| 31 //UnicodeString operator+(const UnicodeString& left, int64_t num); // Some compi
lers don't allow this because of the long type. |
| 32 UnicodeString operator+(const UnicodeString& left, long num); |
| 33 UnicodeString operator+(const UnicodeString& left, unsigned long num); |
| 34 UnicodeString operator+(const UnicodeString& left, double num); |
| 35 UnicodeString operator+(const UnicodeString& left, char num); |
| 36 UnicodeString operator+(const UnicodeString& left, short num); |
| 37 UnicodeString operator+(const UnicodeString& left, int num); |
| 38 UnicodeString operator+(const UnicodeString& left, unsigned char num); |
| 39 UnicodeString operator+(const UnicodeString& left, unsigned short num); |
| 40 UnicodeString operator+(const UnicodeString& left, unsigned int num); |
| 41 UnicodeString operator+(const UnicodeString& left, float num); |
| 42 #if !UCONFIG_NO_FORMATTING |
| 43 UnicodeString toString(const Formattable& f); // liu |
| 44 UnicodeString toString(int32_t n); |
| 45 #endif |
| 46 //----------------------------------------------------------------------------- |
| 47 |
| 48 // Use the TESTCASE macro in subclasses of IntlTest. Define the |
| 49 // runIndexedTest method in this fashion: |
| 50 // |
| 51 //| void MyTest::runIndexedTest(int32_t index, UBool exec, |
| 52 //| const char* &name, char* /*par*/) { |
| 53 //| switch (index) { |
| 54 //| TESTCASE(0,TestSomething); |
| 55 //| TESTCASE(1,TestSomethingElse); |
| 56 //| TESTCASE(2,TestAnotherThing); |
| 57 //| default: name = ""; break; |
| 58 //| } |
| 59 //| } |
| 60 #define TESTCASE(id,test) \ |
| 61 case id: \ |
| 62 name = #test; \ |
| 63 if (exec) { \ |
| 64 logln(#test "---"); \ |
| 65 logln(); \ |
| 66 test(); \ |
| 67 } \ |
| 68 break |
| 69 |
| 70 // More convenient macros. These allow easy reordering of the test cases. |
| 71 // |
| 72 //| void MyTest::runIndexedTest(int32_t index, UBool exec, |
| 73 //| const char* &name, char* /*par*/) { |
| 74 //| TESTCASE_AUTO_BEGIN; |
| 75 //| TESTCASE_AUTO(TestSomething); |
| 76 //| TESTCASE_AUTO(TestSomethingElse); |
| 77 //| TESTCASE_AUTO(TestAnotherThing); |
| 78 //| TESTCASE_AUTO_END; |
| 79 //| } |
| 80 #define TESTCASE_AUTO_BEGIN \ |
| 81 for(;;) { \ |
| 82 int32_t testCaseAutoNumber = 0 |
| 83 |
| 84 #define TESTCASE_AUTO(test) \ |
| 85 if (index == testCaseAutoNumber++) { \ |
| 86 name = #test; \ |
| 87 if (exec) { \ |
| 88 logln(#test "---"); \ |
| 89 logln(); \ |
| 90 test(); \ |
| 91 } \ |
| 92 break; \ |
| 93 } |
| 94 |
| 95 #define TESTCASE_AUTO_END \ |
| 96 name = ""; \ |
| 97 break; \ |
| 98 } |
| 99 |
| 100 class IntlTest : public TestLog { |
| 101 public: |
| 102 |
| 103 IntlTest(); |
| 104 // TestLog has a virtual destructor. |
| 105 |
| 106 virtual UBool runTest( char* name = NULL, char* par = NULL, char *baseName =
NULL); // not to be overidden |
| 107 |
| 108 virtual UBool setVerbose( UBool verbose = TRUE ); |
| 109 virtual UBool setNoErrMsg( UBool no_err_msg = TRUE ); |
| 110 virtual UBool setQuick( UBool quick = TRUE ); |
| 111 virtual UBool setLeaks( UBool leaks = TRUE ); |
| 112 virtual UBool setWarnOnMissingData( UBool warn_on_missing_data = TRUE ); |
| 113 virtual int32_t setThreadCount( int32_t count = 1); |
| 114 |
| 115 virtual int32_t getErrors( void ); |
| 116 virtual int32_t getDataErrors (void ); |
| 117 |
| 118 virtual void setCaller( IntlTest* callingTest ); // for internal use only |
| 119 virtual void setPath( char* path ); // for internal use only |
| 120 |
| 121 virtual void log( const UnicodeString &message ); |
| 122 |
| 123 virtual void logln( const UnicodeString &message ); |
| 124 |
| 125 virtual void logln( void ); |
| 126 |
| 127 virtual void info( const UnicodeString &message ); |
| 128 |
| 129 virtual void infoln( const UnicodeString &message ); |
| 130 |
| 131 virtual void infoln( void ); |
| 132 |
| 133 virtual void err(void); |
| 134 |
| 135 virtual void err( const UnicodeString &message ); |
| 136 |
| 137 virtual void errln( const UnicodeString &message ); |
| 138 |
| 139 virtual void dataerr( const UnicodeString &message ); |
| 140 |
| 141 virtual void dataerrln( const UnicodeString &message ); |
| 142 |
| 143 void errcheckln(UErrorCode status, const UnicodeString &message ); |
| 144 |
| 145 // convenience functions: sprintf() + errln() etc. |
| 146 void log(const char *fmt, ...); |
| 147 void logln(const char *fmt, ...); |
| 148 void info(const char *fmt, ...); |
| 149 void infoln(const char *fmt, ...); |
| 150 void err(const char *fmt, ...); |
| 151 void errln(const char *fmt, ...); |
| 152 void dataerr(const char *fmt, ...); |
| 153 void dataerrln(const char *fmt, ...); |
| 154 void errcheckln(UErrorCode status, const char *fmt, ...); |
| 155 |
| 156 // Print ALL named errors encountered so far |
| 157 void printErrors(); |
| 158 |
| 159 virtual void usage( void ) ; |
| 160 |
| 161 /** |
| 162 * Returns a uniform random value x, with 0.0 <= x < 1.0. Use |
| 163 * with care: Does not return all possible values; returns one of |
| 164 * 714,025 values, uniformly spaced. However, the period is |
| 165 * effectively infinite. See: Numerical Recipes, section 7.1. |
| 166 * |
| 167 * @param seedp pointer to seed. Set *seedp to any negative value |
| 168 * to restart the sequence. |
| 169 */ |
| 170 static float random(int32_t* seedp); |
| 171 |
| 172 /** |
| 173 * Convenience method using a global seed. |
| 174 */ |
| 175 static float random(); |
| 176 |
| 177 /** |
| 178 * Ascertain the version of ICU. Useful for |
| 179 * time bomb testing |
| 180 */ |
| 181 UBool isICUVersionAtLeast(const UVersionInfo x); |
| 182 |
| 183 enum { kMaxProps = 16 }; |
| 184 |
| 185 virtual void setProperty(const char* propline); |
| 186 virtual const char* getProperty(const char* prop); |
| 187 |
| 188 protected: |
| 189 /* JUnit-like assertions. Each returns TRUE if it succeeds. */ |
| 190 UBool assertTrue(const char* message, UBool condition, UBool quiet=FALSE, UB
ool possibleDataError=FALSE); |
| 191 UBool assertFalse(const char* message, UBool condition, UBool quiet=FALSE); |
| 192 UBool assertSuccess(const char* message, UErrorCode ec, UBool possibleDataEr
ror=FALSE); |
| 193 UBool assertEquals(const char* message, const UnicodeString& expected, |
| 194 const UnicodeString& actual, UBool possibleDataError=FALS
E); |
| 195 UBool assertEquals(const char* message, const char* expected, |
| 196 const char* actual); |
| 197 #if !UCONFIG_NO_FORMATTING |
| 198 UBool assertEquals(const char* message, const Formattable& expected, |
| 199 const Formattable& actual); |
| 200 UBool assertEquals(const UnicodeString& message, const Formattable& expected
, |
| 201 const Formattable& actual); |
| 202 #endif |
| 203 UBool assertTrue(const UnicodeString& message, UBool condition, UBool quiet=
FALSE); |
| 204 UBool assertFalse(const UnicodeString& message, UBool condition, UBool quiet
=FALSE); |
| 205 UBool assertSuccess(const UnicodeString& message, UErrorCode ec); |
| 206 UBool assertEquals(const UnicodeString& message, const UnicodeString& expect
ed, |
| 207 const UnicodeString& actual); |
| 208 UBool assertEquals(const UnicodeString& message, const char* expected, |
| 209 const char* actual); |
| 210 |
| 211 virtual void runIndexedTest( int32_t index, UBool exec, const char* &name, c
har* par = NULL ); // overide ! |
| 212 |
| 213 virtual UBool runTestLoop( char* testname, char* par, char *baseName ); |
| 214 |
| 215 virtual int32_t IncErrorCount( void ); |
| 216 |
| 217 virtual int32_t IncDataErrorCount( void ); |
| 218 |
| 219 virtual UBool callTest( IntlTest& testToBeCalled, char* par ); |
| 220 |
| 221 |
| 222 UBool verbose; |
| 223 UBool no_err_msg; |
| 224 UBool quick; |
| 225 UBool leaks; |
| 226 UBool warn_on_missing_data; |
| 227 int32_t threadCount; |
| 228 |
| 229 private: |
| 230 UBool LL_linestart; |
| 231 int32_t LL_indentlevel; |
| 232 |
| 233 int32_t errorCount; |
| 234 int32_t dataErrorCount; |
| 235 IntlTest* caller; |
| 236 char* testPath; // specifies subtests |
| 237 |
| 238 char basePath[1024]; |
| 239 |
| 240 //FILE *testoutfp; |
| 241 void *testoutfp; |
| 242 |
| 243 const char* proplines[kMaxProps]; |
| 244 int32_t numProps; |
| 245 |
| 246 protected: |
| 247 |
| 248 virtual void LL_message( UnicodeString message, UBool newline ); |
| 249 |
| 250 // used for collation result reporting, defined here for convenience |
| 251 |
| 252 static UnicodeString &prettify(const UnicodeString &source, UnicodeString &t
arget); |
| 253 static UnicodeString prettify(const UnicodeString &source, UBool parseBacksl
ash=FALSE); |
| 254 static UnicodeString &appendHex(uint32_t number, int32_t digits, UnicodeStri
ng &target); |
| 255 |
| 256 public: |
| 257 static void setICU_DATA(); // Set up ICU_DATA if necessary. |
| 258 |
| 259 static const char* pathToDataDirectory(); |
| 260 |
| 261 public: |
| 262 UBool run_phase2( char* name, char* par ); // internally, supports reporting
memory leaks |
| 263 static const char* loadTestData(UErrorCode& err); |
| 264 virtual const char* getTestDataPath(UErrorCode& err); |
| 265 static const char* getSourceTestData(UErrorCode& err); |
| 266 |
| 267 // static members |
| 268 public: |
| 269 static IntlTest* gTest; |
| 270 static const char* fgDataDir; |
| 271 |
| 272 }; |
| 273 |
| 274 void it_log( UnicodeString message ); |
| 275 void it_logln( UnicodeString message ); |
| 276 void it_logln( void ); |
| 277 void it_info( UnicodeString message ); |
| 278 void it_infoln( UnicodeString message ); |
| 279 void it_infoln( void ); |
| 280 void it_err(void); |
| 281 void it_err( UnicodeString message ); |
| 282 void it_errln( UnicodeString message ); |
| 283 void it_dataerr( UnicodeString message ); |
| 284 void it_dataerrln( UnicodeString message ); |
| 285 |
| 286 /** |
| 287 * This is a variant of cintltst/ccolltst.c:CharsToUChars(). |
| 288 * It converts a character string into a UnicodeString, with |
| 289 * unescaping \u sequences. |
| 290 */ |
| 291 extern UnicodeString CharsToUnicodeString(const char* chars); |
| 292 |
| 293 /* alias for CharsToUnicodeString */ |
| 294 extern UnicodeString ctou(const char* chars); |
| 295 |
| 296 #endif // _INTLTEST |
OLD | NEW |