diff options
Diffstat (limited to 'sal/qa/rtl_strings/rtl_OString.cxx')
-rw-r--r-- | sal/qa/rtl_strings/rtl_OString.cxx | 3608 |
1 files changed, 3608 insertions, 0 deletions
diff --git a/sal/qa/rtl_strings/rtl_OString.cxx b/sal/qa/rtl_strings/rtl_OString.cxx new file mode 100644 index 000000000000..d42f7e14dbc1 --- /dev/null +++ b/sal/qa/rtl_strings/rtl_OString.cxx @@ -0,0 +1,3608 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: rtl_OString.cxx,v $ + * $Revision: 1.10 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sal.hxx" +#include <string.h> + +#ifndef _SAL_TYPES_H_ + #include <sal/types.h> +#endif + +// #ifndef _RTL_TRES_H_ +// #include <rtl/tres.h> +// #endif + +#include <testshl/tresstatewrapper.hxx> + +#ifndef _RTL_STRING_HXX_ + #include <rtl/string.hxx> +#endif + +#ifndef _RTL_STRING_CONST_H_ + #include <rtl_String_Const.h> +#endif + +#ifndef _RTL_STRING_UTILS_HXX_ + #include <rtl_String_Utils.hxx> +#endif +#include <rtl/ustring.h> + +using namespace rtl; + +//------------------------------------------------------------------------ +// test classes +//------------------------------------------------------------------------ +const int MAXBUFLENGTH = 255; +//------------------------------------------------------------------------ +// helper functions +//------------------------------------------------------------------------ + +static void unused() +{ + test_ini_uString(); + (void)inputChar; + (void)input1StrDefault; + (void)input1StrNormal; + (void)input1StrLastDefault; + (void)input1StrLastNormal; + unused(); +} + +//------------------------------------------------------------------------ +// testing constructors +//------------------------------------------------------------------------ +static sal_Bool test_rtl_OString_ctor_001( hTestResult hRtlTestResult ) +{ + ::rtl::OString aStr; + rtl_String* pData = aStr.pData; + + + return + ( + c_rtl_tres_state + ( + hRtlTestResult, + pData->length == 0 && + ! *pData->buffer, + "New OString containing no characters", + "ctor_001" + ) + ); +} + +//------------------------------------------------------------------------ + +static sal_Bool SAL_CALL test_rtl_OString_ctor_002( + hTestResult hRtlTestResult ) +{ + ::rtl::OString aStr(kTestStr1); + rtl_String* pData = aStr.pData; + + return + ( + c_rtl_tres_state + ( + hRtlTestResult, + pData->refCount == 1 && + pData->length == kTestStr1Len && + cmpstr( (const sal_Char*)pData->buffer, kTestStr1, kTestStr1Len ), + "New OString from a character buffer array", + "ctor_002" + ) + ); +} +//------------------------------------------------------------------------ + +static sal_Bool SAL_CALL test_rtl_OString_ctor_003( + hTestResult hRtlTestResult ) +{ + ::rtl::OString aStr(kTestStr2, kTestStr1Len); + rtl_String* pData = aStr.pData; + + return + ( + c_rtl_tres_state + ( + hRtlTestResult, + pData->refCount == 1 && + pData->length == kTestStr1Len && + cmpstr( (const sal_Char*)pData->buffer, kTestStr2, kTestStr1Len ), + "New OString from the first n chars of ascii string", + "ctor_003" + ) + ); +} + +//------------------------------------------------------------------------ + +static sal_Bool SAL_CALL test_rtl_OString_ctor_004( + hTestResult hRtlTestResult) +{ + ::rtl::OString aStr1(kTestStr1); + ::rtl::OString aStr2(aStr1); + rtl_String* pData1 = aStr1.pData; + rtl_String* pData2 = aStr2.pData; + + return + ( + c_rtl_tres_state + ( + hRtlTestResult, + pData1->refCount == pData2->refCount && + pData1->length == kTestStr1Len && + pData1->buffer == pData2->buffer, + "New OString from an OString", + "ctor_004" + ) + ); +} +//------------------------------------------------------------------------ + +static sal_Bool test_rtl_OString_ctor_005( hTestResult hRtlTestResult ) +{ + rtl_String *aStr1 = NULL; + + rtl_string_newFromStr( &aStr1, kTestStr1 ); + + if ( aStr1 != NULL ) + { + ::rtl::OString aStr2(aStr1); + rtl_String* pData2 = aStr2.pData; + + sal_Bool bOK = c_rtl_tres_state + ( + hRtlTestResult, + aStr1->refCount == pData2->refCount && + pData2->length == kTestStr1Len && + aStr1->buffer == pData2->buffer, + "new OString from a RTL String", + "ctor_005" + ); + + rtl_string_release( aStr1 ); + aStr1 = NULL; + return ( bOK ); + } + return + ( + c_rtl_tres_state + ( + hRtlTestResult, + sal_False, + "copying an ascii string to a RTL String!", + "ctor_005" + ) + ); +} + +//------------------------------------------------------------------------ + +static sal_Bool test_rtl_OString_ctor_006( hTestResult hRtlTestResult ) +{ + + sal_Unicode aStr1[kTestStr1Len+1]; + + if ( AStringToUStringNCopy( aStr1, kTestStr1, kTestStr1Len ) ) + { + if ( AStringToUStringNCompare( aStr1, kTestStr1, kTestStr1Len ) == 0 ) + { + // const sal_Char *kTCMessage[2] = { "", "array." }; + + ::rtl::OString aStr2 + ( + aStr1, + kTestStr1Len, + kEncodingRTLTextUSASCII, + kConvertFlagsOUStringToOString + ); + + return + ( + c_rtl_tres_state + ( + hRtlTestResult, + aStr2 == kTestStr1, + "new OString from a unicode character buffer", + "ctor_006" + ) + ); + } /// end if AStringToUStringNCompare + + return + ( + c_rtl_tres_state + ( + hRtlTestResult, + sal_False, + "compare ascii string with unicode string!", + "ctor_006" + ) + ); + } /// end if AStringToUStringNCopy + + return + ( + c_rtl_tres_state + ( + hRtlTestResult, + sal_False, + "copy ascii string to unicode string!", + "ctor_006" + ) + ); +} +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_ctors( + hTestResult hRtlTestResult ) +{ + + c_rtl_tres_state_start(hRtlTestResult, "ctor"); + sal_Bool bTSState = test_rtl_OString_ctor_001( hRtlTestResult ); + + bTSState &= test_rtl_OString_ctor_002( hRtlTestResult); + bTSState &= test_rtl_OString_ctor_003( hRtlTestResult); + bTSState &= test_rtl_OString_ctor_004( hRtlTestResult); + bTSState &= test_rtl_OString_ctor_005( hRtlTestResult); + bTSState &= test_rtl_OString_ctor_006( hRtlTestResult); + + c_rtl_tres_state_end(hRtlTestResult, "ctor"); + +// return( bTSState ); +} + + + +//------------------------------------------------------------------------ +// testing the method getLength +//------------------------------------------------------------------------ + +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_getLength( + hTestResult hRtlTestResult) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "getLength"); + +typedef struct TestCase +{ + sal_Char* comments; + sal_Int32 expVal; + OString* input; + ~TestCase() { delete input;} +} TestCase; + +TestCase arrTestCase[]={ + + {"length of ascii string", kTestStr1Len, new OString(kTestStr1)}, + {"length of ascci string of size 1", 1, new OString("1")}, + {"length of empty string (default constructor)", 0, new OString()}, + {"length of empty string (empty ascii string arg)",0,new OString("")}, + {"length of empty string (string arg = '\\0')",0,new OString("\0")} + }; + + + sal_Bool res = sal_True; + sal_uInt32 i; + + for (i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + sal_Int32 length = arrTestCase[i].input->getLength(); + sal_Bool lastRes = (length == arrTestCase[i].expVal); + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "getLength", i ) + + ); + res &= lastRes; + } + c_rtl_tres_state_end(hRtlTestResult, "getLength"); +// return ( res ); +} + + + +//------------------------------------------------------------------------ +// testing the method equals( const OString & aStr ) +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_equals( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "equals"); + + typedef struct TestCase +{ + sal_Char* comments; + sal_Bool expVal; + OString* input1; + OString* input2; + ~TestCase() { delete input1;delete input2;} +} TestCase; + +TestCase arrTestCase[]={ + + {"same size", sal_True, new OString(kTestStr1),new OString(kTestStr1)}, + {"different size", sal_False, new OString(kTestStr1), + new OString(kTestStr2)}, + {"same size, no case match", sal_False, new OString(kTestStr1), + new OString(kTestStr3)}, + {"two empty strings(def. constructor)", sal_True, new OString(), + new OString()}, + {"empty(def.constructor) and non empty", sal_False, new OString(), + new OString(kTestStr2)}, + {"non empty and empty(def. constructor)", sal_False, + new OString(kTestStr1),new OString()}, + {"two empty strings(string arg = '\\0')", sal_True, + new OString(""),new OString("")}, + {"empty(string arg = '\\0') and non empty", sal_False, + new OString(""),new OString(kTestStr2)}, + {"non empty and empty(string arg = '\\0')", sal_False, + new OString(kTestStr1),new OString("")} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + sal_Bool lastRes = + ( arrTestCase[i].input1->equals(*(arrTestCase[i].input2)) == + arrTestCase[i].expVal ); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "equals", i ) + ); + + res &= lastRes; + } + c_rtl_tres_state_end(hRtlTestResult, "equals"); +// return (res); +} + +//------------------------------------------------------------------------ +// testing the method equalsIgnoreAsciiCase( const OString & aStr ) +//------------------------------------------------------------------------ + +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_equalsIgnoreAsciiCase( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "equalsIgnoreAsciiCase"); + typedef struct TestCase +{ + sal_Char* comments; + sal_Bool expVal; + OString* input1; + OString* input2; + ~TestCase() { delete input1;delete input2;} +} TestCase; + +TestCase arrTestCase[]={ + {"same strings but different cases",sal_True,new OString(kTestStr4), + new OString(kTestStr5)}, + {"same strings",sal_True,new OString(kTestStr4), + new OString(kTestStr4)}, + {"with equal beginning",sal_False,new OString(kTestStr2), + new OString(kTestStr4)}, + {"empty(def.constructor) and non empty",sal_False,new OString(), + new OString(kTestStr5)}, + {"non empty and empty(def.constructor)",sal_False, + new OString(kTestStr4), new OString()}, + {"two empty strings(def.constructor)",sal_True,new OString(), + new OString()}, + {"different strings with equal length",sal_False, + new OString(kTestStr10), new OString(kTestStr11)} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + sal_Bool lastRes = + (arrTestCase[i].input1->equalsIgnoreAsciiCase(*arrTestCase[i].input2) + == arrTestCase[i].expVal); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "equalsIgnoreAsciiCase", i ) + ); + + res &= lastRes; + } + c_rtl_tres_state_end(hRtlTestResult, "equalsIgnoreAsciiCase"); + +// return (res); +} + +static sal_Bool SAL_CALL test_rtl_OString_compareTo_001( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + typedef struct TestCase +{ + sal_Char* comments; + sal_Int32 expVal; + OString* input1; + OString* input2; + ~TestCase() { delete input1;delete input2;} +} TestCase; + +TestCase arrTestCase[]={ + + {"simple compare, str1 to str5",-1,new OString(kTestStr1), + new OString(kTestStr5)}, + {"simple compare, str2 to str5",-1,new OString(kTestStr2), + new OString(kTestStr5)}, + {"simple compare, str1 to str9",-1,new OString(kTestStr1), + new OString(kTestStr9)}, + {"simple compare, str1 to str2",-1,new OString(kTestStr1), + new OString(kTestStr2)}, + {"simple compare, str4 to str5",-1,new OString(kTestStr4), + new OString(kTestStr5)}, + {"simple compare, str1 to str3",-1,new OString(kTestStr1), + new OString(kTestStr3)}, + {"simple compare, str5 to str1",+1,new OString(kTestStr5), + new OString(kTestStr1)}, + {"simple compare, str2 to str1",+1,new OString(kTestStr2), + new OString(kTestStr1)}, + {"simple compare, str9 to str5",+1,new OString(kTestStr9), + new OString(kTestStr5)}, + {"simple compare, str5 to str4",+1,new OString(kTestStr5), + new OString(kTestStr4)}, + {"simple compare, str1 to str1",0,new OString(kTestStr1), + new OString(kTestStr1)}, + {"simple compare, nullString to nullString",0,new OString(), + new OString()}, + {"simple compare, nullString to str2",-1,new OString(), + new OString(kTestStr2)}, + {"simple compare, str1 to nullString",+1,new OString(kTestStr1), + new OString()} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + sal_Int32 cmpRes = + arrTestCase[i].input1->compareTo(*arrTestCase[i].input2); + cmpRes = ( cmpRes == 0 ) ? 0 : ( cmpRes > 0 ) ? +1 : -1 ; + sal_Bool lastRes = ( cmpRes == arrTestCase[i].expVal); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "compareTo(const OString&)", i ) + ); + + res &= lastRes; + } + + return (res); +} + + +//------------------------------------------------------------------------ +// testing the method compareTo( const OString & rObj, sal_Int32 length ) +//------------------------------------------------------------------------ +static sal_Bool SAL_CALL test_rtl_OString_compareTo_002( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + typedef struct TestCase + { + sal_Char* comments; + sal_Int32 expVal; + sal_Int32 maxLength; + OString* input1; + OString* input2; + ~TestCase() { delete input1;delete input2;} + } TestCase; + + TestCase arrTestCase[] = + { + {"compare with maxlength, str1 to str9, 16",-1,16, + new OString(kTestStr1), new OString(kTestStr9)}, + {"compare with maxlength, str2 to str9, 32",-1,32, + new OString(kTestStr2), new OString(kTestStr9)}, + {"compare with maxlength, str9 to str4, 16",+1,16, + new OString(kTestStr9), new OString(kTestStr4)}, + {"compare with maxlength, str9 to str22, 32",+1,32, + new OString(kTestStr9), new OString(kTestStr22)}, + {"compare with maxlength, str9 to str5, 16",0,16, + new OString(kTestStr9), new OString(kTestStr5)}, + {"compare with maxlength, str9 to str9, 32",0,32, + new OString(kTestStr9), new OString(kTestStr9)}, + {"compare with maxlength, str1 to str2, 32",-1,32, + new OString(kTestStr1), new OString(kTestStr2)}, + {"compare with maxlength, str1 to str2, 32",-1,32, + new OString(kTestStr1), new OString(kTestStr2)} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + sal_Int32 cmpRes = + arrTestCase[i].input1->compareTo(*arrTestCase[i].input2, + arrTestCase[i].maxLength); + cmpRes = (cmpRes == 0) ? 0 : (cmpRes > 0) ? +1 : -1 ; + sal_Bool lastRes = (cmpRes == arrTestCase[i].expVal); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "compareTo(const OString&, sal_Int32)", i ) + ); + + res &= lastRes; + } + + return (res); +} + +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_compareTo( + hTestResult hRtlTestResult ) +{ + c_rtl_tres_state_start(hRtlTestResult, "compareTo"); + sal_Bool res = test_rtl_OString_compareTo_001(hRtlTestResult); + res &= test_rtl_OString_compareTo_002(hRtlTestResult); + c_rtl_tres_state_end(hRtlTestResult, "compareTo"); +// return (res); +} + +//------------------------------------------------------------------------ +// testing the operator == ( const OString& rStr1, const OString& rStr2 ) +// testing the operator == ( const OString& rStr1, const sal_Char *rStr2 ) +// testing the operator == ( const sal_Char *rStr1, const OString& rStr2 ) +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_op_cmp( + hTestResult hRtlTestResult ) +{ + c_rtl_tres_state_start(hRtlTestResult, "op_cmp"); + const sal_Int16 NCASES = 7; + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + const sal_Char *arrOStr[NCASES][2] = + { + {kTestStr1, kTestStr1}, + {kTestStr1, kTestStr3}, + {kTestStr1, kTestStr2}, + {0, 0}, + {0, kTestStr2}, + {kTestStr1, 0}, + {"", ""} + }; + + sal_Bool arrExpVal[NCASES] = + { + sal_True, + sal_False, + sal_False, + sal_True, + sal_False, + sal_False, + sal_True + }; + + sal_Char *arrComments[NCASES] = + { + "'Sun Microsystems'=='Sun Microsystems'", + "!('Sun Microsystems'=='Sun microsystems')", + "!('Sun Microsystems'=='Sun Microsystems Java Technology')", + "two empty strings(def.constructor)", + "!(empty string=='Sun Microsystems Java Technology')", + "!('Sun Microsystems Java Technology'==empty string)", + "''==''" + }; + + sal_Bool res = sal_True; + sal_Int32 i; + + for(i = 0; i < NCASES; i++) + { + OString *str1, *str2; + str1 = (arrOStr[i][0]) ? new OString(arrOStr[i][0]) : new OString() ; + str2 = (arrOStr[i][1]) ? new OString(arrOStr[i][1]) : new OString() ; + + sal_Bool cmpRes = (*str1 == *str2); + sal_Bool lastRes = (cmpRes == arrExpVal[i]); + res &= lastRes; + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrComments[i], + createName( pMeth, "operator ==(OString&, OString&)", i ) + ); + + cmpRes = (*str1 == arrOStr[i][1]); + lastRes = (cmpRes == arrExpVal[i]); + res &= lastRes; + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrComments[i], + createName( pMeth, "operator ==(OString&, sal_Char *)", i ) + ); + + cmpRes = (arrOStr[i][0] == *str2); + lastRes = (cmpRes == arrExpVal[i]); + res &= lastRes; + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrComments[i], + createName( pMeth, "operator ==(sal_Char *, OString&)", i ) + ); + + delete str2; + delete str1; + } + + c_rtl_tres_state_end(hRtlTestResult, "op_cmp"); +// return ( res ); +} + +//------------------------------------------------------------------------ +// testing the operator != (const OString& rStr1, const OString& rStr2) +// testing the operator != (const OString& rStr1, const sal_Char *rStr2) +// testing the operator != (const sal_Char *rStr1, const OString& rStr2) +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_op_neq( + hTestResult hRtlTestResult ) +{ + c_rtl_tres_state_start(hRtlTestResult, "op_neq"); + const sal_Int16 NCASES = 6; + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + const sal_Char *arrOStr[NCASES][2] = + { + {kTestStr1, kTestStr3}, + {kTestStr1, kTestStr2}, + {kTestStr1, kTestStr1}, + {0, kTestStr2}, + {kTestStr1, 0}, + {0, 0} + }; + + sal_Bool arrExpVal[NCASES] = + { + sal_True, + sal_True, + sal_False, + sal_True, + sal_True, + sal_False + }; + + sal_Char *arrComments[NCASES] = + { + "'Sun Microsystems'!='Sun microsystems'", + "'Sun Microsystems'!='Sun Microsystems Java Technology'", + "!('Sun Microsystems'!='Sun Microsystems')", + "empty string!='Sun Microsystems Java Technology'", + "'Sun Microsystems Java Technology'!=empty string", "!(''!='')" + }; + + sal_Bool res = sal_True; + sal_Int32 i; + + for(i = 0; i < NCASES; i++) + { + OString *str1, *str2; + str1 = (arrOStr[i][0]) ? new OString(arrOStr[i][0]) : new OString() ; + str2 = (arrOStr[i][1]) ? new OString(arrOStr[i][1]) : new OString() ; + + sal_Bool cmpRes = (*str1 != *str2); + sal_Bool lastRes = (cmpRes == arrExpVal[i]); + res &= lastRes; + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrComments[i], + createName( pMeth, "operator !=(OString&, OString&)", i ) + ); + + cmpRes = (*str1 != arrOStr[i][1]); + lastRes = (cmpRes == arrExpVal[i]); + res &= lastRes; + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrComments[i], + createName( pMeth, "operator !=(OString&, sal_Char *)", i ) + ); + + cmpRes = (arrOStr[i][0] != *str2); + lastRes = (cmpRes == arrExpVal[i]); + res &= lastRes; + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrComments[i], + createName( pMeth, "operator !=(sal_Char *, OString&)", i ) + ); + + delete str2; + delete str1; + } + + c_rtl_tres_state_end(hRtlTestResult, "op_neq"); +// return ( res ); +} + + +//------------------------------------------------------------------------ +// testing the operator > (const OString& rStr1, const OString& rStr2) +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_op_g( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "op_g"); + typedef struct TestCase + { + sal_Char* comments; + sal_Bool expVal; + OString* input1; + OString* input2; + ~TestCase() { delete input1;delete input2;} + } TestCase; + + TestCase arrTestCase[] = + { + { "'Sun microsystems'>'Sun Microsystems'",sal_True, + new OString(kTestStr3), new OString(kTestStr1)}, + {"!('Sun Microsystems'>'Sun microsystems')",sal_False, + new OString(kTestStr1), new OString(kTestStr3)}, + {"'Sun Microsystems Java Technology'>'Sun Microsystems'",sal_True, + new OString(kTestStr2), new OString(kTestStr1)}, + {"!('Sun Microsystems'>'Sun Microsystems Java Technology')",sal_False, + new OString(kTestStr1), new OString(kTestStr2)}, + {"!('Sun Microsystems'>'Sun Microsystems'",sal_False, + new OString(kTestStr1), new OString(kTestStr1)}, + {"'Sun Microsystems'>''",sal_True,new OString(kTestStr1), + new OString()}, + {"!(''>'Sun Microsystems')",sal_False,new OString(), + new OString(kTestStr1)}, + {"!(''>'')",sal_False,new OString(), new OString()} +}; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + sal_Bool cmpRes = (*arrTestCase[i].input1 > *arrTestCase[i].input2); + sal_Bool lastRes = (cmpRes == arrTestCase[i].expVal); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "operator >", i ) + ); + + res &= lastRes; + + } + + c_rtl_tres_state_end(hRtlTestResult, "op_g"); +// return ( res ); +} + +//------------------------------------------------------------------------ +// testing the operator < (const OString& rStr1, const OString& rStr2) +//------------------------------------------------------------------------ + +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_op_l( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "op_l"); + typedef struct TestCase + { + sal_Char* comments; + sal_Bool expVal; + OString* input1; + OString* input2; + ~TestCase() { delete input1;delete input2;} + } TestCase; + + TestCase arrTestCase[] = + { + {"!('Sun microsystems'<'Sun Microsystems')",sal_False, + new OString(kTestStr3), new OString(kTestStr1)}, + {"'Sun Microsystems'<'Sun microsystems'",sal_True, + new OString(kTestStr1), new OString(kTestStr3)}, + {"'Sun Microsystems'<'Sun Microsystems Java Technology'",sal_True, + new OString(kTestStr1), new OString(kTestStr2)}, + {"!('Sun Microsystems Java Technology'<'Sun Microsystems')",sal_False, + new OString(kTestStr2), new OString(kTestStr1)}, + {"!('Sun Microsystems'<'Sun Microsystems'", sal_False, + new OString(kTestStr1), new OString(kTestStr1)}, + {"'Sun Microsystems'<''",sal_False,new OString(kTestStr1), + new OString()}, + {"''<'Sun Microsystems Java Technology'",sal_True,new OString(), + new OString(kTestStr2)}, + {"!(''<'')",sal_False,new OString(), new OString()} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + sal_Bool cmpRes = (*arrTestCase[i].input1 < *arrTestCase[i].input2); + sal_Bool lastRes = (cmpRes == arrTestCase[i].expVal); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "operator <", i ) + ); + + res &= lastRes; + + } + + c_rtl_tres_state_end(hRtlTestResult, "op_l"); +// return ( res ); +} + +//------------------------------------------------------------------------ +// testing the operator >= (const OString& rStr1, const OString& rStr2) +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_op_ge( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "op_ge"); + typedef struct TestCase + { + sal_Char* comments; + sal_Bool expVal; + OString* input1; + OString* input2; + ~TestCase() { delete input1;delete input2;} + } TestCase; + + TestCase arrTestCase[] = + { + {"'Sun microsystems'>='Sun Microsystems'",sal_True, + new OString(kTestStr3), new OString(kTestStr1)}, + {"!('Sun Microsystems'>='Sun microsystems')",sal_False, + new OString(kTestStr1), new OString(kTestStr3)}, + {"!('Sun Microsystems'>='Sun Microsystems Java Technology')",sal_False, + new OString(kTestStr1), new OString(kTestStr2)}, + {"'Sun Microsystems Java Technology'>='Sun Microsystems'",sal_True, + new OString(kTestStr2), new OString(kTestStr1)}, + {"'Sun Microsystems'>='Sun Microsystems'", sal_True, + new OString(kTestStr1), new OString(kTestStr1)}, + {"'Sun Microsystems'>=''",sal_True,new OString(kTestStr1), + new OString()}, + { "''>='Sun microsystems'",sal_False,new OString(), + new OString(kTestStr3)}, + {"''>=''",sal_True,new OString(), new OString()} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + sal_Bool cmpRes = (*arrTestCase[i].input1 >= *arrTestCase[i].input2); + sal_Bool lastRes = (cmpRes == arrTestCase[i].expVal); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "operator >=", i ) + ); + + res &= lastRes; + + } + + c_rtl_tres_state_end(hRtlTestResult, "op_ge"); +// return ( res ); +} + +//------------------------------------------------------------------------ +// testing the operator <= (const OString& rStr1, const OString& rStr2) +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_op_le( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "op_le"); + typedef struct TestCase + { + sal_Char* comments; + sal_Bool expVal; + OString* input1; + OString* input2; + ~TestCase() { delete input1;delete input2;} + } TestCase; + + TestCase arrTestCase[] = + { + {"!('Sun microsystems'<='Sun Microsystems')",sal_False, + new OString(kTestStr3), new OString(kTestStr1)}, + {"'Sun Microsystems'<='Sun microsystems'",sal_True, + new OString(kTestStr1), new OString(kTestStr3)}, + {"'Sun Microsystems'<='Sun Microsystems Java Technology'",sal_True, + new OString(kTestStr1), + new OString(kTestStr2)}, + {"!('Sun Microsystems Java Technology'<='Sun Microsystems')",sal_False, + new OString(kTestStr2), + new OString(kTestStr1)}, + {"!('Sun Microsystems'<='Sun Microsystems'", sal_True, + new OString(kTestStr1), new OString(kTestStr1)}, + {"'Sun Microsystems'<=''",sal_False,new OString(kTestStr1), + new OString()}, + {"''<='Sun Microsystems Java Technology'",sal_True,new OString(), + new OString(kTestStr2)}, + {"!(''<='')",sal_True,new OString(), new OString()} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + sal_Bool cmpRes = (*arrTestCase[i].input1 <= *arrTestCase[i].input2); + sal_Bool lastRes = (cmpRes == arrTestCase[i].expVal); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "operator <=", i ) + ); + + res &= lastRes; + + } + + c_rtl_tres_state_end(hRtlTestResult, "op_le"); +// return ( res ); +} + + +//------------------------------------------------------------------------ +// testing the operator = +//------------------------------------------------------------------------ +static sal_Bool test_rtl_OString_op_eq_001( hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + typedef struct TestCase + { + sal_Char* comments; + sal_Bool expVal; + OString* input1; + OString* input2; + ~TestCase() { delete input1;delete input2;} + } TestCase; + + TestCase arrTestCase[] = + { + {"'' = str1, str1 == str2",sal_True,new OString(kTestStr1), + new OString()}, + {"str1 = str2, str1 == str2",sal_True,new OString(kTestStr1), + new OString(kTestStr6)}, + {"str2 = '', str1 == str2",sal_True,new OString(), + new OString(kTestStr2)}, + {"'' = '', str1 == str2",sal_True,new OString(), + new OString()} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + *(arrTestCase[i].input1) = *(arrTestCase[i].input2); + + sal_Bool cmpRes = + (*(arrTestCase[i].input1) == *(arrTestCase[i].input2)); + sal_Bool lastRes = (cmpRes == arrTestCase[i].expVal); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "operator =", i ) + ); + + res &= lastRes; + } + + return ( res ); +} + +static sal_Bool test_rtl_OString_op_eq_002( + hTestResult hRtlTestResult ) +{ + ::rtl::OString aStr; + aStr = OString(kTestStr1); + + return + ( + c_rtl_tres_state + ( + hRtlTestResult, + aStr == kTestStr1, + "str = OString(\"%s\"), str == \"%s\"", + "operator =" + ) + ); +} + +static sal_Bool test_rtl_OString_op_eq_003( + hTestResult hRtlTestResult ) +{ + sal_Bool bTCState = false; + + ::rtl::OString aStr1(kTestStr1); + ::rtl::OString aStr2; + ::rtl::OString aStr3; + + aStr3 = aStr2 = aStr1; + + bTCState = ( aStr1 == aStr2 ) + && ( aStr1 == aStr3 ) + && ( aStr2 == aStr3 ); + + c_rtl_tres_state + ( + hRtlTestResult, + bTCState, + "str3=str2=str1,(str1 == str2)&&(str1 == str3)&&(str2 == str3)", + "operator =" + ); + + return bTCState; +} + +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_op_eq( + hTestResult hRtlTestResult ) +{ + c_rtl_tres_state_start(hRtlTestResult, "op_eq"); + sal_Bool res = test_rtl_OString_op_eq_001( hRtlTestResult ); + res &= test_rtl_OString_op_eq_002( hRtlTestResult ); + res &= test_rtl_OString_op_eq_003( hRtlTestResult ); + c_rtl_tres_state_end(hRtlTestResult, "op_eq"); + +// return ( res ); +} + +//------------------------------------------------------------------------ +// testing the operator + +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_op_plus( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "op_plus"); + typedef struct TestCase + { + sal_Char* comments; + OString* expVal; + OString* input1; + OString* input2; + ~TestCase() { delete input1;delete input2; delete expVal;} + } TestCase; + + TestCase arrTestCase[] = + { + {"str1 = str7 + str8",new OString(kTestStr1), + new OString(kTestStr7), new OString(kTestStr8)}, + {"str1 = str1 + '' ",new OString(kTestStr1), + new OString(kTestStr1), new OString("")}, + {"str1 = '' + str1", new OString(kTestStr1), + new OString(""), new OString(kTestStr1)}, + {" '' = '' + '' ", new OString(""),new OString(""), + new OString("")}, + {"str1 = str1 + def.constr", new OString(kTestStr1), + new OString(kTestStr1), new OString()}, + {" str1 = def.constr + str1 ",new OString(kTestStr1), + new OString(), new OString(kTestStr1)}, + {" def.constr= def.constr + def.constr", new OString(), + new OString(), new OString()} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + OString str = (*arrTestCase[i].input1) + (*arrTestCase[i].input2); + sal_Bool lastRes = (str == *arrTestCase[i].expVal); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "operator +", i ) + ); + + res &= lastRes; + + } + + c_rtl_tres_state_end(hRtlTestResult, "op_plus"); +// return ( res ); +} + +//------------------------------------------------------------------------ +// testing the operator += +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_op_peq( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "op_peq"); + typedef struct TestCase + { + sal_Char* comments; + OString* expVal; + OString* input1; + OString* input2; + ~TestCase() { delete input1;delete input2; delete expVal;} + } TestCase; + + TestCase arrTestCase[] = + { + {"str1 == (str7 += str8)",new OString(kTestStr1), + new OString(kTestStr7), new OString(kTestStr8)}, + {"str1 == (str1 += '')",new OString(kTestStr1), + new OString(kTestStr1), new OString("")}, + {"str1 == ('' += str1)", new OString(kTestStr1), + new OString(""), new OString(kTestStr1)}, + {" '' == ('' += '')", new OString(""), + new OString(""), new OString("")}, + {"str1 == (str1 += def.constr)", new OString(kTestStr1), + new OString(kTestStr1), new OString()}, + {" str1 == (def.constr += str1)",new OString(kTestStr1), + new OString(), new OString(kTestStr1)}, + {" def.constr== (def.constr += def.constr)", + new OString(),new OString(), new OString()} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { OString str; + str += (*arrTestCase[i].input1); str += (*arrTestCase[i].input2); + sal_Bool lastRes = (str == *arrTestCase[i].expVal); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "operator +", i ) + ); + + res &= lastRes; + + } + + c_rtl_tres_state_end(hRtlTestResult, "op_peq"); +// return ( res ); +} + +//------------------------------------------------------------------------ +// testing the operator const sal_Char * (cscs for short) +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_op_cscs( + hTestResult hRtlTestResult ) +{ +sal_Char methName[MAXBUFLENGTH]; +sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "op_cscs"); +typedef struct TestCase + { + sal_Char* comments; + const sal_Char* expVal; + sal_Int32 cmpLen; + OString* input1; + ~TestCase() { delete input1;} + } TestCase; + + TestCase arrTestCase[] = + { + {"test normal string",kTestStr1,kTestStr1Len,new OString(kTestStr1)}, + {"test empty string","",1,new OString()} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + const sal_Char* pstr = (*arrTestCase[i].input1); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + cmpstr((sal_Char*)pstr,(sal_Char*)arrTestCase[i].expVal, + arrTestCase[i].cmpLen), + arrTestCase[i].comments, + createName( pMeth, "const sal_Char*", i ) + ); + } + c_rtl_tres_state_end(hRtlTestResult, "op_cscs"); +// return ( res ); +} + + +//------------------------------------------------------------------------ +// testing the method getStr() +//------------------------------------------------------------------------ + + +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_getStr( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "getStr"); + typedef struct TestCase + { + sal_Char* comments; + const sal_Char* expVal; + sal_Int32 cmpLen; + OString* input1; + ~TestCase() { delete input1;} + } TestCase; + + TestCase arrTestCase[] = + { + {"test normal string",kTestStr1,kTestStr1Len,new OString(kTestStr1)}, + {"test empty string","",0,new OString()} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + const sal_Char* pstr = arrTestCase[i].input1->getStr(); + res &= c_rtl_tres_state + ( + hRtlTestResult, + cmpstr(pstr, arrTestCase[i].expVal, + arrTestCase[i].cmpLen), + arrTestCase[i].comments, + createName( pMeth, "getStr", i ) + ); + } + c_rtl_tres_state_end(hRtlTestResult, "getStr"); +// return ( res ); +} + + + +//------------------------------------------------------------------------ +// testing the method copy( sal_Int32 beginIndex ) +//------------------------------------------------------------------------ +static sal_Bool SAL_CALL test_rtl_OString_copy_001( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + typedef struct TestCase + { + sal_Char* comments; + const sal_Char* srcStr; + const sal_Char* arrExpStr; + // string for comparing with result + sal_Int32 beginIndex; + // beginIndex for the method copy + sal_Int32 lengthForCmp; + // number of symbols for comparing + // (if value is equal to 0 then pointers to buffers must be equal) + sal_Int32 expLength; + //expected length of the result string + } TestCase; + + TestCase arrTestCase[] = + { + {"beginIndex == 0 ( whole string )", kTestStr2,kTestStr2, + 0, kTestStr2Len, kTestStr2Len}, + {"beginIndex == strlen-2 ( last two char )", kTestStr2,"gy", + kTestStr2Len-2, 2, 2}, + {"beginIndex == strlen-1( last char )", kTestStr2, "y", + kTestStr2Len-1, 1, 1} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i <(sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + OString src(arrTestCase[i].srcStr); + OString dst; + // rtl_String* pDataSrc = src.pData; + + dst = src.copy(arrTestCase[i].beginIndex); + + // rtl_String* pDataDst = dst.pData; + + sal_Bool lastRes; + + lastRes= (dst== arrTestCase[i].arrExpStr); + + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, + "copy_001(beginIndex)(check buffer and length)", i ) + ); + + res &= lastRes; + + } + + return (res); +} + + +//------------------------------------------------------------------------ +// testing the method copy( sal_Int32 beginIndex, sal_Int32 count ) +//------------------------------------------------------------------------ +static sal_Bool SAL_CALL test_rtl_OString_copy_002( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + typedef struct TestCase + { + sal_Char* comments; + const sal_Char* arrExpStr; + sal_Int32 beginIndex; + sal_Int32 count; + sal_Int32 expLen; + + } TestCase; + + TestCase arrTestCase[] ={ + + {"copy substring", kTestStr6, kTestStr11Len, kTestStr2Len - kTestStr11Len,kTestStr6Len}, + /* LLA: it is a bug, beginIndex + count > kTestStr2.getLength() */ + /* {"copy normal substring with incorrect count",kTestStr6, kTestStr11Len, 31, 15}, */ + {"copy whole string", kTestStr2, 0, kTestStr2Len, kTestStr2Len}, + /* {"copy whole string with incorrect count larger than len and index 0", kTestStr2, 0, 40, 32}, */ + /* LLA: bug beginIndex + count > kTestStr2 {"copy last character", "y",kTestStr2Len - 1, 31,1}, */ + {"copy last character", "y",kTestStr2Len - 1, 1,1}, + /* LLA: bug, beginIndex > kTestStr2 {"beginindex larger than len","",60, 0,0}, */ + {"beginindex exact as large as it's length","",kTestStr2Len, 0,0} + /* LLA: bug, negative count is not allowed. {"count is nagative int","",3, -1,0} */ + }; + sal_Bool res = sal_True; + + sal_uInt32 i; + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) { + OString src(kTestStr2); + OString dst; + dst = src.copy(arrTestCase[i].beginIndex, arrTestCase[i].count); + // rtl_String* pDataSrc = src.pData; + // rtl_String* pDataDst = dst.pData; + + sal_Bool lastRes=sal_True; + // checks buffer and length + //t_print("this is copy__002 #%d\n", i); + //t_print("dst buffer =%s\n", pDataDst->buffer); + //t_print("expStr =%s\n", arrTestCase[i].arrExpStr); + //t_print("dst length =%d\n", pDataDst->length); + //t_print("count =%d\n", arrTestCase[i].count); + //t_print("expLen =%d\n", arrTestCase[i].expLen); + + lastRes = (dst.equals(arrTestCase[i].arrExpStr)) ? sal_True : sal_False; + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, + "copy_002(beginIndex,count)(check buffer and length)", i) + ); + res &= lastRes; + + + } + + return (res); +} + + +static sal_Bool SAL_CALL test_rtl_OString_copy_003( + hTestResult hRtlTestResult ) +{ + sal_Bool res = sal_True; + char comment[] = "copy whole short string to long string"; + + OString src(kTestStr1); + // rtl_String* pDataSrc = src.pData; + OString dst(kTestStr2); + + dst = src.copy(0); + // rtl_String* pDataDst = dst.pData; + //check buffer and length + sal_Bool lastRes =(dst==src); + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + comment, + "copy_003(beginIndex)(check buffer and length)" + ); + res &= lastRes; + + return (res); +} + + +static sal_Bool SAL_CALL test_rtl_OString_copy_004( + hTestResult hRtlTestResult ) +{ + sal_Bool res = sal_True; + sal_Char comment[] = "copy whole long string to short string"; + + OString src(kTestStr2); + // rtl_String* pDataSrc = src.pData; + OString dst(kTestStr1); + + dst = src.copy(0); + // rtl_String* pDataDst = dst.pData; + //check buffer and length + sal_Bool lastRes =(dst==src); + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + comment, + "copy_004(beginIndex)(check buffer and length)" + ); + + res &= lastRes; + return (res); +} + +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_copy( + hTestResult hRtlTestResult ) +{ + c_rtl_tres_state_start(hRtlTestResult, "copy"); + sal_Bool res = test_rtl_OString_copy_001(hRtlTestResult); + res &= test_rtl_OString_copy_002(hRtlTestResult); + res &= test_rtl_OString_copy_003(hRtlTestResult); + res &= test_rtl_OString_copy_004(hRtlTestResult); + c_rtl_tres_state_end(hRtlTestResult, "copy"); + +// return ( res ); +} + +//------------------------------------------------------------------------ +// testing the method concat( const OString & aStr ) +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_concat( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth =methName; + + c_rtl_tres_state_start(hRtlTestResult, "concat"); + typedef struct TestCase + { + sal_Char* comments; + OString* expVal; + OString* input1; + OString* input2; + ~TestCase() { delete input1;delete input2; delete expVal;} + } TestCase; + + TestCase arrTestCase[] = + { + {"concatenates two strings",new OString(kTestStr1), + new OString(kTestStr7), + new OString(kTestStr8)}, + {"concatenates empty string",new OString(kTestStr1), + new OString(kTestStr1), + new OString("")}, + {"concatenates to empty string",new OString(kTestStr1), + new OString(""), + new OString(kTestStr1)}, + {"concatenates two empty strings",new OString(""),new OString(""), + new OString("")}, + {"concatenates string constructed by default constructor", + new OString(kTestStr1), + new OString(kTestStr1), new OString()}, + {"concatenates to string constructed by default constructor", + new OString(kTestStr1), + new OString(), new OString(kTestStr1)}, + {"concatenates two strings constructed by default constructor", + new OString(), + new OString(), new OString()} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + OString str = + arrTestCase[i].input1->concat(*arrTestCase[i].input2); + sal_Bool lastRes = (str == *arrTestCase[i].expVal); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "concat", i) + ); + + res &= lastRes; + + } + + c_rtl_tres_state_end(hRtlTestResult, "concat"); +// return ( res ); +} + + +//------------------------------------------------------------------------ +// testing the method toAsciiLowerCase() +//----------------------------------------------------------------------- +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_toAsciiLowerCase( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth =methName; + + c_rtl_tres_state_start(hRtlTestResult, "toAsciiLowerCase"); + typedef struct TestCase + { + sal_Char* comments; + OString* expVal; + OString* input1; + ~TestCase() { delete input1; delete expVal;} + } TestCase; + + TestCase arrTestCase[] = + { + + {"only uppercase",new OString(kTestStr5),new OString(kTestStr4)}, + {"different cases",new OString(kTestStr5),new OString(kTestStr1)}, + {"different cases",new OString(kTestStr5),new OString(kTestStr3)}, + {"only lowercase",new OString(kTestStr5),new OString(kTestStr5)}, + {"empty string",new OString(""),new OString("")}, + {"string constructed by default constructor", + new OString(),new OString()} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + OString str = arrTestCase[i].input1->toAsciiLowerCase(); + sal_Bool lastRes = (str ==* arrTestCase[i].expVal); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "toAsciiLowerCase", i) + ); + + res &= lastRes; + } + + c_rtl_tres_state_end(hRtlTestResult, "toAsciiLowerCase"); +// return ( res ); +} + +//------------------------------------------------------------------------ +// testing the method toAsciiUpperCase() +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_toAsciiUpperCase( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth =methName; + + c_rtl_tres_state_start(hRtlTestResult, "toAsciiUpperCase"); + typedef struct TestCase + { + sal_Char* comments; + OString* expVal; + OString* input1; + ~TestCase() { delete input1; delete expVal;} + } TestCase; + + TestCase arrTestCase[] = + { + {"only lowercase",new OString(kTestStr4),new OString(kTestStr5)}, + {"mixed cases",new OString(kTestStr4),new OString(kTestStr3)}, + {"miced cases",new OString(kTestStr4),new OString(kTestStr1)}, + {"only uppercase",new OString(kTestStr4),new OString(kTestStr4)}, + {"empty string",new OString(""),new OString("")}, + {"string constructed by default constructor", + new OString(),new OString()} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + OString str = arrTestCase[i].input1->toAsciiUpperCase(); + sal_Bool lastRes = (str == *arrTestCase[i].expVal); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "toAsciiLowerCase", i) + ); + + res &= lastRes; + } + c_rtl_tres_state_end(hRtlTestResult, "toAsciiUpperCase"); + +// return ( res ); +} + + +//------------------------------------------------------------------------ +// testing the method trim() +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_trim( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth =methName; + + c_rtl_tres_state_start(hRtlTestResult, "trim"); + typedef struct TestCase + { + sal_Char* comments; + OString* expVal; + OString* input1; + ~TestCase() { delete input1; delete expVal;} + } TestCase; + + TestCase arrTestCase[] = + { + {"removes space from the front",new OString(kTestStr1), + new OString(kTestStr10)}, + {"removes space from the end",new OString(kTestStr1), + new OString(kTestStr11)}, + {"removes space from the front and end",new OString(kTestStr1), + new OString(kTestStr12)}, + {"removes several spaces from the end",new OString(kTestStr1), + new OString(kTestStr13)}, + {"removes several spaces from the front",new OString(kTestStr1), + new OString(kTestStr14)}, + {"removes several spaces from the front and one from the end", + new OString(kTestStr1), + new OString(kTestStr15)}, + {"removes one space from the front and several from the end", + new OString(kTestStr1), + new OString(kTestStr16)}, + {"removes several spaces from the front and end", + new OString(kTestStr1), + new OString(kTestStr17)}, + {"removes characters that have codes <= 32",new OString(kTestStr20), + new OString("\1\3\5\7\11\13\15\17sun\21\23\25\27\31\33\40")}, + {"no spaces",new OString(kTestStr8),new OString(kTestStr8)} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + OString strRes = arrTestCase[i].input1->trim(); + sal_Bool lastRes = (strRes == *arrTestCase[i].expVal); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "trim", i) + ); + + res &= lastRes; + + } + + c_rtl_tres_state_end(hRtlTestResult, "trim"); +// return ( res ); +} + + + +//------------------------------------------------------------------------ +// testing the method valueOf( sal_Bool b ) +//------------------------------------------------------------------------ +sal_Bool SAL_CALL test_rtl_OString_valueOf_sal_Bool( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth =methName; + + typedef struct TestCase + { + sal_Char* comments; + sal_Bool input1; + OString* expVal; + ~TestCase() {delete expVal;} + } TestCase; + + TestCase arrTestCase[] = + { + {"true",sal_True,new OString("true")}, + {"false",sal_False, new OString("false")} + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + ::rtl::OString aStr1; + aStr1 = aStr1.valueOf( arrTestCase[i].input1 ); + sal_Bool lastRes = (arrTestCase[i].expVal->compareTo(aStr1) == 0); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "valueof_bool", i) + ); + + res &= lastRes; + + } + + return ( res ); +} + +sal_Bool SAL_CALL test_rtl_OString_valueOf_sal_Char( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth =methName; + + typedef struct TestCase + { + sal_Char* comments; + sal_Char input1; + OString* expVal; + ~TestCase() {delete expVal;} + } TestCase; + + TestCase arrTestCase[] = + { + {"A",'A',new OString("A")}, + {"a",'a', new OString("a")}, + {"0",'0', new OString("0")}, + {"-",'-', new OString("-")}, + {"_",'_', new OString("_")}, + {"|",'|', new OString("|")}, + {"?",'?', new OString("?")}, + {"?",'?', new OString("?")}, + {"\n",'\n', new OString("\n")}, + {"\'",'\'', new OString("\'")}, + {"\"",'\"', new OString("\"")} + + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + ::rtl::OString aStr1; + aStr1 = aStr1.valueOf( arrTestCase[i].input1 ); + sal_Bool lastRes = (arrTestCase[i].expVal->compareTo(aStr1) == 0); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "valueof_char", i) + ); + + res &= lastRes; + + } + + return ( res ); +} + +/** + * Calls the method valueOf(T, radix) and compares + * returned strings with strings that passed in the array resArray. + * + * @param T, type of argument, passed to valueOf + * @param resArray, array of result strings to compare to + * @param n the number of elements in the array resArray (testcases) + * @param pTestResult the instance of the class TestResult + * @param inArray [optional], array of value that is passed as first argument + * to valueOf + * + * @return true, if all returned strings are equal to corresponding string in + * resArray else, false. + */ +template <class T> +sal_Bool test_valueOf( const char** resArray, int n, sal_Int16 radix, + hTestResult hRtlTestResult, const T *inArray ) +{ + sal_Bool bRes = sal_True; + + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + sal_Int32 i; + + for (i = 0; i < n; i++) + { + ::rtl::OString aStr1; + ::rtl::OString aStr2( resArray[i] ); + + if (inArray == 0) + aStr1 = ::rtl::OString::valueOf((T)i, radix); + else + { + if ( inArray[i] < 0 ) + { + aStr2 = "-"; + aStr2 += resArray[i]; + } + aStr1 = ::rtl::OString::valueOf((T)inArray[i], radix); + } + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + aStr2.compareTo(aStr1) == 0, + (sal_Char*)resArray[i], + createName( pMeth, "valueOf", i ) + ); + } + + return (bRes); +} + + +#define test_valueOf_Int32 test_valueOf<sal_Int32> +#define test_valueOf_Int64 test_valueOf<sal_Int64> +// LLA: #define test_valueOf_float test_valueOf<float> +// LLA: #define test_valueOf_double test_valueOf<double> + +//------------------------------------------------------------------------ +// testing the method valueOf( sal_Int32 i, sal_Int16 radix=2 ) +// testing the method valueOf( sal_Int32 i, sal_Int16 radix=8 ) +// testing the method valueOf( sal_Int32 i, sal_Int16 radix=10 ) +// testing the method valueOf( sal_Int32 i, sal_Int16 radix=16 ) +// testing the method valueOf( sal_Int32 i, sal_Int16 radix=36 ) +//------------------------------------------------------------------------ +sal_Bool SAL_CALL test_rtl_OString_valueOf_Int32( + hTestResult hRtlTestResult ) +{ + sal_Bool bRes = sal_False; + + bRes = c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int32((const char**)kBinaryNumsStr, + kBinaryNumsCount, kRadixBinary, hRtlTestResult, 0 ), + "kRadixBinary", + "valueOf(sal_Int32, radix 2)" + ); + + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int32((const char**)kOctolNumsStr, + kOctolNumsCount, kRadixOctol, hRtlTestResult, 0), + "kRadixOctol", + "valueOf(sal_Int32, radix 8)" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int32((const char**)kDecimalNumsStr, + kDecimalNumsCount, kRadixDecimal, hRtlTestResult, 0), + "kRadixDecimal", + "valueOf(sal_Int32, radix 10)" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int32((const char**)kHexDecimalNumsStr, + kHexDecimalNumsCount, kRadixHexdecimal, hRtlTestResult, 0), + "kRadixHexdecimal", + "valueOf(sal_Int32, radix 16)" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int32((const char**)kBase36NumsStr, + kBase36NumsCount, kRadixBase36, hRtlTestResult, 0), + "kRadixBase36", + "valueOf(sal_Int32, radix 36)" + ); + + + return ( bRes ); +} + +//------------------------------------------------------------------------ +// testing the method valueOf( sal_Int32 l, sal_Int32 radix=2 ) +// where l = large constants +// testing the method valueOf( sal_Int32 l, sal_Int32 radix=8 ) +// where l = large constants +// testing the method valueOf( sal_Int32 l, sal_Int32 radix=10 ) +// where l = large constants +// testing the method valueOf( sal_Int32 l, sal_Int32 radix=16 ) +// where l = large constants +// testing the method valueOf( sal_Int32 l, sal_Int32 radix=36 ) +// where l = large constants +//------------------------------------------------------------------------ +sal_Bool SAL_CALL test_rtl_OString_valueOf_Int32_Bounderies( + hTestResult hRtlTestResult ) +{ + sal_Bool bRes = sal_False; + + bRes = c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int32((const char**)kBinaryMaxNumsStr, + kInt32MaxNumsCount, kRadixBinary, hRtlTestResult, + kInt32MaxNums), + "kRadixBinary", + "valueOf(salInt32, radix 2) Bounderies" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int32((const char**)kOctolMaxNumsStr, + kInt32MaxNumsCount, kRadixOctol, hRtlTestResult, + kInt32MaxNums), + "kRadixOctol", + "valueOf(salInt32, radix 8) Bounderies" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int32((const char**)kDecimalMaxNumsStr, + kInt32MaxNumsCount, kRadixDecimal, + hRtlTestResult, kInt32MaxNums), + "kRadixDecimal", + "valueOf(salInt32, radix 10) Bounderies" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int32((const char**)kHexDecimalMaxNumsStr, + kInt32MaxNumsCount, kRadixHexdecimal, + hRtlTestResult, kInt32MaxNums), + "kRadixHexdecimal", + "valueOf(salInt32, radix 16) Bounderies" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int32((const char**)kBase36MaxNumsStr, + kInt32MaxNumsCount, kRadixBase36, + hRtlTestResult, kInt32MaxNums), + "kRadixBase36", + "valueOf(salInt32, radix 36) Bounderies" + ); + + return ( bRes ); +} + +//------------------------------------------------------------------------ +// testing the method valueOf( sal_Int32 i, sal_Int16 radix=2 ) +// for negative value +// testing the method valueOf( sal_Int32 i, sal_Int16 radix=8 ) +// for negative value +// testing the method valueOf( sal_Int32 i, sal_Int16 radix=10 ) +// for negative value +// testing the method valueOf( sal_Int32 i, sal_Int16 radix=16 ) +// for negative value +// testing the method valueOf( sal_Int32 i, sal_Int16 radix=36 ) +// for negative value +//------------------------------------------------------------------------ +sal_Bool SAL_CALL test_rtl_OString_valueOf_Int32_Negative( + hTestResult hRtlTestResult ) +{ + sal_Bool bRes = sal_False; + sal_Int32 inArr[kBase36NumsCount]; + sal_Int32 i; + + for (i = 0; i < kBase36NumsCount; i++ ) + inArr[i] = -i; + + bRes = c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int32( kBinaryNumsStr, kBinaryNumsCount, + kRadixBinary, hRtlTestResult, inArr ), + "negative Int32, kRadixBinary", + "valueOf( negative Int32, radix 2 )" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int32( kOctolNumsStr, kOctolNumsCount, + kRadixOctol, hRtlTestResult, inArr ), + "negative Int32, kRadixOctol", + "valueOf( negative Int32, radix 8 )" + ); + + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int32( kDecimalNumsStr, kDecimalNumsCount, + kRadixDecimal, hRtlTestResult, inArr ), + "negative Int32, kRadixDecimal", + "valueOf( negative Int32, radix 10 )" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int32( kHexDecimalNumsStr, kHexDecimalNumsCount, + kRadixHexdecimal, hRtlTestResult, inArr ), + "negative Int32, kRadixHexdecimal", + "valueOf( negative Int32, radix 16 )" + ); + + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int32( kBase36NumsStr, kBase36NumsCount, + kRadixBase36, hRtlTestResult, inArr ), + "negative Int32, kRadixBase36", + "valueOf( negative Int32, radix 36 )" + ); + + return ( bRes ); +} +//------------------------------------------------------------------------ +// testing the method valueOf( sal_Int32 l, sal_Int32 radix ) where radix = -5 +//------------------------------------------------------------------------ +sal_Bool SAL_CALL test_rtl_OString_valueOf_Int32_WrongRadix( + hTestResult hRtlTestResult ) +{ + sal_Bool bRes = sal_False; + + sal_Int32 intVal = 11; + + ::rtl::OString aStr1; + ::rtl::OString aStr2("11"); + + aStr1 = aStr1.valueOf( intVal, -5 ); + + bRes = c_rtl_tres_state + ( + hRtlTestResult, + aStr2.compareTo( aStr1 ) == 0, + "if radix not valid then radix must be 10", + "valueOf(sal_Int32, sal_Int32 radix): radix = -5" + ); + + return (bRes); +} + +//------------------------------------------------------------------------ +// testing the method valueOf( sal_Int32 l, sal_Int32 radix ) +// where l = -2147483648 (smallest negative value) +//------------------------------------------------------------------------ +sal_Bool SAL_CALL test_rtl_OString_valueOf_Int32_SmallestNegativeValue( + hTestResult hRtlTestResult) +{ + // Standard-conforming way to assign -2147483648 to n: + sal_Int32 n = -1; + for (int i = 1; i < 32; ++i) + n *= 2; + return c_rtl_tres_state + ( + hRtlTestResult, + ::rtl::OString::valueOf(n) == "-2147483648", + "-2147483648", + "valueOf(sal_Int32 -2147483648)" + ); +} + +//------------------------------------------------------------------------ +// testing the method valueOf( sal_Int64 l, sal_Int16 radix=2 ) +// testing the method valueOf( sal_Int64 l, sal_Int16 radix=8 ) +// testing the method valueOf( sal_Int64 l, sal_Int16 radix=10 ) +// testing the method valueOf( sal_Int64 l, sal_Int16 radix=16 ) +// testing the method valueOf( sal_Int64 l, sal_Int16 radix=36 ) +//------------------------------------------------------------------------ +sal_Bool SAL_CALL test_rtl_OString_valueOf_Int64( + hTestResult hRtlTestResult ) +{ + sal_Bool bRes = sal_False; + + bRes = c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int64((const char**)kBinaryNumsStr, + kBinaryNumsCount, kRadixBinary, hRtlTestResult, 0), + "kRadixBinary", + "valueOf(sal_Int64, radix 2)_" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int64((const char**)kOctolNumsStr, + kOctolNumsCount, kRadixOctol, hRtlTestResult, 0), + "kRadixOctol", + "valueOf(sal_Int64, radix 8)_" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int64((const char**)kDecimalNumsStr, + kDecimalNumsCount, kRadixDecimal, hRtlTestResult, 0), + "kRadixDecimal", + "valueOf(sal_Int64, radix 10)_" + ); + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int64((const char**)kHexDecimalNumsStr, + kHexDecimalNumsCount, kRadixHexdecimal, hRtlTestResult, 0), + "kRadixHexdecimal", + "valueOf(sal_Int64, radix 16)_" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int64((const char**)kBase36NumsStr, + kBase36NumsCount, kRadixBase36, hRtlTestResult, 0), + "kRadixBase36", + "valueOf(sal_Int64, radix 36)_" + ); + + return (bRes); +} + +//------------------------------------------------------------------------ +// testing the method valueOf( sal_Int64 l, sal_Int32 radix=2 ) +// where l = large constants +// testing the method valueOf( sal_Int64 l, sal_Int32 radix=8 ) +// where l = large constants +// testing the method valueOf( sal_Int64 l, sal_Int32 radix=10 ) +// where l = large constants +// testing the method valueOf( sal_Int64 l, sal_Int32 radix=16 ) +// where l = large constants +// testing the method valueOf( sal_Int64 l, sal_Int32 radix=36 ) +// where l = large constants +//------------------------------------------------------------------------ +sal_Bool SAL_CALL test_rtl_OString_valueOf_Int64_Bounderies( + hTestResult hRtlTestResult ) +{ + sal_Bool bRes = sal_False; + + bRes = c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int64((const char**)kBinaryMaxNumsStr, + kInt64MaxNumsCount, kRadixBinary, + hRtlTestResult, kInt64MaxNums), + "kRadixBinary", + "valueOf(salInt64, radix 2) Bounderies" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int64((const char**)kOctolMaxNumsStr, + kInt64MaxNumsCount, kRadixOctol, + hRtlTestResult, kInt64MaxNums), + "kRadixOctol", + "valueOf(salInt64, radix 8) Bounderies" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int64((const char**)kDecimalMaxNumsStr, + kInt64MaxNumsCount, kRadixDecimal, + hRtlTestResult, kInt64MaxNums), + "kRadixDecimal", + "valueOf(salInt64, radix 10) Bounderies" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int64((const char**)kHexDecimalMaxNumsStr, + kInt64MaxNumsCount, kRadixHexdecimal, + hRtlTestResult, kInt64MaxNums), + "kRadixHexdecimal", + "valueOf(salInt64, radix 16) Bounderies" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int64((const char**)kBase36MaxNumsStr, + kInt64MaxNumsCount, kRadixBase36, + hRtlTestResult, kInt64MaxNums), + "kRadixBase36", + "valueOf(salInt64, radix 36) Bounderies" + ); + + return ( bRes ); +} + +//------------------------------------------------------------------------ +// testing the method valueOf( sal_Int64 l, sal_Int16 radix=2 ) +// for negative value +// testing the method valueOf( sal_Int64 l, sal_Int16 radix=8 ) +// for negative value +// testing the method valueOf( sal_Int64 l, sal_Int16 radix=10 ) +// for negative value +// testing the method valueOf( sal_Int64 l, sal_Int16 radix=16 ) +// for negative value +// testing the method valueOf( sal_Int64 l, sal_Int16 radix=36 ) +// for negative value +//------------------------------------------------------------------------ +sal_Bool SAL_CALL test_rtl_OString_valueOf_Int64_Negative( + hTestResult hRtlTestResult ) +{ + sal_Bool bRes = sal_False; + + sal_Int64 inArr[36]; + sal_Int32 i; + + for (i = 0; i < 36; i++) { + inArr[i] = -i; + } + + + bRes = c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int64( kBinaryNumsStr, kBinaryNumsCount, + kRadixBinary, hRtlTestResult, inArr ), + "negative Int64, kRadixBinary", + "valueOf( negative Int64, radix 2 )" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int64( kOctolNumsStr, kOctolNumsCount, + kRadixOctol, hRtlTestResult, inArr ), + "negative Int64, kRadixOctol", + "valueOf( negative Int64, radix 8 )" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int64( kDecimalNumsStr, kDecimalNumsCount, + kRadixDecimal, hRtlTestResult, inArr ), + "negative Int64, kRadixDecimal", + "valueOf( negative Int64, radix 10 )" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int64( kHexDecimalNumsStr, kHexDecimalNumsCount, + kRadixHexdecimal, hRtlTestResult, inArr ), + "negative Int64, kRadixHexDecimal", + "valueOf( negative Int64, radix 16 )" + ); + + bRes &= c_rtl_tres_state + ( + hRtlTestResult, + test_valueOf_Int64( kBase36NumsStr, kBase36NumsCount, + kRadixBase36, hRtlTestResult, inArr), + "negative Int64, kRadixBase36", + "valueOf( negative Int64, radix 36 )" + ); + + return (bRes); +} +//------------------------------------------------------------------------ +// testing the method valueOf( sal_Int64 l, sal_Int32 radix ) +// where radix = -5 +//------------------------------------------------------------------------ +sal_Bool SAL_CALL test_rtl_OString_valueOf_Int64_WrongRadix( + hTestResult hRtlTestResult ) +{ + sal_Bool bRes = sal_False; + + sal_Int64 intVal = 11; + + ::rtl::OString aStr1; + ::rtl::OString aStr2("11"); + + aStr1 = aStr1.valueOf( intVal, -5 ); + + bRes = c_rtl_tres_state + ( + hRtlTestResult, + aStr2.compareTo(aStr1) == 0, + "if radix not valid then radix must be 10", + "valueOf(sal_Int64, sal_Int32 radix): radix = -5" + ); + + return (bRes); +} + +//------------------------------------------------------------------------ +// testing the method valueOf( sal_Int64 l, sal_Int32 radix ) +// where l = -9223372036854775808 (smallest negative value) +//------------------------------------------------------------------------ +sal_Bool SAL_CALL test_rtl_OString_valueOf_Int64_SmallestNegativeValue( + hTestResult hRtlTestResult) +{ + // Standard-conforming way to assign -9223372036854775808 to n: + sal_Int64 n = -1; + for (int i = 1; i < 64; ++i) + n *= 2; + return c_rtl_tres_state + ( + hRtlTestResult, + ::rtl::OString::valueOf(n) == "-9223372036854775808", + "-9223372036854775808", + "valueOf(sal_Int64 -9223372036854775808)" + ); +} + +//------------------------------------------------------------------------ +// testing the method valueOf( float f ) +//------------------------------------------------------------------------ +// LLA: sal_Bool SAL_CALL test_rtl_OString_valueOf_float( +// LLA: hTestResult hRtlTestResult ) +// LLA: { +// LLA: sal_Char methName[MAXBUFLENGTH]; +// LLA: sal_Char* pMeth =methName; +// LLA: +// LLA: typedef struct TestCase +// LLA: { +// LLA: sal_Char* comments; +// LLA: float input1; +// LLA: OString* expVal; +// LLA: +// LLA: ~TestCase() {delete expVal;} +// LLA: } TestCase; +// LLA: +// LLA: TestCase arrTestCase[] = +// LLA: { +// LLA: { "3.0", 3.0, new OString("3.0") }, +// LLA: { "3.5", 3.5f, new OString("3.5")}, +// LLA: { "3.0625", 3.0625f, new OString("3.0625")}, +// LLA: { "3.502525", 3.502525f, new OString("3.502525") }, +// LLA: { "3.141592", 3.141592f, new OString("3.141592") }, +// LLA: { "3.5025255", 3.5025255f, new OString("3.5025255") }, +// LLA: { "3.0039062", 3.00390625f, new OString("3.0039062") } +// LLA: }; +// LLA: +// LLA: sal_Bool res = sal_True; +// LLA: sal_Int32 i; +// LLA: +// LLA: for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) +// LLA: { +// LLA: ::rtl::OString aStr1; +// LLA: aStr1 = aStr1.valueOf( arrTestCase[i].input1 ); +// LLA: sal_Bool lastRes = (arrTestCase[i].expVal->compareTo(aStr1) == 0); +// LLA: +// LLA: c_rtl_tres_state +// LLA: ( +// LLA: hRtlTestResult, +// LLA: lastRes, +// LLA: arrTestCase[i].comments, +// LLA: createName( pMeth, "valueof_float", i) +// LLA: ); +// LLA: +// LLA: res &= lastRes; +// LLA: +// LLA: } +// LLA: +// LLA: return ( res ); +// LLA: } + + + + +//------------------------------------------------------------------------ +// testing the method valueOf( float f ) for negative value +//------------------------------------------------------------------------ +// LLA: sal_Bool SAL_CALL test_rtl_OString_valueOf_Float_Negative( +// LLA: hTestResult hRtlTestResult ) +// LLA: { +// LLA: sal_Char methName[MAXBUFLENGTH]; +// LLA: sal_Char* pMeth =methName; +// LLA: +// LLA: typedef struct TestCase +// LLA: { +// LLA: sal_Char* comments; +// LLA: float input1; +// LLA: OString* expVal; +// LLA: +// LLA: ~TestCase() {delete expVal;} +// LLA: } TestCase; +// LLA: +// LLA: TestCase arrTestCase[] = +// LLA: { +// LLA: { "-3.0", -3.0, new OString("-3.0") }, +// LLA: { "-3.5", -3.5f, new OString("-3.5")}, +// LLA: { "-3.0625", -3.0625f, new OString("-3.0625")}, +// LLA: { "-3.502525", -3.502525f, new OString("-3.502525") }, +// LLA: { "-3.141592", -3.141592f, new OString("-3.141592") }, +// LLA: { "-3.5025255", -3.5025255f, new OString("-3.5025255") }, +// LLA: { "-3.0039062", -3.00390625f, new OString("-3.0039062") } +// LLA: }; +// LLA: +// LLA: sal_Bool res = sal_True; +// LLA: sal_Int32 i; +// LLA: +// LLA: for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) +// LLA: { +// LLA: ::rtl::OString aStr1; +// LLA: aStr1 = aStr1.valueOf( arrTestCase[i].input1 ); +// LLA: sal_Bool lastRes = (arrTestCase[i].expVal->compareTo(aStr1) == 0); +// LLA: +// LLA: c_rtl_tres_state +// LLA: ( +// LLA: hRtlTestResult, +// LLA: lastRes, +// LLA: arrTestCase[i].comments, +// LLA: createName( pMeth, "valueof_negative float", i) +// LLA: ); +// LLA: +// LLA: res &= lastRes; +// LLA: +// LLA: } +// LLA: +// LLA: return ( res ); +// LLA: } + +//------------------------------------------------------------------------ +// testing the method valueOf( double f ) +//------------------------------------------------------------------------ +// LLA: sal_Bool SAL_CALL test_rtl_OString_valueOf_double( +// LLA: hTestResult hRtlTestResult ) +// LLA: { +// LLA: sal_Char methName[MAXBUFLENGTH]; +// LLA: sal_Char* pMeth =methName; +// LLA: +// LLA: typedef struct TestCase +// LLA: { +// LLA: sal_Char* comments; +// LLA: double input1; +// LLA: OString* expVal; +// LLA: +// LLA: ~TestCase() {delete expVal;} +// LLA: } TestCase; +// LLA: +// LLA: TestCase arrTestCase[] = +// LLA: { +// LLA: {"3.0", 3.0, new OString("3.0")}, +// LLA: {"3.5", 3.5, new OString("3.5")}, +// LLA: {"3.0625", 3.0625, new OString("3.0625")}, +// LLA: {"3.1415926535", 3.1415926535, new OString("3.1415926535")}, +// LLA: {"3.1415926535897931", 3.141592653589793, +// LLA: new OString("3.1415926535897931")}, +// LLA: {"3.1415926535897931", 3.1415926535897932, +// LLA: new OString("3.1415926535897931")}, +// LLA: {"3.1415926535897931", 3.14159265358979323, +// LLA: new OString("3.1415926535897931")}, +// LLA: {"3.1415926535897931", 3.141592653589793238462643, +// LLA: new OString("3.1415926535897931")} +// LLA: }; +// LLA: +// LLA: sal_Bool res = sal_True; +// LLA: sal_Int32 i; +// LLA: +// LLA: for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) +// LLA: { +// LLA: ::rtl::OString aStr1; +// LLA: aStr1 = aStr1.valueOf( arrTestCase[i].input1 ); +// LLA: sal_Bool lastRes = (arrTestCase[i].expVal->compareTo(aStr1) == 0); +// LLA: +// LLA: c_rtl_tres_state +// LLA: ( +// LLA: hRtlTestResult, +// LLA: lastRes, +// LLA: arrTestCase[i].comments, +// LLA: createName( pMeth, "valueof_double", i) +// LLA: ); +// LLA: +// LLA: res &= lastRes; +// LLA: +// LLA: } +// LLA: +// LLA: return ( res ); +// LLA: } + + +//------------------------------------------------------------------------ +// testing the method valueOf( double f ) for negative value +//------------------------------------------------------------------------ +// LLA: sal_Bool SAL_CALL test_rtl_OString_valueOf_Double_Negative( +// LLA: hTestResult hRtlTestResult ) +// LLA: { +// LLA: sal_Char methName[MAXBUFLENGTH]; +// LLA: sal_Char* pMeth =methName; +// LLA: +// LLA: typedef struct TestCase +// LLA: { +// LLA: sal_Char* comments; +// LLA: double input1; +// LLA: OString* expVal; +// LLA: +// LLA: ~TestCase() {delete expVal;} +// LLA: } TestCase; +// LLA: +// LLA: TestCase arrTestCase[] = +// LLA: { +// LLA: {"-3.0", -3.0, new OString("-3.0")}, +// LLA: {"-3.5", -3.5, new OString("-3.5")}, +// LLA: {"-3.0625", -3.0625, new OString("-3.0625")}, +// LLA: {"-3.1415926535", -3.1415926535, new OString("-3.1415926535")}, +// LLA: {"-3.1415926535897931", -3.141592653589793, +// LLA: new OString("-3.1415926535897931")}, +// LLA: {"-3.1415926535897931", -3.1415926535897932, +// LLA: new OString("-3.1415926535897931")}, +// LLA: {"-3.1415926535897931", -3.14159265358979323, +// LLA: new OString("-3.1415926535897931")}, +// LLA: {"-3.1415926535897931", -3.141592653589793238462643, +// LLA: new OString("-3.1415926535897931")} +// LLA: }; +// LLA: +// LLA: sal_Bool res = sal_True; +// LLA: sal_Int32 i; +// LLA: +// LLA: for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) +// LLA: { +// LLA: ::rtl::OString aStr1; +// LLA: aStr1 = aStr1.valueOf( arrTestCase[i].input1 ); +// LLA: sal_Bool lastRes = (arrTestCase[i].expVal->compareTo(aStr1) == 0); +// LLA: +// LLA: c_rtl_tres_state +// LLA: ( +// LLA: hRtlTestResult, +// LLA: lastRes, +// LLA: arrTestCase[i].comments, +// LLA: createName( pMeth, "valueof_nagative double", i) +// LLA: ); +// LLA: +// LLA: res &= lastRes; +// LLA: +// LLA: } +// LLA: +// LLA: return ( res ); +// LLA: } + +//------------------------------------------------------------------------ +// testing the method valueOf() +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_valueOf( + hTestResult hRtlTestResult ) +{ + c_rtl_tres_state_start(hRtlTestResult, "valueOf"); + sal_Bool bTState = test_rtl_OString_valueOf_sal_Bool( hRtlTestResult ); + + bTState &= test_rtl_OString_valueOf_sal_Char( hRtlTestResult ); + + bTState &= test_rtl_OString_valueOf_Int32( hRtlTestResult ); + bTState &= test_rtl_OString_valueOf_Int32_Bounderies( hRtlTestResult ); + bTState &= test_rtl_OString_valueOf_Int32_Negative( hRtlTestResult ); + bTState &= test_rtl_OString_valueOf_Int32_WrongRadix( hRtlTestResult ); + bTState &= test_rtl_OString_valueOf_Int32_SmallestNegativeValue( + hRtlTestResult ); + + bTState &= test_rtl_OString_valueOf_Int64( hRtlTestResult ); + bTState &= test_rtl_OString_valueOf_Int64_Bounderies( hRtlTestResult ); + bTState &= test_rtl_OString_valueOf_Int64_Negative( hRtlTestResult ); + bTState &= test_rtl_OString_valueOf_Int64_WrongRadix( hRtlTestResult ); + bTState &= test_rtl_OString_valueOf_Int64_SmallestNegativeValue( + hRtlTestResult ); + + // LLA: the tests for valueOf(float) and valueOf(double) are moved to file + // sal/qa/rtl/ostring/rtl_OString2.cxx + + // LLA: bTState &= test_rtl_OString_valueOf_float( hRtlTestResult ); + // LLA: bTState &= test_rtl_OString_valueOf_Float_Negative( hRtlTestResult ); + + // LLA: bTState &= test_rtl_OString_valueOf_double( hRtlTestResult ); + // LLA: bTState &= test_rtl_OString_valueOf_Double_Negative( hRtlTestResult ); + + c_rtl_tres_state_end(hRtlTestResult, "valueOf"); +// return ( bTState ); +} + + +//------------------------------------------------------------------------ +// testing the method toChar() +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_toChar( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "toChar"); + typedef struct TestCase + { + sal_Char* comments; + sal_Char expVal; + OString* input1; + ~TestCase() {delete input1;} + } TestCase; + + + TestCase arrTestCase[] = + { + {"A", 'A', new OString("A")}, + {"a", 'a', new OString("a")}, + {"0", '0',new OString("0")}, + {"-", '-',new OString("-")}, + {"_", '_',new OString("_")}, + +// TODO: may be UTF-8 values +// {"¥", '¥',new OString("¥")}, +// { "¦", '¦',new OString("¦")}, +// {"ô", 'ô',new OString("ô")}, +// {"", '',new OString("")}, + {"\n", '\n',new OString("\n")}, + {"\'", '\'',new OString("\'")}, + {"\"", '\"',new OString("\"")}, + {"\0", '\0',new OString("\0")}, + {"", '\0',new OString("")}, + {"Sun Microsystems", 'S', new OString(kTestStr1)} + }; + + + // sal_Bool res = sal_True; + sal_uInt32 i; + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++ ) + { + sal_Char strRes = arrTestCase[i].input1->toChar(); + sal_Bool lastRes = ( strRes == arrTestCase[i].expVal ); + + char com[MAXBUFLENGTH]; + com[0] = '\''; + cpynstr(com + 1, (*arrTestCase[i].input1), MAXBUFLENGTH); + int length = AStringLen( (*arrTestCase[i].input1) ); + com[length + 1] = '\''; + com[length + 2] = 0; + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + com, + createName( pMeth, "toChar", i ) + ); + + } + + c_rtl_tres_state_end(hRtlTestResult, "toChar"); +// return (res); +} + + +//------------------------------------------------------------------------ +// testing the method toFloat() +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_toFloat( + hTestResult hRtlTestResult ) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "toFloat"); + typedef struct TestCase + { + float expVal; + OString* input1; + float m_nPrecision; + ~TestCase() {delete input1;} + } TestCase; + + + TestCase arrTestCase[] = + { + {3.0f, new OString("3"), 3e-7f}, + {3.1f, new OString("3.1"), 3e-7f}, + {3.1415f, new OString("3.1415"), 3e-7f}, + {3.14159f, new OString("3.14159"), 3e-7f}, + {3.141592f, new OString("3.141592"), 3e-7f}, + {3.1415926f, new OString("3.1415926"), 3e-7f}, + {3.14159265f, new OString("3.14159265"), 3e-7f}, + {3.141592653589793238462643f, + new OString("3.141592653589793238462643"), 3e-7f}, + {6.5822e-16f, new OString("6.5822e-16"), 6e-16f * 1e-7f}, + {9.1096e-31f, new OString("9.1096e-31"), 9e-31f * 1e-7f}, + {2.997925e8f, new OString("2.997925e8"), 3e8f * 1e-7f}, + {6.241e18f, new OString("6.241e18"), 6e18f * 1e-7f}, + {3.1f, new OString("03.1"), 3e-7f}, + {3.1f, new OString(" 3.1"), 3e-7f}, + {-3.1f, new OString("-3.1"), 3e-7f}, + {3.1f, new OString("+3.1"), 3e-7f}, + {0.0f, new OString("-0.0"), 1e-7f} + }; + + + // sal_Bool res = sal_True; + sal_uInt32 i; + + t_print("sizeof(float)=%d, sizeof(double)=%d\n", sizeof(float), sizeof(double)); + + for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++ ) + { + float fA = arrTestCase[i].input1->toFloat(); + float fB = arrTestCase[i].expVal; + float fPrec = arrTestCase[i].m_nPrecision; + float fResult = (float) fabs(fA - fB); + // t_print("float result: A:(%.9f) B:(%.9f) fabs(A-B):%E\n", fA, fB, fResult); + t_print("float result: A:(%E) B:(%E) fabs(A-B):%E\n", fA, fB, (float) fResult); + sal_Bool lastRes = ( fResult <= fPrec ); + + char com[MAXBUFLENGTH]; + com[0] = '\''; + cpynstr(com + 1, (*arrTestCase[i].input1), MAXBUFLENGTH); + int length = AStringLen( (*arrTestCase[i].input1) ); + com[length + 1] = '\''; + com[length + 2] = 0; + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + com, + createName( pMeth, "toFloat", i ) + ); + + } + + c_rtl_tres_state_end(hRtlTestResult, "toFloat"); +// return (res); +} + + +//------------------------------------------------------------------------ +// testing the method toDouble() +//------------------------------------------------------------------------ +// LLA: extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_toDouble( +// LLA: hTestResult hRtlTestResult ) +// LLA: { +// LLA: sal_Char methName[MAXBUFLENGTH]; +// LLA: sal_Char* pMeth = methName; +// LLA: +// LLA: c_rtl_tres_state_start(hRtlTestResult, "toDouble"); +// LLA: typedef struct TestCase +// LLA: { +// LLA: double expVal; +// LLA: double expDiff; +// LLA: OString* input1; +// LLA: ~TestCase() {delete input1;} +// LLA: } TestCase; +// LLA: +// LLA: +// LLA: TestCase arrTestCase[] = +// LLA: { +// LLA: {3.0, 1e-35, new OString("3")}, +// LLA: {3.1, 1e-2, new OString("3.1")}, +// LLA: {3.1415, 1e-5, new OString("3.1415")}, +// LLA: {3.1415926535, 1e-11, new OString("3.1415926535")}, +// LLA: {3.141592653589793, 1e-15, +// LLA: new OString("3.141592653589793")}, +// LLA: {3.1415926535897932, 1e-16, +// LLA: new OString("3.1415926535897932")}, +// LLA: {3.14159265358979323, 1e-15, +// LLA: new OString("3.14159265358979323")}, +// LLA: {3.141592653589793238462643, 1e-15, +// LLA: new OString("3.141592653589793238462643")}, +// LLA: {6.5822e-16, 1e-20, new OString("6.5822e-16")}, +// LLA: {9.1096e-31, 1e-35, new OString("9.1096e-31")}, +// LLA: {2.997925e8, 10, new OString("2.997925e8")}, +// LLA: {6.241e18, 100, new OString("6.241e18")}, +// LLA: {1.7e-308, 1e-35, new OString("1.7e-308")}, +// LLA: {1.7e+308, 100, new OString("1.7e+308")}, +// LLA: {3.1, 1e-2, new OString("03.1")}, +// LLA: {3.1, 1e-2, new OString(" 3.1")}, +// LLA: {-3.1, 1e-2, new OString("-3.1")}, +// LLA: {3.1, 1e-2, new OString("+3.1")}, +// LLA: {0.0, 1e-2, new OString("-0.0")} +// LLA: }; +// LLA: +// LLA: sal_Bool res = sal_True; +// LLA: sal_Int32 i; +// LLA: +// LLA: for(i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++ ) +// LLA: { +// LLA: double dRes = arrTestCase[i].input1->toDouble(); +// LLA: double dErg = dRes - arrTestCase[i].expVal ; +// LLA: double dComp = fabs( dErg ); +// LLA: sal_Bool lastRes = ( dComp <= arrTestCase[i].expDiff ); +// LLA: +// LLA: char com[MAXBUFLENGTH]; +// LLA: com[0] = '\''; +// LLA: cpynstr(com + 1, (*arrTestCase[i].input1), MAXBUFLENGTH); +// LLA: int length = AStringLen( (*arrTestCase[i].input1) ); +// LLA: com[length + 1] = '\''; +// LLA: com[length + 2] = 0; +// LLA: +// LLA: c_rtl_tres_state +// LLA: ( +// LLA: hRtlTestResult, +// LLA: lastRes, +// LLA: com, +// LLA: createName( pMeth, "toDouble", i ) +// LLA: ); +// LLA: +// LLA: } +// LLA: +// LLA: c_rtl_tres_state_end(hRtlTestResult, "toDouble"); +// LLA: // return (res); +// LLA: } + +//------------------------------------------------------------------------ +// testing the method toBoolean() +//------------------------------------------------------------------------ + +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_toBoolean( + hTestResult hRtlTestResult) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "toBoolean"); + typedef struct TestCase + { + sal_Char* comments; + sal_Bool expVal; + OString* input; + + } TestCase; + + TestCase arrTestCase[]={ + + {"expected true", sal_True, new OString("True")}, + {"expected false", sal_False, new OString("False")}, + {"expected true", sal_True, new OString("1")} + }; + + + sal_Bool res = sal_True; + sal_uInt32 i; + + for (i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + sal_Bool bRes = arrTestCase[i].input->toBoolean(); + sal_Bool lastRes = (bRes == arrTestCase[i].expVal); + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "toBoolean", i ) + + ); + res &= lastRes; + } + c_rtl_tres_state_end(hRtlTestResult, "toBoolean"); +// return ( res ); +} + + + +//------------------------------------------------------------------------ +// testing the method toInt32( sal_Int16 radix = 2,8,10,16,36 ) +//------------------------------------------------------------------------ +sal_Bool test_toInt32( int num, const sal_Char** in, +const sal_Int32 *expVal,sal_Int16 radix, hTestResult hRtlTestResult ) +{ + sal_Bool res = sal_True; + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + sal_Int32 i; + + for( i = 0; i < num; i++ ) + { + OString str(in[i]); + sal_Int32 intRes = str.toInt32(radix); + sal_Bool lastRes = (intRes == expVal[i]); + + char buf[MAXBUFLENGTH]; + buf[0] = '\''; + cpynstr( buf + 1, in[i], MAXBUFLENGTH ); + int length = AStringLen( in[i] ); + buf[length + 1] = '\''; + buf[length + 2] = 0; + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + buf, + createName( pMeth,"toInt32", i ) + ); + + res &= lastRes; + } + + return( res ); +} + +sal_Bool SAL_CALL test_rtl_OString_toInt32_wrongRadix( + hTestResult hRtlTestResult ) +{ + ::rtl::OString str("0"); + + sal_Int32 iRes = str.toInt32(-1); + + return + ( + c_rtl_tres_state + ( + hRtlTestResult, + iRes == 0, + "wrong radix -1", + "toInt32( 0, wrong radix -1 )" + ) + ); +} + +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_toInt32( + hTestResult hRtlTestResult ) +{ + sal_Int32 expValues[kBase36NumsCount]; + sal_Int32 i; + + c_rtl_tres_state_start(hRtlTestResult, "toInt32"); + for ( i = 0; i < kBase36NumsCount; i++ ) + expValues[i] = i; + + sal_Bool res = c_rtl_tres_state + ( + hRtlTestResult, + test_toInt32( kBinaryNumsCount, kBinaryNumsStr, + expValues, kRadixBinary, hRtlTestResult ), + "kBinaryNumsStr", + "toInt32( radix 2 )" + ); + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt32( kInt32MaxNumsCount, kBinaryMaxNumsStr, + kInt32MaxNums, kRadixBinary, hRtlTestResult ), + "kBinaryMaxNumsStr", + "toInt32_Boundaries( radix 2 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt32( kOctolNumsCount, kOctolNumsStr, + expValues, kRadixOctol, hRtlTestResult ), + "kOctolNumsStr", + "toInt32( radix 8 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt32( kInt32MaxNumsCount, kOctolMaxNumsStr, + (sal_Int32*)kInt32MaxNums, kRadixOctol, hRtlTestResult ), + "kOctolMaxNumsStr", + "toInt32_Boundaries( radix 8 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt32( kDecimalNumsCount, kDecimalNumsStr, expValues, + kRadixDecimal, hRtlTestResult ), + "kDecimalNumsStr", + "toInt32( radix 10 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt32( kInt32MaxNumsCount, kDecimalMaxNumsStr, + (sal_Int32*)kInt32MaxNums, kRadixDecimal, hRtlTestResult ), + "kDecimalMaxNumsStr", + "toInt32_Boundaries( radix 10 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt32( kHexDecimalNumsCount, kHexDecimalNumsStr, expValues, + kRadixHexdecimal, hRtlTestResult ), + "kHexDecimalNumsStr", + "toInt32( radix 16 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt32( kInt32MaxNumsCount, kHexDecimalMaxNumsStr, + (sal_Int32*)kInt32MaxNums, kRadixHexdecimal, hRtlTestResult ), + "kHexDecimalMaxNumsStr", + "toInt32_Boundaries( radix 16 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt32( kBase36NumsCount, kBase36NumsStr, expValues, + kRadixBase36, hRtlTestResult ), + "kBase36NumsStr", + "toInt32( radix 36 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt32( kInt32MaxNumsCount, kBase36MaxNumsStr, + (sal_Int32*)kInt32MaxNums, kRadixBase36, hRtlTestResult ), + "kBase36MaxNumsStr", + "toInt32_Boundaries( radix 36 )" + ); + + const sal_Int16 nSpecCases = 5; + static const sal_Char *spString[nSpecCases] = + { + "-1", + "+1", + " 1", + " -1", + "001" + }; + + sal_Int32 expSpecVal[nSpecCases] = + { + -1, + 1, + 1, + -1, + 1 + }; + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt32( nSpecCases, spString, expSpecVal, + kRadixDecimal, hRtlTestResult ), + "special cases", + "toInt32( specialcases )" + ); + + res &= test_rtl_OString_toInt32_wrongRadix( hRtlTestResult ); + + c_rtl_tres_state_end(hRtlTestResult, "toInt32"); +// return ( res ); +} + +//------------------------------------------------------------------------ +// testing the method toInt64( sal_Int16 radix = 2,8,10,16,36 ) +//------------------------------------------------------------------------ +sal_Bool test_toInt64( int num, const sal_Char** in, +const sal_Int64 *expVal,sal_Int16 radix, hTestResult hRtlTestResult ) +{ + sal_Bool res = sal_True; + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + sal_Int32 i; + + for( i = 0; i < num; i++ ) + { + OString str( in[i] ); + sal_Int64 intRes = str.toInt64( radix ); + sal_Bool lastRes = ( intRes == expVal[i] ); + + char buf[MAXBUFLENGTH]; + buf[0] = '\''; + cpynstr( buf + 1, in[i], MAXBUFLENGTH ); + int length = AStringLen(in[i]); + buf[length + 1] = '\''; + buf[length + 2] = 0; + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + buf, + createName( pMeth, "toInt64", i ) + ); + + res &= lastRes; + } + return (res); +} + +sal_Bool SAL_CALL test_rtl_OString_toInt64_wrongRadix( + hTestResult hRtlTestResult ) +{ + ::rtl::OString str("0"); + + sal_Int64 iRes = str.toInt64(-1); + + return ( + + c_rtl_tres_state + ( hRtlTestResult, + iRes == 0, + "wrong radix -1", + "toInt64( wrong radix -1)" + ) + ); +} + +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_toInt64( + hTestResult hRtlTestResult ) +{ + sal_Int64 expValues[kBase36NumsCount]; + sal_Int32 i; + + c_rtl_tres_state_start(hRtlTestResult, "toInt64"); + for (i = 0; i < kBase36NumsCount; expValues[i] = i, i++); + + sal_Bool res = c_rtl_tres_state + ( + hRtlTestResult, + test_toInt64( kBinaryNumsCount, kBinaryNumsStr, expValues, + kRadixBinary, hRtlTestResult ), + "kBinaryNumsStr", + "toInt64( radix 2 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt64( kInt32MaxNumsCount, kBinaryMaxNumsStr, + (sal_Int64*)kInt64MaxNums, kRadixBinary, hRtlTestResult ), + "kBinaryMaxNumsStr", + "toInt64_Boundaries( radix 2 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt64( kOctolNumsCount, kOctolNumsStr, expValues, + kRadixOctol, hRtlTestResult ), + "kOctolNumsStr", + "toInt64( radix 8 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt64( kInt32MaxNumsCount, kOctolMaxNumsStr, + (sal_Int64*)kInt64MaxNums, kRadixOctol, hRtlTestResult ), + "kOctolMaxNumsStr", + "toInt64_Boundaries( radix 8 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt64( kDecimalNumsCount, kDecimalNumsStr, expValues, + kRadixDecimal, hRtlTestResult ), + "kDecimalNumsStr", + "toInt64( radix 10 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt64( kInt32MaxNumsCount, kDecimalMaxNumsStr, + (sal_Int64*)kInt64MaxNums, kRadixDecimal, hRtlTestResult ), + "kDecimalMaxNumsStr", + "toInt64_Boundaries( radix 10 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt64( kHexDecimalNumsCount, kHexDecimalNumsStr, expValues, + kRadixHexdecimal, hRtlTestResult ), + "kHexDecimalNumsStr", + "toInt64( radix 16 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt64( kInt32MaxNumsCount, kHexDecimalMaxNumsStr, + (sal_Int64*)kInt64MaxNums, kRadixHexdecimal, hRtlTestResult ), + "kHexDecimalMaxNumsStr", + "toInt64_Boundaries( radix 16 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt64( kBase36NumsCount, kBase36NumsStr, expValues, + kRadixBase36, hRtlTestResult ), + "kBase36NumsStr", + "toInt64( radix 36 )" + ); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt64( kInt32MaxNumsCount, kBase36MaxNumsStr, + (sal_Int64*)kInt64MaxNums, kRadixBase36, hRtlTestResult ), + "kBase36MaxNumsStr", + "toInt64_Boundaries( radix 36 )" + ); + + + + const sal_Int16 nSpecCases = 5; + static const sal_Char *spString[nSpecCases] = + { + "-1", + "+1", + " 1", + " -1", + "001" + }; + + sal_Int64 expSpecVal[nSpecCases] = + { + -1, + 1, + 1, + -1, + 1 + }; + + res &= c_rtl_tres_state + ( + hRtlTestResult, + test_toInt64( nSpecCases, spString, expSpecVal, + kRadixDecimal, hRtlTestResult ), + "special cases", + "toInt64( specialcases )" + ); + + res &= test_rtl_OString_toInt64_wrongRadix( hRtlTestResult ); + + c_rtl_tres_state_end(hRtlTestResult, "toInt64"); +// return (res); +} + +//------------------------------------------------------------------------ +// testing the method replace( sal_Char oldChar, sal_Char newChar ) +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_replace( + hTestResult hRtlTestResult) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "replace"); +typedef struct TestCase +{ + sal_Char* comments; + OString* expVal; + OString* input; + sal_Char oldChar; + sal_Char newChar; + + ~TestCase() { delete input; delete expVal;} +} TestCase; + +TestCase arrTestCase[]={ + + {"string differs", new OString(kTestStr18), + new OString(kTestStr4),'S','s'}, + {"string differs", new OString(kTestStr19), + new OString(kTestStr17),(sal_Char)' ',(sal_Char)'-'}, + {"same string, no replace ", new OString(kTestStr22), + new OString(kTestStr22),'*','8'} + }; + + + sal_Bool res = sal_True; + sal_uInt32 i; + + for (i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + ::rtl::OString aStr1; + aStr1= arrTestCase[i].input->replace(arrTestCase[i].oldChar, + arrTestCase[i].newChar); + + res &= c_rtl_tres_state + ( + hRtlTestResult, + (arrTestCase[i].expVal->compareTo(aStr1) == 0), + arrTestCase[i].comments, + createName( pMeth, "replace", i ) + + ); + } + c_rtl_tres_state_end(hRtlTestResult, "replace"); +// return ( res ); +} + + + +//------------------------------------------------------------------------ +// testing the method replaceAt( sal_Int32 index, sal_Int32 count, +// const OString& newStr ) +//------------------------------------------------------------------------ +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString_replaceAt( + hTestResult hRtlTestResult) +{ + sal_Char methName[MAXBUFLENGTH]; + sal_Char* pMeth = methName; + + c_rtl_tres_state_start(hRtlTestResult, "replaceAt"); + typedef struct TestCase + { + sal_Char* comments; + OString* expVal; + OString* input; + OString* newStr; + sal_Int32 index; + sal_Int32 count; + + ~TestCase() { delete input; delete expVal; delete newStr;} + } TestCase; + + TestCase arrTestCase[]= + { + + { "string differs", new OString(kTestStr2), new OString(kTestStr22), + new OString(kTestStr2), 0, kTestStr22Len }, + + { "larger index", new OString(kTestStr1), new OString(kTestStr7), + new OString(kTestStr8), 64, kTestStr8Len }, + + { "larger count", new OString(kTestStr2), new OString(kTestStr22), + new OString(kTestStr2),0, 64 }, + + { "navigate index", new OString(kTestStr2), new OString(kTestStr22), + new OString(kTestStr2), -64, 64 }, + + { "null string", new OString(""), + new OString(kTestStr14),new OString(""), 0, kTestStr14Len } + }; + + sal_Bool res = sal_True; + sal_uInt32 i; + + for (i = 0; i < (sizeof (arrTestCase))/(sizeof (TestCase)); i++) + { + ::rtl::OString aStr1; + aStr1= arrTestCase[i].input->replaceAt( arrTestCase[i].index, + arrTestCase[i].count, *arrTestCase[i].newStr ); + + sal_Bool lastRes = ( arrTestCase[i].expVal->compareTo(aStr1) == 0 ); + + c_rtl_tres_state + ( + hRtlTestResult, + lastRes, + arrTestCase[i].comments, + createName( pMeth, "replaceAt", i ) + + ); + res &= lastRes; + } + c_rtl_tres_state_end(hRtlTestResult, "replaceAt"); +// return ( res ); +} + +extern "C" void /* sal_Bool */ SAL_CALL test_rtl_OString( hTestResult hRtlTestResult ) +{ + + c_rtl_tres_state_start(hRtlTestResult, "rtl_OString" ); + + test_rtl_OString_ctors( hRtlTestResult ); + test_rtl_OString_getLength( hRtlTestResult ); + test_rtl_OString_equals( hRtlTestResult ); + test_rtl_OString_equalsIgnoreAsciiCase( hRtlTestResult ); + test_rtl_OString_compareTo( hRtlTestResult ); + test_rtl_OString_op_cmp( hRtlTestResult ); + test_rtl_OString_op_neq( hRtlTestResult ); + test_rtl_OString_op_g( hRtlTestResult ); + test_rtl_OString_op_l( hRtlTestResult ); + test_rtl_OString_op_ge( hRtlTestResult ); + test_rtl_OString_op_le( hRtlTestResult ); + test_rtl_OString_op_eq( hRtlTestResult ); + test_rtl_OString_op_plus( hRtlTestResult ); + test_rtl_OString_op_peq( hRtlTestResult ); + test_rtl_OString_op_cscs( hRtlTestResult ); + test_rtl_OString_getStr( hRtlTestResult ); + test_rtl_OString_copy( hRtlTestResult ); + test_rtl_OString_concat( hRtlTestResult ); + test_rtl_OString_toAsciiLowerCase( hRtlTestResult ); + test_rtl_OString_toAsciiUpperCase( hRtlTestResult ); + test_rtl_OString_trim( hRtlTestResult ); + test_rtl_OString_valueOf( hRtlTestResult ); + test_rtl_OString_toChar( hRtlTestResult ); + test_rtl_OString_toFloat( hRtlTestResult ); + // LLA: test_rtl_OString_toDouble( hRtlTestResult ); + test_rtl_OString_toBoolean( hRtlTestResult ); + test_rtl_OString_toInt32( hRtlTestResult ); + test_rtl_OString_toInt64( hRtlTestResult ); + test_rtl_OString_replace( hRtlTestResult ); + test_rtl_OString_replaceAt( hRtlTestResult ); + + c_rtl_tres_state_end(hRtlTestResult, "rtl_OString"); +} + + +// ----------------------------------------------------------------------------- +void RegisterAdditionalFunctions(FktRegFuncPtr _pFunc) +{ + if (_pFunc) + { + (_pFunc)(&test_rtl_OString, ""); + + //# (_pFunc)(&test_rtl_OString_ctors, ""); + //# (_pFunc)(&test_rtl_OString_getLength, ""); + //# (_pFunc)(&test_rtl_OString_equals, ""); + //# (_pFunc)(&test_rtl_OString_equalsIgnoreAsciiCase, ""); + //# (_pFunc)(&test_rtl_OString_compareTo, ""); + //# (_pFunc)(&test_rtl_OString_op_cmp, ""); + //# (_pFunc)(&test_rtl_OString_op_neq, ""); + //# (_pFunc)(&test_rtl_OString_op_g, ""); + //# (_pFunc)(&test_rtl_OString_op_l, ""); + //# (_pFunc)(&test_rtl_OString_op_ge, ""); + //# (_pFunc)(&test_rtl_OString_op_le, ""); + //# (_pFunc)(&test_rtl_OString_op_eq, ""); + //# (_pFunc)(&test_rtl_OString_op_plus, ""); + //# (_pFunc)(&test_rtl_OString_op_peq, ""); + //# (_pFunc)(&test_rtl_OString_op_cscs, ""); + //# (_pFunc)(&test_rtl_OString_getStr, ""); + //# (_pFunc)(&test_rtl_OString_copy, ""); + //# (_pFunc)(&test_rtl_OString_concat, ""); + //# (_pFunc)(&test_rtl_OString_toAsciiLowerCase, ""); + //# (_pFunc)(&test_rtl_OString_toAsciiUpperCase, ""); + //# (_pFunc)(&test_rtl_OString_trim, ""); + //# (_pFunc)(&test_rtl_OString_valueOf, ""); + //# (_pFunc)(&test_rtl_OString_toChar, ""); + //# (_pFunc)(&test_rtl_OString_toFloat, ""); + //# (_pFunc)(&test_rtl_OString_toDouble, ""); + //# (_pFunc)(&test_rtl_OString_toBoolean, ""); + //# (_pFunc)(&test_rtl_OString_toInt32, ""); + //# (_pFunc)(&test_rtl_OString_toInt64, ""); + //# (_pFunc)(&test_rtl_OString_replace, ""); + //# (_pFunc)(&test_rtl_OString_replaceAt, ""); + } +} + +/* +D:\local\644\SRX644\sal\qa\rtl_OString.cxx(3559) : error C2664: +'unsigned char (void (__cdecl *)(void *),const char *)' + : cannot convert parameter 1 from +'unsigned char (__cdecl *)(void *)' to 'void (__cdecl *)(void *)' + + This conversion requires a reinterpret_cast, a C-style cast or function- +style cast +*/ |