| /******************************************************************** |
| * COPYRIGHT: |
| * Copyright (c) 1997-2009, International Business Machines Corporation and |
| * others. All Rights Reserved. |
| ********************************************************************/ |
| |
| |
| /** |
| * IntlTestUtilities is the medium level test class for everything in the directory "utility". |
| */ |
| |
| #include "unicode/utypes.h" |
| #include "unicode/errorcode.h" |
| #include "itutil.h" |
| #include "strtest.h" |
| #include "loctest.h" |
| #include "citrtest.h" |
| #include "ustrtest.h" |
| #include "ucdtest.h" |
| #include "restest.h" |
| #include "restsnew.h" |
| #include "tsmthred.h" |
| #include "tsputil.h" |
| #include "uobjtest.h" |
| #include "utxttest.h" |
| #include "v32test.h" |
| #include "uvectest.h" |
| #include "aliastst.h" |
| #include "usettest.h" |
| |
| |
| #define CASE(id, test) case id: \ |
| name = #test; \ |
| if (exec) { \ |
| logln(#test "---"); logln(); \ |
| test t; \ |
| callTest(t, par); \ |
| } \ |
| break |
| |
| void IntlTestUtilities::runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) |
| { |
| if (exec) logln("TestSuite Utilities: "); |
| switch (index) { |
| CASE(0, MultithreadTest); |
| CASE(1, StringTest); |
| CASE(2, UnicodeStringTest); |
| CASE(3, LocaleTest); |
| CASE(4, CharIterTest); |
| CASE(5, UnicodeTest); |
| CASE(6, ResourceBundleTest); |
| CASE(7, NewResourceBundleTest); |
| CASE(8, PUtilTest); |
| CASE(9, UObjectTest); |
| CASE(10, UVector32Test); |
| CASE(11, UVectorTest); |
| CASE(12, UTextTest); |
| CASE(13, LocaleAliasTest); |
| CASE(14, UnicodeSetTest); |
| CASE(15, ErrorCodeTest); |
| default: name = ""; break; //needed to end loop |
| } |
| } |
| |
| void ErrorCodeTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/) { |
| if (exec) logln("TestSuite Utilities: "); |
| switch (index) { |
| case 0: name = "TestErrorCode"; if (exec) TestErrorCode(); break; |
| case 1: name = "TestSubclass"; if (exec) TestSubclass(); break; |
| default: name = ""; break; //needed to end loop |
| } |
| } |
| |
| static void RefPlusOne(UErrorCode &code) { code=(UErrorCode)(code+1); } |
| static void PtrPlusTwo(UErrorCode *code) { *code=(UErrorCode)(*code+2); } |
| |
| void ErrorCodeTest::TestErrorCode() { |
| ErrorCode errorCode; |
| if(errorCode.get()!=U_ZERO_ERROR || !errorCode.isSuccess() || errorCode.isFailure()) { |
| errln("ErrorCode did not initialize properly"); |
| return; |
| } |
| errorCode.check(); |
| RefPlusOne(errorCode); |
| if(errorCode.get()!=U_ILLEGAL_ARGUMENT_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) { |
| errln("ErrorCode did not yield a writable reference"); |
| } |
| PtrPlusTwo(errorCode); |
| if(errorCode.get()!=U_INVALID_FORMAT_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) { |
| errln("ErrorCode did not yield a writable pointer"); |
| } |
| errorCode.set(U_PARSE_ERROR); |
| if(errorCode.get()!=U_PARSE_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) { |
| errln("ErrorCode.set() failed"); |
| } |
| if( errorCode.reset()!=U_PARSE_ERROR || errorCode.get()!=U_ZERO_ERROR || |
| !errorCode.isSuccess() || errorCode.isFailure() |
| ) { |
| errln("ErrorCode did not reset properly"); |
| } |
| } |
| |
| class MyErrorCode: public ErrorCode { |
| public: |
| MyErrorCode(int32_t &countChecks, int32_t &countDests) |
| : checks(countChecks), dests(countDests) {} |
| ~MyErrorCode() { |
| if(isFailure()) { |
| ++dests; |
| } |
| } |
| private: |
| virtual void handleFailure() const { |
| ++checks; |
| } |
| int32_t &checks; |
| int32_t &dests; |
| }; |
| |
| void ErrorCodeTest::TestSubclass() { |
| int32_t countChecks=0; |
| int32_t countDests=0; |
| { |
| MyErrorCode errorCode(countChecks, countDests); |
| if( errorCode.get()!=U_ZERO_ERROR || !errorCode.isSuccess() || errorCode.isFailure() || |
| countChecks!=0 || countDests!=0 |
| ) { |
| errln("ErrorCode did not initialize properly"); |
| return; |
| } |
| errorCode.check(); |
| if(countChecks!=0) { |
| errln("ErrorCode.check() called handleFailure(kCheck) despite success"); |
| } |
| RefPlusOne(errorCode); |
| if(errorCode.get()!=U_ILLEGAL_ARGUMENT_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) { |
| errln("ErrorCode did not yield a writable reference"); |
| } |
| errorCode.check(); |
| if(countChecks!=1) { |
| errln("ErrorCode.check() did not handleFailure(kCheck)"); |
| } |
| PtrPlusTwo(errorCode); |
| if(errorCode.get()!=U_INVALID_FORMAT_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) { |
| errln("ErrorCode did not yield a writable pointer"); |
| } |
| errorCode.check(); |
| if(countChecks!=2) { |
| errln("ErrorCode.check() did not handleFailure(kCheck)"); |
| } |
| errorCode.set(U_PARSE_ERROR); |
| if(errorCode.get()!=U_PARSE_ERROR || errorCode.isSuccess() || !errorCode.isFailure()) { |
| errln("ErrorCode.set() failed"); |
| } |
| if( errorCode.reset()!=U_PARSE_ERROR || errorCode.get()!=U_ZERO_ERROR || |
| !errorCode.isSuccess() || errorCode.isFailure() |
| ) { |
| errln("ErrorCode did not reset properly"); |
| } |
| errorCode.check(); |
| if(countChecks!=2) { |
| errln("ErrorCode.check() called handleFailure(kCheck) despite success"); |
| } |
| } |
| if(countDests!=0) { |
| errln("ErrorCode.check() called handleFailure(kDestructor) despite success"); |
| } |
| countChecks=countDests=0; |
| { |
| MyErrorCode errorCode(countChecks, countDests); |
| errorCode.set(U_PARSE_ERROR); |
| } |
| if(countDests!=1) { |
| errln("ErrorCode destructor did not handleFailure(kDestructor)"); |
| } |
| } |