af61e26bf0
X-SVN-Rev: 25550
177 lines
5.9 KiB
C++
177 lines
5.9 KiB
C++
/********************************************************************
|
|
* 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)");
|
|
}
|
|
}
|