summaryrefslogtreecommitdiffstats
path: root/sal/qa
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:51:28 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:51:28 +0000
commit940b4d1848e8c70ab7642901a68594e8016caffc (patch)
treeeb72f344ee6c3d9b80a7ecc079ea79e9fba8676d /sal/qa
parentInitial commit. (diff)
downloadlibreoffice-940b4d1848e8c70ab7642901a68594e8016caffc.tar.xz
libreoffice-940b4d1848e8c70ab7642901a68594e8016caffc.zip
Adding upstream version 1:7.0.4.upstream/1%7.0.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sal/qa')
-rw-r--r--sal/qa/ByteSequence/ByteSequence.cxx183
-rw-r--r--sal/qa/OStringBuffer/rtl_OStringBuffer.cxx15574
-rw-r--r--sal/qa/OStringBuffer/rtl_String_Const.h468
-rw-r--r--sal/qa/OStringBuffer/rtl_String_Utils_Const.h45
-rw-r--r--sal/qa/inc/stringhelper.hxx33
-rw-r--r--sal/qa/inc/valueequal.hxx120
-rw-r--r--sal/qa/libs2test.txt101
-rw-r--r--sal/qa/osl/condition/osl_Condition.cxx327
-rw-r--r--sal/qa/osl/condition/osl_Condition_Const.h47
-rw-r--r--sal/qa/osl/file/osl_File.cxx5202
-rw-r--r--sal/qa/osl/file/osl_File_Const.h203
-rw-r--r--sal/qa/osl/file/osl_old_test_file.cxx142
-rw-r--r--sal/qa/osl/file/test_cpy_wrt_file.cxx76
-rw-r--r--sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx243
-rw-r--r--sal/qa/osl/module/osl_Module.cxx376
-rw-r--r--sal/qa/osl/module/osl_Module_Const.h46
-rw-r--r--sal/qa/osl/module/osl_Module_DLL.cxx35
-rw-r--r--sal/qa/osl/mutex/osl_Mutex.cxx896
-rw-r--r--sal/qa/osl/mutex/osl_Mutex_Const.h37
-rw-r--r--sal/qa/osl/pipe/osl_Pipe.cxx896
-rwxr-xr-xsal/qa/osl/process/batch.bat19
-rwxr-xr-xsal/qa/osl/process/batch.sh2
-rw-r--r--sal/qa/osl/process/osl_Thread.cxx1989
-rw-r--r--sal/qa/osl/process/osl_Thread.xsce18
-rw-r--r--sal/qa/osl/process/osl_process.cxx448
-rw-r--r--sal/qa/osl/process/osl_process_child.cxx101
-rw-r--r--sal/qa/osl/profile/osl_old_testprofile.cxx62
-rw-r--r--sal/qa/osl/security/TODO.h8
-rw-r--r--sal/qa/osl/security/osl_Security.cxx627
-rw-r--r--sal/qa/osl/security/osl_Security_Const.h58
-rw-r--r--sal/qa/osl/setthreadname/test-setthreadname.cxx80
-rw-r--r--sal/qa/osl/thread/test_thread.cxx80
-rw-r--r--sal/qa/rtl/alloc/rtl_alloc.cxx211
-rw-r--r--sal/qa/rtl/bootstrap/expand.cxx58
-rw-r--r--sal/qa/rtl/cipher/rtl_cipher.cxx600
-rw-r--r--sal/qa/rtl/crc32/rtl_crc32.cxx154
-rw-r--r--sal/qa/rtl/digest/rtl_digest.cxx516
-rw-r--r--sal/qa/rtl/doublelock/rtl_doublelocking.cxx182
-rw-r--r--sal/qa/rtl/locale/rtl_locale.cxx280
-rw-r--r--sal/qa/rtl/math/test-rtl-math.cxx527
-rw-r--r--sal/qa/rtl/ostring/rtl_OString2.cxx508
-rw-r--r--sal/qa/rtl/ostring/rtl_str.cxx849
-rw-r--r--sal/qa/rtl/ostring/rtl_str.xsce43
-rw-r--r--sal/qa/rtl/ostring/rtl_string.cxx169
-rw-r--r--sal/qa/rtl/ostring/rtl_string.xsce18
-rw-r--r--sal/qa/rtl/oustring/joblist.txt27
-rw-r--r--sal/qa/rtl/oustring/rtl_OUString2.cxx1099
-rw-r--r--sal/qa/rtl/oustring/rtl_ustr.cxx1368
-rw-r--r--sal/qa/rtl/oustring/rtl_ustr.xsce50
-rw-r--r--sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx43
-rw-r--r--sal/qa/rtl/oustringbuffer/test_oustringbuffer_appenduninitialized.cxx66
-rw-r--r--sal/qa/rtl/oustringbuffer/test_oustringbuffer_assign.cxx78
-rw-r--r--sal/qa/rtl/oustringbuffer/test_oustringbuffer_tostring.cxx53
-rw-r--r--sal/qa/rtl/oustringbuffer/test_oustringbuffer_utf32.cxx125
-rw-r--r--sal/qa/rtl/process/child_process.cxx60
-rw-r--r--sal/qa/rtl/process/child_process_id.cxx54
-rw-r--r--sal/qa/rtl/process/rtl_Process.cxx254
-rw-r--r--sal/qa/rtl/process/rtl_Process_Const.h41
-rw-r--r--sal/qa/rtl/random/random.txt22
-rw-r--r--sal/qa/rtl/random/rtl_random.cxx357
-rw-r--r--sal/qa/rtl/ref/rtl_ref.cxx115
-rw-r--r--sal/qa/rtl/strings/test_ostring.cxx123
-rw-r--r--sal/qa/rtl/strings/test_ostring_concat.cxx183
-rw-r--r--sal/qa/rtl/strings/test_ostring_stringliterals.cxx263
-rw-r--r--sal/qa/rtl/strings/test_oustring_compare.cxx97
-rw-r--r--sal/qa/rtl/strings/test_oustring_concat.cxx194
-rw-r--r--sal/qa/rtl/strings/test_oustring_convert.cxx177
-rw-r--r--sal/qa/rtl/strings/test_oustring_endswith.cxx113
-rw-r--r--sal/qa/rtl/strings/test_oustring_startswith.cxx38
-rw-r--r--sal/qa/rtl/strings/test_oustring_stringliterals.cxx431
-rw-r--r--sal/qa/rtl/strings/test_strings_replace.cxx336
-rw-r--r--sal/qa/rtl/strings/test_strings_toint.cxx72
-rw-r--r--sal/qa/rtl/strings/test_strings_valuex.cxx115
-rw-r--r--sal/qa/rtl/textenc/rtl_tencinfo.cxx1667
-rw-r--r--sal/qa/rtl/textenc/rtl_textcvt.cxx3313
-rw-r--r--sal/qa/rtl/uri/rtl_Uri.cxx80
-rw-r--r--sal/qa/rtl/uri/rtl_testuri.cxx514
-rw-r--r--sal/qa/rtl/uuid/rtl_Uuid.cxx157
-rw-r--r--sal/qa/sal/test_types.cxx74
-rw-r--r--sal/qa/systools/test_comtools.cxx239
80 files changed, 44655 insertions, 0 deletions
diff --git a/sal/qa/ByteSequence/ByteSequence.cxx b/sal/qa/ByteSequence/ByteSequence.cxx
new file mode 100644
index 000000000..f5541a0f3
--- /dev/null
+++ b/sal/qa/ByteSequence/ByteSequence.cxx
@@ -0,0 +1,183 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <rtl/byteseq.hxx>
+
+namespace {
+
+class Test: public CppUnit::TestFixture {
+public:
+ void test_default() {
+ rtl::ByteSequence s;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+ }
+
+ void test_size0() {
+ rtl::ByteSequence s(sal_Int32(0));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+ }
+
+ void test_size5() {
+ rtl::ByteSequence s(5);
+ sal_Int8 const * p = s.getConstArray();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength());
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[0]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[1]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[2]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[3]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[4]);
+ }
+
+ void test_noinit0() {
+ rtl::ByteSequence s(0, rtl::BYTESEQ_NODEFAULT);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+ }
+
+ void test_noinit5() {
+ rtl::ByteSequence s(5, rtl::BYTESEQ_NODEFAULT);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength());
+ }
+
+ void test_elem0() {
+ rtl::ByteSequence s(nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+ }
+
+ void test_elem5() {
+ sal_Int8 const a[5] = { 0, 1, 2, 3, 4 };
+ rtl::ByteSequence s(a, 5);
+ sal_Int8 const * p = s.getConstArray();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength());
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[0]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(1), p[1]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(2), p[2]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(3), p[3]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(4), p[4]);
+ }
+
+ void test_copy() {
+ rtl::ByteSequence s1(5);
+ {
+ rtl::ByteSequence s2(s1);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s2.getLength());
+ CPPUNIT_ASSERT_EQUAL(s1.getConstArray(), s2.getConstArray());
+ CPPUNIT_ASSERT_EQUAL(s1.getHandle(), s2.getHandle());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), s1.getHandle()->nRefCount);
+ }
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s1.getHandle()->nRefCount);
+ }
+
+ void test_fromC() {
+ sal_Sequence c = { 1, 1, { 0 } };
+ {
+ rtl::ByteSequence s(&c);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s.getLength());
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast< void const * >(c.elements),
+ static_cast< void const * >(s.getConstArray()));
+ CPPUNIT_ASSERT_EQUAL(&c, s.getHandle());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), c.nRefCount);
+ }
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), c.nRefCount);
+ }
+
+ void test_noacquire() {
+ sal_Sequence c = { 2, 1, { 0 } };
+ {
+ rtl::ByteSequence s(&c, rtl::BYTESEQ_NOACQUIRE);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s.getLength());
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast< void const * >(c.elements),
+ static_cast< void const * >(s.getConstArray()));
+ CPPUNIT_ASSERT_EQUAL(&c, s.getHandle());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), c.nRefCount);
+ }
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), c.nRefCount);
+ }
+
+ void test_getArray() {
+ sal_Int8 const a[5] = { 0, 1, 2, 3, 4 };
+ rtl::ByteSequence s1(a, 5);
+ rtl::ByteSequence s2(s1);
+ sal_Int8 * p = s2.getArray();
+ p[2] = 10;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s1.getHandle()->nRefCount);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s2.getHandle()->nRefCount);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(2), s1.getConstArray()[2]);
+ CPPUNIT_ASSERT_EQUAL(sal_Int8(10), s2.getConstArray()[2]);
+ }
+
+ void test_same0() {
+ rtl::ByteSequence s1;
+ rtl::ByteSequence s2;
+ CPPUNIT_ASSERT_EQUAL(true, s1 == s2);
+ CPPUNIT_ASSERT_EQUAL(true, s2 == s1);
+ CPPUNIT_ASSERT_EQUAL(false, s1 != s2);
+ CPPUNIT_ASSERT_EQUAL(false, s2 != s1);
+ }
+
+ void test_diffLen() {
+ sal_Int8 const a[5] = { 0, 1, 2, 3, 4 };
+ rtl::ByteSequence s1(a, 5);
+ rtl::ByteSequence s2(a, 4);
+ CPPUNIT_ASSERT_EQUAL(false, s1 == s2);
+ CPPUNIT_ASSERT_EQUAL(false, s2 == s1);
+ CPPUNIT_ASSERT_EQUAL(true, s1 != s2);
+ CPPUNIT_ASSERT_EQUAL(true, s2 != s1);
+ }
+
+ void test_diffElem() {
+ sal_Int8 const a1[5] = { 0, 1, 2, 3, 4 };
+ rtl::ByteSequence s1(a1, 5);
+ sal_Int8 const a2[5] = { 0, 1, 10, 3, 4 };
+ rtl::ByteSequence s2(a2, 5);
+ CPPUNIT_ASSERT_EQUAL(false, s1 == s2);
+ CPPUNIT_ASSERT_EQUAL(false, s2 == s1);
+ CPPUNIT_ASSERT_EQUAL(true, s1 != s2);
+ CPPUNIT_ASSERT_EQUAL(true, s2 != s1);
+ }
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(test_default);
+ CPPUNIT_TEST(test_size0);
+ CPPUNIT_TEST(test_size5);
+ CPPUNIT_TEST(test_noinit0);
+ CPPUNIT_TEST(test_noinit5);
+ CPPUNIT_TEST(test_elem0);
+ CPPUNIT_TEST(test_elem5);
+ CPPUNIT_TEST(test_copy);
+ CPPUNIT_TEST(test_fromC);
+ CPPUNIT_TEST(test_noacquire);
+ CPPUNIT_TEST(test_getArray);
+ CPPUNIT_TEST(test_same0);
+ CPPUNIT_TEST(test_diffLen);
+ CPPUNIT_TEST(test_diffElem);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx b/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx
new file mode 100644
index 000000000..c8a7ccce2
--- /dev/null
+++ b/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx
@@ -0,0 +1,15574 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <rtl/string.hxx>
+#include "rtl_String_Const.h"
+#include <rtl/strbuf.hxx>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <string.h>
+
+// This file contains cppunit tests for the
+// OString and OStringBuffer classes
+
+// testing constructors
+namespace rtl_OStringBuffer
+{
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+
+ void ctor_001()
+ {
+ OStringBuffer aStrBuf;
+ const char* pStr = aStrBuf.getStr();
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "New OStringBuffer containing no characters",
+ aStrBuf.isEmpty()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer containing no characters",
+ '\0', *pStr
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer containing no characters",
+ sal_Int32(16), aStrBuf.getCapacity()
+ );
+ }
+
+ void ctor_002()
+ {
+ OString aStrtmp( kTestStr1 );
+ OStringBuffer aStrBuftmp( aStrtmp );
+ OStringBuffer aStrBuf( aStrBuftmp );
+ // sal_Bool res = cmpstr(aStrBuftmp.getStr(),aStrBuf.getStr());
+
+ sal_Int32 nLenStrBuftmp = aStrBuftmp.getLength();
+
+ OString sStr(aStrBuftmp.getStr());
+ bool res = aStrtmp == sStr;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer from another OStringBuffer",
+ nLenStrBuftmp, aStrBuf.getLength()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer from another OStringBuffer",
+ aStrBuftmp.getCapacity(), aStrBuf.getCapacity()
+ );
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "New OStringBuffer from another OStringBuffer",
+ res
+ );
+
+ }
+
+ void ctor_003()
+ {
+ OStringBuffer aStrBuf1(kTestStr2Len);
+ OStringBuffer aStrBuf2(0);
+
+ const char* pStr1 = aStrBuf1.getStr();
+ const char* pStr2 = aStrBuf2.getStr();
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "New OStringBuffer containing no characters and contain assigned capacity",
+ aStrBuf1.isEmpty()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer containing no characters and contain assigned capacity",
+ '\0', *pStr1
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer containing no characters and contain assigned capacity",
+ kTestStr2Len, aStrBuf1.getCapacity()
+ );
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "New OStringBuffer containing no characters and contain assigned capacity",
+ aStrBuf2.isEmpty()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer containing no characters and contain assigned capacity",
+ '\0', *pStr2
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer containing no characters and contain assigned capacity",
+ sal_Int32(0), aStrBuf2.getCapacity()
+ );
+
+ }
+
+ void ctor_004()
+ {
+ OString aStrtmp( kTestStr1 );
+ OStringBuffer aStrBuf( aStrtmp );
+ sal_Int32 leg = aStrBuf.getLength();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer from OString",
+ aStrtmp, OString(aStrBuf.getStr())
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer from OString",
+ aStrtmp.pData->length, leg
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer from OString",
+ leg+16, aStrBuf.getCapacity()
+
+ );
+ }
+
+ void ctor_005() {
+ OStringBuffer b1;
+ auto dummy = b1.makeStringAndClear();
+ (void)dummy;
+ OStringBuffer b2(b1);
+ (void)b2;
+ }
+
+ void ctor_006()
+ {
+ //pass in a const char*, get a temp
+ //OString
+ OStringBuffer aStrBuf(kTestStr1);
+ sal_Int32 leg = aStrBuf.getLength();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer from const char*",
+ rtl_str_getLength(kTestStr1), leg
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "New OStringBuffer from const char*",
+ leg+16, aStrBuf.getCapacity()
+ );
+ }
+
+ CPPUNIT_TEST_SUITE(ctors);
+ CPPUNIT_TEST(ctor_001);
+ CPPUNIT_TEST(ctor_002);
+ CPPUNIT_TEST(ctor_003);
+ CPPUNIT_TEST(ctor_004);
+ CPPUNIT_TEST(ctor_005);
+ CPPUNIT_TEST(ctor_006);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class makeStringAndClear : public CppUnit::TestFixture
+ {
+ OString arrOUS[6];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr1 );
+ arrOUS[1] = OString( kTestStr14 );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( kTestStr27 );
+ arrOUS[4] = OString( kTestStr29 );
+ arrOUS[5] = OString( "\0", 1 );
+
+ }
+
+ void makeStringAndClear_001()
+ {
+ OStringBuffer aStrBuf1;
+ OString aStr1;
+
+ bool lastRes = (aStrBuf1.makeStringAndClear() == aStr1 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "two empty strings(def. constructor)",
+ lastRes
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "two empty strings(def. constructor)",
+ sal_Int32(0), aStrBuf1.getCapacity()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "two empty strings(def. constructor)",
+ '\0', *(aStrBuf1.getStr())
+ );
+
+ }
+
+ void makeStringAndClear_002()
+ {
+ OStringBuffer aStrBuf2(26);
+ OString aStr2;
+
+ bool lastRes = (aStrBuf2.makeStringAndClear() == aStr2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "two empty strings(with an argu)",
+ lastRes && ( aStrBuf2.getCapacity() == 0 ) &&
+ ( *(aStrBuf2.getStr()) == '\0' )
+ );
+
+ }
+
+ void makeStringAndClear_003()
+ {
+ OStringBuffer aStrBuf3(arrOUS[0]);
+ OString aStr3(arrOUS[0]);
+
+ bool lastRes = (aStrBuf3.makeStringAndClear() == aStr3 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "normal string",
+ lastRes && ( aStrBuf3.getCapacity() == 0 ) &&
+ ( *(aStrBuf3.getStr()) == '\0' )
+ );
+
+ }
+
+ void makeStringAndClear_004()
+ {
+ OStringBuffer aStrBuf4(arrOUS[1]);
+ OString aStr4(arrOUS[1]);
+
+ bool lastRes = (aStrBuf4.makeStringAndClear() == aStr4 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "string with space ",
+ lastRes && ( aStrBuf4.getCapacity() == 0 ) &&
+ ( *(aStrBuf4.getStr()) == '\0' )
+ );
+ }
+
+ void makeStringAndClear_005()
+ {
+ OStringBuffer aStrBuf5(arrOUS[2]);
+ OString aStr5(arrOUS[2]);
+
+ bool lastRes = (aStrBuf5.makeStringAndClear() == aStr5 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "empty string",
+ lastRes && ( aStrBuf5.getCapacity() == 0 ) &&
+ ( *(aStrBuf5.getStr()) == '\0' )
+ );
+ }
+
+ void makeStringAndClear_006()
+ {
+ OStringBuffer aStrBuf6(arrOUS[3]);
+ OString aStr6(arrOUS[3]);
+
+ bool lastRes = (aStrBuf6.makeStringAndClear() == aStr6 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "string with a character",
+ lastRes && ( aStrBuf6.getCapacity() == 0 ) &&
+ ( *(aStrBuf6.getStr()) == '\0' )
+ );
+ }
+
+ void makeStringAndClear_007()
+ {
+ OStringBuffer aStrBuf7(arrOUS[4]);
+ OString aStr7(arrOUS[4]);
+
+ bool lastRes = (aStrBuf7.makeStringAndClear() == aStr7 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "string with special characters",
+ lastRes && ( aStrBuf7.getCapacity() == 0 ) &&
+ ( *(aStrBuf7.getStr()) == '\0' )
+ );
+ }
+
+ void makeStringAndClear_008()
+ {
+ OStringBuffer aStrBuf8(arrOUS[5]);
+ OString aStr8(arrOUS[5]);
+
+ bool lastRes = (aStrBuf8.makeStringAndClear() == aStr8 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "string only with (\0)",
+ lastRes && ( aStrBuf8.getCapacity() == 0 ) &&
+ ( *(aStrBuf8.getStr()) == '\0' )
+ );
+ }
+
+ CPPUNIT_TEST_SUITE(makeStringAndClear);
+ CPPUNIT_TEST(makeStringAndClear_001);
+ CPPUNIT_TEST(makeStringAndClear_002);
+ CPPUNIT_TEST(makeStringAndClear_003);
+ CPPUNIT_TEST(makeStringAndClear_004);
+ CPPUNIT_TEST(makeStringAndClear_005);
+ CPPUNIT_TEST(makeStringAndClear_006);
+ CPPUNIT_TEST(makeStringAndClear_007);
+ CPPUNIT_TEST(makeStringAndClear_008);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class remove : public CppUnit::TestFixture
+ {
+ public:
+ void remove_001()
+ {
+ OStringBuffer sb(
+ RTL_CONSTASCII_STRINGPARAM("Red Hat, Inc."));
+
+ sb.remove(0, 4);
+ CPPUNIT_ASSERT(sb.toString().equalsL(
+ RTL_CONSTASCII_STRINGPARAM("Hat, Inc.")));
+
+ sb.remove(3, 6);
+ CPPUNIT_ASSERT(sb.toString().equalsL(
+ RTL_CONSTASCII_STRINGPARAM("Hat")));
+
+ sb.remove(0, 100);
+
+ CPPUNIT_ASSERT(sb.toString().isEmpty());
+
+ sb.append(RTL_CONSTASCII_STRINGPARAM("Red Hat, Inc."));
+
+ sb.remove(3, 100);
+
+ CPPUNIT_ASSERT(sb.toString().equalsL(
+ RTL_CONSTASCII_STRINGPARAM("Red")));
+
+ sb.remove(0, sb.getLength());
+
+ CPPUNIT_ASSERT(sb.toString().isEmpty());
+ }
+
+ CPPUNIT_TEST_SUITE(remove);
+ CPPUNIT_TEST(remove_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class getLength : public CppUnit::TestFixture
+ {
+ OString arrOUS[6];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr1 );
+ arrOUS[1] = OString( "1" );
+ arrOUS[2] = OString( );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( "\0", 1 );
+ arrOUS[5] = OString( kTestStr2 );
+
+ }
+
+ void getLength_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ sal_Int32 expVal = kTestStr1Len;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length of ascii string",
+ expVal, aStrBuf.getLength()
+ );
+
+ }
+
+ void getLength_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ sal_Int32 expVal = 1;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length of ascii string of size 1",
+ expVal, aStrBuf.getLength()
+ );
+ }
+
+ void getLength_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ sal_Int32 expVal = 0;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length of empty string",
+ expVal, aStrBuf.getLength()
+ );
+ }
+
+ void getLength_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ sal_Int32 expVal = 0;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length of empty string (empty ascii string arg)",
+ expVal, aStrBuf.getLength()
+ );
+ }
+
+ void getLength_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ sal_Int32 expVal = 1;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length of string with \\0 embedded",
+ expVal, aStrBuf.getLength()
+ );
+ }
+
+ void getLength_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[5] );
+ sal_Int32 expVal = kTestStr2Len;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length(>16) of ascii string",
+ expVal, aStrBuf.getLength()
+ );
+ }
+
+ void getLength_007()
+ {
+ OStringBuffer aStrBuf;
+ sal_Int32 expVal = 0;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length of empty string (default constructor)",
+ expVal, aStrBuf.getLength()
+ );
+ }
+
+ void getLength_008()
+ {
+ OStringBuffer aStrBuf( 26 );
+ sal_Int32 expVal = 0;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "length of empty string (with capacity)",
+ expVal, aStrBuf.getLength()
+ );
+ }
+
+ CPPUNIT_TEST_SUITE( getLength );
+ CPPUNIT_TEST( getLength_001 );
+ CPPUNIT_TEST( getLength_002 );
+ CPPUNIT_TEST( getLength_003 );
+ CPPUNIT_TEST( getLength_004 );
+ CPPUNIT_TEST( getLength_005 );
+ CPPUNIT_TEST( getLength_006 );
+ CPPUNIT_TEST( getLength_007 );
+ CPPUNIT_TEST( getLength_008 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class getCapacity : public CppUnit::TestFixture
+ {
+ OString arrOUS[6];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr1 );
+ arrOUS[1] = OString( "1" );
+ arrOUS[2] = OString( );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( "\0", 1 );
+ arrOUS[5] = OString( kTestStr2 );
+
+ }
+
+ void getCapacity_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ sal_Int32 expVal = kTestStr1Len+16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of ascii string",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void getCapacity_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ sal_Int32 expVal = 1+16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of ascii string of size 1",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ sal_Int32 expVal = 0+16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of empty string",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ sal_Int32 expVal = 0+16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of empty string (empty ascii string arg)",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ sal_Int32 expVal = 1+16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of string with \\0 embedded",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[5] );
+ sal_Int32 expVal = kTestStr2Len+16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity(>16) of ascii string",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_007()
+ {
+ OStringBuffer aStrBuf;
+ sal_Int32 expVal = 16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of empty string (default constructor)",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_010()
+ {
+ OStringBuffer aStrBuf( 16 );
+ sal_Int32 expVal = 16;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of empty string (with capacity 16)",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_011()
+ {
+ OStringBuffer aStrBuf( 6 );
+ sal_Int32 expVal = 6;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of empty string (with capacity 6)",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ void getCapacity_012()
+ {
+ OStringBuffer aStrBuf( 0 );
+ sal_Int32 expVal = 0;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity of empty string (with capacity 0)",
+ expVal, aStrBuf.getCapacity()
+ );
+ }
+
+ CPPUNIT_TEST_SUITE( getCapacity );
+ CPPUNIT_TEST( getCapacity_001 );
+ CPPUNIT_TEST( getCapacity_002 );
+ CPPUNIT_TEST( getCapacity_003 );
+ CPPUNIT_TEST( getCapacity_004 );
+ CPPUNIT_TEST( getCapacity_005 );
+ CPPUNIT_TEST( getCapacity_006 );
+ CPPUNIT_TEST( getCapacity_007 );
+ CPPUNIT_TEST( getCapacity_010 );
+ CPPUNIT_TEST( getCapacity_011 );
+ CPPUNIT_TEST( getCapacity_012 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class ensureCapacity : public CppUnit::TestFixture
+ {
+ void ensureCapacity_001()
+ {
+ sal_Int32 expVal = 16;
+ OStringBuffer aStrBuf;
+ sal_Int32 input = 5;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 16, minimum is 5",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_002()
+ {
+ sal_Int32 expVal = 16;
+ OStringBuffer aStrBuf;
+ sal_Int32 input = -5;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 16, minimum is -5",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_003()
+ {
+ sal_Int32 expVal = 16;
+ OStringBuffer aStrBuf;
+ sal_Int32 input = 0;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 16, minimum is 0",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_004() //the testcase is based on comments
+ {
+ sal_Int32 expVal = 20;
+ OStringBuffer aStrBuf;
+ sal_Int32 input = 20;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 16, minimum is 20",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_005()
+ {
+ sal_Int32 expVal = 50;
+ OStringBuffer aStrBuf;
+ sal_Int32 input = 50;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 16, minimum is 50",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_006()
+ {
+ sal_Int32 expVal = 20;
+ OStringBuffer aStrBuf( 6 );
+ sal_Int32 input = 20;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 6, minimum is 20",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_007()
+ {
+ sal_Int32 expVal = 6;
+ OStringBuffer aStrBuf( 6 );
+ sal_Int32 input = 2;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 6, minimum is 2",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_008()
+ {
+ sal_Int32 expVal = 6;
+ OStringBuffer aStrBuf( 6 );
+ sal_Int32 input = -6;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 6, minimum is -6",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_009() //the testcase is based on comments
+ {
+ sal_Int32 expVal = 10;
+ OStringBuffer aStrBuf( 6 );
+ sal_Int32 input = 10;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 6, minimum is -6",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_010()
+ {
+ sal_Int32 expVal = 6;
+ OStringBuffer aStrBuf( 0 );
+ sal_Int32 input = 6;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 0, minimum is 6",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_011() //the testcase is based on comments
+ {
+ sal_Int32 expVal = 2; // capacity is x = (str->length + 1) * 2; minimum < x ? x : minimum
+ OStringBuffer aStrBuf( 0 );
+ sal_Int32 input = 1;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 0, minimum is 1",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ void ensureCapacity_012()
+ {
+ sal_Int32 expVal = 0;
+ OStringBuffer aStrBuf( 0 );
+ sal_Int32 input = -1;
+
+ aStrBuf.ensureCapacity( input );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "capacity equal to 0, minimum is -1",
+ expVal, aStrBuf.getCapacity()
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( ensureCapacity );
+ CPPUNIT_TEST( ensureCapacity_001 );
+ CPPUNIT_TEST( ensureCapacity_002 );
+ CPPUNIT_TEST( ensureCapacity_003 );
+ CPPUNIT_TEST( ensureCapacity_004 );
+ CPPUNIT_TEST( ensureCapacity_005 );
+ CPPUNIT_TEST( ensureCapacity_006 );
+ CPPUNIT_TEST( ensureCapacity_007 );
+ CPPUNIT_TEST( ensureCapacity_008 );
+ CPPUNIT_TEST( ensureCapacity_009 );
+ CPPUNIT_TEST( ensureCapacity_010 );
+ CPPUNIT_TEST( ensureCapacity_011 );
+ CPPUNIT_TEST( ensureCapacity_012 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class setLength : public CppUnit::TestFixture
+ {
+ OString arrOUS[6];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr1 );
+ arrOUS[1] = OString( "1" );
+ arrOUS[2] = OString( );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( "\0", 1 );
+ arrOUS[5] = OString( kTestStr2 );
+
+ }
+
+ void setLength_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ sal_Int32 expVal1 = 50;
+ OString expVal2( kTestStr1 );
+ sal_Int32 expVal3 = 50;
+ sal_Int32 input = 50;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer(kTestStr1)",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ sal_Int32 expVal1 = kTestStr13Len;
+ OString expVal2( kTestStr1 );
+ sal_Int32 expVal3 = 32;
+ sal_Int32 input = kTestStr13Len;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(kTestStr1)",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ sal_Int32 expVal1 = kTestStr1Len;
+ OString expVal2( kTestStr1 );
+ sal_Int32 expVal3 = 32;
+ sal_Int32 input = kTestStr1Len;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength equal to the length of OStringBuffer(kTestStr1)",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ sal_Int32 expVal1 = kTestStr7Len;
+ OString expVal2( kTestStr7 );
+ sal_Int32 expVal3 = 32;
+ sal_Int32 input = kTestStr7Len;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength less than the length of OStringBuffer(kTestStr1)",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ sal_Int32 expVal1 = 0;
+ OString expVal2;
+ sal_Int32 expVal3 = 32;
+ sal_Int32 input = 0;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength equal to 0",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ sal_Int32 expVal1 = 25;
+ OString expVal2( arrOUS[1] );
+ sal_Int32 expVal3 = 25;
+ sal_Int32 input = 25;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer(1)",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ sal_Int32 expVal1 = kTestStr27Len;
+ OString expVal2( arrOUS[1] );
+ sal_Int32 expVal3 = 17;
+ sal_Int32 input = kTestStr27Len;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength equal to the length of OStringBuffer(1)",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ sal_Int32 expVal1 = 0;
+ OString expVal2;
+ sal_Int32 expVal3 = 17;
+ sal_Int32 input = 0;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength less than the length of OUStringBuffer(1)",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ sal_Int32 expVal1 = 20;
+ OString expVal2;
+ sal_Int32 expVal3 = 20;
+ sal_Int32 input = 20;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer()",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ sal_Int32 expVal1 = 3;
+ OString expVal2;
+ sal_Int32 expVal3 = 16;
+ sal_Int32 input = 3;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer()",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ sal_Int32 expVal1 = 0;
+ OString expVal2;
+ sal_Int32 expVal3 = 16;
+ sal_Int32 input = 0;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer()",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ sal_Int32 expVal1 = 20;
+ OString expVal2;
+ sal_Int32 expVal3 = 20;
+ sal_Int32 input = 20;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer("")",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ sal_Int32 expVal1 = 5;
+ OString expVal2;
+ sal_Int32 expVal3 = 16;
+ sal_Int32 input = 5;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer("")",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ sal_Int32 expVal1 = 0;
+ OString expVal2;
+ sal_Int32 expVal3 = 16;
+ sal_Int32 input = 0;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength less than the length of OStringBuffer("")",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ sal_Int32 expVal1 = 20;
+ OString expVal2;
+ sal_Int32 expVal3 = 20;
+ sal_Int32 input = 20;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(\0)",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ sal_Int32 expVal1 = 5;
+ OString expVal2;
+ sal_Int32 expVal3 = 17;
+ sal_Int32 input = 5;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(\0)",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ sal_Int32 expVal1 = 0;
+ OString expVal2;
+ sal_Int32 expVal3 = 17;
+ sal_Int32 input = 0;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength less than the length of OStringBuffer(\0)",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[5] );
+ sal_Int32 expVal1 = 50;
+ OString expVal2( kTestStr2 );
+ sal_Int32 expVal3 = 66;
+ sal_Int32 input = 50;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength more than the capacity of OStringBuffer(kTestStr2)",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[5] );
+ sal_Int32 expVal1 = 40;
+ OString expVal2(kTestStr2);
+ sal_Int32 expVal3 = 48;
+ sal_Int32 input = 40;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength more than the length of OStringBuffer(kTestStr2)",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[5] );
+ sal_Int32 expVal1 = kTestStr2Len;
+ OString expVal2(kTestStr2);
+ sal_Int32 expVal3 = 48;
+ sal_Int32 input = kTestStr2Len;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength equal to the length of OUStringBuffer(kTestStr2)",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[5] );
+ sal_Int32 expVal1 = kTestStr7Len;
+ OString expVal2(kTestStr7);
+ sal_Int32 expVal3 = 48;
+ sal_Int32 input = kTestStr7Len;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength less than the length of OUStringBuffer(TestStr2)",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ void setLength_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[5] );
+ sal_Int32 expVal1 = 0;
+ OString expVal2;
+ sal_Int32 expVal3 = 48;
+ sal_Int32 input = 0;
+
+ aStrBuf.setLength( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "newLength equal to 0",
+ aStrBuf.getStr() == expVal2 &&
+ aStrBuf.getLength() == expVal1 &&
+ aStrBuf.getCapacity() == expVal3
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( setLength );
+ CPPUNIT_TEST( setLength_001 );
+ CPPUNIT_TEST( setLength_002 );
+ CPPUNIT_TEST( setLength_003 );
+ CPPUNIT_TEST( setLength_004 );
+ CPPUNIT_TEST( setLength_005 );
+ CPPUNIT_TEST( setLength_006 );
+ CPPUNIT_TEST( setLength_007 );
+ CPPUNIT_TEST( setLength_008 );
+ CPPUNIT_TEST( setLength_009 );
+ CPPUNIT_TEST( setLength_010 );
+ CPPUNIT_TEST( setLength_011 );
+ CPPUNIT_TEST( setLength_012 );
+ CPPUNIT_TEST( setLength_013 );
+ CPPUNIT_TEST( setLength_014 );
+ CPPUNIT_TEST( setLength_015 );
+ CPPUNIT_TEST( setLength_016 );
+ CPPUNIT_TEST( setLength_017 );
+ CPPUNIT_TEST( setLength_018 );
+ CPPUNIT_TEST( setLength_019 );
+ CPPUNIT_TEST( setLength_020 );
+ CPPUNIT_TEST( setLength_021 );
+ CPPUNIT_TEST( setLength_022 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class csuc : public CppUnit::TestFixture
+ {
+ void csuc_001()
+ {
+ const char* expVal = kTestStr1;
+ OStringBuffer aStrBuf( kTestStr1 );
+ sal_Int32 cmpLen = kTestStr1Len;
+
+ // LLA: wrong access! const char* pstr = *&aStrBuf;
+ const char* pstr = aStrBuf.getStr();
+ int nEqual = strncmp(pstr, expVal, cmpLen);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test normal string",
+ /* cmpstr( pstr, expVal, cmpLen ) */
+ 0, nEqual
+ );
+
+ }
+
+ void csuc_002()
+ {
+ OStringBuffer aStrBuf;
+
+ // LLA: wrong access! const char* pstr = *&aStrBuf;
+ const char* pstr = aStrBuf.getStr();
+ sal_Int32 nLen = strlen(pstr);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test empty string",
+ // cmpstr( pstr, &expVal, cmpLen )
+ static_cast<sal_Int32>(0), nLen
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( csuc );
+ CPPUNIT_TEST( csuc_001 );
+ CPPUNIT_TEST( csuc_002 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class getStr : public CppUnit::TestFixture
+ {
+ void getStr_001()
+ {
+ const char* expVal = kTestStr1;
+ OStringBuffer aStrBuf( kTestStr1 );
+ sal_Int32 cmpLen = kTestStr1Len;
+
+ const char* pstr = aStrBuf.getStr();
+ int nEqual = strncmp(pstr, expVal, cmpLen);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test normal string",
+ 0, nEqual
+ );
+
+ }
+
+ void getStr_002()
+ {
+ OStringBuffer aStrBuf;
+ const char* pstr = aStrBuf.getStr();
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "test empty string",
+ pstr != nullptr &&
+ pstr[0] == '\0'
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( getStr );
+ CPPUNIT_TEST( getStr_001 );
+ CPPUNIT_TEST( getStr_002 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class append_001 : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+
+ }
+
+ void append_001_001()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString input2( kTestStr8 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[0]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_001_002()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString input2( kTestStr36 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_003()
+ {
+ OString expVal( kTestStr37 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString input2( kTestStr23 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_004()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString input2;
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_005()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString input2( kTestStr7 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_006()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString input2( kTestStr2 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_007()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString input2( kTestStr1 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_008()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString input2;
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_009()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString input2( kTestStr7 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_010()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString input2( kTestStr2 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_011()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString input2( kTestStr1 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_012()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString input2;
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_013()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString input2( kTestStr7 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_014()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString input2( kTestStr2 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_015()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString input2( kTestStr1 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_016()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString input2;
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_017()
+ {
+ OString expVal( kTestStr29 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString input2( kTestStr38 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_018()
+ {
+ OString expVal( kTestStr39 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString input2( kTestStr17 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_019()
+ {
+ OString expVal( kTestStr40 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString input2( kTestStr31 );
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_001_020()
+ {
+ OString expVal( kTestStr28 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString input2;
+
+ aStrBuf.append( input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_null()
+ {
+ OStringBuffer aStrBuf("hello world");
+
+ aStrBuf.append('\0');
+ aStrBuf.append('\1');
+ aStrBuf.append('\2');
+
+ aStrBuf.append("hello world");
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "should be able to append nulls",
+ aStrBuf.getLength() ==
+ 2 * RTL_CONSTASCII_LENGTH("hello world") + 3 &&
+ aStrBuf[RTL_CONSTASCII_LENGTH("hello world")] == 0 &&
+ aStrBuf[RTL_CONSTASCII_LENGTH("hello world")]+1 == 1 &&
+ aStrBuf[RTL_CONSTASCII_LENGTH("hello world")]+2 == 2
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_001 );
+ CPPUNIT_TEST( append_001_001 );
+ CPPUNIT_TEST( append_001_002 );
+ CPPUNIT_TEST( append_001_003 );
+ CPPUNIT_TEST( append_001_004 );
+ CPPUNIT_TEST( append_001_005 );
+ CPPUNIT_TEST( append_001_006 );
+ CPPUNIT_TEST( append_001_007 );
+ CPPUNIT_TEST( append_001_008 );
+ CPPUNIT_TEST( append_001_009 );
+ CPPUNIT_TEST( append_001_010 );
+ CPPUNIT_TEST( append_001_011 );
+ CPPUNIT_TEST( append_001_012 );
+ CPPUNIT_TEST( append_001_013 );
+ CPPUNIT_TEST( append_001_014 );
+ CPPUNIT_TEST( append_001_015 );
+ CPPUNIT_TEST( append_001_016 );
+ CPPUNIT_TEST( append_001_017 );
+ CPPUNIT_TEST( append_001_018 );
+ CPPUNIT_TEST( append_001_019 );
+ CPPUNIT_TEST( append_001_020 );
+ CPPUNIT_TEST( append_null );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class append_002 : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+
+ }
+
+ void append_002_001()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input = kTestStr8;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[0]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_002()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input = kTestStr36;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[0]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_003()
+ {
+ OString expVal( kTestStr37 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input = kTestStr23;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[0]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_004()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input = kTestStr25;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[0]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_005()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input = kTestStr7;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[1]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_006()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input = kTestStr2;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[1]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_007()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input = kTestStr1;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[1]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_008()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input = kTestStr25;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[1]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_009()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input = kTestStr7;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[2]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_010()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input = kTestStr2;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[2]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_011()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input = kTestStr1;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[2]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_012()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input = kTestStr25;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[2]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_013()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input = kTestStr7;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[3]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_014()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input = kTestStr2;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[3]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_015()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input = kTestStr1;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[3]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_016()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input = kTestStr25;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[3]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_017()
+ {
+ OString expVal( kTestStr29 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input = kTestStr38;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[4]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_018()
+ {
+ OString expVal( kTestStr39 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input = kTestStr17;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[4]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_019()
+ {
+ OString expVal( kTestStr40 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input = kTestStr31;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[4]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002_020()
+ {
+ OString expVal( kTestStr28 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input = kTestStr25;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[4]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+#ifdef WITH_CORE
+ void append_002_021()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( kSInt32Max );
+ const char* input = kTestStr25;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer(with INT_MAX)",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE( append_002 );
+ CPPUNIT_TEST( append_002_001 );
+ CPPUNIT_TEST( append_002_002 );
+ CPPUNIT_TEST( append_002_003 );
+ CPPUNIT_TEST( append_002_004 );
+ CPPUNIT_TEST( append_002_005 );
+ CPPUNIT_TEST( append_002_006 );
+ CPPUNIT_TEST( append_002_007 );
+ CPPUNIT_TEST( append_002_008 );
+ CPPUNIT_TEST( append_002_009 );
+ CPPUNIT_TEST( append_002_010 );
+ CPPUNIT_TEST( append_002_011 );
+ CPPUNIT_TEST( append_002_012 );
+ CPPUNIT_TEST( append_002_013 );
+ CPPUNIT_TEST( append_002_014 );
+ CPPUNIT_TEST( append_002_015 );
+ CPPUNIT_TEST( append_002_016 );
+ CPPUNIT_TEST( append_002_017 );
+ CPPUNIT_TEST( append_002_018 );
+ CPPUNIT_TEST( append_002_019 );
+ CPPUNIT_TEST( append_002_020 );
+#ifdef WITH_CORE
+ CPPUNIT_TEST( append_002_021 );
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class append_003 : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+
+ }
+
+ void append_003_001()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input1 = kTestStr36;
+ sal_Int32 input2 = 12;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[0]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_002()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input1 = kTestStr36;
+ sal_Int32 input2 = 28;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[0]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_003()
+ {
+ OString expVal( kTestStr37 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input1 = kTestStr23;
+ sal_Int32 input2 = 16;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[0]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_004()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 0;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[0]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_006()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 4;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[1]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_007()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 32;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[1]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_008()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 16;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[1]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_009()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[1] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 0;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[1]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_011()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 4;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[2]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_012()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 32;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[2]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_013()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 16;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[2]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_014()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[2] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 0;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[2]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_016()
+ {
+ OString expVal( kTestStr7 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 4;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[3]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_017()
+ {
+ OString expVal( kTestStr2 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 32;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[3]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_018()
+ {
+ OString expVal( kTestStr1 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 16;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[3]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_019()
+ {
+ OString expVal;
+ OStringBuffer aStrBuf( arrOUS[3] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 0;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[3]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_021()
+ {
+ OString expVal( kTestStr29 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input1 = kTestStr38;
+ sal_Int32 input2 = 7;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length less than 16) to the string buffer arrOUS[4]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_022()
+ {
+ OString expVal( kTestStr39 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input1 = kTestStr17;
+ sal_Int32 input2 = 22;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length more than 16) to the string buffer arrOUS[4]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_023()
+ {
+ OString expVal( kTestStr40 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input1 = kTestStr31;
+ sal_Int32 input2 = 16;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 16) to the string buffer arrOUS[4]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003_024()
+ {
+ OString expVal( kTestStr28 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ const char* input1 = kTestStr2;
+ sal_Int32 input2 = 0;
+
+ aStrBuf.append( input1, input2 );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the string(length equal to 0) to the string buffer arrOUS[4]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_003 );
+ CPPUNIT_TEST( append_003_001 );
+ CPPUNIT_TEST( append_003_002 );
+ CPPUNIT_TEST( append_003_003 );
+ CPPUNIT_TEST( append_003_004 );
+ CPPUNIT_TEST( append_003_006 );
+ CPPUNIT_TEST( append_003_007 );
+ CPPUNIT_TEST( append_003_008 );
+ CPPUNIT_TEST( append_003_009 );
+ CPPUNIT_TEST( append_003_011 );
+ CPPUNIT_TEST( append_003_012 );
+ CPPUNIT_TEST( append_003_013 );
+ CPPUNIT_TEST( append_003_014 );
+ CPPUNIT_TEST( append_003_016 );
+ CPPUNIT_TEST( append_003_017 );
+ CPPUNIT_TEST( append_003_018 );
+ CPPUNIT_TEST( append_003_019 );
+ CPPUNIT_TEST( append_003_021 );
+ CPPUNIT_TEST( append_003_022 );
+ CPPUNIT_TEST( append_003_023 );
+ CPPUNIT_TEST( append_003_024 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class append_004 : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+
+ }
+
+ void append_004_001()
+ {
+ OString expVal( kTestStr45 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ bool input = true;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer arrOUS[0]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_004_002()
+ {
+ OString expVal( kTestStr46 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ bool input = false;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer arrOUS[0]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_004_003()
+ {
+ OString expVal( kTestStr47 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ bool input = true;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer arrOUS[1]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_004_004()
+ {
+ OString expVal( kTestStr48 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ bool input = false;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer arrOUS[1]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_004_005()
+ {
+ OString expVal( kTestStr47 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ bool input = true;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer arrOUS[2]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_004_006()
+ {
+ OString expVal( kTestStr48 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ bool input = false;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer arrOUS[2]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_004_007()
+ {
+ OString expVal( kTestStr47 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ bool input = true;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer arrOUS[3]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_004_008()
+ {
+ OString expVal( kTestStr48 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ bool input = false;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer arrOUS[3]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_004_009()
+ {
+ OString expVal( kTestStr49 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ bool input = true;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer arrOUS[4]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_004_010()
+ {
+ OString expVal( kTestStr50 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ bool input = false;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer arrOUS[4]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+#ifdef WITH_CORE
+ void append_004_011()
+ {
+ OString expVal( kTestStr47 );
+ OStringBuffer aStrBuf( kSInt32Max );
+ sal_Bool input = sal_True;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the sal_Bool(sal_True) to the string buffer(with INT_MAX)",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_004_012()
+ {
+ OString expVal( kTestStr48 );
+ OStringBuffer aStrBuf( kSInt32Max );
+ sal_Bool input = sal_False;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the sal_Bool(sal_False) to the string buffer(with INT_MAX)",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE( append_004 );
+ CPPUNIT_TEST( append_004_001 );
+ CPPUNIT_TEST( append_004_002 );
+ CPPUNIT_TEST( append_004_003 );
+ CPPUNIT_TEST( append_004_004 );
+ CPPUNIT_TEST( append_004_005 );
+ CPPUNIT_TEST( append_004_006 );
+ CPPUNIT_TEST( append_004_007 );
+ CPPUNIT_TEST( append_004_008 );
+ CPPUNIT_TEST( append_004_009 );
+ CPPUNIT_TEST( append_004_010 );
+#ifdef WITH_CORE
+ CPPUNIT_TEST( append_004_011 );
+ CPPUNIT_TEST( append_004_012 );
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append(char c)
+
+ class append_005 : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+
+ }
+
+ void append_001()
+ {
+ OString expVal( kTestStr51 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ char input = 'M';
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the char(M) to the string buffer arrOUS[0]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_002()
+ {
+ OString expVal( kTestStr143 );
+ OStringBuffer aStrBuf( arrOUS[0] );
+ char input = static_cast<char>(SAL_MAX_UINT8);
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the sal_Unicode(kSInt8Max) to the string buffer arrOUS[0]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_003()
+ {
+ OString expVal( kTestStr27 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ char input = 's';
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the char(s) to the string buffer arrOUS[1]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_004()
+ {
+ OString expVal( kTestStr144 );
+ OStringBuffer aStrBuf( arrOUS[1] );
+ char input = static_cast<char>(SAL_MAX_UINT8);
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the char(kSInt8Max) to the string buffer arrOUS[1]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_005_005()
+ {
+ OString expVal( kTestStr27 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ char input = 's';
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the char(s) to the string buffer arrOUS[2]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_006()
+ {
+ OString expVal( kTestStr144 );
+ OStringBuffer aStrBuf( arrOUS[2] );
+ char input = static_cast<char>(SAL_MAX_UINT8);
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the char(kSInt8Max) to the string buffer arrOUS[2]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_007()
+ {
+ OString expVal( kTestStr27 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ char input = 's';
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the char(s) to the string buffer arrOUS[3]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_008()
+ {
+ OString expVal( kTestStr144 );
+ OStringBuffer aStrBuf( arrOUS[3] );
+ char input = static_cast<char>(SAL_MAX_UINT8);
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the char(kSInt8Max) to the string buffer arrOUS[3]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_009()
+ {
+ OString expVal( kTestStr56 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ char input = 's';
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the char(s) to the string buffer arrOUS[4]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_010()
+ {
+ OString expVal( kTestStr145 );
+ OStringBuffer aStrBuf( arrOUS[4] );
+ char input = static_cast<char>(SAL_MAX_UINT8);
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the char(kSInt8Max) to the string buffer arrOUS[4]",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+#ifdef WITH_CORE
+ void append_011()
+ {
+ OString expVal( kTestStr27 );
+ OStringBuffer aStrBuf( kSInt32Max );
+ char input = 's';
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the char(s) to the string buffer(with INT_MAX)",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+
+ void append_012()
+ {
+ OString expVal( kTestStr144 );
+ OStringBuffer aStrBuf( kSInt32Max );
+ char input = static_cast<char>(SAL_MAX_UINT8);
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "Appends the char(kSInt8Max) to the string buffer with INT_MAX)",
+ ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() )
+ );
+
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE( append_005 );
+ CPPUNIT_TEST( append_001 );
+ CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 );
+ CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005_005 );
+ CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 );
+ CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 );
+ CPPUNIT_TEST( append_010 );
+#ifdef WITH_CORE
+ CPPUNIT_TEST( append_011 );
+ CPPUNIT_TEST( append_012 );
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class append_006_Int32 : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_026()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_031()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_032()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_033()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_034()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_036()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_043()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_044()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_045()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_046()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_047()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_048()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_049()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_050()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_051()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_052()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_053()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_054()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_055()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_056()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_057()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_058()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_059()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_060()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_061()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_062()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_063()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_064()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_065()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_066()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_067()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_068()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_069()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_070()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_071()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_072()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_073()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_074()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_075()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_076()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_077()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_078()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_079()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_080()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_081()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_082()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_083()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_084()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_085()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_086()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_087()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_088()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_089()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_090()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_091()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_092()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_093()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_094()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_095()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_096()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_097()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_098()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_099()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_100()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_006_Int32 );
+ CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 );
+ CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 );
+ CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 );
+ CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 );
+ CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 );
+ CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 );
+ CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 );
+ CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 );
+ CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 );
+ CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 );
+ CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 );
+ CPPUNIT_TEST( append_051 ); CPPUNIT_TEST( append_052 );
+ CPPUNIT_TEST( append_053 ); CPPUNIT_TEST( append_054 );
+ CPPUNIT_TEST( append_055 ); CPPUNIT_TEST( append_056 );
+ CPPUNIT_TEST( append_057 ); CPPUNIT_TEST( append_058 );
+ CPPUNIT_TEST( append_059 ); CPPUNIT_TEST( append_060 );
+ CPPUNIT_TEST( append_061 ); CPPUNIT_TEST( append_062 );
+ CPPUNIT_TEST( append_063 ); CPPUNIT_TEST( append_064 );
+ CPPUNIT_TEST( append_065 ); CPPUNIT_TEST( append_066 );
+ CPPUNIT_TEST( append_067 ); CPPUNIT_TEST( append_068 );
+ CPPUNIT_TEST( append_069 ); CPPUNIT_TEST( append_070 );
+ CPPUNIT_TEST( append_071 ); CPPUNIT_TEST( append_072 );
+ CPPUNIT_TEST( append_073 ); CPPUNIT_TEST( append_074 );
+ CPPUNIT_TEST( append_075 ); CPPUNIT_TEST( append_076 );
+ CPPUNIT_TEST( append_077 ); CPPUNIT_TEST( append_078 );
+ CPPUNIT_TEST( append_079 ); CPPUNIT_TEST( append_080 );
+ CPPUNIT_TEST( append_081 ); CPPUNIT_TEST( append_082 );
+ CPPUNIT_TEST( append_083 ); CPPUNIT_TEST( append_084 );
+ CPPUNIT_TEST( append_085 ); CPPUNIT_TEST( append_086 );
+ CPPUNIT_TEST( append_087 ); CPPUNIT_TEST( append_088 );
+ CPPUNIT_TEST( append_089 ); CPPUNIT_TEST( append_090 );
+ CPPUNIT_TEST( append_091 ); CPPUNIT_TEST( append_092 );
+ CPPUNIT_TEST( append_093 ); CPPUNIT_TEST( append_094 );
+ CPPUNIT_TEST( append_095 ); CPPUNIT_TEST( append_096 );
+ CPPUNIT_TEST( append_097 ); CPPUNIT_TEST( append_098 );
+ CPPUNIT_TEST( append_099 ); CPPUNIT_TEST( append_100 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( sal_Int32 i, sal_Int16 radix=2 )
+// where i = large constants
+// testing the method append( sal_Int32 i, sal_Int16 radix=8 )
+// where i = large constants
+// testing the method append( sal_Int32 i, sal_Int16 radix=10 )
+// where i = large constants
+// testing the method append( sal_Int32 i, sal_Int16 radix=16 )
+// where i = large constants
+// testing the method append( sal_Int32 i, sal_Int16 radix=36 )
+// where i = large constants
+
+ class append_006_Int32_Bounderies : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "2147483647" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "zik0zj" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "2147483647" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "zik0zj" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_026()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "2147483647" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "zik0zj" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_031()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_032()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_033()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_034()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_036()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "2147483647" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "zik0zj" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_043()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_044()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_045()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_046()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "2147483647" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_047()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_048()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_049()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_050()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = kSInt32Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "zik0zj" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_006_Int32_Bounderies );
+ CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 );
+ CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 );
+ CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 );
+ CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 );
+ CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 );
+ CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 );
+ CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 );
+ CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 );
+ CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 );
+ CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 );
+ CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( sal_Int32 i, sal_Int16 radix=2 )
+// for negative value
+// testing the method append( sal_Int32 i, sal_Int16 radix=8 )
+// for negative value
+// testing the method append( sal_Int32 i, sal_Int16 radix=10 )
+// for negative value
+// testing the method append( sal_Int32 i, sal_Int16 radix=16 )
+// for negative value
+// testing the method append( sal_Int32 i, sal_Int16 radix=36 )
+// for negative value
+
+ class append_006_Int32_Negative : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_026()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_031()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_032()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_033()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_034()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_036()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_043()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_044()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_045()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_046()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_047()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_048()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_049()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_050()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_051()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_052()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_053()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_054()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_055()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_056()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_057()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_058()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_059()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_060()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_061()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_062()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_063()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_064()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_065()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_066()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_067()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_068()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_069()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_070()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_071()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_072()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_073()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_074()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_075()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_076()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_077()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_078()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_079()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_080()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_081()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_082()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_083()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_084()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_085()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_086()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_087()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_088()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_089()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_090()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_091()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_092()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_093()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_094()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_095()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_096()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_097()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_098()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+ }
+
+ void append_099()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+ }
+
+ void append_100()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int32 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+ }
+
+ CPPUNIT_TEST_SUITE( append_006_Int32_Negative );
+ CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 );
+ CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 );
+ CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 );
+ CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 );
+ CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 );
+ CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 );
+ CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 );
+ CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 );
+ CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 );
+ CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 );
+ CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 );
+ CPPUNIT_TEST( append_051 ); CPPUNIT_TEST( append_052 );
+ CPPUNIT_TEST( append_053 ); CPPUNIT_TEST( append_054 );
+ CPPUNIT_TEST( append_055 ); CPPUNIT_TEST( append_056 );
+ CPPUNIT_TEST( append_057 ); CPPUNIT_TEST( append_058 );
+ CPPUNIT_TEST( append_059 ); CPPUNIT_TEST( append_060 );
+ CPPUNIT_TEST( append_061 ); CPPUNIT_TEST( append_062 );
+ CPPUNIT_TEST( append_063 ); CPPUNIT_TEST( append_064 );
+ CPPUNIT_TEST( append_065 ); CPPUNIT_TEST( append_066 );
+ CPPUNIT_TEST( append_067 ); CPPUNIT_TEST( append_068 );
+ CPPUNIT_TEST( append_069 ); CPPUNIT_TEST( append_070 );
+ CPPUNIT_TEST( append_071 ); CPPUNIT_TEST( append_072 );
+ CPPUNIT_TEST( append_073 ); CPPUNIT_TEST( append_074 );
+ CPPUNIT_TEST( append_075 ); CPPUNIT_TEST( append_076 );
+ CPPUNIT_TEST( append_077 ); CPPUNIT_TEST( append_078 );
+ CPPUNIT_TEST( append_079 ); CPPUNIT_TEST( append_080 );
+ CPPUNIT_TEST( append_081 ); CPPUNIT_TEST( append_082 );
+ CPPUNIT_TEST( append_083 ); CPPUNIT_TEST( append_084 );
+ CPPUNIT_TEST( append_085 ); CPPUNIT_TEST( append_086 );
+ CPPUNIT_TEST( append_087 ); CPPUNIT_TEST( append_088 );
+ CPPUNIT_TEST( append_089 ); CPPUNIT_TEST( append_090 );
+ CPPUNIT_TEST( append_091 ); CPPUNIT_TEST( append_092 );
+ CPPUNIT_TEST( append_093 ); CPPUNIT_TEST( append_094 );
+ CPPUNIT_TEST( append_095 ); CPPUNIT_TEST( append_096 );
+ CPPUNIT_TEST( append_097 ); CPPUNIT_TEST( append_098 );
+ CPPUNIT_TEST( append_099 ); CPPUNIT_TEST( append_100 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class append_006_Int32_defaultParam : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr59 );
+ sal_Int32 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer[0]+11",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr62 );
+ sal_Int32 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 0 and return OStringBuffer[0]+0",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr63 );
+ sal_Int32 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 -11 and return OStringBuffer[0]+(-11)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr64 );
+ sal_Int32 input = 2147483647;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer[0]+2147483647",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr65 );
+ sal_Int32 input = kNonSInt32Max;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer[0]+(-2147483648)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr60 );
+ sal_Int32 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer[1]+11",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr66 );
+ sal_Int32 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 0 and return OStringBuffer[1]+0",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr67 );
+ sal_Int32 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 -11 and return OStringBuffer[1]+(-11)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr68 );
+ sal_Int32 input = 2147483647;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer[1]+2147483647",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr69 );
+ sal_Int32 input = SAL_MIN_INT32 /*-2147483648*/;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer[1]+(-2147483648)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr60 );
+ sal_Int32 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer[2]+11",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr66 );
+ sal_Int32 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 0 and return OUStringBuffer[2]+0",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr67 );
+ sal_Int32 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 -11 and return OUStringBuffer[2]+(-11)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr68 );
+ sal_Int32 input = 2147483647;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer[2]+2147483647",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr69 );
+ sal_Int32 input = SAL_MIN_INT32;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer[2]+(-2147483648)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr60 );
+ sal_Int32 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer[3]+11",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr66 );
+ sal_Int32 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 0 and return OStringBuffer[3]+0",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr67 );
+ sal_Int32 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 -11 and return OStringBuffer[3]+(-11)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr68 );
+ sal_Int32 input = 2147483647;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer[3]+2147483647",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr69 );
+ sal_Int32 input = SAL_MIN_INT32;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer[3]+(-2147483648)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr61 );
+ sal_Int32 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer[4]+11",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr70 );
+ sal_Int32 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 0 and return OStringBuffer[4]+0",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr71 );
+ sal_Int32 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 -11 and return OStringBuffer[4]+(-11)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr72 );
+ sal_Int32 input = 2147483647;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer[4]+2147483647",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr73 );
+ sal_Int32 input = SAL_MIN_INT32;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer[4]+(-2147483648)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+#ifdef WITH_CORE
+ void append_026()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ OString expVal( kTestStr60 );
+ sal_Int32 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 11 and return OStringBuffer(kSInt32Max)+11",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ OString expVal( kTestStr66 );
+ sal_Int32 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 0 and return OStringBuffer(kSInt32Max)+0",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ OString expVal( kTestStr67 );
+ sal_Int32 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 -11 and return OStringBuffer(kSInt32Max)+(-11)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ OString expVal( kTestStr68 );
+ sal_Int32 input = 2147483647;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 2147483647 and return OStringBuffer(kSInt32Max)+2147483647",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ OString expVal( kTestStr69 );
+ sal_Int32 input = SAL_MIN_INT32;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int32 -2147483648 and return OStringBuffer(kSInt32Max)+(-2147483648)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE( append_006_Int32_defaultParam );
+ CPPUNIT_TEST( append_001 );
+ CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 );
+ CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 );
+ CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 );
+ CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 );
+ CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 );
+ CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 );
+ CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 );
+ CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 );
+ CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 );
+ CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 );
+ CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 );
+ CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 );
+#ifdef WITH_CORE
+ CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 );
+ CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 );
+ CPPUNIT_TEST( append_030 );
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( sal_Int64 l, sal_Int16 radix=2 )
+// testing the method append( sal_Int64 l, sal_Int16 radix=8 )
+// testing the method append( sal_Int64 l, sal_Int16 radix=10 )
+// testing the method append( sal_Int64 l, sal_Int16 radix=16 )
+// testing the method append( sal_Int64 l, sal_Int16 radix=36 )
+
+ class append_007_Int64 : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_026()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_031()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_032()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_033()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_034()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_036()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_043()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_044()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_045()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_046()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_047()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_048()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_049()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_050()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_051()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_052()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_053()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_054()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_055()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_056()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_057()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_058()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_059()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_060()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_061()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_062()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_063()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_064()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_065()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_066()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_067()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_068()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_069()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_070()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_071()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_072()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_073()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_074()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_075()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_076()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_077()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_078()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_079()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_080()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_081()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_082()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_083()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_084()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_085()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_086()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_087()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_088()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_089()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_090()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_091()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_092()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_093()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_094()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_095()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_096()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_097()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_098()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_099()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_100()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = 35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_007_Int64 );
+ CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 );
+ CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 );
+ CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 );
+ CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 );
+ CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 );
+ CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 );
+ CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 );
+ CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 );
+ CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 );
+ CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 );
+ CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 );
+ CPPUNIT_TEST( append_051 ); CPPUNIT_TEST( append_052 );
+ CPPUNIT_TEST( append_053 ); CPPUNIT_TEST( append_054 );
+ CPPUNIT_TEST( append_055 ); CPPUNIT_TEST( append_056 );
+ CPPUNIT_TEST( append_057 ); CPPUNIT_TEST( append_058 );
+ CPPUNIT_TEST( append_059 ); CPPUNIT_TEST( append_060 );
+ CPPUNIT_TEST( append_061 ); CPPUNIT_TEST( append_062 );
+ CPPUNIT_TEST( append_063 ); CPPUNIT_TEST( append_064 );
+ CPPUNIT_TEST( append_065 ); CPPUNIT_TEST( append_066 );
+ CPPUNIT_TEST( append_067 ); CPPUNIT_TEST( append_068 );
+ CPPUNIT_TEST( append_069 ); CPPUNIT_TEST( append_070 );
+ CPPUNIT_TEST( append_071 ); CPPUNIT_TEST( append_072 );
+ CPPUNIT_TEST( append_073 ); CPPUNIT_TEST( append_074 );
+ CPPUNIT_TEST( append_075 ); CPPUNIT_TEST( append_076 );
+ CPPUNIT_TEST( append_077 ); CPPUNIT_TEST( append_078 );
+ CPPUNIT_TEST( append_079 ); CPPUNIT_TEST( append_080 );
+ CPPUNIT_TEST( append_081 ); CPPUNIT_TEST( append_082 );
+ CPPUNIT_TEST( append_083 ); CPPUNIT_TEST( append_084 );
+ CPPUNIT_TEST( append_085 ); CPPUNIT_TEST( append_086 );
+ CPPUNIT_TEST( append_087 ); CPPUNIT_TEST( append_088 );
+ CPPUNIT_TEST( append_089 ); CPPUNIT_TEST( append_090 );
+ CPPUNIT_TEST( append_091 ); CPPUNIT_TEST( append_092 );
+ CPPUNIT_TEST( append_093 ); CPPUNIT_TEST( append_094 );
+ CPPUNIT_TEST( append_095 ); CPPUNIT_TEST( append_096 );
+ CPPUNIT_TEST( append_097 ); CPPUNIT_TEST( append_098 );
+ CPPUNIT_TEST( append_099 ); CPPUNIT_TEST( append_100 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( sal_Int64 i, sal_Int16 radix=2 )
+// where i = large constants
+// testing the method append( sal_Int64 i, sal_Int16 radix=8 )
+// where i = large constants
+// testing the method append( sal_Int64 i, sal_Int16 radix=10 )
+// where i = large constants
+// testing the method append( sal_Int64 i, sal_Int16 radix=16 )
+// where i = large constants
+// testing the method append( sal_Int64 i, sal_Int16 radix=36 )
+// where i = large constants
+
+ class append_007_Int64_Bounderies : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "111111111111111111111111111111111111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "777777777777777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "9223372036854775807" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffffffffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "1y2p0ij32e8e7" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "111111111111111111111111111111111111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "777777777777777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "9223372036854775807" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffffffffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "1y2p0ij32e8e7" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "111111111111111111111111111111111111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "777777777777777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_026()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "9223372036854775807" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffffffffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "1y2p0ij32e8e7" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_031()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_032()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "111111111111111111111111111111111111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_033()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_034()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "777777777777777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_036()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "9223372036854775807" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffffffffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "1y2p0ij32e8e7" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "1111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "111111111111111111111111111111111111111111111111111111111111111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_043()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "177" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_044()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "777777777777777777777" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_045()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "127" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_046()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "9223372036854775807" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_047()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_048()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "7fffffffffffffff" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_049()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt8Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "3j" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_050()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = kSInt64Max;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "1y2p0ij32e8e7" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_007_Int64_Bounderies );
+ CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 );
+ CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 );
+ CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 );
+ CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 );
+ CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 );
+ CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 );
+ CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 );
+ CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 );
+ CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 );
+ CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 );
+ CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( sal_Int64 i, sal_Int16 radix=2 )
+// for negative value
+// testing the method append( sal_Int64 i, sal_Int16 radix=8 )
+// for negative value
+// testing the method append( sal_Int64 i, sal_Int16 radix=10 )
+// for negative value
+// testing the method append( sal_Int64 i, sal_Int16 radix=16 )
+// for negative value
+// testing the method append( sal_Int64 i, sal_Int16 radix=36 )
+// for negative value
+
+ class append_007_Int64_Negative : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_026()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_031()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_032()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_033()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_034()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_036()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_043()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_044()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_045()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_046()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_047()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_048()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_049()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_050()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_051()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_052()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_053()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_054()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_055()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_056()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_057()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_058()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_059()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_060()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_061()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_062()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_063()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_064()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_065()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_066()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_067()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_068()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_069()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_070()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_071()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_072()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_073()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_074()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_075()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_076()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_077()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_078()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_079()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_080()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_081()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_082()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "100" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_083()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1000" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_084()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 2;
+
+ expVal += OString( "-" );
+ expVal += OString( "1111" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_085()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_086()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_087()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "10" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_088()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 8;
+
+ expVal += OString( "-" );
+ expVal += OString( "17" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_089()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_090()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_091()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_092()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 10;
+
+ expVal += OString( "-" );
+ expVal += OString( "15" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_093()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_094()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_095()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_096()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -15;
+ sal_Int16 radix = 16;
+
+ expVal += OString( "-" );
+ expVal += OString( "f" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_097()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -0;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "0" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_098()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -4;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "4" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_099()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -8;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "8" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_100()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( aStrBuf.getStr() );
+ sal_Int64 input = -35;
+ sal_Int16 radix = 36;
+
+ expVal += OString( "-" );
+ expVal += OString( "z" );
+ aStrBuf.append( input, radix );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]",
+ aStrBuf.getStr()== expVal &&
+ aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_007_Int64_Negative );
+ CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 );
+ CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 );
+ CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 );
+ CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 );
+ CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 );
+ CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 );
+ CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 );
+ CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 );
+ CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 );
+ CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 );
+ CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 );
+ CPPUNIT_TEST( append_051 ); CPPUNIT_TEST( append_052 );
+ CPPUNIT_TEST( append_053 ); CPPUNIT_TEST( append_054 );
+ CPPUNIT_TEST( append_055 ); CPPUNIT_TEST( append_056 );
+ CPPUNIT_TEST( append_057 ); CPPUNIT_TEST( append_058 );
+ CPPUNIT_TEST( append_059 ); CPPUNIT_TEST( append_060 );
+ CPPUNIT_TEST( append_061 ); CPPUNIT_TEST( append_062 );
+ CPPUNIT_TEST( append_063 ); CPPUNIT_TEST( append_064 );
+ CPPUNIT_TEST( append_065 ); CPPUNIT_TEST( append_066 );
+ CPPUNIT_TEST( append_067 ); CPPUNIT_TEST( append_068 );
+ CPPUNIT_TEST( append_069 ); CPPUNIT_TEST( append_070 );
+ CPPUNIT_TEST( append_071 ); CPPUNIT_TEST( append_072 );
+ CPPUNIT_TEST( append_073 ); CPPUNIT_TEST( append_074 );
+ CPPUNIT_TEST( append_075 ); CPPUNIT_TEST( append_076 );
+ CPPUNIT_TEST( append_077 ); CPPUNIT_TEST( append_078 );
+ CPPUNIT_TEST( append_079 ); CPPUNIT_TEST( append_080 );
+ CPPUNIT_TEST( append_081 ); CPPUNIT_TEST( append_082 );
+ CPPUNIT_TEST( append_083 ); CPPUNIT_TEST( append_084 );
+ CPPUNIT_TEST( append_085 ); CPPUNIT_TEST( append_086 );
+ CPPUNIT_TEST( append_087 ); CPPUNIT_TEST( append_088 );
+ CPPUNIT_TEST( append_089 ); CPPUNIT_TEST( append_090 );
+ CPPUNIT_TEST( append_091 ); CPPUNIT_TEST( append_092 );
+ CPPUNIT_TEST( append_093 ); CPPUNIT_TEST( append_094 );
+ CPPUNIT_TEST( append_095 ); CPPUNIT_TEST( append_096 );
+ CPPUNIT_TEST( append_097 ); CPPUNIT_TEST( append_098 );
+ CPPUNIT_TEST( append_099 ); CPPUNIT_TEST( append_100 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class append_007_Int64_defaultParam : public CppUnit::TestFixture
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr59 );
+ sal_Int64 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer[0]+11",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr62 );
+ sal_Int64 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 0 and return OStringBuffer[0]+0",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr63 );
+ sal_Int64 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 -11 and return OStringBuffer[0]+(-11)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr116 );
+ sal_Int64 input = SAL_CONST_INT64(9223372036854775807);
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer[0]+9223372036854775807",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ OString expVal( kTestStr117 );
+ sal_Int64 input = SAL_MIN_INT64/*-9223372036854775808*/; // LLA: this is not the same :-( kNonSInt64Max;
+
+ aStrBuf.append( input );
+
+ bool bRes = expVal == aStrBuf.getStr();
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer[0]+(-9223372036854775808)",
+ bRes && aStrBuf.getLength() == expVal.getLength()
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr60 );
+ sal_Int64 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer[1]+11",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr66 );
+ sal_Int64 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 0 and return OStringBuffer[1]+0",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr67 );
+ sal_Int64 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 -11 and return OStringBuffer[1]+(-11)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr118 );
+ sal_Int64 input = SAL_CONST_INT64(9223372036854775807);
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer[1]+9223372036854775807",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ OString expVal( kTestStr119 );
+ sal_Int64 input = SAL_MIN_INT64; // LLA: this is not the same :-( kNonSInt64Max;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer[1]+(-9223372036854775808)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr60 );
+ sal_Int64 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer[2]+11",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr66 );
+ sal_Int64 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 0 and return OUStringBuffer[2]+0",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr67 );
+ sal_Int64 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 -11 and return OUStringBuffer[2]+(-11)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr118 );
+ sal_Int64 input = SAL_CONST_INT64(9223372036854775807);
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer[2]+9223372036854775807",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ OString expVal( kTestStr119 );
+ sal_Int64 input = SAL_MIN_INT64; // LLA: this is not the same :-( kNonSInt64Max;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer[2]+(-9223372036854775808)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr60 );
+ sal_Int64 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer[3]+11",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr66 );
+ sal_Int64 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 0 and return OStringBuffer[3]+0",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr67 );
+ sal_Int64 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 -11 and return OStringBuffer[3]+(-11)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr118 );
+ sal_Int64 input = SAL_CONST_INT64(9223372036854775807);
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer[3]+9223372036854775807",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ OString expVal( kTestStr119 );
+ sal_Int64 input = SAL_MIN_INT64; // LLA: this is not the same :-( kNonSInt64Max;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer[3]+(-9223372036854775808)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr61 );
+ sal_Int64 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer[4]+11",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr70 );
+ sal_Int64 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 0 and return OStringBuffer[4]+0",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr71 );
+ sal_Int64 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 -11 and return OStringBuffer[4]+(-11)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr120 );
+ sal_Int64 input = SAL_CONST_INT64(9223372036854775807);
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer[4]+9223372036854775807",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ OString expVal( kTestStr121 );
+ sal_Int64 input = SAL_MIN_INT64; // LLA: this is not the same :-( kNonSInt64Max;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer[4]+(-9223372036854775808)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+#ifdef WITH_CORE
+ void append_026()
+ {
+ OStringBuffer aStrBuf( kSInt64Max );
+ OString expVal( kTestStr60 );
+ sal_Int64 input = 11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 11 and return OStringBuffer(kSInt64Max)+11",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_027()
+ {
+ OStringBuffer aStrBuf( kSInt64Max );
+ OString expVal( kTestStr66 );
+ sal_Int64 input = 0;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 0 and return OStringBuffer(kSInt64Max)+0",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_028()
+ {
+ OStringBuffer aStrBuf( kSInt64Max );
+ OString expVal( kTestStr67 );
+ sal_Int64 input = -11;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 -11 and return OStringBuffer(kSInt64Max)+(-11)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_029()
+ {
+ OStringBuffer aStrBuf( kSInt64Max );
+ OString expVal( kTestStr118 );
+ sal_Int64 input = 9223372036854775807;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 9223372036854775807 and return OStringBuffer(kSInt64Max)+9223372036854775807",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+
+ void append_030()
+ {
+ OStringBuffer aStrBuf( kSInt64Max );
+ OString expVal( kTestStr119 );
+ sal_Int64 input = SAL_MIN_INT64; // LLA: this is not the same :-( kNonSInt64Max;
+
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "input Int64 -9223372036854775808 and return OStringBuffer(kSInt64Max)+(-9223372036854775808)",
+ (aStrBuf.toString() == expVal &&
+ aStrBuf.getLength() == expVal.getLength())
+ );
+
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE( append_007_Int64_defaultParam );
+ CPPUNIT_TEST( append_001 );
+ CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 );
+ CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 );
+ CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 );
+ CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 );
+ CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 );
+ CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 );
+ CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 );
+ CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 );
+ CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 );
+ CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 );
+ CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 );
+ CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 );
+#ifdef WITH_CORE
+ CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 );
+ CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 );
+ CPPUNIT_TEST( append_030 );
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( float f )
+
+ class checkfloat : public CppUnit::TestFixture
+ {
+ public:
+ bool checkIfStrBufContainAtPosTheFloat(OStringBuffer const& _sStrBuf, sal_Int32 _nLen, float _nFloat)
+ {
+ OString sFloatValue = OString::number(_nFloat);
+
+ OString sBufferString(_sStrBuf.getStr());
+ sal_Int32 nPos = sBufferString.indexOf(sFloatValue);
+ return nPos >= 0 && nPos == _nLen;
+ }
+ };
+
+ class append_008_float : public checkfloat
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("3.0"));
+
+ // LLA:
+ // the complex problem is here, that a float value is not really what we write.
+ // So a 3.0 could also be 3 or 3.0 or 3.0000001 or 2.9999999
+ // this has to be checked.
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("3.141592"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("3.5025255"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("3.00390625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("3.0"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append 3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append 3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append 3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append 3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("3.141592"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append 3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("3.5025255"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append 3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("3.00390625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append 3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("3.0"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append 3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append 3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append 3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append 3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("3.141592"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append 3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("3.5025255"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append 3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("3.00390625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append 3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("3.0"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append 3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append 3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append 3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append 3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+#ifdef WITH_CORE
+ void append_036()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("3.0");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append 3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("3.5");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append 3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("3.0625");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append 3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("3.502525");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append 3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("3.141592");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append 3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("3.5025255");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append 3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("3.00390625");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append 3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE( append_008_float );
+ CPPUNIT_TEST( append_001 );
+ CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 );
+ CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 );
+ CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 );
+ CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 );
+ CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 );
+ CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 );
+ CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 );
+ CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 );
+ CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 );
+ CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 );
+ CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 );
+ CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 );
+#ifdef WITH_CORE
+ CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 );
+ CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 );
+ CPPUNIT_TEST( append_030 );
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( float f ) for negative value
+
+ class append_008_Float_Negative : public checkfloat
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("-3.0"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_002()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("-3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_003()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("-3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_004()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("-3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_005()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("-3.141592"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_006()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("-3.5025255"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_007()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ float input = static_cast<float>(atof("-3.00390625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_008()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("-3.0"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append -3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_009()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("-3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append -3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_010()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("-3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append -3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_011()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("-3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append -3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_012()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("-3.141592"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append -3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_013()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("-3.5025255"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append -3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_014()
+ {
+ OStringBuffer aStrBuf( arrOUS[1] );
+ float input = static_cast<float>(atof("-3.00390625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[1] append -3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_015()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("-3.0"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append -3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_016()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("-3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append -3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_017()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("-3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append -3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_018()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("-3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append -3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_019()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("-3.141592"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append -3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_020()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("-3.5025255"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append -3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_021()
+ {
+ OStringBuffer aStrBuf( arrOUS[2] );
+ float input = static_cast<float>(atof("-3.00390625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[2] append -3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_022()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("-3.0"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append -3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_023()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("-3.5"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append -3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_024()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("-3.0625"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append -3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_025()
+ {
+ OStringBuffer aStrBuf( arrOUS[3] );
+ float input = static_cast<float>(atof("-3.502525"));
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[3] append -3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+#ifdef WITH_CORE
+ void append_036()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("-3.0");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append -3.0",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_037()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("-3.5");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append -3.5",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_038()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("-3.0625");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append -3.0625",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_039()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("-3.502525");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append -3.502525",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_040()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("-3.141592");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append -3.141592",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_041()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("-3.5025255");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append -3.5025255",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_042()
+ {
+ OStringBuffer aStrBuf( kSInt32Max );
+ float input = (float)atof("-3.00390625");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "OStringBuffer( kSInt32Max ) append -3.0039062",
+ checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input)
+ );
+
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE( append_008_Float_Negative );
+ CPPUNIT_TEST( append_001 );
+ CPPUNIT_TEST( append_002 );
+ CPPUNIT_TEST( append_003 );
+ CPPUNIT_TEST( append_004 );
+ CPPUNIT_TEST( append_005 );
+ CPPUNIT_TEST( append_006 );
+ CPPUNIT_TEST( append_007 );
+ CPPUNIT_TEST( append_008 );
+ CPPUNIT_TEST( append_009 );
+ CPPUNIT_TEST( append_010 );
+ CPPUNIT_TEST( append_011 );
+ CPPUNIT_TEST( append_012 );
+ CPPUNIT_TEST( append_013 );
+ CPPUNIT_TEST( append_014 );
+ CPPUNIT_TEST( append_015 );
+ CPPUNIT_TEST( append_016 );
+ CPPUNIT_TEST( append_017 );
+ CPPUNIT_TEST( append_018 );
+ CPPUNIT_TEST( append_019 );
+ CPPUNIT_TEST( append_020 );
+ CPPUNIT_TEST( append_021 );
+ CPPUNIT_TEST( append_022 );
+ CPPUNIT_TEST( append_023 );
+ CPPUNIT_TEST( append_024 );
+ CPPUNIT_TEST( append_025 );
+#ifdef WITH_CORE
+ CPPUNIT_TEST( append_026 );
+ CPPUNIT_TEST( append_027 );
+ CPPUNIT_TEST( append_028 );
+ CPPUNIT_TEST( append_029 );
+ CPPUNIT_TEST( append_030 );
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( double d )
+
+ class checkdouble : public CppUnit::TestFixture
+ {
+ public:
+ bool checkIfStrBufContainAtPosTheDouble(OStringBuffer const& _sStrBuf, sal_Int32 _nLen, double _nDouble)
+ {
+ OString sDoubleValue = OString::number(_nDouble);
+
+ OString sBufferString(_sStrBuf.getStr());
+ sal_Int32 nPos = sBufferString.indexOf(sDoubleValue);
+ return nPos >= 0 && nPos == _nLen;
+ }
+ };
+
+ class append_009_double : public checkdouble
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ double input = atof("3.0");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append 3.0",
+ checkIfStrBufContainAtPosTheDouble(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ double input = atof("3.141592653589793238462643");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[4] append 3.141592653589793238462643",
+ checkIfStrBufContainAtPosTheDouble(aStrBuf, nLen, input)
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_009_double );
+ CPPUNIT_TEST( append_001 );
+ CPPUNIT_TEST( append_035 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+// testing the method append( double f ) for negative value
+
+ class append_009_Double_Negative : public checkdouble
+ {
+ OString arrOUS[5];
+
+ public:
+ void setUp() override
+ {
+ arrOUS[0] = OString( kTestStr7 );
+ arrOUS[1] = OString( );
+ arrOUS[2] = OString( kTestStr25 );
+ arrOUS[3] = OString( "" );
+ arrOUS[4] = OString( kTestStr28 );
+ }
+
+ void append_001()
+ {
+ OStringBuffer aStrBuf( arrOUS[0] );
+ double input = atof("-3.0");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[0] append -3.0",
+ checkIfStrBufContainAtPosTheDouble(aStrBuf, nLen, input)
+ );
+
+ }
+
+ void append_035()
+ {
+ OStringBuffer aStrBuf( arrOUS[4] );
+ double input = atof("-3.141592653589793238462643");
+
+ sal_Int32 nLen = aStrBuf.getLength();
+ aStrBuf.append( input );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "arrOUS[4] append -3.141592653589793238462643",
+ checkIfStrBufContainAtPosTheDouble(aStrBuf, nLen, input)
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE( append_009_Double_Negative );
+ CPPUNIT_TEST( append_001 );
+ CPPUNIT_TEST( append_035 );
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class AppendUninitialized: public CppUnit::TestFixture {
+ private:
+ void testEmpty();
+
+ void testNonEmpty();
+
+ void testZero();
+
+ CPPUNIT_TEST_SUITE(AppendUninitialized);
+ CPPUNIT_TEST(testEmpty);
+ CPPUNIT_TEST(testNonEmpty);
+ CPPUNIT_TEST(testZero);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ void AppendUninitialized::testEmpty() {
+ OStringBuffer s;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+ char * p = s.appendUninitialized(5);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast<void const *>(s.getStr()),
+ static_cast<void const *>(p));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength());
+ }
+
+ void AppendUninitialized::testNonEmpty() {
+ OStringBuffer s("ab");
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), s.getLength());
+ char * p = s.appendUninitialized(5);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast<void const *>(s.getStr() + 2),
+ static_cast<void const *>(p));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7), s.getLength());
+ }
+
+ void AppendUninitialized::testZero() {
+ OStringBuffer s;
+ char * p = s.appendUninitialized(0);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast<void const *>(s.getStr()),
+ static_cast<void const *>(p));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+ }
+} // namespace rtl_OStringBuffer
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::ctors);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::makeStringAndClear);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::getLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::getCapacity);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::ensureCapacity);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::setLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::csuc);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::getStr);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_001);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_002);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_003);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_004);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_005);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_006_Int32);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_006_Int32_Bounderies);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_006_Int32_Negative);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_006_Int32_defaultParam);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_007_Int64);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_007_Int64_Bounderies);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_007_Int64_Negative);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_007_Int64_defaultParam);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_008_float);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_008_Float_Negative);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_009_double);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_009_Double_Negative);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::AppendUninitialized);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::remove);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/OStringBuffer/rtl_String_Const.h b/sal/qa/OStringBuffer/rtl_String_Const.h
new file mode 100644
index 000000000..1abdefefc
--- /dev/null
+++ b/sal/qa/OStringBuffer/rtl_String_Const.h
@@ -0,0 +1,468 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_CONST_H
+#define INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_CONST_H
+
+#include <limits.h>
+#include <sal/types.h>
+#include <rtl/textenc.h>
+#include <rtl/ustring.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+static const rtl_TextEncoding kEncodingRTLTextUSASCII = RTL_TEXTENCODING_ASCII_US;
+
+static const sal_uInt32 kConvertFlagsOUStringToOString = OUSTRING_TO_OSTRING_CVTFLAGS;
+static const sal_uInt32 kConvertFlagsOStringToOUString = OSTRING_TO_OUSTRING_CVTFLAGS;
+
+static const char * const kTestStr1 = "Sun Microsystems";
+static const char * const kTestStr2 = "Sun Microsystems Java Technology";
+static const char * const kTestStr7 = "Sun ";
+static const char * const kTestStr8 = "Microsystems";
+static const char * const kTestStr14 = " Sun Microsystems";
+static const char * const kTestStr17 = " Sun Microsystems ";
+static const char * const kTestStr23 = " Java Technology";
+static const char * const kTestStr25 = "";
+static const char * const kTestStr27 = "s";
+static const char * const kTestStr28 = "\50\3\5\7\11\13\15\17sun";
+static const char * const kTestStr29 = "\50\3\5\7\11\13\15\17sun\21\23\25\27\31\33\50";
+static const char * const kTestStr31 = "sun Microsystems";
+static const char * const kTestStr36 = "Microsystems Java Technology";
+static const char * const kTestStr37 = "Sun Java Technology";
+static const char * const kTestStr38 = "\21\23\25\27\31\33\50";
+static const char * const kTestStr39 = "\50\3\5\7\11\13\15\17sun Sun Microsystems ";
+static const char * const kTestStr40 = "\50\3\5\7\11\13\15\17sunsun Microsystems";
+static const char * const kTestStr45 = "Sun true";
+static const char * const kTestStr46 = "Sun false";
+static const char * const kTestStr47 = "true";
+static const char * const kTestStr48 = "false";
+static const char * const kTestStr49 = "\50\3\5\7\11\13\15\17suntrue";
+static const char * const kTestStr50 = "\50\3\5\7\11\13\15\17sunfalse";
+static const char * const kTestStr51 = "Sun M";
+//static const char *kTestStr52 = "Sun \077777";
+//static const char *kTestStr53 = "Sun \100000";
+//static const char *kTestStr54 = "\77777";
+//static const char *kTestStr55 = "\100000";
+static const char * const kTestStr56 = "\50\3\5\7\11\13\15\17suns";
+//static const char *kTestStr57 = "\50\3\5\7\11\13\15\17sun\77777";
+//static const char *kTestStr58 = "\50\3\5\7\11\13\15\17sun\10000";
+static const char * const kTestStr59 = "Sun 11";
+static const char * const kTestStr60 = "11";
+static const char * const kTestStr61 = "\50\3\5\7\11\13\15\17sun11";
+static const char * const kTestStr62 = "Sun 0";
+static const char * const kTestStr63 = "Sun -11";
+static const char * const kTestStr64 = "Sun 2147483647";
+static const char * const kTestStr65 = "Sun -2147483648";
+static const char * const kTestStr66 = "0";
+static const char * const kTestStr67 = "-11";
+static const char * const kTestStr68 = "2147483647";
+static const char * const kTestStr69 = "-2147483648";
+static const char * const kTestStr70 = "\50\3\5\7\11\13\15\17sun0";
+static const char * const kTestStr71 = "\50\3\5\7\11\13\15\17sun-11";
+static const char * const kTestStr72 = "\50\3\5\7\11\13\15\17sun2147483647";
+static const char * const kTestStr73 = "\50\3\5\7\11\13\15\17sun-2147483648";
+static const char * const kTestStr116 = "Sun 9223372036854775807";
+static const char * const kTestStr117 = "Sun -9223372036854775808";
+static const char * const kTestStr118 = "9223372036854775807";
+static const char * const kTestStr119 = "-9223372036854775808";
+static const char * const kTestStr120 = "\50\3\5\7\11\13\15\17sun9223372036854775807";
+static const char * const kTestStr121 = "\50\3\5\7\11\13\15\17sun-9223372036854775808";
+static const char * const kTestStr143 = "Sun \377";
+static const char * const kTestStr144 = "\377";
+static const char * const kTestStr145 = "\50\3\5\7\11\13\15\17sun\377";
+
+static const sal_Int32 kTestStr1Len = 16;
+static const sal_Int32 kTestStr2Len = 32;
+static const sal_Int32 kTestStr3Len = 16;
+static const sal_Int32 kTestStr4Len = 16;
+static const sal_Int32 kTestStr5Len = 16;
+static const sal_Int32 kTestStr6Len = 15;
+static const sal_Int32 kTestStr7Len = 4;
+static const sal_Int32 kTestStr8Len = 12;
+static const sal_Int32 kTestStr9Len = 32;
+static const sal_Int32 kTestStr10Len = 17;
+static const sal_Int32 kTestStr11Len = 17;
+static const sal_Int32 kTestStr12Len = 18;
+static const sal_Int32 kTestStr13Len = 19;
+static const sal_Int32 kTestStr14Len = 19;
+static const sal_Int32 kTestStr15Len = 20;
+static const sal_Int32 kTestStr16Len = 20;
+static const sal_Int32 kTestStr17Len = 22;
+static const sal_Int32 kTestStr18Len = 16;
+static const sal_Int32 kTestStr19Len = 22;
+static const sal_Int32 kTestStr20Len = 3;
+static const sal_Int32 kTestStr21Len = 3;
+static const sal_Int32 kTestStr22Len = 32;
+static const sal_Int32 kTestStr23Len = 16;
+static const sal_Int32 kTestStr24Len = 31;
+static const sal_Int32 kTestStr25Len = 0;
+static const sal_Int32 kTestStr26Len = 4;
+static const sal_Int32 kTestStr27Len = 1;
+static const sal_Int32 kTestStr28Len = 11;
+static const sal_Int32 kTestStr29Len = 18;
+static const sal_Int32 kTestStr30Len = 10;
+static const sal_Int32 kTestStr31Len = 16;
+static const sal_Int32 kTestStr32Len = 16;
+static const sal_Int32 kTestStr33Len = 1;
+static const sal_Int32 kTestStr34Len = 11;
+static const sal_Int32 kTestStr35Len = 11;
+static const sal_Int32 kTestStr36Len = 28;
+static const sal_Int32 kTestStr37Len = 20;
+static const sal_Int32 kTestStr38Len = 7;
+static const sal_Int32 kTestStr39Len = 33;
+static const sal_Int32 kTestStr40Len = 27;
+static const sal_Int32 kTestStr41Len = 3;
+static const sal_Int32 kTestStr42Len = 10;
+static const sal_Int32 kTestStr43Len = 13;
+static const sal_Int32 kTestStr44Len = 2;
+static const sal_Int32 kTestStr45Len = 8;
+static const sal_Int32 kTestStr46Len = 9;
+static const sal_Int32 kTestStr47Len = 4;
+static const sal_Int32 kTestStr48Len = 5;
+static const sal_Int32 kTestStr49Len = 15;
+static const sal_Int32 kTestStr50Len = 16;
+static const sal_Int32 kTestStr51Len = 5;
+static const sal_Int32 kTestStr52Len = 5;
+static const sal_Int32 kTestStr53Len = 5;
+static const sal_Int32 kTestStr54Len = 1;
+static const sal_Int32 kTestStr55Len = 1;
+static const sal_Int32 kTestStr56Len = 12;
+static const sal_Int32 kTestStr57Len = 12;
+static const sal_Int32 kTestStr58Len = 12;
+static const sal_Int32 kTestStr59Len = 6;
+static const sal_Int32 kTestStr60Len = 2;
+static const sal_Int32 kTestStr61Len = 13;
+static const sal_Int32 kTestStr62Len = 5;
+static const sal_Int32 kTestStr63Len = 7;
+static const sal_Int32 kTestStr64Len = 14;
+static const sal_Int32 kTestStr65Len = 15;
+static const sal_Int32 kTestStr66Len = 1;
+static const sal_Int32 kTestStr67Len = 3;
+static const sal_Int32 kTestStr68Len = 10;
+static const sal_Int32 kTestStr69Len = 11;
+static const sal_Int32 kTestStr70Len = 12;
+static const sal_Int32 kTestStr71Len = 14;
+static const sal_Int32 kTestStr72Len = 21;
+static const sal_Int32 kTestStr73Len = 22;
+static const sal_Int32 kTestStr74Len = 7;
+static const sal_Int32 kTestStr75Len = 7;
+static const sal_Int32 kTestStr76Len = 10;
+static const sal_Int32 kTestStr77Len = 12;
+static const sal_Int32 kTestStr78Len = 12;
+static const sal_Int32 kTestStr79Len = 13;
+static const sal_Int32 kTestStr80Len = 13;
+static const sal_Int32 kTestStr81Len = 3;
+static const sal_Int32 kTestStr82Len = 3;
+static const sal_Int32 kTestStr83Len = 6;
+static const sal_Int32 kTestStr84Len = 8;
+static const sal_Int32 kTestStr85Len = 8;
+static const sal_Int32 kTestStr86Len = 9;
+static const sal_Int32 kTestStr87Len = 9;
+static const sal_Int32 kTestStr88Len = 14;
+static const sal_Int32 kTestStr89Len = 14;
+static const sal_Int32 kTestStr90Len = 17;
+static const sal_Int32 kTestStr91Len = 19;
+static const sal_Int32 kTestStr92Len = 19;
+static const sal_Int32 kTestStr93Len = 20;
+static const sal_Int32 kTestStr94Len = 20;
+static const sal_Int32 kTestStr95Len = 8;
+static const sal_Int32 kTestStr96Len = 8;
+static const sal_Int32 kTestStr97Len = 11;
+static const sal_Int32 kTestStr98Len = 13;
+static const sal_Int32 kTestStr99Len = 13;
+static const sal_Int32 kTestStr100Len = 14;
+static const sal_Int32 kTestStr101Len = 14;
+static const sal_Int32 kTestStr102Len = 4;
+static const sal_Int32 kTestStr103Len = 4;
+static const sal_Int32 kTestStr104Len = 7;
+static const sal_Int32 kTestStr105Len = 9;
+static const sal_Int32 kTestStr106Len = 9;
+static const sal_Int32 kTestStr107Len = 10;
+static const sal_Int32 kTestStr108Len = 10;
+static const sal_Int32 kTestStr109Len = 15;
+static const sal_Int32 kTestStr110Len = 15;
+static const sal_Int32 kTestStr111Len = 18;
+static const sal_Int32 kTestStr112Len = 20;
+static const sal_Int32 kTestStr113Len = 20;
+static const sal_Int32 kTestStr114Len = 21;
+static const sal_Int32 kTestStr115Len = 21;
+static const sal_Int32 kTestStr116Len = 23;
+static const sal_Int32 kTestStr117Len = 24;
+static const sal_Int32 kTestStr118Len = 19;
+static const sal_Int32 kTestStr119Len = 20;
+static const sal_Int32 kTestStr120Len = 30;
+static const sal_Int32 kTestStr121Len = 31;
+static const sal_Int32 kTestStr122Len = 16;
+static const sal_Int32 kTestStr123Len = 21;
+static const sal_Int32 kTestStr124Len = 23;
+static const sal_Int32 kTestStr125Len = 30;
+static const sal_Int32 kTestStr126Len = 12;
+static const sal_Int32 kTestStr127Len = 17;
+static const sal_Int32 kTestStr128Len = 19;
+static const sal_Int32 kTestStr129Len = 26;
+static const sal_Int32 kTestStr130Len = 23;
+static const sal_Int32 kTestStr131Len = 28;
+static const sal_Int32 kTestStr132Len = 30;
+static const sal_Int32 kTestStr133Len = 37;
+static const sal_Int32 kTestStr134Len = 22;
+static const sal_Int32 kTestStr135Len = 24;
+static const sal_Int32 kTestStr136Len = 31;
+static const sal_Int32 kTestStr137Len = 18;
+static const sal_Int32 kTestStr138Len = 20;
+static const sal_Int32 kTestStr139Len = 27;
+static const sal_Int32 kTestStr140Len = 29;
+static const sal_Int32 kTestStr141Len = 31;
+static const sal_Int32 kTestStr142Len = 38;
+static const sal_Int32 kTestStr143Len = 5;
+static const sal_Int32 kTestStr144Len = 1;
+static const sal_Int32 kTestStr145Len = 12;
+static const sal_Int32 kTestStr146Len = 19;
+static const sal_Int32 kTestStr147Len = 19;
+static const sal_Int32 kTestStr148Len = 19;
+static const sal_Int32 kTestStr149Len = 32;
+static const sal_Int32 kTestStr150Len = 32;
+static const sal_Int32 kTestStr151Len = 31;
+static const sal_Int32 kTestStr152Len = 31;
+static const sal_Int32 kTestStr153Len = 31;
+static const sal_Int32 kTestStr154Len = 36;
+static const sal_Int32 kTestStr155Len = 36;
+static const sal_Int32 kTestStr156Len = 36;
+static const sal_Int32 kTestStr157Len = 49;
+static const sal_Int32 kTestStr158Len = 49;
+static const sal_Int32 kTestStr159Len = 49;
+static const sal_Int32 kTestStr160Len = 48;
+static const sal_Int32 kTestStr161Len = 48;
+static const sal_Int32 kTestStr162Len = 48;
+static const sal_Int32 kTestStr163Len = 15;
+static const sal_Int32 kTestStr164Len = 15;
+static const sal_Int32 kTestStr165Len = 15;
+static const sal_Int32 kTestStr166Len = 28;
+static const sal_Int32 kTestStr167Len = 28;
+static const sal_Int32 kTestStr168Len = 28;
+static const sal_Int32 kTestStr169Len = 27;
+static const sal_Int32 kTestStr170Len = 27;
+static const sal_Int32 kTestStr171Len = 27;
+static const sal_Int32 kTestStr1PlusStr6Len = kTestStr1Len + kTestStr6Len;
+
+static const sal_Int32 uTestStr1Len = 16;
+static const sal_Int32 uTestStr2Len = 32;
+static const sal_Int32 uTestStr3Len = 16;
+static const sal_Int32 uTestStr4Len = 16;
+static const sal_Int32 uTestStr5Len = 16;
+static const sal_Int32 uTestStr9Len = 32;
+static const sal_Int32 uTestStr22Len = 32;
+
+const sal_Unicode uTestStr31[]= {0x400,0x410,0x4DF};
+const sal_Unicode uTestStr32[]= {0x9F9F,0xA000,0x8F80,0x9AD9};
+
+static const sal_Int32 uTestStr31Len = 3;
+static const sal_Int32 uTestStr32Len = 4;
+
+static const sal_Int16 kRadixBinary = 2;
+static const sal_Int16 kRadixOctol = 8;
+static const sal_Int16 kRadixDecimal = 10;
+static const sal_Int16 kRadixHexdecimal = 16;
+static const sal_Int16 kRadixBase36 = 36;
+
+static const sal_Int8 kSInt8Max = SCHAR_MAX;
+static const sal_Int16 kUInt8Max = UCHAR_MAX;
+static const sal_Int16 kSInt16Max = SHRT_MAX;
+static const sal_Int32 kUInt16Max = USHRT_MAX;
+static const sal_Int32 kSInt32Max = INT_MAX;
+static const sal_Int64 kUInt32Max = UINT_MAX;
+static const sal_Int64 kSInt64Max = SAL_CONST_INT64(9223372036854775807);
+
+static const sal_Int32 kInt32MaxNumsCount = 5;
+
+static const sal_Int32 kInt32MaxNums[kInt32MaxNumsCount] =
+ {
+ kSInt8Max, kUInt8Max,
+ kSInt16Max, kUInt16Max,
+ kSInt32Max
+ };
+
+static const sal_Int32 kInt64MaxNumsCount = 7;
+
+static const sal_Int64 kInt64MaxNums[kInt64MaxNumsCount] =
+ {
+ kSInt8Max, kUInt8Max,
+ kSInt16Max, kUInt16Max,
+ kSInt32Max, kUInt32Max,
+ kSInt64Max
+ };
+
+static const sal_Int32 kBinaryNumsCount = 16;
+
+static const sal_Int32 kBinaryMaxNumsCount = 7;
+
+static const sal_Int32 kOctolNumsCount = 16;
+
+static const sal_Int32 kOctolMaxNumsCount = 7;
+
+static const sal_Int32 kDecimalNumsCount = 16;
+
+static const sal_Int32 kDecimalMaxNumsCount = 7;
+
+static const sal_Int32 kHexDecimalNumsCount = 16;
+
+static const sal_Int32 kHexDecimalMaxNumsCount = 7;
+
+static const sal_Int32 kBase36NumsCount = 36;
+
+static const sal_Int32 kBase36MaxNumsCount = 7;
+
+static const sal_Int32 nDoubleCount=24;
+static const double expValDouble[nDoubleCount]=
+ {
+ 3.0,3.1,3.1415,3.1415926535,3.141592653589793,
+ 3.1415926535897932,3.14159265358979323,3.1,
+ 3.141592653589793238462643,9.1096e-31,2.997925e8,6.241e18,5.381e18,
+ 1.7e-309,6.5822e-16,1.7e+307,2.2e30,3.1,3.1,-3.1,
+ 0.0,0.0,0.0,1.00e+308
+ };
+
+static const sal_Int32 nFloatCount=22;
+static const float expValFloat[nFloatCount] =
+ {
+ 3.0f,3.1f,3.1415f,3.14159f,3.141592f,
+ 3.1415926f,3.14159265f,3.141592653589793238462643f,
+ 6.5822e-16f,9.1096e-31f,2.997925e8f,6.241e18f,
+ 1.00e38f,6.241e-37f,6.241e37f,3.1f,3.1f,-3.1f,
+ 3.1f,0.0f,0.0f,0.0f
+ };
+
+static const sal_Int32 nCharCount=15;
+static const sal_Unicode expValChar[nCharCount] =
+ {
+ 65,97,48,45,95,
+ 21,27,29,
+ 64,10,39,34,
+ 0,0,83
+ };
+
+static const sal_Int32 nDefaultCount=6;
+static const sal_Unicode input1Default[nDefaultCount] =
+ {
+ 77,115,85,119,32,0
+ };
+static const sal_Int32 input2Default[nDefaultCount] =
+ {
+ 0,0,0,0,0,0
+ };
+static const sal_Int32 expValDefault[nDefaultCount] =
+ {
+ 4,9,-1,-1,3,-1
+ };
+
+static const sal_Int32 nNormalCount=10;
+static const sal_Unicode input1Normal[nNormalCount] =
+ {
+ 77,77,77,115,115,115,119,119,0,0
+ };
+static const sal_Int32 input2Normal[nNormalCount] =
+ {
+ 0,32,80,0,13,20,0,80,0,32
+ };
+static const sal_Int32 expValNormal[nNormalCount] =
+ {
+ 4,-1,-1,9,15,-1,-1,-1,-1,-1
+ };
+
+static const sal_Int32 nlastDefaultCount=5;
+static const sal_Unicode input1lastDefault[nlastDefaultCount] =
+ {
+ 77,115,119,32,0
+ };
+static const sal_Int32 input2lastDefault[nlastDefaultCount] =
+ {
+ 31,31,31,31,31
+ };
+static const sal_Int32 expVallastDefault[nlastDefaultCount] =
+ {
+ 4,15,-1,21,-1
+ };
+
+static const sal_Int32 nlastNormalCount=8;
+static const sal_Unicode input1lastNormal[nlastNormalCount] =
+ {
+ 77,77,77,115,115,119,119,0
+ };
+static const sal_Int32 input2lastNormal[nlastNormalCount] =
+ {
+ 29,0,80,31,3,31,80,31
+ };
+static const sal_Int32 expVallastNormal[nlastNormalCount] =
+ {
+ 4,-1,4,15,-1,-1,-1,-1
+ };
+
+static const sal_Int32 nStrDefaultCount=6;
+static const sal_Int32 input2StrDefault[nStrDefaultCount] =
+ {
+ 0,0,0,0,0,0
+ };
+static const sal_Int32 expValStrDefault[nStrDefaultCount] =
+ {
+ 0,4,-1,-1,-1,3
+ };
+
+static const sal_Int32 nStrNormalCount=9;
+static const sal_Int32 input2StrNormal[nStrNormalCount] =
+ {
+ 0,32,0,30,0,0,0,32,0
+ };
+static const sal_Int32 expValStrNormal[nStrNormalCount] =
+ {
+ 0,-1,4,-1,-1,-1,-1,-1,3
+ };
+
+static const sal_Int32 nStrLastDefaultCount=6;
+static const sal_Int32 input2StrLastDefault[nStrLastDefaultCount] =
+ {
+ 31,31,31,31,31,31
+ };
+static const sal_Int32 expValStrLastDefault[nStrLastDefaultCount] =
+ {
+ 0,4,-1,-1,-1,3
+ };
+
+static const sal_Int32 nStrLastNormalCount=12;
+static const sal_Int32 input2StrLastNormal[nStrLastNormalCount] =
+ {
+ 31,0,80,31,2,31,31,31,0,31,31,14
+ };
+static const sal_Int32 expValStrLastNormal[nStrLastNormalCount] =
+ {
+ 0,-1,0,4,-1,-1,-1,-1,-1,3,15,11
+ };
+
+static const sal_Int32 kNonSInt32Max = INT_MIN;
+static const sal_Int32 kNonSInt16Max = SHRT_MIN;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_CONST_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/OStringBuffer/rtl_String_Utils_Const.h b/sal/qa/OStringBuffer/rtl_String_Utils_Const.h
new file mode 100644
index 000000000..fc258ead3
--- /dev/null
+++ b/sal/qa/OStringBuffer/rtl_String_Utils_Const.h
@@ -0,0 +1,45 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_UTILS_CONST_H
+#define INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_UTILS_CONST_H
+
+#include <sal/types.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+static const sal_Int32 kErrCompareAStringToUString = -2;
+static const sal_Int32 kErrCompareNAStringToUString = -3;
+static const sal_Int32 kErrCompareAStringToRTLUString = -4;
+static const sal_Int32 kErrCompareNAStringToRTLUString = -5;
+static const sal_Int32 kErrAStringToByteStringCompare = -6;
+static const sal_Int32 kErrAStringToByteStringNCompare = -7;
+static const sal_Int32 kErrCompareAStringToString = -8;
+static const sal_Int32 kErrCompareNAStringToString = -9;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_UTILS_CONST_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/inc/stringhelper.hxx b/sal/qa/inc/stringhelper.hxx
new file mode 100644
index 000000000..5bce6ebbb
--- /dev/null
+++ b/sal/qa/inc/stringhelper.hxx
@@ -0,0 +1,33 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_INC_STRINGHELPER_HXX
+#define INCLUDED_SAL_QA_INC_STRINGHELPER_HXX
+
+#include <rtl/ustring.hxx>
+#include <rtl/string.hxx>
+
+inline void operator <<= (OString& _rAsciiString, OUString const & _rUnicodeString)
+{
+ _rAsciiString = OUStringToOString(_rUnicodeString,RTL_TEXTENCODING_ASCII_US);
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/inc/valueequal.hxx b/sal/qa/inc/valueequal.hxx
new file mode 100644
index 000000000..5e6d47d30
--- /dev/null
+++ b/sal/qa/inc/valueequal.hxx
@@ -0,0 +1,120 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_INC_VALUEEQUAL_HXX
+#define INCLUDED_SAL_QA_INC_VALUEEQUAL_HXX
+
+#include <sal/config.h>
+
+#include <cmath>
+
+#define PREC_float 1
+#define PREC_double 2
+#define PREC_long_double 3
+
+template<class T>
+bool is_equal(T x, T y, sal_Int16 _nPrec)
+{
+ if (!(std::isfinite(x) && std::isfinite(y))) {
+ return x == y;
+ }
+
+ // due to the fact that this check looks only if both values are equal
+ // we only need to look on one value
+
+ // 14 digits will announce the checkPrecisionSize
+
+ sal_Int32 nPRECISION;
+ switch(_nPrec)
+ {
+ case PREC_float:
+ nPRECISION = 6;
+ break;
+ case PREC_double:
+ nPRECISION = 14;
+ break;
+ case PREC_long_double:
+ nPRECISION = 20;
+ break;
+ default:
+ nPRECISION = 2;
+ }
+
+ if (x < 0)
+ {
+ x = -x;
+ }
+ if (y < 0)
+ {
+ y = -y;
+ }
+
+ if (_nPrec != PREC_long_double)
+ {
+ printf("double equal: %.20f\n", x);
+ printf(" %.20f\n", y);
+ }
+ //here nPrecOfN is the number after dot
+ sal_Int32 nBeforeDot = sal_Int32( log10(x) );
+ if ( nBeforeDot < 0)
+ {
+ nBeforeDot = 0;
+ }
+ //printf("nPRECISION is %d\n", nPRECISION);
+ sal_Int32 nPrecOfN = -nPRECISION + nBeforeDot;
+
+ if (_nPrec != PREC_long_double)
+ printf("nPrecOfN is %" SAL_PRIdINT32 "\n", nPrecOfN);
+
+ double nPrec = pow(0.1, -nPrecOfN);
+
+ if (_nPrec != PREC_long_double)
+ printf(" prec: %.20f\n", nPrec);
+
+ double nDelta = fabs( x - y ) ;
+
+ if (_nPrec != PREC_long_double)
+ {
+ printf(" delta: %.20f\n", nDelta);
+ printf(" nPrec: %.20f\n", nPrec);
+ printf("delta must be less or equal to prec\n\n");
+ }
+
+ if (nDelta > nPrec)
+ {
+ // values are not equal
+ return false;
+ }
+
+ // values are equal
+ return true;
+}
+
+bool is_float_equal(float x, float y)
+{
+ return is_equal<float>(x, y, PREC_float);
+}
+bool is_double_equal(double x, double y)
+{
+ return is_equal<double>(x, y, PREC_double);
+}
+
+#endif // INCLUDED_SAL_QA_INC_VALUEEQUAL_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/libs2test.txt b/sal/qa/libs2test.txt
new file mode 100644
index 000000000..5503124f4
--- /dev/null
+++ b/sal/qa/libs2test.txt
@@ -0,0 +1,101 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+#
+# This file contain a list of todos for testshl2 automated tests.
+#
+# Legend:
+# there exist 2 formats
+# 1. file
+# 2. path ; file
+#
+# 1. if only a file exist, it will be assume, that a directory with name 'file'
+# exist, and a library with name 'file' create.
+# 2. if the path to the file differ from the library file, use this format.
+#
+
+
+# LLA: marked as deprecated by Stephan Bergmann
+ByteSequence ; rtl_ByteSequence
+
+OStringBuffer ; rtl_OStringBuffer
+
+rtl_strings ; rtl_OUString
+rtl_strings ; rtl_OString
+rtl_strings ; rtl_OUStringBuffer
+
+# replacements for old rtl::XString tests
+rtl/oustring ; rtl_OUString2
+rtl/ostring ; rtl_OString2
+
+osl/file ; osl_File
+# LLA: temporarily removed, there are lot of problems with our environment
+osl/socket ; osl_StreamSocket
+osl/socket ; osl_DatagramSocket
+osl/socket ; osl_SocketAddr
+osl/socket ; osl_Socket2
+osl/socket ; osl_ConnectorSocket
+osl/socket ; osl_AcceptorSocket
+
+osl/mutex ; osl_Mutex
+osl/pipe ; osl_Pipe
+osl/condition ; osl_Condition
+osl/module ; osl_Module
+osl/security ; osl_Security
+
+rtl/math ; rtl_math
+rtl/math ; rtl_math2
+
+# new 20040315
+rtl/alloc ; rtl_Alloc
+rtl/crc32 ; rtl_crc32
+rtl/digest ; rtl_digest
+rtl/bootstrap ; rtl_Bootstrap
+rtl/ostring ; rtl_str
+rtl/ostring ; rtl_string
+rtl/random ; rtl_Random
+
+# new 20040324
+rtl/oustring ; rtl_ustr
+
+# new 20040326
+rtl/cipher ; rtl_cipher
+
+# new 20040331
+rtl/locale ; rtl_locale
+rtl/uuid ; rtl_Uuid
+rtl/process ; rtl_Process
+
+# new 20040413
+rtl/textenc ; rtl_textcvt
+rtl/textenc ; rtl_tencinfo
+rtl/oustringbuffer; rtl_OUStringBuffer2
+
+# new 20040420
+rtl/uri ; rtl_Uri
+rtl/logfile ; rtl_logfile
+
+# LLA: Due to the fact, that thread testing seems to be little bit error prone, now
+# check this at the end.
+osl/process ; osl_Thread
+
+# not ready yet
+# strings ; test_oustring
+
+# new 20041025
+rtl/doublelock ; rtl_doublelocking
+
diff --git a/sal/qa/osl/condition/osl_Condition.cxx b/sal/qa/osl/condition/osl_Condition.cxx
new file mode 100644
index 000000000..05b7fc661
--- /dev/null
+++ b/sal/qa/osl/condition/osl_Condition.cxx
@@ -0,0 +1,327 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "osl_Condition_Const.h"
+#include <stdlib.h>
+
+using namespace osl;
+
+namespace {
+
+enum ConditionType
+{
+ thread_type_set,
+ thread_type_reset,
+ thread_type_wait
+};
+
+/** thread for testing Condition.
+ */
+class ConditionThread : public Thread
+{
+public:
+ //get the Condition to operate
+ ConditionThread( ::osl::Condition& Con, ConditionType tType): m_MyCon( Con ), m_MyType( tType ) { }
+
+protected:
+ ::osl::Condition& m_MyCon;
+ ConditionType m_MyType;
+
+ void SAL_CALL run() override
+ {
+ switch ( m_MyType )
+ {
+ case thread_type_wait:
+ m_MyCon.wait(); break;
+ case thread_type_set:
+ m_MyCon.set(); break;
+ case thread_type_reset:
+ m_MyCon.reset(); break;
+ default:
+ break;
+ }
+ }
+};
+
+}
+
+namespace osl_Condition
+{
+ /** testing the method:
+ Condition()
+ */
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void ctors_create()
+ {
+ ::osl::Condition aCond;
+ bRes = aCond.check();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: create a condition its initial check state should be sal_False.",
+ !bRes );
+ }
+
+ void ctors_createAndSet()
+ {
+ ::osl::Condition aCond;
+ aCond.set();
+ bRes = aCond.check();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: create a condition and set it.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE(ctors);
+ CPPUNIT_TEST(ctors_create);
+ CPPUNIT_TEST(ctors_createAndSet);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ /** testing the method:
+ void set()
+ */
+ class set : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1, bRes2;
+
+ void set_createAndSet()
+ {
+ ::osl::Condition aCond;
+ aCond.set();
+ bRes = aCond.check();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: check state should be sal_True after set.",
+ bRes );
+ }
+
+ void set_threadWaitRelease()
+ {
+ ::osl::Condition aCond;
+ ConditionThread myThread1(aCond, thread_type_wait);
+ myThread1.create();
+ bRes = myThread1.isRunning();
+
+ ConditionThread myThread2(aCond, thread_type_set);
+ myThread2.create();
+
+ myThread1.join();
+ bRes1 = myThread1.isRunning();
+ bRes2 = aCond.check();
+ myThread2.join();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: use one thread to set the condition in order to release another thread.",
+ bRes);
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: use one thread to set the condition in order to release another thread.",
+ !bRes1);
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: use one thread to set the condition in order to release another thread.",
+ bRes2);
+ }
+
+ CPPUNIT_TEST_SUITE(set);
+ CPPUNIT_TEST(set_createAndSet);
+ CPPUNIT_TEST(set_threadWaitRelease);
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the method:
+ void reset()
+ */
+ class reset : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1, bRes2;
+
+ void reset_resetWaitAndSet()
+ {
+ ::osl::Condition aCond;
+ aCond.reset();
+
+ ConditionThread myThread(aCond, thread_type_wait);
+ myThread.create();
+ bRes = myThread.isRunning();
+ bRes2 = aCond.check();
+
+ aCond.set();
+ myThread.join();
+ bRes1 = myThread.isRunning();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: wait will cause a reset thread block, use set to release it.",
+ bRes);
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: wait will cause a reset thread block, use set to release it.",
+ !bRes1);
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: wait will cause a reset thread block, use set to release it.",
+ !bRes2);
+ }
+
+ void reset_resetAndSet()
+ {
+ ::osl::Condition aCond;
+ aCond.reset();
+ bRes = aCond.check();
+ aCond.set();
+ bRes1 = aCond.check();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: create a condition and reset/set it.",
+ !bRes );
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: create a condition and reset/set it.",
+ bRes1 );
+ }
+
+ CPPUNIT_TEST_SUITE(reset);
+ CPPUNIT_TEST(reset_resetWaitAndSet);
+ CPPUNIT_TEST(reset_resetAndSet);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ /** testing the method:
+ Result wait(const TimeValue *pTimeout = 0)
+ */
+ class wait : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1, bRes2;
+ std::unique_ptr<TimeValue> tv1;
+
+ void setUp() override
+ {
+ tv1.reset(new TimeValue);
+ tv1->Seconds = 1;
+ tv1->Nanosec = 0;
+ }
+
+ void tearDown() override
+ {
+ tv1.reset();
+ }
+
+ void wait_testAllCombos( )
+ {
+ ::osl::Condition cond1;
+ ::osl::Condition cond2;
+ ::osl::Condition cond3;
+
+ cond1.set();
+ cond2.set();
+
+ osl::Condition::Result r1=cond1.wait(tv1.get());
+ osl::Condition::Result r2=cond2.wait();
+ osl::Condition::Result r3=cond3.wait(tv1.get());
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#test comment#: test three types of wait.",
+ ::osl::Condition::result_ok, r1 );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#test comment#: test three types of wait.",
+ ::osl::Condition::result_ok, r2 );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#test comment#: test three types of wait.",
+ ::osl::Condition::result_timeout, r3 );
+ }
+
+ void wait_timeoutWaits()
+ {
+ ::osl::Condition aCond;
+ ::osl::Condition::Result wRes, wRes1;
+
+ aCond.reset();
+ bRes = aCond.check();
+ wRes = aCond.wait(tv1.get());
+
+ aCond.set();
+ wRes1 = aCond.wait(tv1.get());
+ bRes1 = aCond.check();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: wait a condition after set/reset.",
+ !bRes );
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: wait a condition after set/reset.",
+ bRes1 );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("#test comment#: wait a condition after set/reset.",
+ ::osl::Condition::result_timeout, wRes );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("#test comment#: wait a condition after set/reset.",
+ ::osl::Condition::result_ok, wRes1 );
+ }
+
+ CPPUNIT_TEST_SUITE(wait);
+ CPPUNIT_TEST(wait_testAllCombos);
+ CPPUNIT_TEST(wait_timeoutWaits);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ /** testing the method:
+ sal_Bool check()
+ */
+ class check : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1, bRes2;
+
+ void check_checkStates()
+ {
+ ::osl::Condition aCond;
+
+ aCond.reset();
+ bRes = aCond.check();
+ aCond.set();
+ bRes1 = aCond.check();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: check the condition states.",
+ !bRes );
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: check the condition states.",
+ bRes1 );
+ }
+
+ void check_threadedCheckStates( )
+ {
+ ::osl::Condition aCond;
+ aCond.reset();
+
+ ConditionThread myThread(aCond, thread_type_set);
+ myThread.create();
+ myThread.join();
+ bRes = aCond.check();
+
+ ConditionThread myThread1(aCond, thread_type_reset);
+ myThread1.create();
+ myThread1.join();
+ bRes1 = aCond.check();
+
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: use threads to set/reset Condition and check it in main routine.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE("#test comment#: use threads to set/reset Condition and check it in main routine.",
+ !bRes1 );
+ }
+
+ CPPUNIT_TEST_SUITE(check);
+ CPPUNIT_TEST(check_checkStates);
+ CPPUNIT_TEST(check_threadedCheckStates);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Condition::ctors);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Condition::set);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Condition::reset);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Condition::wait);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Condition::check);
+
+} // namespace osl_Condition
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/condition/osl_Condition_Const.h b/sal/qa/osl/condition/osl_Condition_Const.h
new file mode 100644
index 000000000..6bcf9e730
--- /dev/null
+++ b/sal/qa/osl/condition/osl_Condition_Const.h
@@ -0,0 +1,47 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_OSL_CONDITION_OSL_CONDITION_CONST_H
+#define INCLUDED_SAL_QA_OSL_CONDITION_OSL_CONDITION_CONST_H
+
+#include <sal/types.h>
+#include <rtl/ustring.hxx>
+#include <osl/thread.hxx>
+#include <osl/mutex.hxx>
+#include <osl/pipe.hxx>
+#include <osl/conditn.hxx>
+#include <osl/time.h>
+
+#ifdef UNX
+#include <unistd.h>
+#endif
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+// condition names
+
+OUString aTestCon( "testcondition" );
+
+const char pTestString[17] = "Sun Microsystems";
+
+#endif // INCLUDED_SAL_QA_OSL_CONDITION_OSL_CONDITION_CONST_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/file/osl_File.cxx b/sal/qa/osl/file/osl_File.cxx
new file mode 100644
index 000000000..dbe461ae3
--- /dev/null
+++ b/sal/qa/osl/file/osl_File.cxx
@@ -0,0 +1,5202 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <rtl/byteseq.hxx>
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+
+#include <osl/thread.h>
+#include <osl/file.hxx>
+#include "osl_File_Const.h"
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <tools/urlobj.hxx>
+
+#include <memory>
+
+#ifdef _WIN32
+#if !defined WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#endif
+
+using namespace osl;
+
+/** detailed wrong message.
+*/
+static OString errorToString(const osl::FileBase::RC _nError)
+{
+ OString sResult;
+ switch (_nError) {
+ case osl::FileBase::E_None:
+ sResult = "Success";
+ break;
+ case osl::FileBase::E_PERM:
+ sResult = "Operation not permitted";
+ break;
+ case osl::FileBase::E_NOENT:
+ sResult = "No such file or directory";
+ break;
+ case osl::FileBase::E_EXIST:
+ sResult = "Already Exist";
+ break;
+ case osl::FileBase::E_ACCES:
+ sResult = "Permission denied";
+ break;
+ case osl::FileBase::E_INVAL:
+ sResult = "The format of the parameters was not valid";
+ break;
+ case osl::FileBase::E_NOTDIR:
+ sResult = "Not a directory";
+ break;
+ case osl::FileBase::E_ISDIR:
+ sResult = "Is a directory";
+ break;
+ case osl::FileBase::E_BADF:
+ sResult = "Bad file";
+ break;
+ case osl::FileBase::E_NOTEMPTY:
+ sResult = "The directory is not empty";
+ break;
+ default:
+ sResult = "Unknown Error";
+ break;
+ }
+ return sResult;
+}
+
+static OString errorToStr(osl::FileBase::RC const& nError)
+{
+ OString suBuf = "The returned error is: " +
+ errorToString(nError) +
+ "!\n";
+ return suBuf;
+}
+
+/** compare two TimeValue, unit is "ms", since Windows time precision is better than UNX.
+*/
+/* FIXME: the above assertion is bogus */
+
+#if (defined UNX) // precision of time in Windows is better than UNX
+# define delta 2000 // time precision, 2000ms
+#else
+# define delta 1800 // time precision, 1.8s
+#endif
+
+static bool t_compareTime(TimeValue *m_aEndTime, TimeValue *m_aStartTime, sal_Int32 nDelta)
+{
+ sal_Int32 nDeltaSeconds = m_aEndTime->Seconds - m_aStartTime->Seconds;
+ sal_Int32 nDeltaNanoSec = sal_Int32(m_aEndTime->Nanosec) - sal_Int32(m_aStartTime->Nanosec);
+ if (nDeltaNanoSec < 0)
+ {
+ nDeltaNanoSec = 1000000000 + nDeltaNanoSec;
+ nDeltaSeconds--;
+ }
+
+ sal_Int32 nDeltaMilliSec = (nDeltaSeconds * 1000) + (nDeltaNanoSec / 1000000);
+ return (nDeltaMilliSec < nDelta);
+}
+
+/** compare two OUString file name.
+*/
+static bool compareFileName(const OUString & ustr1, const OUString & ustr2)
+{
+ bool bOk;
+// on Windows, the separator is '\', so here change to '/', then compare
+#if defined(_WIN32)
+ OUString ustr1new,ustr2new;
+ sal_Unicode reverseSlash = '\\';
+
+ if (ustr1.lastIndexOf(reverseSlash) != -1)
+ ustr1new = ustr1.replace(reverseSlash,'/');
+ else
+ ustr1new = ustr1;
+ if (ustr2.lastIndexOf(reverseSlash) != -1)
+ ustr2new = ustr2.replace(reverseSlash,'/');
+ else
+ ustr2new = ustr2;
+ bOk = ustr1new.equalsIgnoreAsciiCase(ustr2new);
+#else
+ bOk = ustr1.equalsIgnoreAsciiCase(ustr2);
+#endif
+ return bOk;
+}
+
+/** simple version to judge if a file name or directory name is a URL or a system path, just to see if it
+ is start with "file:///";.
+*/
+static bool isURL(const OUString& pathname)
+{
+ return pathname.startsWith(aPreURL);
+}
+
+/** concat two part to form a URL or system path, add PATH_SEPARATOR between them if necessary, add "file:///" to beginning if necessary.
+*/
+static void concatURL(OUString & pathname1, const OUString & pathname2)
+{
+ // check if pathname1 is full qualified URL;
+ if (!isURL(pathname1))
+ {
+ OUString aPathName = pathname1.copy(0);
+ osl::FileBase::getFileURLFromSystemPath(pathname1, aPathName); // convert if not full qualified URL
+ pathname1 = aPathName.copy(0);
+ }
+
+ // check if '/' is in the end of pathname1 or at the begin of pathname2;
+ if (!pathname1.endsWith(aSlashURL) && !pathname2.startsWith(aSlashURL))
+ pathname1 += aSlashURL;
+ pathname1 += pathname2;
+}
+
+/** create a temp test file using OUString name of full qualified URL or system path.
+*/
+static void createTestFile(const OUString& filename)
+{
+ OUString aPathURL = filename.copy(0);
+ osl::FileBase::RC nError;
+
+ if (!isURL(filename))
+ osl::FileBase::getFileURLFromSystemPath(filename, aPathURL); // convert if not full qualified URL
+
+ File aFile(aPathURL);
+ nError = aFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write | osl_File_OpenFlag_Create);
+ if ((nError != osl::FileBase::E_None) && (nError != osl::FileBase::E_EXIST))
+ printf("createTestFile failed!\n");
+
+ aFile.close();
+
+}
+
+/** create a temp test file using OUString name of full qualified URL or system path in a base directory.
+*/
+static void createTestFile(const OUString& basename, const OUString& filename)
+{
+ OUString aBaseURL = basename.copy(0);
+
+ concatURL(aBaseURL, filename);
+ createTestFile(aBaseURL);
+}
+
+/** delete a temp test file using OUString name.
+*/
+static void deleteTestFile(const OUString& filename)
+{
+ OUString aPathURL = filename.copy(0);
+ osl::FileBase::RC nError;
+
+ if (!isURL(filename))
+ osl::FileBase::getFileURLFromSystemPath(filename, aPathURL); // convert if not full qualified URL
+
+ nError = File::setAttributes(aPathURL, osl_File_Attribute_GrpWrite| osl_File_Attribute_OwnWrite| osl_File_Attribute_OthWrite); // if readonly, make writable.
+ CPPUNIT_ASSERT_MESSAGE("In deleteTestFile Function: set writable ", (osl::FileBase::E_None == nError) || (osl::FileBase::E_NOENT == nError));
+
+ nError = File::remove(aPathURL);
+ CPPUNIT_ASSERT_MESSAGE("In deleteTestFile Function: remove ", (osl::FileBase::E_None == nError) || (nError == osl::FileBase::E_NOENT));
+}
+
+/** delete a temp test file using OUString name of full qualified URL or system path in a base directory.
+*/
+static void deleteTestFile(const OUString& basename, const OUString& filename)
+{
+ OUString aBaseURL = basename.copy(0);
+
+ concatURL(aBaseURL, filename);
+ deleteTestFile(aBaseURL);
+}
+
+/** create a temp test directory using OUString name of full qualified URL or system path.
+*/
+static void createTestDirectory(const OUString& dirname)
+{
+ OUString aPathURL = dirname.copy(0);
+ osl::FileBase::RC nError;
+
+ if (!isURL(dirname))
+ osl::FileBase::getFileURLFromSystemPath(dirname, aPathURL); // convert if not full qualified URL
+ nError = Directory::create(aPathURL);
+ if ((nError != osl::FileBase::E_None) && (nError != osl::FileBase::E_EXIST))
+ printf("createTestDirectory failed!\n");
+}
+
+/** create a temp test directory using OUString name of full qualified URL or system path in a base directory.
+*/
+static void createTestDirectory(const OUString& basename, const OUString& dirname)
+{
+ OUString aBaseURL = basename.copy(0);
+
+ concatURL(aBaseURL, dirname);
+ createTestDirectory(aBaseURL);
+}
+
+/** delete a temp test directory using OUString name of full qualified URL or system path.
+*/
+static void deleteTestDirectory(const OUString& dirname)
+{
+ OUString aPathURL = dirname.copy(0);
+ osl::FileBase::RC nError;
+ if (!isURL(dirname))
+ osl::FileBase::getFileURLFromSystemPath(dirname, aPathURL); // convert if not full qualified URL
+
+ Directory testDir(aPathURL);
+ if (testDir.isOpen())
+ testDir.close(); // close if still open.
+
+ nError = Directory::remove(aPathURL);
+
+ OString strError = "In deleteTestDirectory function: remove Directory " +
+ OUStringToOString(aPathURL, RTL_TEXTENCODING_ASCII_US);
+ CPPUNIT_ASSERT_MESSAGE(strError.getStr(), (osl::FileBase::E_None == nError) || (nError == osl::FileBase::E_NOENT));
+}
+
+/** delete a temp test directory using OUString name of full qualified URL or system path in a base directory.
+*/
+static void deleteTestDirectory(const OUString& basename, const OUString& dirname)
+{
+ OUString aBaseURL = basename.copy(0);
+
+ concatURL(aBaseURL, dirname);
+ deleteTestDirectory(aBaseURL);
+}
+
+namespace {
+
+/** Check for the file and directory access right.
+*/
+enum class oslCheckMode {
+ Exist,
+ OpenAccess,
+ ReadAccess,
+ WriteAccess
+};
+
+}
+
+/** check if the file exist
+*/
+static bool ifFileExist(const OUString & str)
+{
+ File testFile(str);
+ return (testFile.open(osl_File_OpenFlag_Read) == osl::FileBase::E_None);
+}
+
+/** check if the file can be written
+*/
+static bool ifFileCanWrite(const OUString & str)
+{
+ // on Windows, the file has no write right, but can be written
+#ifdef _WIN32
+ bool bCheckResult = false;
+ OUString aUStr = str.copy(0);
+ if (isURL(str))
+ osl::FileBase::getSystemPathFromFileURL(str, aUStr);
+
+ OString aString = OUStringToOString(aUStr, RTL_TEXTENCODING_ASCII_US);
+ const char *path = aString.getStr();
+ if ((_access(path, 2)) != -1)
+ bCheckResult = true;
+ // on UNX, just test if open success with osl_File_OpenFlag_Write
+#else
+ File testFile(str);
+ bool bCheckResult = (testFile.open(osl_File_OpenFlag_Write) == osl::FileBase::E_None);
+#endif
+ return bCheckResult;
+}
+
+static bool checkDirectory(const OUString& str, oslCheckMode nCheckMode)
+{
+ OUString aUString;
+ DirectoryItem rItem;
+ osl::FileBase::RC rc;
+ bool bCheckResult= false;
+
+ Directory aDir(str);
+ rc = aDir.open();
+
+ if ((rc != osl::FileBase::E_NOENT) && (rc != osl::FileBase::E_ACCES))
+ {
+ switch (nCheckMode)
+ {
+ case oslCheckMode::Exist:
+ if (rc == ::osl::FileBase::E_None)
+ bCheckResult = true;
+ break;
+ case oslCheckMode::OpenAccess:
+ if (rc == osl::FileBase::E_None)
+ bCheckResult = true;
+ break;
+ case oslCheckMode::ReadAccess:
+ rc = aDir.getNextItem(rItem);
+ bCheckResult = (rc == osl::FileBase::E_None) || (rc == osl::FileBase::E_NOENT);
+ break;
+ case oslCheckMode::WriteAccess:
+ ((aUString += str) += aSlashURL) += aTmpName2;
+ if (Directory::create(aUString) == osl::FileBase::E_None)
+ {
+ bCheckResult = true;
+ rc = Directory::remove(aUString);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, rc);
+ }
+ else
+ {
+ bCheckResult = false;
+ }
+ break;
+
+ default:
+ bCheckResult = false;
+ }
+
+ rc = aDir.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, rc);
+ }
+
+ return bCheckResult;
+}
+
+/** construct error message
+*/
+static OString outputError(const OString & returnVal, const OString & rightVal, const char * msg = "")
+{
+ if (returnVal == rightVal)
+ return OString();
+
+ OString aString = msg +
+ OStringLiteral(": the returned value is '") +
+ returnVal +
+ "', but the value should be '" +
+ rightVal +
+ "'.";
+ return aString;
+}
+
+#if (defined UNX) /* chmod() method is different in Windows */
+/** Change file mode, two version in UNIX and Windows;.
+*/
+static void changeFileMode(OUString & filepath, sal_Int32 mode)
+{
+ OString aString;
+ OUString aUStr = filepath.copy(0);
+
+ if (isURL(filepath))
+ osl::FileBase::getSystemPathFromFileURL(filepath, aUStr);
+
+ aString = OUStringToOString(aUStr, RTL_TEXTENCODING_ASCII_US);
+ int ret = chmod(aString.getStr(), mode);
+ CPPUNIT_ASSERT_EQUAL(0, ret);
+}
+#endif
+
+#if defined UNX
+static OUString getCurrentPID();
+#endif
+
+// Beginning of the test cases for osl::FileBase class
+
+namespace osl_FileBase
+{
+ // testing the method
+ // static inline RC getAbsoluteFileURL(const OUString& ustrBaseDirectoryURL,
+ // const OUString& ustrRelativeFileURL,
+ // OUString& ustrAbsoluteFileURL)
+
+ class getAbsoluteFileURL : public CppUnit::TestFixture
+ {
+ public:
+ void check_getAbsoluteFileURL(OUString const& _suBaseURL,
+ OString const& _sRelativeURL,
+ osl::FileBase::RC _nAssumeError,
+ OUString const& _suAssumeResultStr);
+
+ void getAbsoluteFileURL_001_1();
+ void getAbsoluteFileURL_001_2();
+ void getAbsoluteFileURL_001_3();
+ void getAbsoluteFileURL_001_4();
+ void getAbsoluteFileURL_001_5();
+ void getAbsoluteFileURL_001_6();
+ void getAbsoluteFileURL_001_7();
+ void getAbsoluteFileURL_001_8();
+ void getAbsoluteFileURL_002();
+ void getAbsoluteFileURL_003();
+ void getAbsoluteFileURL_004();
+
+ CPPUNIT_TEST_SUITE(getAbsoluteFileURL);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_1);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_2);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_3);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_4);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_5);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_6);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_7);
+ CPPUNIT_TEST(getAbsoluteFileURL_001_8);
+ CPPUNIT_TEST(getAbsoluteFileURL_002);
+ CPPUNIT_TEST(getAbsoluteFileURL_003);
+ CPPUNIT_TEST(getAbsoluteFileURL_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ void getAbsoluteFileURL::check_getAbsoluteFileURL(OUString const& _suBaseURL,
+ OString const& _sRelativeURL,
+ osl::FileBase::RC _nAssumeError,
+ OUString const& _suAssumeResultStr)
+ {
+ OUString suRelativeURL = OStringToOUString(_sRelativeURL, RTL_TEXTENCODING_UTF8);
+ OString sBaseURL = OUStringToOString(_suBaseURL, RTL_TEXTENCODING_UTF8);
+ OUString suResultURL;
+ osl::FileBase::RC nError = osl::FileBase::getAbsoluteFileURL(_suBaseURL, suRelativeURL, suResultURL);
+ OString sResultURL = OUStringToOString(suResultURL, RTL_TEXTENCODING_UTF8);
+ OString sError = errorToString(nError);
+ printf("getAbsoluteFileURL('%s','%s') deliver absolute URL: '%s', error '%s'\n",
+ sBaseURL.getStr(), _sRelativeURL.getStr(),sResultURL.getStr(), sError.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Assumption is wrong: error number is wrong", _nAssumeError, nError);
+
+ if (nError == osl::FileBase::E_None)
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Assumption is wrong: ResultURL is not equal to expected URL ", _suAssumeResultStr, suResultURL);
+ }
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_1()
+ {
+ OUString suAssume = aUserDirectoryURL.concat("/relative/file1");
+ check_getAbsoluteFileURL(aUserDirectoryURL, "relative/file1",osl::FileBase::E_None, suAssume);
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_2()
+ {
+ OUString suAssume = aUserDirectoryURL.concat("/relative/file2");
+ check_getAbsoluteFileURL(aUserDirectoryURL, "relative/./file2",osl::FileBase::E_None, suAssume);
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_3()
+ {
+ OUString suAssume = aUserDirectoryURL.concat("/file3");
+ check_getAbsoluteFileURL(aUserDirectoryURL, "relative/../file3",osl::FileBase::E_None, suAssume);
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_4()
+ {
+ OUString suAssume = aUserDirectoryURL.concat("/file4");
+ check_getAbsoluteFileURL(aUserDirectoryURL, "././relative/../file4",osl::FileBase::E_None, suAssume);
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_5()
+ {
+ OUString suAssume;
+#if (defined UNX)
+ suAssume = aUserDirectoryURL.concat("/relative/");
+#else
+ suAssume = aUserDirectoryURL.concat("/relative");
+#endif
+ check_getAbsoluteFileURL(aUserDirectoryURL, "././relative/.",osl::FileBase::E_None, suAssume);
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_6()
+ {
+ OUString suAssume = aUserDirectoryURL.concat("/.relative");
+ check_getAbsoluteFileURL(aUserDirectoryURL, "./.relative",osl::FileBase::E_None, suAssume);
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_7()
+ {
+ OUString suAssume;
+#if (defined UNX)
+ suAssume = aUserDirectoryURL.concat("/.a/");
+#else // windows
+ suAssume = aUserDirectoryURL.concat("/.a");
+#endif
+ check_getAbsoluteFileURL(aUserDirectoryURL, "./.a/mydir/..",osl::FileBase::E_None, suAssume);
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_001_8()
+ {
+ OUString suAssume = aUserDirectoryURL.concat("/tmp/ok");
+#if (defined UNX)
+ check_getAbsoluteFileURL(aUserDirectoryURL, "tmp//ok",osl::FileBase::E_None, suAssume);
+#else
+ check_getAbsoluteFileURL(aUserDirectoryURL, "tmp//ok",osl::FileBase::E_INVAL, suAssume);
+#endif
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_002()
+ {
+#if (defined UNX) // Link is not defined in Windows
+ OUString aUStr_LnkFileSys(aTempDirectorySys), aUStr_SrcFileSys(aTempDirectorySys);
+ aUStr_LnkFileSys += aSlashURL + getCurrentPID() + "/link.file";
+ aUStr_SrcFileSys += aSlashURL + getCurrentPID() + "/canonical.name";
+
+ OString strLinkFileName, strSrcFileName;
+ strLinkFileName = OUStringToOString(aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US);
+ strSrcFileName = OUStringToOString(aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US);
+
+ createTestFile(aCanURL1);
+ sal_Int32 fd = symlink(strSrcFileName.getStr(), strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), fd);
+ OString sLnkURL = OUStringToOString(aLnkURL1, RTL_TEXTENCODING_ASCII_US);
+ OUString suAssume = aUserDirectoryURL.concat("/canonical.name");
+ check_getAbsoluteFileURL(aUserDirectoryURL, sLnkURL, osl::FileBase::E_None, suAssume);
+ deleteTestFile(aCanURL1);
+ fd = remove(strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), fd);
+#endif
+ }
+
+ // please see line# 930
+ void getAbsoluteFileURL::getAbsoluteFileURL_003()
+ {
+ }
+
+ void getAbsoluteFileURL::getAbsoluteFileURL_004()
+ {
+ // create two level directories under $Temp/PID/
+ OUString aUStrUpBase = aUserDirectoryURL + "/test1";
+ createTestDirectory(aUStrUpBase);
+ OUString aUStrBase = aUserDirectoryURL + "/test1/dir1";
+ createTestDirectory(aUStrBase);
+
+ OUString suAssume = aUserDirectoryURL.concat("/mytestfile");
+ check_getAbsoluteFileURL(aUStrBase, "../../mytestfile" , osl::FileBase::E_None, suAssume);
+ deleteTestDirectory(aUStrBase);
+ deleteTestDirectory(aUStrUpBase);
+ }
+
+ // testing two methods:
+ // static inline RC getSystemPathFromFileURL(const OUString& ustrFileURL,
+ // OUString& ustrSystemPath)
+ // static RC getFileURLFromSystemPath(const OUString & ustrSystemPath,
+ // OUString & ustrFileURL);
+
+ class SystemPath_FileURL : public CppUnit::TestFixture
+ {
+ public:
+ void getSystemPathFromFileURL_001_1();
+ void getSystemPathFromFileURL_001_2();
+ void getSystemPathFromFileURL_001_21();
+ void getSystemPathFromFileURL_001_22();
+ void getSystemPathFromFileURL_001_3();
+ void getSystemPathFromFileURL_001_31();
+ void getSystemPathFromFileURL_001_4();
+ void getSystemPathFromFileURL_001_41();
+ void getSystemPathFromFileURL_001_5();
+ void getSystemPathFromFileURL_001_51();
+ void getSystemPathFromFileURL_001_52();
+ void getSystemPathFromFileURL_001_53();
+ void getSystemPathFromFileURL_001_6();
+ void getSystemPathFromFileURL_001_61();
+ void getSystemPathFromFileURL_001_7();
+ void getSystemPathFromFileURL_001_71();
+ void getSystemPathFromFileURL_001_8();
+ void getSystemPathFromFileURL_001_81();
+ void getSystemPathFromFileURL_001_9();
+ void getSystemPathFromFileURL_001_91();
+ void getSystemPathFromFileURL_001_92();
+ void getSystemPathFromFileURL_004();
+ void getSystemPathFromFileURL_005();
+
+ // test case for getFileURLFromSystemPath
+ void getFileURLFromSystemPath_001();
+ void getFileURLFromSystemPath_002();
+ void getFileURLFromSystemPath_003();
+ void getFileURLFromSystemPath_004();
+ void getFileURLFromSystemPath_004_1();
+ void getFileURLFromSystemPath_005();
+
+ CPPUNIT_TEST_SUITE(SystemPath_FileURL);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_1);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_2);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_21);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_22);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_3);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_31);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_4);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_41);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_5);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_51);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_52);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_53);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_6);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_61);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_7);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_71);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_8);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_81);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_9);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_91);
+ CPPUNIT_TEST(getSystemPathFromFileURL_001_92);
+ CPPUNIT_TEST(getSystemPathFromFileURL_004);
+ CPPUNIT_TEST(getSystemPathFromFileURL_005);
+ CPPUNIT_TEST(getFileURLFromSystemPath_001);
+ CPPUNIT_TEST(getFileURLFromSystemPath_002);
+ CPPUNIT_TEST(getFileURLFromSystemPath_003);
+ CPPUNIT_TEST(getFileURLFromSystemPath_004);
+ CPPUNIT_TEST(getFileURLFromSystemPath_004_1);
+ CPPUNIT_TEST(getFileURLFromSystemPath_005);
+ CPPUNIT_TEST_SUITE_END();
+
+ private:
+ void check_SystemPath_FileURL(
+ OString const& _sSource,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sAssumeResultStr,
+ bool bDirection = true);
+
+ void checkWNTBehaviour_getSystemPathFromFileURL(
+ OString const& _sURL,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sWNTAssumeResultString);
+
+ void checkUNXBehaviour_getSystemPathFromFileURL(
+ OString const& _sURL,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sUnixAssumeResultString);
+
+ void checkWNTBehaviour_getFileURLFromSystemPath(OString const& _sSysPath,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sWNTAssumeResultString);
+
+ void checkUNXBehaviour_getFileURLFromSystemPath(
+ OString const& _sSysPath,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sUnixAssumeResultString);
+
+ };
+
+ // if bDirection==sal_True, check getSystemPathFromFileURL
+ // if bDirection==sal_False, check getFileURLFromSystemPath
+ void SystemPath_FileURL::check_SystemPath_FileURL(
+ OString const& _sSource,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sAssumeResultStr,
+ bool bDirection)
+ {
+ // PRE: URL as String
+ OUString suSource;
+ OUString suStr;
+ suSource = OStringToOUString(_sSource, RTL_TEXTENCODING_UTF8);
+ osl::FileBase::RC nError;
+
+ if (bDirection)
+ nError = osl::FileBase::getSystemPathFromFileURL(suSource, suStr);
+ else
+ nError = osl::FileBase::getFileURLFromSystemPath(suSource, suStr);
+
+ // if the given string is gt length 0,
+ // we check also this string
+ OString sStr = OUStringToOString(suStr, RTL_TEXTENCODING_UTF8);
+ OString sError = errorToString(nError);
+
+ if (bDirection)
+ printf("getSystemPathFromFileURL('%s') deliver system path: '%s', error '%s'\n",
+ _sSource.getStr(), sStr.getStr(), sError.getStr());
+ else
+ printf("getFileURLFromSystemPath('%s') deliver File URL: '%s', error '%s'\n",
+ _sSource.getStr(), sStr.getStr(), sError.getStr());
+
+ if (!_sAssumeResultStr.isEmpty())
+ {
+ bool bStrAreEqual = _sAssumeResultStr == sStr;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Assumption is wrong",
+ _nAssumeError, nError);
+ CPPUNIT_ASSERT_MESSAGE("Assumption is wrong",
+ bStrAreEqual);
+ }
+ else
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Assumption is wrong", _nAssumeError, nError);
+ }
+ }
+
+ void SystemPath_FileURL::checkWNTBehaviour_getSystemPathFromFileURL(
+ OString const& _sURL,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sWNTAssumeResultString)
+ {
+#if defined(_WIN32)
+ check_SystemPath_FileURL(_sURL, _nAssumeError, _sWNTAssumeResultString);
+#else
+ (void)_sURL;
+ (void)_nAssumeError;
+ (void)_sWNTAssumeResultString;
+#endif
+ }
+
+ void SystemPath_FileURL::checkUNXBehaviour_getSystemPathFromFileURL(
+ OString const& _sURL,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sUnixAssumeResultString)
+ {
+#if (defined UNX)
+ check_SystemPath_FileURL(_sURL, _nAssumeError, _sUnixAssumeResultString);
+#else
+ (void)_sURL;
+ (void)_nAssumeError;
+ (void)_sUnixAssumeResultString;
+#endif
+ }
+
+ void SystemPath_FileURL::checkWNTBehaviour_getFileURLFromSystemPath(
+ OString const& _sSysPath,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sWNTAssumeResultString)
+ {
+#if defined(_WIN32)
+ check_SystemPath_FileURL(_sSysPath, _nAssumeError, _sWNTAssumeResultString, false);
+#else
+ (void)_sSysPath;
+ (void)_nAssumeError;
+ (void)_sWNTAssumeResultString;
+#endif
+ }
+
+ void SystemPath_FileURL::checkUNXBehaviour_getFileURLFromSystemPath(
+ OString const& _sSysPath,
+ osl::FileBase::RC _nAssumeError,
+ OString const& _sUnixAssumeResultString)
+ {
+#if (defined UNX)
+ check_SystemPath_FileURL(_sSysPath, _nAssumeError, _sUnixAssumeResultString, false);
+#else
+ (void)_sSysPath;
+ (void)_nAssumeError;
+ (void)_sUnixAssumeResultString;
+#endif
+ }
+
+ /** Test for getSystemPathFromFileURL()
+ this test is split into 2 different OS tests,
+ the first function checkUNXBehaviour... runs only on Unix based Systems,
+ the second only on windows based systems
+ the first parameter are a file URL where we want to get the system path of,
+ the second parameter is the assumed error of the osl_getSystemPathFromFileURL() function,
+ the third parameter is the assumed result string, the string will only test, if its length is greater 0
+ */
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_1()
+ {
+ OString sURL("");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_2()
+ {
+ OString sURL("/");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "\\");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_21()
+ {
+ /* From RFC3986, "2.2. Reserved Characters":
+
+ "The purpose of reserved characters is to provide a set of delimiting
+ characters that are distinguishable from other data within a URI.
+ URIs that differ in the replacement of a reserved character with its
+ corresponding percent-encoded octet are not equivalent. Percent-
+ encoding a reserved character, or decoding a percent-encoded octet
+ that corresponds to a reserved character, will change how the URI is
+ interpreted by most applications. Thus, characters in the reserved
+ set are protected from normalization and are therefore safe to be
+ used by scheme-specific and producer-specific algorithms for
+ delimiting data subcomponents within a URI."
+
+ In other words, %2F ("/") is NOT the same as /.
+ */
+ OString sURL("%2F");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_22()
+ {
+ OString sURL("file:///tmp%2Fmydir");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_3()
+ {
+ OString sURL("a");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "a");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "a");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_31()
+ {
+ OString sURL("tmpname");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "tmpname");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "tmpname");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_4()
+ {
+ OString sURL("file://");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_41()
+ {
+ OString sURL("file://localhost/tmp");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_5()
+ {
+ OString sURL("file:///tmp");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_51()
+ {
+ OString sURL("file://c:/tmp");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_52()
+ {
+ OString sURL("file:///c:/tmp");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_53()
+ {
+ OString sURL("file:///c|/tmp");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c|/tmp");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_6()
+ {
+ OString sURL("file:///tmp/first");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp/first");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_61()
+ {
+ OString sURL("file:///c:/tmp/first");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp/first");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp\\first");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_7()
+ {
+ OString sURL("file:///tmp/../second");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp/../second");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_71()
+ {
+ OString sURL("file:///c:/tmp/../second");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp/../second");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp\\..\\second");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_8()
+ {
+ OString sURL("../tmp");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "../tmp");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "..\\tmp");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_81()
+ {
+#if 0
+ OString sURL("file://~/tmp");
+ char* home_path;
+ home_path = getenv("HOME");
+ OString expResult(home_path);
+ expResult += "/tmp";
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, expResult);
+#endif
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_9()
+ {
+ OString sURL("file:///tmp/first%20second");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp/first second");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_91()
+ {
+ OString sURL("file:///c:/tmp/first%20second");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp/first second");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp\\first second");
+ }
+
+ void SystemPath_FileURL::getSystemPathFromFileURL_001_92()
+ {
+ OString sURL("ca@#;+.,$///78no%01ni..name");
+ checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, "");
+ }
+
+ // normal legal case
+ void SystemPath_FileURL::getSystemPathFromFileURL_004()
+ {
+ OUString aUStr;
+ OUString aUNormalURL(aTmpName6);
+ OUString aUResultURL (aSysPath4);
+ osl::FileBase::RC nError = osl::FileBase::getSystemPathFromFileURL(aUNormalURL, aUStr);
+
+ bool bOk = compareFileName(aUStr, aUResultURL);
+
+ OString sError =
+ "test for getSystemPathFromFileURL(' " +
+ OUStringToOString(aUNormalURL, RTL_TEXTENCODING_ASCII_US) +
+ " ') function:use an absolute file URL, " +
+ outputError(OUStringToOString(aUStr, RTL_TEXTENCODING_ASCII_US),
+ OUStringToOString(aUResultURL, RTL_TEXTENCODING_ASCII_US));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_None, nError);
+ CPPUNIT_ASSERT_MESSAGE(sError.getStr(), bOk);
+
+ }
+
+ // CJK characters case
+ void SystemPath_FileURL::getSystemPathFromFileURL_005()
+ {
+ OUString aUStr;
+ createTestDirectory(aTmpName10);
+ OUString aUNormalURL(aTmpName10);
+ OUString aUResultURL (aSysPath5);
+
+ osl::FileBase::RC nError = osl::FileBase::getSystemPathFromFileURL(aUNormalURL, aUStr);
+
+ bool bOk = compareFileName(aUStr, aUResultURL);
+
+ OString sError =
+ "test for getSystemPathFromFileURL(' " +
+ OUStringToOString(aUNormalURL, RTL_TEXTENCODING_ASCII_US) +
+ " ') function:use a CJK coded absolute URL, " +
+ outputError(OUStringToOString(aUStr, RTL_TEXTENCODING_ASCII_US),
+ OUStringToOString(aUResultURL, RTL_TEXTENCODING_ASCII_US));
+ deleteTestDirectory(aTmpName10);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_None, nError);
+ CPPUNIT_ASSERT_MESSAGE(sError.getStr(), bOk);
+ }
+
+ void SystemPath_FileURL::getFileURLFromSystemPath_001()
+ {
+ OString sSysPath("~/tmp");
+ char* home_path;
+ home_path = getenv("HOME");
+ OString expResult(home_path);
+ expResult = "file://"+ expResult + "/tmp";
+ checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, expResult);
+ checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "~/tmp");
+ }
+
+ void SystemPath_FileURL::getFileURLFromSystemPath_002()
+ {
+ OString sSysPath("c:/tmp");
+ checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "c:/tmp");
+ checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "file:///c:/tmp");
+ }
+
+ void SystemPath_FileURL::getFileURLFromSystemPath_003()
+ {
+ OString sSysPath("file:///temp");
+ checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getFileURLFromSystemPath_004()
+ {
+ OString sSysPath("//tmp//first start");
+ checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "file:///tmp/first%20start");
+ checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getFileURLFromSystemPath_004_1()
+ {
+ OString sSysPath("/tmp///first start");
+ checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "file:///tmp/first%20start");
+ checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
+ }
+
+ void SystemPath_FileURL::getFileURLFromSystemPath_005()
+ {
+ OString sSysPath("");
+ checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
+ checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, "");
+ }
+
+ // testing the method
+ // static inline RC searchFileURL( const OUString& ustrFileName,
+ // const OUString& ustrSearchPath,
+ // OUString& ustrFileURL)
+
+ class searchFileURL : public CppUnit::TestFixture
+ {
+ private:
+ OUString aUStr;
+ osl::FileBase::RC nError1, nError2, nError3,nError4;
+
+ public:
+ searchFileURL()
+ : nError1(osl::FileBase::E_None)
+ , nError2(osl::FileBase::E_None)
+ , nError3(osl::FileBase::E_None)
+ , nError4(osl::FileBase::E_None) {}
+
+ void searchFileURL_001()
+ {
+ /* search file is passed by system filename */
+ nError1 = osl::FileBase::searchFileURL(aTmpName1, aUserDirectorySys, aUStr);
+ /* search file is passed by full qualified file URL */
+ nError2 = osl::FileBase::searchFileURL(aCanURL1, aUserDirectorySys, aUStr);
+ /* search file is passed by relative file path */
+ nError3 = osl::FileBase::searchFileURL(aRelURL4, aUserDirectorySys, aUStr);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched files that is not exist, but it reply invalid error, did not pass in (W32) ",
+ osl::FileBase::E_NOENT, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched files that is not exist, but it reply invalid error, did not pass in (W32) ",
+ osl::FileBase::E_NOENT, nError2);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched files that is not exist, but it reply invalid error, did not pass in (W32) ",
+ osl::FileBase::E_NOENT, nError3);
+ }
+
+ void searchFileURL_002()
+ {
+ /* search file is passed by system filename */
+ OUString strRootSys = INetURLObject(aTempDirectoryURL).GetLastName();
+ nError1 = osl::FileBase::searchFileURL(aTempDirectorySys, strRootSys, aUStr);
+ bool bOk1 = compareFileName(aUStr, aTempDirectoryURL);
+ /* search file is passed by full qualified file URL */
+ nError2 = osl::FileBase::searchFileURL(aTempDirectoryURL, strRootSys, aUStr);
+ bool bOk2 = compareFileName(aUStr, aTempDirectoryURL);
+ /* search file is passed by relative file path */
+ nError3 = osl::FileBase::searchFileURL(aRelURL5, strRootSys, aUStr);
+ bool bOk3 = compareFileName(aUStr, aTempDirectoryURL);
+ /* search file is passed by an exist file */
+ createTestFile(aCanURL1);
+ nError4 = osl::FileBase::searchFileURL(aCanURL4, aUserDirectorySys, aUStr);
+ bool bOk4 = compareFileName(aUStr, aCanURL1);
+ deleteTestFile(aCanURL1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.",
+ osl::FileBase::E_None, nError2);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.",
+ osl::FileBase::E_None, nError3);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.",
+ osl::FileBase::E_None, nError4);
+ CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.",
+ bOk1);
+ CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.",
+ bOk2);
+ CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.",
+ bOk3);
+ CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.",
+ bOk4);
+ }
+
+ void searchFileURL_003()
+ {
+ OUString aSystemPathList(aRootSys + PATH_LIST_DELIMITER + aTempDirectorySys + PATH_LIST_DELIMITER + aRootSys + "system/path");
+ nError1 = osl::FileBase::searchFileURL(aUserDirectoryURL, aSystemPathList, aUStr);
+ bool bOk = compareFileName(aUStr, aUserDirectoryURL);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: search directory is a list of system paths",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: search directory is a list of system paths",
+ bOk);
+ }
+
+ void searchFileURL_004()
+ {
+ OUString aSystemPathList(aRootSys + PATH_LIST_DELIMITER + aTempDirectorySys + PATH_LIST_DELIMITER + aRootSys + "system/path/../name");
+ nError1 = osl::FileBase::searchFileURL(aUserDirectoryURL, aSystemPathList, aUStr);
+ bool bOk = compareFileName(aUStr, aUserDirectoryURL);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: search directory is a list of system paths",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: search directory is a list of system paths",
+ bOk);
+ }
+
+ void searchFileURL_005()
+ {
+ nError1 = osl::FileBase::searchFileURL(aUserDirectoryURL, aNullURL, aUStr);
+ bool bOk = compareFileName(aUStr, aUserDirectoryURL);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: search directory is NULL",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: search directory is NULL",
+ bOk);
+ }
+
+ CPPUNIT_TEST_SUITE(searchFileURL);
+ CPPUNIT_TEST(searchFileURL_001);
+ CPPUNIT_TEST(searchFileURL_002);
+ CPPUNIT_TEST(searchFileURL_003);
+ CPPUNIT_TEST(searchFileURL_004);
+ CPPUNIT_TEST(searchFileURL_005);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // static inline RC getTempDirURL(OUString& ustrTempDirURL)
+
+ class getTempDirURL : public CppUnit::TestFixture
+ {
+ private:
+ OUString aUStr;
+ osl::FileBase::RC nError;
+
+ public:
+ getTempDirURL() : nError(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ nError = osl::FileBase::getTempDirURL(aUStr);
+ }
+
+ void getTempDirURL_001()
+ {
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getTempDirURL function: execution",
+ osl::FileBase::E_None, nError);
+ }
+
+ void getTempDirURL_002()
+ {
+ CPPUNIT_ASSERT_MESSAGE("test for getTempDirURL function: test for open and write access rights",
+ checkDirectory(aUStr, oslCheckMode::OpenAccess));
+ CPPUNIT_ASSERT_MESSAGE("test for getTempDirURL function: test for open and write access rights",
+ checkDirectory(aUStr, oslCheckMode::ReadAccess));
+ CPPUNIT_ASSERT_MESSAGE("test for getTempDirURL function: test for open and write access rights",
+ checkDirectory(aUStr, oslCheckMode::WriteAccess));
+ }
+
+ CPPUNIT_TEST_SUITE(getTempDirURL);
+ CPPUNIT_TEST(getTempDirURL_001);
+ CPPUNIT_TEST(getTempDirURL_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // static inline RC createTempFile(OUString* pustrDirectoryURL,
+ // oslFileHandle* pHandle,
+ // OUString* pustrTempFileURL)
+
+ class createTempFile : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1, nError2;
+ bool bOK;
+
+ std::unique_ptr<oslFileHandle> pHandle;
+ std::unique_ptr<OUString> pUStr_DirURL;
+ std::unique_ptr<OUString> pUStr_FileURL;
+
+ public:
+ createTempFile()
+ : nError1(osl::FileBase::E_None)
+ , nError2(osl::FileBase::E_None)
+ , bOK(false)
+ {
+ }
+
+ void setUp() override
+ {
+ pHandle.reset(new oslFileHandle());
+ pUStr_DirURL.reset(new OUString(aUserDirectoryURL));
+ pUStr_FileURL.reset(new OUString());
+ }
+
+ void tearDown() override
+ {
+ pUStr_DirURL.reset();
+ pUStr_FileURL.reset();
+ pHandle.reset();
+ }
+
+ void createTempFile_001()
+ {
+ nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), pHandle.get(), pUStr_FileURL.get());
+ File testFile(*pUStr_FileURL);
+ nError2 = testFile.open(osl_File_OpenFlag_Create);
+
+ if (nError2 == osl::FileBase::E_EXIST)
+ {
+ osl_closeFile(*pHandle);
+ deleteTestFile(*pUStr_FileURL);
+ }
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for createTempFile function: create temp file and test the existence",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_MESSAGE("test for createTempFile function: create temp file and test the existence",
+ (pHandle != nullptr));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for createTempFile function: create temp file and test the existence",
+ osl::FileBase::E_EXIST, nError2);
+ }
+
+ void createTempFile_002()
+ {
+ bOK = false;
+ nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), pHandle.get(), pUStr_FileURL.get());
+ File testFile(*pUStr_FileURL);
+ nError2 = testFile.open(osl_File_OpenFlag_Create);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_MESSAGE("createTempFile function: create a temp file, but it does not exist",
+ (pHandle != nullptr));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist",
+ osl::FileBase::E_EXIST, nError2);
+
+ // check file if have the write permission
+ if (nError2 == osl::FileBase::E_EXIST)
+ {
+ bOK = ifFileCanWrite(*pUStr_FileURL);
+ osl_closeFile(*pHandle);
+ deleteTestFile(*pUStr_FileURL);
+ }
+
+ CPPUNIT_ASSERT_MESSAGE("test for open and write access rights, in (W32), it did not have write access right, but it should be writable.",
+ bOK);
+ }
+
+ void createTempFile_003()
+ {
+ nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), pHandle.get(), nullptr);
+ // the temp file will be removed when return from createTempFile
+ bOK = (pHandle != nullptr && nError1 == osl::FileBase::E_None);
+ if (bOK)
+ osl_closeFile(*pHandle);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for createTempFile function: set pUStrFileURL to 0 to let it remove the file after call.",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_MESSAGE("test for createTempFile function: set pUStrFileURL to 0 to let it remove the file after call.",
+ bOK);
+ }
+
+ void createTempFile_004()
+ {
+ nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), nullptr, pUStr_FileURL.get());
+ bOK = (pUStr_FileURL != nullptr);
+ CPPUNIT_ASSERT(bOK);
+ File testFile(*pUStr_FileURL);
+ nError2 = testFile.open(osl_File_OpenFlag_Create);
+ deleteTestFile(*pUStr_FileURL);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist",
+ osl::FileBase::E_EXIST, nError2);
+ CPPUNIT_ASSERT_MESSAGE("createTempFile function: create a temp file, but it does not exist",
+ bOK);
+
+ }
+
+ CPPUNIT_TEST_SUITE(createTempFile);
+ CPPUNIT_TEST(createTempFile_001);
+ CPPUNIT_TEST(createTempFile_002);
+ CPPUNIT_TEST(createTempFile_003);
+ CPPUNIT_TEST(createTempFile_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // FIXME: remove the _disabled to enable:
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileBase::getAbsoluteFileURL, "osl_osl::FileBase_disabled");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileBase::SystemPath_FileURL, "osl_osl::FileBase");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileBase::searchFileURL, "osl_osl::FileBase_disabled");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileBase::getTempDirURL, "osl_osl::FileBase_disabled");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileBase::createTempFile, "osl_osl::FileBase_disabled");
+
+ CPPUNIT_REGISTRY_ADD_TO_DEFAULT("osl_osl::FileBase");
+}
+
+namespace osl_FileStatus
+{
+ // testing the method
+ // FileStatus(sal_uInt32 nMask): _nMask(nMask)
+ class ctors : public CppUnit::TestFixture
+ {
+ private:
+ OUString aUStr;
+ osl::FileBase::RC nError1;
+ DirectoryItem rItem;
+
+ public:
+ ctors() : nError1(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ Directory aDir(aTmpName3);
+ nError1 = aDir.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = aDir.getNextItem(rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ aDir.close();
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void ctors_001()
+ {
+ FileStatus rFileStatus(osl_FileStatus_Mask_All);
+ nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ aUStr = rFileStatus.getFileName();
+
+ CPPUNIT_ASSERT_MESSAGE("test for ctors function: mask all and see the file name",
+ compareFileName(aUStr, aTmpName2));
+ }
+
+ void ctors_002()
+ {
+ FileStatus rFileStatus(0);
+ nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ aUStr = rFileStatus.getFileName();
+
+ CPPUNIT_ASSERT_MESSAGE("test for ctors function: mask is empty",
+ compareFileName(aUStr, aNullURL));
+ }
+
+ CPPUNIT_TEST_SUITE(ctors);
+ CPPUNIT_TEST(ctors_001);
+ CPPUNIT_TEST(ctors_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline sal_Bool isValid(sal_uInt32 nMask) const
+
+ class isValid : public CppUnit::TestFixture
+ {
+ private:
+ std::unique_ptr<Directory> pDir;
+ DirectoryItem rItem_file, rItem_link;
+
+ public:
+ isValid()
+ {
+ }
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ pDir.reset(new Directory(aTmpName3));
+ osl::FileBase::RC nError1 = pDir->open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = pDir->getNextItem(rItem_file, 1);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ osl::FileBase::RC nError1 = pDir->close();
+ pDir.reset();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1);
+
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void isValid_001()
+ {
+ sal_uInt32 mask = 0;
+ FileStatus rFileStatus(mask);
+ osl::FileBase::RC nError1 = rItem_file.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ bool bOk = rFileStatus.isValid(mask);
+
+ CPPUNIT_ASSERT_MESSAGE("test for isValid function: no fields specified", bOk);
+ }
+
+ void check_FileStatus(FileStatus const& _aStatus)
+ {
+ OString sStat;
+ if (_aStatus.isValid(osl_FileStatus_Mask_Type))
+ sStat += "type ";
+ if (_aStatus.isValid(osl_FileStatus_Mask_Attributes))
+ sStat += "attributes ";
+ if (_aStatus.isValid(osl_FileStatus_Mask_CreationTime))
+ sStat += "ctime ";
+ if (_aStatus.isValid(osl_FileStatus_Mask_AccessTime))
+ sStat += "atime ";
+ if (_aStatus.isValid(osl_FileStatus_Mask_ModifyTime))
+ sStat += "mtime ";
+ if (_aStatus.isValid(osl_FileStatus_Mask_FileSize))
+ sStat += "filesize ";
+ if (_aStatus.isValid(osl_FileStatus_Mask_FileName))
+ sStat += "filename ";
+ if (_aStatus.isValid(osl_FileStatus_Mask_FileURL))
+ sStat += "fileurl ";
+ printf("mask: %s\n", sStat.getStr());
+ }
+
+ void isValid_002()
+ {
+ createTestFile(aTmpName6);
+ sal_uInt32 mask_file = osl_FileStatus_Mask_Type |
+ osl_FileStatus_Mask_Attributes |
+ osl_FileStatus_Mask_CreationTime |
+ osl_FileStatus_Mask_AccessTime |
+ osl_FileStatus_Mask_ModifyTime |
+ osl_FileStatus_Mask_FileSize |
+ osl_FileStatus_Mask_FileName |
+ osl_FileStatus_Mask_FileURL;
+
+ FileStatus rFileStatus(mask_file);
+ DirectoryItem::get(aTmpName6, rItem_file);
+ osl::FileBase::RC nError1 = rItem_file.getFileStatus(rFileStatus);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1);
+
+ check_FileStatus(rFileStatus);
+ deleteTestFile(aTmpName6);
+
+ }
+
+ /** Check if is a valid linked file.
+
+ Link is not defined in Windows, and on Linux, we can not get the directory item of the linked file.
+ We have to defer to filesystems, normal filesystems support links (EXT2, ...), castrated filesystems
+ don't have links (FAT, FAT32) and Windows NT NTFS support links, but the Windows API doesn't :-(
+ */
+ void isValid_003()
+ {
+#if defined (UNX)
+ sal_Int32 fd;
+
+ OUString aUStr_LnkFileSys(aTempDirectorySys), aUStr_SrcFileSys(aTempDirectorySys);
+ aUStr_LnkFileSys += aSlashURL + getCurrentPID() + "/tmpdir/link.file";
+ aUStr_SrcFileSys += aSlashURL + getCurrentPID() + "/tmpdir/tmpname";
+
+ OString strLinkFileName;
+ OString strSrcFileName;
+ strLinkFileName = OUStringToOString(aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US);
+ strSrcFileName = OUStringToOString(aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US);
+
+ // create a link file and link it to file "/tmp/PID/tmpdir/tmpname"
+ fd = symlink(strSrcFileName.getStr(), strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), fd);
+
+ // testDirectory is "/tmp/PID/tmpdir/"
+ Directory testDirectory(aTmpName3);
+ testDirectory.open();
+ OUString aFileName ("link.file");
+ bool bOk = false;
+ while (true)
+ {
+ osl::FileBase::RC nError1 = testDirectory.getNextItem(rItem_link, 4);
+
+ if (nError1 == osl::FileBase::E_None)
+ {
+ sal_uInt32 mask_link = osl_FileStatus_Mask_FileName | osl_FileStatus_Mask_LinkTargetURL;
+ FileStatus rFileStatus(mask_link);
+ rItem_link.getFileStatus(rFileStatus);
+
+ if (compareFileName(rFileStatus.getFileName(), aFileName))
+ {
+ if (rFileStatus.isValid(osl_FileStatus_Mask_LinkTargetURL))
+ {
+ bOk = true;
+ break;
+ }
+ }
+ }
+ else
+ {
+ break;
+ }
+ };
+
+ fd = remove(strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), fd);
+
+ CPPUNIT_ASSERT_MESSAGE("test for isValid function: link file, check for LinkTargetURL", bOk);
+#endif
+ }
+
+ void isValid_004()
+ {
+ sal_uInt32 mask_file_all = osl_FileStatus_Mask_All;
+ FileStatus rFileStatus_all(mask_file_all);
+ osl::FileBase::RC nError1 = rItem_file.getFileStatus(rFileStatus_all);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ check_FileStatus(rFileStatus_all);
+
+ sal_uInt32 mask_file_val = osl_FileStatus_Mask_Validate;
+ FileStatus rFileStatus_val(mask_file_val);
+ nError1 = rItem_file.getFileStatus(rFileStatus_val);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ check_FileStatus(rFileStatus_val);
+ }
+
+ CPPUNIT_TEST_SUITE(isValid);
+ CPPUNIT_TEST(isValid_001);
+ CPPUNIT_TEST(isValid_002);
+ CPPUNIT_TEST(isValid_003);
+ CPPUNIT_TEST(isValid_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline Type getFileType() const
+
+ class getFileType : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1;
+
+ DirectoryItem m_aItem_1, m_aItem_2, m_aVolumeItem, m_aFifoItem;
+ DirectoryItem m_aLinkItem, m_aSocketItem, m_aSpecialItem;
+
+ public:
+ getFileType() : nError1(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempfile: $TEMP/tmpdir/tmpname.
+ // a tempdirectory: $TEMP/tmpdir/tmpdir.
+ // use $ROOT/staroffice as volume ---> use dev/fd as volume.
+ // and get their directory item.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName3, aTmpName2);
+ createTestDirectory(aTmpName3, aTmpName1);
+
+ std::unique_ptr<Directory> xDir(new Directory(aTmpName3));
+ nError1 = xDir->open();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("open aTmpName3 failed!", osl::FileBase::E_None, nError1);
+ // getNextItem can not assure which item retrieved
+ nError1 = xDir->getNextItem(m_aItem_1, 1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("get first item failed!", osl::FileBase::E_None, nError1);
+
+ nError1 = xDir->getNextItem(m_aItem_2);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("get second item failed!", osl::FileBase::E_None, nError1);
+ xDir->close();
+ // FIXME mindy: failed on my RH9, so removed temporarily
+ // nError1 = DirectoryItem::get(aVolURL2, m_aVolumeItem);
+ // CPPUNIT_ASSERT_MESSAGE("get volume item failed!", osl::FileBase::E_None == nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove all in $TEMP/tmpdir.
+ deleteTestDirectory(aTmpName3, aTmpName1);
+ deleteTestFile(aTmpName3, aTmpName2);
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void getFileType_001()
+ {
+ FileStatus rFileStatus(osl_FileStatus_Mask_Type | osl_FileStatus_Mask_FileName);
+ nError1 = m_aItem_1.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("getFileStatus failed", osl::FileBase::E_None, nError1);
+
+ check_FileType(rFileStatus);
+ }
+
+ void check_FileType(osl::FileStatus const& _rFileStatus)
+ {
+ if (_rFileStatus.isValid(osl_FileStatus_Mask_FileName))
+ {
+ OUString suFilename = _rFileStatus.getFileName();
+
+ if (_rFileStatus.isValid(osl_FileStatus_Mask_Type))
+ {
+ osl::FileStatus::Type eType = _rFileStatus.getFileType();
+ bool bOK = false;
+
+ if (compareFileName(suFilename, aTmpName2))
+ bOK = (eType == osl::FileStatus::Regular);
+
+ if (compareFileName(suFilename, aTmpName1))
+ bOK = (eType == FileStatus::Directory);
+
+ CPPUNIT_ASSERT_MESSAGE("test for getFileType function: ", bOK);
+ }
+ }
+ // LLA: it's not a bug, if a FileStatus not exist, so no else
+ }
+
+ void getFileType_002()
+ {
+ FileStatus rFileStatus(osl_FileStatus_Mask_Type | osl_FileStatus_Mask_FileName);
+ nError1 = m_aItem_2.getFileStatus(rFileStatus);
+
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ check_FileType(rFileStatus);
+ }
+
+ void getFileType_003()
+ {
+ }
+
+ void getFileType_007()
+ {
+#if defined(__sun) // Special file is different in Windows
+ nError1 = DirectoryItem::get(aTypeURL2, m_aSpecialItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // check for File type
+ FileStatus rFileStatus(osl_FileStatus_Mask_Type);
+ nError1 = m_aSpecialItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ if (rFileStatus.isValid(osl_FileStatus_Mask_Type))
+ {
+ osl::FileStatus::Type eType = rFileStatus.getFileType();
+
+ CPPUNIT_ASSERT_MESSAGE("test for getFileType function: Special, Solaris version ",
+ (eType == FileStatus::Special));
+ }
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE(getFileType);
+ CPPUNIT_TEST(getFileType_001);
+ CPPUNIT_TEST(getFileType_002);
+ CPPUNIT_TEST(getFileType_003);
+ CPPUNIT_TEST(getFileType_007);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline sal_uInt64 getAttributes() const
+
+ class getAttributes : public CppUnit::TestFixture
+ {
+ private:
+ OUString aTypeURL, aTypeURL_Hid;
+ osl::FileBase::RC nError;
+ DirectoryItem rItem, rItem_hidden;
+
+ public:
+ getAttributes() : nError(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ aTypeURL = aUserDirectoryURL.copy(0);
+ concatURL(aTypeURL, aTmpName2);
+ createTestFile(aTypeURL);
+ nError = DirectoryItem::get(aTypeURL, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ aTypeURL_Hid = aUserDirectoryURL.copy(0);
+ concatURL(aTypeURL_Hid, aHidURL1);
+ createTestFile(aTypeURL_Hid);
+ nError = DirectoryItem::get(aTypeURL_Hid, rItem_hidden);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ }
+
+ void tearDown() override
+ {
+ deleteTestFile(aTypeURL);
+ deleteTestFile(aTypeURL_Hid);
+ }
+
+#if (defined UNX)
+// windows only has 3 file attributes: normal, readonly and hidden
+ void getAttributes_001()
+ {
+ changeFileMode(aTypeURL, S_IRUSR | S_IRGRP | S_IROTH);
+
+ FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
+ nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: ReadOnly, GrpRead, OwnRead, OthRead(UNX version) ",
+ static_cast<sal_uInt64>(osl_File_Attribute_ReadOnly | osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead),
+ rFileStatus.getAttributes());
+ }
+#else // Windows version
+ void getAttributes_001()
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: ReadOnly, GrpRead, OwnRead, OthRead(Windows version)",
+ 1, 1);
+ }
+#endif
+
+ void getAttributes_002()
+ {
+#if (defined UNX)
+ changeFileMode(aTypeURL, S_IXUSR | S_IXGRP | S_IXOTH);
+
+ FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
+ nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: Executable, GrpExe, OwnExe, OthExe, the result is Readonly, Executable, GrpExe, OwnExe, OthExe, it partly not pass(Solaris version)",
+ static_cast<sal_uInt64>(osl_File_Attribute_ReadOnly | osl_File_Attribute_Executable | osl_File_Attribute_GrpExe | osl_File_Attribute_OwnExe | osl_File_Attribute_OthExe),
+ rFileStatus.getAttributes());
+#endif
+ }
+
+#if (defined UNX)
+ void getAttributes_003()
+ {
+ changeFileMode(aTypeURL, S_IWUSR | S_IWGRP | S_IWOTH);
+
+ FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
+ nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: GrpWrite, OwnWrite, OthWrite(Solaris version)",
+ static_cast<sal_uInt64>(osl_File_Attribute_GrpWrite | osl_File_Attribute_OwnWrite | osl_File_Attribute_OthWrite),
+ rFileStatus.getAttributes());
+ }
+#else // Windows version
+ void getAttributes_003()
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: GrpWrite, OwnWrite, OthWrite(Windows version)",
+ 1, 1);
+ }
+#endif
+
+#if (defined UNX) // hidden file definition may be different in Windows
+ void getAttributes_004()
+ {
+ sal_Int32 test_Attributes = osl_File_Attribute_Hidden;
+ FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
+ nError = rItem_hidden.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ test_Attributes &= rFileStatus.getAttributes();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: Hidden files(Solaris version)",
+ static_cast<sal_Int32>(osl_File_Attribute_Hidden), test_Attributes);
+ }
+#else // Windows version
+ void getAttributes_004()
+ {
+ OUString aUserHiddenFileURL ("file:///c:/AUTOEXEC.BAT");
+ nError = DirectoryItem::get(aUserHiddenFileURL, rItem_hidden);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("get item fail", osl::FileBase::E_None, nError);
+ FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
+ nError = rItem_hidden.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ CPPUNIT_ASSERT_MESSAGE("Hidden files(Windows version), please check if hidden file c:/AUTOEXEC.BAT exists ",
+ (rFileStatus.getAttributes() & osl_File_Attribute_Hidden)!= 0);
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE(getAttributes);
+ CPPUNIT_TEST(getAttributes_001);
+ CPPUNIT_TEST(getAttributes_002);
+ CPPUNIT_TEST(getAttributes_003);
+ CPPUNIT_TEST(getAttributes_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline TimeValue getAccessTime() const
+
+ class getAccessTime : public CppUnit::TestFixture
+ {
+ private:
+ OUString aTypeURL;
+ osl::FileBase::RC nError;
+ DirectoryItem rItem;
+
+ public:
+ getAccessTime() : nError(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ aTypeURL = aUserDirectoryURL.copy(0);
+ concatURL(aTypeURL, aTmpName2);
+ createTestFile(aTypeURL);
+ nError = DirectoryItem::get(aTypeURL, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ }
+
+ void tearDown() override
+ {
+ deleteTestFile(aTypeURL);
+ }
+
+ void getAccessTime_001()
+ {
+ TimeValue *pTV_current = nullptr;
+ CPPUNIT_ASSERT((pTV_current = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+ TimeValue *pTV_access = nullptr;
+ CPPUNIT_ASSERT((pTV_access = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+
+ FileStatus rFileStatus(osl_FileStatus_Mask_AccessTime);
+ nError = rItem.getFileStatus(rFileStatus);
+ bool bOk = osl_getSystemTime(pTV_current);
+ CPPUNIT_ASSERT(bOk);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ *pTV_access = rFileStatus.getAccessTime();
+
+ bool bOK = t_compareTime(pTV_access, pTV_current, delta);
+ free(pTV_current);
+ free(pTV_access);
+
+ CPPUNIT_ASSERT_MESSAGE("test for getAccessTime function: This test turns out that UNX precision is no more than 1 sec, don't know how to test this function, in Windows test, it lost hour min sec, only have date time. ",
+ bOK);
+ }
+
+ CPPUNIT_TEST_SUITE(getAccessTime);
+ CPPUNIT_TEST(getAccessTime_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline TimeValue getModifyTime() const
+
+ class getModifyTime : public CppUnit::TestFixture
+ {
+ private:
+ OUString aTypeURL;
+ osl::FileBase::RC nError;
+ DirectoryItem rItem;
+
+ public:
+ getModifyTime() : nError(osl::FileBase::E_None) {}
+
+ void getModifyTime_001()
+ {
+ TimeValue *pTV_current = nullptr;
+ CPPUNIT_ASSERT((pTV_current = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+
+ // create file
+ aTypeURL = aUserDirectoryURL.copy(0);
+ concatURL(aTypeURL, aTmpName2);
+ createTestFile(aTypeURL);
+
+ // get current time
+ bool bOk = osl_getSystemTime(pTV_current);
+ CPPUNIT_ASSERT(bOk);
+
+ // get instance item and filestatus
+ nError = DirectoryItem::get(aTypeURL, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ FileStatus rFileStatus(osl_FileStatus_Mask_ModifyTime);
+ nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ // get modify time
+ TimeValue* pTV_modify = nullptr;
+ CPPUNIT_ASSERT((pTV_modify = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+ *pTV_modify = rFileStatus.getModifyTime();
+
+ bool bOK = t_compareTime(pTV_modify, pTV_current, delta);
+ // delete file
+ deleteTestFile(aTypeURL);
+ free(pTV_current);
+ free(pTV_modify);
+
+ CPPUNIT_ASSERT_MESSAGE("test for getModifyTime function: This test turns out that UNX precision is no more than 1 sec, don't know how to improve this function. ",
+ bOK);
+ }
+
+ CPPUNIT_TEST_SUITE(getModifyTime);
+ CPPUNIT_TEST(getModifyTime_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline sal_uInt64 getFileSize() const
+
+ class getFileSize : public CppUnit::TestFixture
+ {
+ private:
+ OUString aTypeURL;
+ osl::FileBase::RC nError;
+ DirectoryItem rItem;
+
+ public:
+ getFileSize() : nError(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ aTypeURL = aUserDirectoryURL.copy(0);
+ concatURL(aTypeURL, aTmpName2);
+ createTestFile(aTypeURL);
+ nError = DirectoryItem::get(aTypeURL, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ }
+
+ void tearDown() override
+ {
+ deleteTestFile(aTypeURL);
+ }
+
+ void getFileSize_001()
+ {
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileSize);
+ nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ sal_uInt64 uFileSize = rFileStatus.getFileSize();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileSize function: empty file ",
+ static_cast<sal_uInt64>(0), uFileSize);
+ }
+
+ void getFileSize_002()
+ {
+ File testfile(aTypeURL);
+ nError = testfile.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Read);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ nError = testfile.setSize(TEST_FILE_SIZE);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ nError = DirectoryItem::get(aTypeURL, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileSize);
+ nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ sal_uInt64 uFileSize = rFileStatus.getFileSize();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileSize function: file with size of TEST_FILE_SIZE, did not pass in (W32). ",
+ static_cast<sal_uInt64>(TEST_FILE_SIZE), uFileSize);
+ }
+
+ CPPUNIT_TEST_SUITE(getFileSize);
+ CPPUNIT_TEST(getFileSize_001);
+ CPPUNIT_TEST(getFileSize_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline OUString getFileName() const
+
+ class getFileName : public CppUnit::TestFixture
+ {
+ private:
+ OUString aTypeURL;
+ osl::FileBase::RC nError;
+ DirectoryItem rItem;
+
+ public:
+ getFileName() : nError(osl::FileBase::E_None) {}
+ void setUp() override
+ {
+ aTypeURL = aUserDirectoryURL.copy(0);
+ concatURL(aTypeURL, aTmpName2);
+ createTestFile(aTypeURL);
+ nError = DirectoryItem::get(aTypeURL, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ }
+
+ void tearDown() override
+ {
+ deleteTestFile(aTypeURL);
+ }
+
+
+ void getFileName_001()
+ {
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ OUString aFileName = rFileStatus.getFileName();
+
+ CPPUNIT_ASSERT_MESSAGE("test for getFileName function: name compare with specify",
+ compareFileName(aFileName, aTmpName2));
+ }
+
+ CPPUNIT_TEST_SUITE(getFileName);
+ CPPUNIT_TEST(getFileName_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline OUString getFileURL() const
+
+ class getFileURL : public CppUnit::TestFixture
+ {
+ osl::FileBase::RC nError;
+ DirectoryItem rItem;
+
+ public:
+ getFileURL() : nError(osl::FileBase::E_None) {}
+
+
+ void setUp() override
+ {
+ createTestFile(aTmpName6);
+ nError = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+ }
+
+ void tearDown() override
+ {
+ deleteTestFile(aTmpName6);
+ }
+
+
+ void getFileURL_001()
+ {
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileURL);
+ nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError);
+
+ OUString aFileURL = rFileStatus.getFileURL();
+
+ CPPUNIT_ASSERT_MESSAGE("test for getFileURL function: ",
+ compareFileName(aFileURL, aTmpName6));
+ }
+
+ CPPUNIT_TEST_SUITE(getFileURL);
+ CPPUNIT_TEST(getFileURL_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline OUString getLinkTargetURL() const
+
+ class getLinkTargetURL : public CppUnit::TestFixture
+ {
+ private:
+ OUString aTypeURL;
+ DirectoryItem rItem;
+
+ public:
+ void setUp() override
+ {
+ aTypeURL = aUserDirectoryURL.copy(0);
+ concatURL(aTypeURL, aTmpName2);
+ createTestFile(aTypeURL);
+ }
+
+ void tearDown() override
+ {
+ deleteTestFile(aTypeURL);
+ }
+
+#if (defined UNX) // Link file is not defined in Windows
+ void getLinkTargetURL_001()
+ {
+ // create a link file;
+ OUString aUStr_LnkFileSys(aTempDirectorySys), aUStr_SrcFileSys(aTempDirectorySys);
+ aUStr_LnkFileSys += aSlashURL + getCurrentPID() + "/link.file";
+ aUStr_SrcFileSys += aSlashURL + getCurrentPID() + "/tmpname";
+
+ OString strLinkFileName, strSrcFileName;
+ strLinkFileName = OUStringToOString(aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US);
+ strSrcFileName = OUStringToOString(aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US);
+
+ sal_Int32 fd;
+ fd = symlink(strSrcFileName.getStr(), strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("in creating link file", static_cast<sal_Int32>(0), fd);
+
+ // get linkTarget URL
+ auto nError = DirectoryItem::get(aLnkURL1, rItem);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("in getting link file item", osl::FileBase::E_None, nError);
+
+ FileStatus rFileStatus(osl_FileStatus_Mask_LinkTargetURL);
+ nError = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("in getting link file status", osl::FileBase::E_None, nError);
+ OUString aFileURL = rFileStatus.getLinkTargetURL();
+
+ // remove link file
+ fd = remove(strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("in deleting link file", static_cast<sal_Int32>(0), fd);
+
+ CPPUNIT_ASSERT_MESSAGE("test for getLinkTargetURL function: Solaris version, create a file, and a link file link to it, get its LinkTargetURL and compare",
+ compareFileName(aFileURL, aTypeURL));
+ }
+#else
+ void getLinkTargetURL_001()
+ {
+ CPPUNIT_ASSERT_MESSAGE("test for getLinkTargetURL function: Windows version, not tested",
+ 1);
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE(getLinkTargetURL);
+ CPPUNIT_TEST(getLinkTargetURL_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::ctors, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::isValid, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getFileType, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getAttributes, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getAccessTime, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getModifyTime, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getFileSize, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getFileName, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getFileURL, "osl_FileStatus");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getLinkTargetURL, "osl_FileStatus");
+}
+
+namespace osl_File
+{
+
+ // testing the method
+ // File(const OUString& ustrFileURL)
+
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void ctors_001()
+ {
+ File testFile(aTmpName4);
+
+ osl::FileBase::RC nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ osl::FileBase::RC nError2 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: initialize a File and test its open and close",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: initialize a File and test its open and close",
+ osl::FileBase::E_None, nError2);
+ }
+
+ void ctors_002()
+ {
+ File testFile(aTmpName5);
+ char buffer[30] = "Test for File constructor";
+ sal_uInt64 nCount;
+
+ osl::FileBase::RC nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ osl::FileBase::RC nError2 = testFile.write(buffer, 30, nCount);
+ testFile.close();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: test relative file URL, this test show that relative file URL is also acceptable",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: test relative file URL, this test show that relative file URL is also acceptable",
+ osl::FileBase::E_None, nError2);
+ }
+
+ CPPUNIT_TEST_SUITE(ctors);
+ CPPUNIT_TEST(ctors_001);
+ CPPUNIT_TEST(ctors_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC open(sal_uInt32 uFlags)
+
+ class open : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1, nError2, nError3;
+
+ public:
+ open()
+ : nError1(osl::FileBase::E_None)
+ , nError2(osl::FileBase::E_None)
+ , nError3(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void open_001()
+ {
+ File testFile(aTmpName4);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ nError2 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("close error", osl::FileBase::E_None, nError2);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a regular file",
+ osl::FileBase::E_None, nError1);
+ }
+
+ void open_002()
+ {
+ File testFile(aTmpName3);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read);
+
+ CPPUNIT_ASSERT_MESSAGE("test for open function: open a directory",
+ (File::E_INVAL == nError1) || (File::E_ACCES == nError1));
+ }
+
+ void open_003()
+ {
+ File testFile(aCanURL1);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a non-exist file",
+ File::E_NOENT, nError1);
+ }
+
+ void open_004()
+ {
+ OUString aTestFile(aRootURL);
+ concatURL(aTestFile, aTmpName2);
+ File testFile(aTestFile);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Create);
+ bool bOK = (nError1 == File::E_ACCES);
+#ifdef _WIN32
+ bOK = true; /// in Windows, you can create file in c:\ any way.
+ testFile.close();
+ deleteTestFile(aTestFile);
+#endif
+
+ CPPUNIT_ASSERT_MESSAGE("test for open function: create an illegal file",
+ bOK);
+ }
+
+ void open_005()
+ {
+ File testFile(aTmpName4);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Create);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: create an exist file",
+ File::E_EXIST, nError1);
+ }
+
+ void open_006()
+ {
+ File testFile(aCanURL1);
+ char buffer_write[30] = "Test for File open";
+ char buffer_read[30];
+ sal_uInt64 nCount_write, nCount_read;
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write | osl_File_OpenFlag_Create);
+ nError2 = testFile.write(buffer_write, 30, nCount_write);
+ osl::FileBase::RC nError4 = testFile.setPos(osl_Pos_Absolut, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError4);
+ nError3 = testFile.read(buffer_read, 10, nCount_read);
+
+ osl::FileBase::RC nError5 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError5);
+ osl::FileBase::RC nError6 = osl::File::remove(aCanURL1);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError6);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create",
+ osl::FileBase::E_None, nError2);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create",
+ osl::FileBase::E_None, nError3);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create",
+ sal_uInt64(30), nCount_write);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create",
+ sal_uInt64(10), nCount_read);
+ }
+
+ CPPUNIT_TEST_SUITE(open);
+ CPPUNIT_TEST(open_001);
+ CPPUNIT_TEST(open_002);
+ CPPUNIT_TEST(open_003);
+ CPPUNIT_TEST(open_004);
+ CPPUNIT_TEST(open_005);
+ CPPUNIT_TEST(open_006);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC close()
+
+ class close : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1, nError2, nError3;
+
+ public:
+ close()
+ : nError1(osl::FileBase::E_None)
+ , nError2(osl::FileBase::E_None)
+ , nError3(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void close_001()
+ {
+ File testFile(aTmpName4);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError2 = testFile.close();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for close function: close a regular file",
+ osl::FileBase::E_None, nError2);
+ }
+
+ void close_002()
+ {
+ File testFile(aTmpName4);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError2 = testFile.close();
+
+ nError3 = testFile.setPos(osl_Pos_Absolut, 0);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for close function: manipulate a file after it has been closed",
+ osl::FileBase::E_None, nError2);
+ CPPUNIT_ASSERT_MESSAGE("test for close function: manipulate a file after it has been closed",
+ (osl::FileBase::E_None != nError3));
+ }
+
+ CPPUNIT_TEST_SUITE(close);
+ CPPUNIT_TEST(close_001);
+ CPPUNIT_TEST(close_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC setPos(sal_uInt32 uHow, sal_Int64 uPos)
+
+ class setPos : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1;
+ sal_uInt64 nCount_write, nCount_read;
+
+ public:
+ setPos()
+ : nError1(osl::FileBase::E_None)
+ , nCount_write(0)
+ , nCount_read(0)
+ {
+ }
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void setPos_001()
+ {
+ File testFile(aTmpName4);
+ char buffer_read[2];
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.setPos(osl_Pos_Absolut, 26);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.read(buffer_read, 1, nCount_read);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setPos function: test for osl_Pos_Absolut, set the position to 26, test if the 26th char in file is correct",
+ pBuffer_Char[26], buffer_read[0]);
+ }
+
+ void setPos_002()
+ {
+ File testFile(aTmpName4);
+ char buffer_read[2];
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.setPos(osl_Pos_Absolut, sizeof(pBuffer_Char) - 2);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.setPos(osl_Pos_Current, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.read(buffer_read, 1, nCount_read);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setPos function: test for osl_Pos_Current, set the position to end, test if the (end -1) char in file is correct",
+ pBuffer_Char[sizeof(pBuffer_Char) - 2], buffer_read[0]);
+ }
+
+ void setPos_003()
+ {
+ File testFile(aTmpName4);
+ char buffer_read[2];
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // the file size is smaller than 100
+ nError1 = testFile.setPos(osl_Pos_End, -100);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("should return error", osl::FileBase::E_INVAL, nError1);
+
+ nError1 = testFile.setPos(osl_Pos_End, -53);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.read(buffer_read, 1, nCount_read);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setPos function: test for osl_Pos_End, set the position to end, test if the first char in file is correct",
+ pBuffer_Char[0], buffer_read[0]);
+ }
+
+ CPPUNIT_TEST_SUITE(setPos);
+ CPPUNIT_TEST(setPos_001);
+ CPPUNIT_TEST(setPos_002);
+ CPPUNIT_TEST(setPos_003);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC getPos(sal_uInt64& uPos)
+
+ class getPos : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1;
+ sal_uInt64 nCount_write;
+
+ public:
+ getPos()
+ : nError1(osl::FileBase::E_None)
+ , nCount_write(0)
+ {
+ }
+
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void getPos_001()
+ {
+ File testFile(aTmpName4);
+ sal_uInt64 nFilePointer;
+
+ nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, nError1);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.setPos(osl_Pos_Absolut, 26);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getPos function: set the position to 26, get position and check if it is right",
+ static_cast<sal_uInt64>(26), nFilePointer);
+ }
+
+ CPPUNIT_TEST_SUITE(getPos);
+ CPPUNIT_TEST(getPos_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC isEndOfFile(sal_Bool *pIsEOF)
+
+ class isEndOfFile : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1;
+ sal_uInt64 nCount_write;
+
+ public:
+ isEndOfFile()
+ : nError1(osl::FileBase::E_None)
+ , nCount_write(0)
+ {
+ }
+
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void isEndOfFile_001()
+ {
+ File testFile(aTmpName4);
+ sal_Bool bEOF = false;
+ sal_Bool *pEOF = &bEOF;
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.setPos(osl_Pos_End, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.isEndOfFile(pEOF);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_MESSAGE("test for isEndOfFile function: set the position to end, check if reach end",
+ *pEOF);
+ }
+
+ void isEndOfFile_002()
+ {
+ File testFile(aTmpName4);
+ sal_Bool bEOF = false;
+ sal_Bool *pEOF = &bEOF;
+ sal_uInt64 nFilePointer = 0;
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.setPos(osl_Pos_Absolut, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ *pEOF = false;
+
+ while (!(*pEOF))
+ {
+ nError1 = testFile.isEndOfFile(pEOF);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.setPos(osl_Pos_Current, 1);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for isEndOfFile function: use isEndOfFile to move pointer step by step",
+ static_cast<sal_uInt64>(sizeof(pBuffer_Char) + 1), nFilePointer);
+ }
+ CPPUNIT_TEST_SUITE(isEndOfFile);
+ CPPUNIT_TEST(isEndOfFile_001);
+ CPPUNIT_TEST(isEndOfFile_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC setSize(sal_uInt64 uSize)
+
+ class setSize : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1;
+ sal_uInt64 nCount_write;
+
+ public:
+ setSize()
+ : nError1(osl::FileBase::E_None)
+ , nCount_write(0)
+ {
+ }
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void setSize_001()
+ {
+ File testFile(aTmpName4);
+ sal_uInt64 nFilePointer;
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // enlarge the file to size of 100;
+ nError1 = testFile.setSize(100);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // get the file size;
+ nError1 = testFile.setPos(osl_Pos_End, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setSize function: enlarge the file ",
+ static_cast<sal_uInt64>(100), nFilePointer);
+ }
+
+ void setSize_002()
+ {
+ File testFile(aTmpName4);
+ sal_uInt64 nFilePointer;
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // enlarge the file to size of 100;
+ nError1 = testFile.setSize(10);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // get the file size;
+ nError1 = testFile.setPos(osl_Pos_End, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setSize function: truncate the file ",
+ static_cast<sal_uInt64>(10), nFilePointer);
+ }
+
+ CPPUNIT_TEST_SUITE(setSize);
+ CPPUNIT_TEST(setSize_001);
+ CPPUNIT_TEST(setSize_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC read(void *pBuffer, sal_uInt64 uBytesRequested, sal_uInt64& rBytesRead)
+
+ class read : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1;
+ sal_uInt64 nCount_write, nCount_read;
+
+ public:
+ read()
+ : nError1(osl::FileBase::E_None)
+ , nCount_write(0)
+ , nCount_read(0)
+ {
+ }
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void read_001()
+ {
+ File testFile(aTmpName4);
+ sal_uInt64 nFilePointer;
+ char buffer_read[10];
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.read(buffer_read, 10, nCount_read);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read whole content in the file to a buffer",
+ sal_uInt64(10), nFilePointer);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read whole content in the file to a buffer",
+ 0, strncmp(buffer_read, pBuffer_Char, 10));
+ }
+
+ void read_002()
+ {
+ File testFile(aTmpName4);
+ sal_uInt64 nFilePointer;
+ char buffer_read[26];
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.setPos(osl_Pos_Absolut, 26);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.read(buffer_read, 26, nCount_read);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read from a special position in the file",
+ sal_uInt64(52), nFilePointer);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read from a special position in the file",
+ sal_uInt64(26), nCount_read);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read from a special position in the file",
+ 0, strncmp(buffer_read, &pBuffer_Char[26], 26));
+ }
+
+ CPPUNIT_TEST_SUITE(read);
+ CPPUNIT_TEST(read_001);
+ CPPUNIT_TEST(read_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC write(const void *pBuffer, sal_uInt64 uBytesToWrite, sal_uInt64& rBytesWritten)
+
+ class write : public CppUnit::TestFixture
+ {
+ osl::FileBase::RC nError1;
+ sal_uInt64 nCount_write, nCount_read;
+
+ public:
+ write()
+ : nError1(osl::FileBase::E_None)
+ , nCount_write(0)
+ , nCount_read(0)
+ {
+ }
+
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpname.
+ createTestFile(aTmpName6);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+
+ void write_001()
+ {
+ File testFile(aTmpName6);
+ sal_uInt64 nFilePointer;
+ char buffer_read[10];
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // write chars into the file.
+ nError1 = testFile.write(pBuffer_Char, 10, nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // get the current pointer;
+ nError1 = testFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // reset pointer to the beginning;
+ nError1 = testFile.setPos(osl_Pos_Absolut, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.read(buffer_read, 10, nCount_read);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for write function: read whole content in the file to a buffer. Note, buffer size can not smaller than the read size",
+ sal_uInt64(10), nFilePointer);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for write function: read whole content in the file to a buffer. Note, buffer size can not smaller than the read size",
+ 0, strncmp(buffer_read, pBuffer_Char, 10));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for write function: read whole content in the file to a buffer. Note, buffer size can not smaller than the read size",
+ sal_uInt64(10), nCount_write);
+ }
+
+ CPPUNIT_TEST_SUITE(write);
+ CPPUNIT_TEST(write_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC readLine(::ByteSequence& aSeq)
+
+ class readLine : public CppUnit::TestFixture
+ {
+ osl::FileBase::RC nError1;
+ sal_uInt64 nCount_write;
+ rtl::ByteSequence aSequence;
+
+ public:
+ readLine()
+ : nError1(osl::FileBase::E_None)
+ , nCount_write(0)
+ {
+ }
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpname.
+ createTestFile(aTmpName6);
+
+ // write some strings into the file.
+ File testFile(aTmpName6);
+ char ppStrSeq[3][27] = { "abcde\n",
+ "1234567890\n",
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ };
+
+ nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ for (int nCount = 0; nCount < 3; nCount++)
+ {
+ nError1 = testFile.write(ppStrSeq[nCount], strlen(ppStrSeq[nCount]), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+
+ void readLine_001()
+ {
+ File testFile(aTmpName6);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.readLine(aSequence);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for readLine function: read the first line of the file.",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for readLine function: read the first line of the file.",
+ 0, strncmp(reinterpret_cast<char *>(aSequence.getArray()), pBuffer_Char, 5));
+ }
+
+ void readLine_002()
+ {
+ File testFile(aTmpName6);
+ sal_Bool bEOF = false;
+ sal_Bool *pEOF = &bEOF;
+
+ nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ for (int nCount = 0; nCount < 3; nCount++)
+ {
+ nError1 = testFile.readLine(aSequence);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+ nError1 = testFile.isEndOfFile(pEOF);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_MESSAGE("test for readLine function: read three lines of the file and check the file pointer moving.",
+ *pEOF);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for readLine function: read three lines of the file and check the file pointer moving.",
+ 0, strncmp(reinterpret_cast<char *>(aSequence.getArray()), &pBuffer_Char[26], 26));
+ }
+ CPPUNIT_TEST_SUITE(readLine);
+ CPPUNIT_TEST(readLine_001);
+ CPPUNIT_TEST(readLine_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC copy(const OUString& ustrSourceFileURL, const OUString& ustrDestFileURL)
+
+ class copy : public CppUnit::TestFixture
+ {
+ osl::FileBase::RC nError1;
+ sal_uInt64 nCount_write;
+
+ public:
+ copy()
+ : nError1(osl::FileBase::E_None)
+ , nCount_write(0)
+ {
+ }
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void copy_001()
+ {
+ File testFile(aTmpName6);
+
+ // copy $TEMP/tmpdir/tmpname to $TEMP/tmpname.
+ nError1 = File::copy(aTmpName4, aTmpName6);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // check
+ nError1 = testFile.open(osl_File_OpenFlag_Create);
+ deleteTestFile(aTmpName6);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: copy file to upper directory",
+ osl::FileBase::E_EXIST, nError1);
+ }
+
+ void copy_002()
+ {
+ // copy $TEMP/tmpdir/tmpname to $TEMP/tmpdir.
+ nError1 = File::copy(aTmpName4, aTmpName3);
+
+ CPPUNIT_ASSERT_MESSAGE("test for copy function: use directory as destination",
+ (osl::FileBase::E_ISDIR == nError1) ||(osl::FileBase::E_ACCES == nError1));
+ }
+
+ void copy_003()
+ {
+ // copy $TEMP/tmpdir/tmpname to $ROOT/tmpname.
+ nError1 = File::copy(aTmpName4, aTmpName7);
+#if defined(_WIN32)
+ nError1 = osl::FileBase::E_ACCES; /// for Windows, c:\ is writable anyway.
+ deleteTestFile(aTmpName7);
+#endif
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: copy to an illegal place",
+ osl::FileBase::E_ACCES, nError1);
+ }
+
+ void copy_004()
+ {
+ // copy $TEMP/tmpname to $TEMP/tmpdir/tmpname.
+ nError1 = File::copy(aTmpName6, aTmpName4);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: copy a not exist file",
+ osl::FileBase::E_NOENT, nError1);
+ }
+
+ void copy_005()
+ {
+ // copy $TEMP/tmpname to $TEMP/system.path using system path.
+ nError1 = File::copy(aTmpName6, aSysPath1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: copy a file using system file path",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void copy_006()
+ {
+ createTestFile(aTmpName6);
+ File tmpFile(aTmpName6);
+ tmpFile.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Read);
+ tmpFile.setSize(200);
+ tmpFile.close();
+ // copy to new path
+ nError1 = File::copy(aTmpName6, aTmpName4);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // check if is the new file
+ File newFile(aTmpName4);
+ newFile.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Read);
+ nError1 = newFile.setPos(osl_Pos_End, 0);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ sal_uInt64 nFilePointer;
+ nError1 = newFile.getPos(nFilePointer);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ newFile.close();
+ deleteTestFile(aTmpName6);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: the dest file exist",
+ static_cast<sal_uInt64>(200), nFilePointer);
+ }
+
+ CPPUNIT_TEST_SUITE(copy);
+ CPPUNIT_TEST(copy_001);
+ CPPUNIT_TEST(copy_002);
+ CPPUNIT_TEST(copy_003);
+ CPPUNIT_TEST(copy_004);
+ CPPUNIT_TEST(copy_005);
+ CPPUNIT_TEST(copy_006);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC move(const OUString& ustrSourceFileURL, const OUString& ustrDestFileURL)
+
+ class move : public CppUnit::TestFixture
+ {
+ osl::FileBase::RC nError1, nError2;
+ sal_uInt64 nCount_write;
+
+ public:
+ move()
+ : nError1(osl::FileBase::E_None)
+ , nError2(osl::FileBase::E_None)
+ , nCount_write(0)
+ {
+ }
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void move_001()
+ {
+ // rename $TEMP/tmpdir/tmpname to $TEMP/canonical.name.
+ nError1 = File::move(aTmpName4, aCanURL1);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // check
+ File testFile(aCanURL1);
+ nError2 = testFile.open(osl_File_OpenFlag_Create);
+ deleteTestFile(aCanURL1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: rename file to another directory",
+ osl::FileBase::E_EXIST, nError2);
+ }
+
+ void move_002()
+ {
+ // move $TEMP/tmpdir/tmpname to $TEMP/tmpdir.
+ nError1 = File::move(aTmpName4, aTmpName3);
+ // returned osl::FileBase::E_ACCES on WNT
+ CPPUNIT_ASSERT_MESSAGE("test for move function: use directory as destination",
+ (osl::FileBase::E_ACCES == nError1 || osl::FileBase::E_ISDIR == nError1) ||(osl::FileBase::E_EXIST == nError1));
+ }
+
+ void move_003()
+ {
+ // move $TEMP/tmpdir/tmpname to $ROOT/tmpname.
+ nError1 = File::move(aTmpName4, aTmpName7);
+#if defined(_WIN32)
+ nError1 = osl::FileBase::E_ACCES; /// for Windows, c:\ is writable any way.
+ deleteTestFile(aTmpName7);
+#endif
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move to an illegal place",
+ osl::FileBase::E_ACCES, nError1);
+ }
+
+ void move_004()
+ {
+ // move $TEMP/tmpname to $TEMP/tmpdir/tmpname.
+ nError1 = File::move(aTmpName6, aTmpName4);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a not exist file",
+ osl::FileBase::E_NOENT, nError1);
+ }
+
+ void move_005()
+ {
+ // move $TEMP/tmpname to $TEMP/system.path using system path.
+ nError1 = File::move(aTmpName6, aSysPath1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a file using system file",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void move_006()
+ {
+ // move directory $TEMP/tmpname to $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName6);
+ nError1 = File::move(aTmpName6, aTmpName4);
+ // move file $TEMP/tmpdir/tmpname to $TEMP/tmpname
+ nError2 = File::move(aTmpName4, aTmpName6);
+ deleteTestDirectory(aTmpName6);
+#if defined(_WIN32)
+ deleteTestDirectory(aTmpName4);// in Windows, it can be moved!!!!! this is only for not influence the following test.
+ deleteTestFile(aTmpName6);
+ nError1 = osl::FileBase::E_NOTDIR;
+ nError2 = osl::FileBase::E_ISDIR;
+#endif
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a directory to an exist file with same name, did not pass in (W32)",
+ osl::FileBase::E_NOTDIR, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a directory to an exist file with same name, did not pass in (W32)",
+ osl::FileBase::E_ISDIR, nError2);
+ }
+
+ void move_007()
+ {
+ // create directory $TEMP/tmpname.
+ createTestDirectory(aTmpName6);
+ // move directory $TEMP/tmpdir to $TEMP/tmpname/tmpdir
+ nError1 = File::move(aTmpName3, aTmpName8);
+ // check
+ nError2 = Directory::create(aTmpName8);
+ File::move(aTmpName8, aTmpName3);
+ deleteTestDirectory(aTmpName6);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a directory to an exist file with same name",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a directory to an exist file with same name",
+ osl::FileBase::E_EXIST, nError2);
+ }
+
+ // bugid# 115420, after the bug fix, add the case
+ CPPUNIT_TEST_SUITE(move);
+ CPPUNIT_TEST(move_001);
+ CPPUNIT_TEST(move_002);
+ CPPUNIT_TEST(move_003);
+ CPPUNIT_TEST(move_004);
+ CPPUNIT_TEST(move_005);
+ CPPUNIT_TEST(move_006);
+ CPPUNIT_TEST(move_007);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC remove(const OUString& ustrFileURL)
+
+ class remove : public CppUnit::TestFixture
+ {
+ osl::FileBase::RC nError1, nError2;
+ sal_uInt64 nCount_write;
+
+ public:
+ remove()
+ : nError1(osl::FileBase::E_None)
+ , nError2(osl::FileBase::E_None)
+ , nCount_write(0)
+ {
+ }
+
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+
+ // write chars into the file.
+ File testFile(aTmpName4);
+
+ nError1 = testFile.open(osl_File_OpenFlag_Write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = testFile.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void remove_001()
+ {
+ // remove $TEMP/tmpdir/tmpname.
+ nError1 = File::remove(aTmpName4);
+ // check
+ File testFile(aTmpName4);
+ nError2 = testFile.open(osl_File_OpenFlag_Create);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a file",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_MESSAGE("test for remove function: remove a file",
+ (osl::FileBase::E_EXIST != nError2));
+ }
+
+ void remove_002()
+ {
+ // remove $TEMP/tmpname.
+ nError1 = File::remove(aTmpName6);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a file not exist",
+ osl::FileBase::E_NOENT, nError1);
+ }
+
+ void remove_003()
+ {
+ // remove $TEMP/system/path.
+ nError1 = File::remove(aSysPath2);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: removing a file not using full qualified URL",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void remove_004()
+ {
+ // remove $TEMP/tmpdir.
+ nError1 = File::remove(aTmpName3);
+
+ CPPUNIT_ASSERT_MESSAGE("test for remove function: remove a directory",
+ (osl::FileBase::E_ISDIR == nError1) || (osl::FileBase::E_ACCES == nError1));
+ }
+
+ CPPUNIT_TEST_SUITE(remove);
+ CPPUNIT_TEST(remove_001);
+ CPPUNIT_TEST(remove_002);
+ CPPUNIT_TEST(remove_003);
+ CPPUNIT_TEST(remove_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC setAttributes(const OUString& ustrFileURL, sal_uInt64 uAttributes)
+
+ class setAttributes : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1, nError2;
+ DirectoryItem rItem, rItem_hidden;
+
+ public:
+ setAttributes() : nError1(osl::FileBase::E_None),nError2(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestFile(aTmpName6);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+
+ void setAttributes_001()
+ {
+ // on windows, only can set 2 attributes: osl_File_Attribute_ReadOnly, osl_File_Attribute_Hidden
+#ifdef UNX
+ // set the file to readonly
+ nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_ReadOnly | osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // get the file attributes
+ FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
+ nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setAttributes function: set file attributes and get it to verify.",
+ static_cast<sal_uInt64>(osl_File_Attribute_ReadOnly | osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead),
+ rFileStatus.getAttributes());
+#else
+ // please see GetFileAttributes
+ nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_ReadOnly);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // get the file attributes
+ FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
+ nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // here the file has 2 Attributes: FILE_ATTRIBUTE_READONLY and FILE_ATTRIBUTE_NORMAL,
+ // but FILE_ATTRIBUTE_NORMAL is valid only if used alone, so this is maybe a bug
+ /*OString aString = OUStringToOString(aTmpName6, RTL_TEXTENCODING_ASCII_US);
+ DWORD dwFileAttributes = GetFileAttributes(aString.getStr());
+ if (dwFileAttributes & FILE_ATTRIBUTE_NORMAL)
+ printf("has normal attribute");
+ if (dwFileAttributes & FILE_ATTRIBUTE_READONLY)
+ printf("has readonly attribute");
+ */
+ CPPUNIT_ASSERT_MESSAGE("test for setAttributes function: set file attributes READONLY and get it to verify.",
+ (osl_File_Attribute_ReadOnly & rFileStatus.getAttributes()) != 0);
+#endif
+ }
+ void setAttributes_002()
+ {
+ // on UNX, can not set hidden attribute to file, rename file can set the attribute
+#ifdef _WIN32
+ // set the file to hidden
+ nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_Hidden);
+
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // get the file attributes
+ FileStatus rFileStatus(osl_FileStatus_Mask_Attributes);
+ nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_MESSAGE("test for setAttributes function: set file attributes and get it to verify.",
+ (osl_File_Attribute_Hidden & rFileStatus.getAttributes()) != 0);
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE(setAttributes);
+ CPPUNIT_TEST(setAttributes_001);
+ CPPUNIT_TEST(setAttributes_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC setTime(
+ // const OUString& ustrFileURL,
+ // const TimeValue& rCreationTime,
+ // const TimeValue& rLastAccessTime,
+ // const TimeValue& rLastWriteTime)
+
+ class setTime : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1, nError2;
+ DirectoryItem rItem;
+
+ public:
+ setTime() : nError1(osl::FileBase::E_None),nError2(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestFile(aTmpName6);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+
+ void setTime_001()
+ {
+ TimeValue *pTV_current = nullptr;
+ CPPUNIT_ASSERT((pTV_current = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+ TimeValue *pTV_creation = nullptr;
+ CPPUNIT_ASSERT((pTV_creation = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+ TimeValue *pTV_access = nullptr;
+ CPPUNIT_ASSERT((pTV_access = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+ TimeValue *pTV_modify = nullptr;
+ CPPUNIT_ASSERT((pTV_modify = static_cast<TimeValue*>(malloc(sizeof(TimeValue)))) != nullptr);
+
+ // get current time
+ bool bOk = osl_getSystemTime(pTV_current);
+ CPPUNIT_ASSERT(bOk);
+
+ // set the file time
+ nError2 = File::setTime(aTmpName6, *pTV_current, *pTV_current, *pTV_current);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError2).getStr(), osl::FileBase::E_None, nError2);
+
+ // get the file access time, creation time, modify time
+ nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1);
+
+ FileStatus rFileStatus(osl_FileStatus_Mask_AccessTime);
+ nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1);
+ *pTV_access = rFileStatus.getAccessTime();
+
+ FileStatus rFileStatus1(osl_FileStatus_Mask_CreationTime);
+ nError1 = rItem.getFileStatus(rFileStatus1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1);
+ *pTV_creation = rFileStatus1.getCreationTime();
+
+ FileStatus rFileStatus2(osl_FileStatus_Mask_ModifyTime);
+ nError1 = rItem.getFileStatus(rFileStatus2);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1);
+ *pTV_modify = rFileStatus2.getModifyTime();
+
+ CPPUNIT_ASSERT_MESSAGE("test for setTime function: set access time then get it. time precision is still a problem for it cut off the nanosec.",
+ t_compareTime(pTV_access, pTV_current, delta));
+#if defined(_WIN32)
+ // Unfortunately there is no way to get the creation time of a file under Unix (it's a Windows only feature).
+ // That means the flag osl_FileStatus_Mask_CreationTime should be deprecated under Unix.
+ CPPUNIT_ASSERT_MESSAGE("test for setTime function: set creation time then get it. ",
+ t_compareTime(pTV_creation, pTV_current, delta));
+#endif
+ CPPUNIT_ASSERT_MESSAGE("test for setTime function: set modify time then get it. ",
+ t_compareTime(pTV_modify, pTV_current, delta));
+ free(pTV_current);
+ free(pTV_creation);
+ free(pTV_access);
+ free(pTV_modify);
+ }
+
+ CPPUNIT_TEST_SUITE(setTime);
+ CPPUNIT_TEST(setTime_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC sync()
+
+ class sync : public CppUnit::TestFixture
+ {
+ private:
+ DirectoryItem rItem;
+
+ public:
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestFile(aTmpName6);
+
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+ // test case: if The file is located on a read only file system.
+ void sync_001()
+ {
+#ifdef UNX
+ auto nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ File tmp_file(aTmpName6);
+ osl::FileBase::RC err = tmp_file.open(osl_File_OpenFlag_Write);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("File open failed", osl::FileBase::E_None, err);
+
+ char buffer[50000];
+ sal_uInt64 written = 0;
+ nError1 = tmp_file.write(static_cast<void*>(buffer), sizeof(buffer), written);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("write failed!", osl::FileBase::E_None, nError1);
+
+ // set the file to readonly
+ auto nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_ReadOnly | osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+
+ nError2 = tmp_file.sync();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("can not sync to readonly file!", osl::FileBase::E_None, nError2);
+
+ tmp_file.close();
+#endif
+ }
+ // test case:no enough space, how to create such case???see test_cpy_wrt_file.cxx::test_osl_writeFile
+
+ CPPUNIT_TEST_SUITE(sync);
+ CPPUNIT_TEST(sync_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::ctors, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::open, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::close, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::setPos, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::getPos, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::isEndOfFile, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::setSize, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::read, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::write, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::readLine, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::copy, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::move, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::remove, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::setAttributes, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::setTime, "osl_File");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::sync, "osl_File");
+// FIXME: to enable these tests (when they work cross-platform) we need to add the below:
+// CPPUNIT_REGISTRY_ADD_TO_DEFAULT("osl_File");
+
+}
+
+// Beginning of the test cases for DirectoryItem class
+
+namespace osl_DirectoryItem
+{
+ // testing the method
+ // DirectoryItem(): _pData(NULL)
+
+ class ctors : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1;
+
+ public:
+ ctors() : nError1(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpname.
+ createTestFile(aTmpName6);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+ void ctors_001()
+ {
+ File testFile(aTmpName6);
+ DirectoryItem rItem; // constructor
+
+ // get the DirectoryItem.
+ nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: initialize a new instance of DirectoryItem and get an item to check.",
+ osl::FileBase::E_None, nError1);
+ }
+
+ CPPUNIT_TEST_SUITE(ctors);
+ CPPUNIT_TEST(ctors_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // DirectoryItem(const DirectoryItem& rItem): _pData(rItem._pData)
+
+ class copy_assin_Ctors : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1;
+
+ public:
+ copy_assin_Ctors() : nError1(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpname.
+ createTestFile(aTmpName6);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+
+ void copy_assin_Ctors_001()
+ {
+ DirectoryItem rItem; // constructor
+ // get the DirectoryItem.
+ nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ DirectoryItem copyItem(rItem); // copy constructor
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ nError1 = copyItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_MESSAGE("test for copy_assin_Ctors function: use copy constructor to get an item and check filename.",
+ compareFileName(rFileStatus.getFileName(), aTmpName2));
+ }
+
+ void copy_assin_Ctors_002()
+ {
+ DirectoryItem rItem; // constructor
+ // get the DirectoryItem.
+ nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ DirectoryItem copyItem;
+ copyItem = rItem; // assignment operator
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ nError1 = copyItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_MESSAGE("test for copy_assin_Ctors function: test assignment operator here since it is same as copy constructor in test way.",
+ compareFileName(rFileStatus.getFileName(), aTmpName2));
+ }
+
+ CPPUNIT_TEST_SUITE(copy_assin_Ctors);
+ CPPUNIT_TEST(copy_assin_Ctors_001);
+ CPPUNIT_TEST(copy_assin_Ctors_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline sal_Bool is()
+
+ class is : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1;
+
+ public:
+ is() : nError1(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpname.
+ createTestFile(aTmpName6);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+ void is_001()
+ {
+ DirectoryItem rItem; // constructor
+
+ CPPUNIT_ASSERT_MESSAGE("test for is function: use an uninitialized instance.",
+ !rItem.is());
+ }
+
+ void is_002()
+ {
+ DirectoryItem rItem; // constructor
+ // get the DirectoryItem.
+ nError1 = DirectoryItem::get(aTmpName6, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_MESSAGE("test for is function: use an uninitialized instance.",
+ rItem.is());
+ }
+
+ CPPUNIT_TEST_SUITE(is);
+ CPPUNIT_TEST(is_001);
+ CPPUNIT_TEST(is_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // static inline RC get(const OUString& ustrFileURL, DirectoryItem& rItem)
+
+ class get : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1, nError2;
+
+ public:
+ get() : nError1(osl::FileBase::E_None),nError2(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpname.
+ createTestFile(aTmpName6);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpname.
+ deleteTestFile(aTmpName6);
+ }
+
+
+ void get_001()
+ {
+ DirectoryItem rItem;
+ nError2 = DirectoryItem::get(aTmpName6, rItem);
+
+ // check the file name
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for get function: use copy constructor to get an item and check filename.",
+ osl::FileBase::E_None, nError2);
+ CPPUNIT_ASSERT_MESSAGE("test for get function: use copy constructor to get an item and check filename.",
+ compareFileName(rFileStatus.getFileName(), aTmpName2));
+ }
+
+ void get_002()
+ {
+ DirectoryItem rItem;
+ nError1 = DirectoryItem::get(aSysPath1, rItem);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for get function: use a system name instead of a URL.",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void get_003()
+ {
+ DirectoryItem rItem;
+
+ nError1 = DirectoryItem::get(aTmpName3, rItem);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for get function: use a non existed file URL.",
+ osl::FileBase::E_NOENT, nError1);
+ }
+
+ CPPUNIT_TEST_SUITE(get);
+ CPPUNIT_TEST(get_001);
+ CPPUNIT_TEST(get_002);
+ CPPUNIT_TEST(get_003);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC getFileStatus(FileStatus& rStatus)
+
+ class getFileStatus : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1, nError2;
+
+ public:
+ getFileStatus() : nError1(osl::FileBase::E_None),nError2(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void getFileStatus_001()
+ {
+ DirectoryItem rItem;
+ // get the DirectoryItem.
+ nError1 = DirectoryItem::get(aTmpName4, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // check the file name
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ nError2 = rItem.getFileStatus(rFileStatus);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileStatus function: get file status and check filename",
+ osl::FileBase::E_None, nError2);
+ CPPUNIT_ASSERT_MESSAGE("test for getFileStatus function: get file status and check filename",
+ compareFileName(rFileStatus.getFileName(), aTmpName2));
+ }
+
+ void getFileStatus_002()
+ {
+ DirectoryItem rItem; // constructor
+ // get the DirectoryItem.
+ nError1 = DirectoryItem::get(aTmpName6, rItem);
+
+ // check the file name
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ nError2 = rItem.getFileStatus(rFileStatus);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileStatus function: file not existed",
+ osl::FileBase::E_INVAL, nError2);
+ }
+
+ void getFileStatus_003()
+ {
+ DirectoryItem rItem; // constructor
+ // get the DirectoryItem.
+ nError1 = DirectoryItem::get(aTmpName3, rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // check the file name
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ nError2 = rItem.getFileStatus(rFileStatus);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileStatus function: get directory information",
+ osl::FileBase::E_None, nError2);
+ CPPUNIT_ASSERT_MESSAGE("test for getFileStatus function: get directory information",
+ compareFileName(rFileStatus.getFileName(), aTmpName1));
+ }
+
+ CPPUNIT_TEST_SUITE(getFileStatus);
+ CPPUNIT_TEST(getFileStatus_001);
+ CPPUNIT_TEST(getFileStatus_002);
+ CPPUNIT_TEST(getFileStatus_003);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DirectoryItem::ctors, "osl_DirectoryItem");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DirectoryItem::copy_assin_Ctors, "osl_DirectoryItem");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DirectoryItem::is, "osl_DirectoryItem");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DirectoryItem::get, "osl_DirectoryItem");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DirectoryItem::getFileStatus, "osl_DirectoryItem");
+}
+
+// Beginning of the test cases for Directory class
+
+namespace osl_Directory
+{
+ // testing the method
+ // Directory(const OUString& strPath): _pData(0), _aPath(strPath)
+
+ class ctors : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1, nError2;
+
+ public:
+ ctors() : nError1(osl::FileBase::E_None),nError2(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ // LLA: t_print("tearDown done.\n");
+ }
+
+
+ void ctors_001()
+ {
+ Directory testDirectory(aTmpName3); // constructor
+
+ // open a directory
+ nError1 = testDirectory.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // close a directory
+ nError2 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: create an instance and check open and close",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: create an instance and check open and close",
+ osl::FileBase::E_None, nError2);
+ }
+
+ void ctors_002()
+ {
+ Directory testDirectory(aTmpName9); // constructor
+
+ // open a directory
+ nError1 = testDirectory.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // close a directory
+ nError2 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: relative URL, :-), it is also worked",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: relative URL, :-), it is also worked",
+ osl::FileBase::E_None, nError2);
+ }
+
+ CPPUNIT_TEST_SUITE(ctors);
+ CPPUNIT_TEST(ctors_001);
+ CPPUNIT_TEST(ctors_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC open()
+
+ class open : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1, nError2;
+
+ public:
+ open() : nError1(osl::FileBase::E_None),nError2(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void open_001()
+ {
+ Directory testDirectory(aTmpName3);
+
+ // open a directory
+ nError1 = testDirectory.open();
+ // check if directory is opened.
+ bool bOk = testDirectory.isOpen();
+ // close a directory
+ nError2 = testDirectory.close();
+
+ CPPUNIT_ASSERT_MESSAGE("test for open function: open a directory and check for open",
+ bOk);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a directory and check for open",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a directory and check for open",
+ osl::FileBase::E_None, nError2);
+ }
+
+ void open_002()
+ {
+ Directory testDirectory(aTmpName6);
+
+ nError1 = testDirectory.open();
+ if (nError1 == osl::FileBase::E_None)
+ {
+ nError2 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ }
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a file that is not existed",
+ osl::FileBase::E_NOENT, nError1);
+ }
+
+ void open_003()
+ {
+ Directory testDirectory(aUserDirectorySys);
+
+ nError1 = testDirectory.open();
+ if (nError1 == osl::FileBase::E_None)
+ {
+ nError2 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ }
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: using system path",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void open_004()
+ {
+ Directory testDirectory(aTmpName4);
+
+ nError1 = testDirectory.open();
+ if (nError1 == osl::FileBase::E_None)
+ {
+ nError2 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ }
+
+ CPPUNIT_ASSERT_MESSAGE("test for open function: open a file instead of a directory",
+ (osl::FileBase::E_NOTDIR == nError1) || (osl::FileBase::E_ACCES == nError1));
+ }
+
+ CPPUNIT_TEST_SUITE(open);
+ CPPUNIT_TEST(open_001);
+ CPPUNIT_TEST(open_002);
+ CPPUNIT_TEST(open_003);
+ CPPUNIT_TEST(open_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline sal_Bool isOpen() { return _pData != NULL; };
+
+ class isOpen : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1, nError2;
+
+ public:
+ isOpen() : nError1(osl::FileBase::E_None),nError2(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempfile in $TEMP/tmpdir/tmpname.
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ }
+
+ void tearDown() override
+ {
+ // remove the tempfile in $TEMP/tmpdir/tmpname.
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void isOpen_001()
+ {
+ Directory testDirectory(aTmpName3); // constructor
+
+ // open a directory
+ nError1 = testDirectory.open();
+ // check if directory is opened.
+ bool bOk = testDirectory.isOpen();
+ // close a directory
+ nError2 = testDirectory.close();
+
+ CPPUNIT_ASSERT_MESSAGE("test for isOpen function: open a directory and check for open",
+ bOk);
+ }
+
+ void isOpen_002()
+ {
+ Directory testDirectory(aTmpName3); // constructor
+
+ // check if directory is opened.
+ bool bOk = testDirectory.isOpen();
+
+ CPPUNIT_ASSERT_MESSAGE("test for isOpen function: do not open a directory and check for open",
+ !bOk);
+ }
+
+ CPPUNIT_TEST_SUITE(isOpen);
+ CPPUNIT_TEST(isOpen_001);
+ CPPUNIT_TEST(isOpen_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC close()
+
+ class close : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1, nError2;
+
+ public:
+ close() : nError1(osl::FileBase::E_None),nError2(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempdirectory : $TEMP/tmpdir.
+ createTestDirectory(aTmpName3);
+ }
+
+ void tearDown() override
+ {
+ // remove a tempdirectory : $TEMP/tmpdir.
+ deleteTestDirectory(aTmpName3);
+ }
+
+ void close_001()
+ {
+ Directory testDirectory(aTmpName3);
+
+ // open a directory
+ nError1 = testDirectory.open();
+ // close a directory
+ nError2 = testDirectory.close();
+ // check if directory is opened.
+ bool bOk = testDirectory.isOpen();
+
+ CPPUNIT_ASSERT_MESSAGE("test for isOpen function: close a directory and check for open",
+ !bOk);
+ }
+
+ void close_002()
+ {
+ Directory testDirectory(aTmpName3);
+
+ // close a directory
+ nError1 = testDirectory.close();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for isOpen function: close a not opened directory",
+ osl::FileBase::E_BADF, nError1);
+ }
+
+ CPPUNIT_TEST_SUITE(close);
+ CPPUNIT_TEST(close_001);
+ CPPUNIT_TEST(close_002);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC reset()
+
+ class reset : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1, nError2;
+ DirectoryItem rItem;
+
+ public:
+ reset() : nError1(osl::FileBase::E_None),nError2(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempdirectory : $TEMP/tmpdir.
+ createTestDirectory(aTmpName3);
+ // create three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile,
+ createTestFile(aTmpName3, aTmpName2);
+ createTestFile(aTmpName3, aTmpName1);
+ createTestFile(aTmpName3, aHidURL1);
+ }
+
+ void tearDown() override
+ {
+ // remove three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile,
+ deleteTestFile(aTmpName3, aHidURL1);
+ deleteTestFile(aTmpName3, aTmpName1);
+ deleteTestFile(aTmpName3, aTmpName2);
+ // remove a tempdirectory : $TEMP/tmpdir.
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void reset_001()
+ {
+ Directory testDirectory(aTmpName3); // constructor
+
+ // open a directory
+ nError1 = testDirectory.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // get first Item
+ nError1 = testDirectory.getNextItem(rItem, 1);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // check the file name of first Item
+ FileStatus rFileStatusFirst(osl_FileStatus_Mask_FileName);
+ nError1 = rItem.getFileStatus(rFileStatusFirst);
+
+ // get second Item
+ // mindy: nError1 = testDirectory.getNextItem(rItem, 0);
+ // mindy: CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // reset enumeration
+ nError2 = testDirectory.reset();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2);
+ // get reset Item, if reset does not work, getNextItem() should return the second Item (aTmpName1)
+ nError1 = testDirectory.getNextItem(rItem);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // check the file name again
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+ nError1 = rItem.getFileStatus(rFileStatus);
+ // close a directory
+ nError1 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ bool bOK1,bOK2,bOK3;
+ bOK1 = compareFileName(rFileStatus.getFileName(), aTmpName2);
+ bOK2 = compareFileName(rFileStatus.getFileName(), aHidURL1);
+ bOK3 = compareFileName(rFileStatus.getFileName(), rFileStatusFirst.getFileName());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for reset function: get two directory item, reset it, then get again, check the filename",
+ osl::FileBase::E_None, nError2);
+ CPPUNIT_ASSERT_MESSAGE("test for reset function: get two directory item, reset it, then get again, check the filename",
+ (bOK1 || bOK2 || bOK3));
+ }
+
+ void reset_002()
+ {
+ Directory testDirectory(aTmpName6); // constructor
+
+ // close a directory
+ nError1 = testDirectory.reset();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for reset function: reset a non existed directory",
+ osl::FileBase::E_NOENT, nError1);
+ }
+
+ void reset_003()
+ {
+ Directory testDirectory(aTmpName4); // constructor
+
+ // close a directory
+ nError1 = testDirectory.reset();
+
+ CPPUNIT_ASSERT_MESSAGE("test for reset function: reset a file instead of a directory",
+ (osl::FileBase::E_NOTDIR == nError1) || (osl::FileBase::E_NOENT == nError1));
+ }
+
+ void reset_004()
+ {
+ Directory testDirectory(aUserDirectorySys); // constructor
+
+ // close a directory
+ nError1 = testDirectory.reset();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for reset function: use a system path",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ CPPUNIT_TEST_SUITE(reset);
+ CPPUNIT_TEST(reset_001);
+ CPPUNIT_TEST(reset_002);
+ CPPUNIT_TEST(reset_003);
+ CPPUNIT_TEST(reset_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline RC getNextItem(DirectoryItem& rItem, sal_uInt32 nHint = 0)
+
+ class getNextItem : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1, nError2;
+ DirectoryItem rItem;
+
+ public:
+ getNextItem() : nError1(osl::FileBase::E_None),nError2(osl::FileBase::E_None) {}
+
+ void setUp() override
+ {
+ // create a tempdirectory : $TEMP/tmpdir.
+ createTestDirectory(aTmpName3);
+ // create three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile,
+ createTestFile(aTmpName3, aTmpName2);
+ createTestFile(aTmpName3, aTmpName1);
+ createTestFile(aTmpName3, aHidURL1);
+
+ }
+
+ void tearDown() override
+ {
+ // remove three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile,
+ deleteTestFile(aTmpName3, aHidURL1);
+ deleteTestFile(aTmpName3, aTmpName1);
+ deleteTestFile(aTmpName3, aTmpName2);
+ // remove a tempdirectory : $TEMP/tmpdir.
+ deleteTestDirectory(aTmpName3);
+ }
+
+
+ void getNextItem_001()
+ {
+ Directory testDirectory(aTmpName3); // constructor
+
+ // open a directory
+ nError1 = testDirectory.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // check the file name
+ bool bOk1 = false;
+ bool bOk2 = false;
+ bool bOk3 = false;
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName);
+
+ for (int nCount = 0; nCount < 3; nCount++)
+ {
+ // get three Items
+ nError1 = testDirectory.getNextItem(rItem, 2);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ nError1 = rItem.getFileStatus(rFileStatus);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ // a special order is not guaranteed. So any file may occur on any time.
+ // But every file name should occur only once.
+ if (!bOk1 && compareFileName(rFileStatus.getFileName(), aTmpName1))
+ {
+ bOk1 = true;
+ }
+
+ if (!bOk2 && compareFileName(rFileStatus.getFileName(), aTmpName2))
+ {
+ bOk2 = true;
+ }
+
+ if (!bOk3 && compareFileName(rFileStatus.getFileName(), aHidURL1))
+ {
+ bOk3 = true;
+ }
+ }
+
+ // close a directory
+ nError1 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: retrieve three items and check their names.",
+ bOk1);
+ CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: retrieve three items and check their names.",
+ bOk2);
+ CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: retrieve three items and check their names.",
+ bOk3);
+ }
+
+ void getNextItem_002()
+ {
+ Directory testDirectory(aTmpName3); // constructor
+ nError1 = testDirectory.getNextItem(rItem);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getNextItem function: retrieve an item in a directory which is not opened, also test for nHint's default value.",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void getNextItem_003()
+ {
+ Directory testDirectory(aTmpName3); // constructor
+
+ // open a directory
+ nError1 = testDirectory.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ for (int nCount = 0; nCount < 4; nCount++)
+ {
+ nError2 = testDirectory.getNextItem(rItem, 3);
+ }
+
+ // close a directory
+ nError1 = testDirectory.close();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getNextItem function: retrieve 4 times in a directory which contain only 3 files.",
+ osl::FileBase::E_NOENT, nError2);
+ }
+
+ void getNextItem_004()
+ {
+ // create a link file(can not on Windows), then check if getNextItem can get it.
+#ifdef UNX
+ bool bLnkOK = false;
+ bool bFoundOK = false;
+
+ OUString aUStr_LnkFileSys(aTempDirectorySys), aUStr_SrcFileSys(aTempDirectorySys);
+ aUStr_LnkFileSys += aSlashURL + "/tmpdir/link.file";
+ aUStr_SrcFileSys += aSlashURL + "/tmpdir/tmpname";
+
+ OString strLinkFileName, strSrcFileName;
+ strLinkFileName = OUStringToOString(aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US);
+ strSrcFileName = OUStringToOString(aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US);
+
+ // create a link file and link it to file "/tmp/PID/tmpdir/tmpname"
+ sal_Int32 fd = symlink(strSrcFileName.getStr(), strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), fd);
+ Directory testDirectory(aTmpName3);
+
+ // open a directory
+ nError1 = testDirectory.open();
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ OUString aFileName ("link.file");
+
+ while (true) {
+ nError1 = testDirectory.getNextItem(rItem, 4);
+ if (nError1 == osl::FileBase::E_None) {
+ FileStatus rFileStatus(osl_FileStatus_Mask_FileName | osl_FileStatus_Mask_Type);
+ rItem.getFileStatus(rFileStatus);
+ if (compareFileName(rFileStatus.getFileName(), aFileName))
+ {
+ bFoundOK = true;
+ if (rFileStatus.getFileType() == FileStatus::Link)
+ {
+ bLnkOK = true;
+ break;
+ }
+ }
+ }
+ else
+ break;
+ }
+ fd = std::remove(strLinkFileName.getStr());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("remove link file failed", static_cast<sal_Int32>(0), fd);
+ CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: check if can retrieve the link file name",
+ bFoundOK);
+ CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: check if link file has file type link",
+ bLnkOK);
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE(getNextItem);
+ CPPUNIT_TEST(getNextItem_001);
+ CPPUNIT_TEST(getNextItem_002);
+ CPPUNIT_TEST(getNextItem_003);
+ CPPUNIT_TEST(getNextItem_004);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC getVolumeInfo(const OUString& ustrDirectoryURL, VolumeInfo& rInfo)
+
+ class getVolumeInfo : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1;
+
+ public:
+ getVolumeInfo() : nError1(osl::FileBase::E_None) {}
+
+ void checkValidMask(osl::VolumeInfo const& _aVolumeInfo, sal_Int32 _nMask)
+ {
+ if (_nMask == osl_VolumeInfo_Mask_FileSystemName)
+ {
+ // get file system name
+ OUString aFileSysName = _aVolumeInfo.getFileSystemName();
+
+ bool bRes2 = compareFileName(aFileSysName, aNullURL);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getVolumeInfo function: getVolumeInfo of root directory.",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_MESSAGE("test for getVolumeInfo function: getVolumeInfo of root directory.",
+ !bRes2);
+ }
+
+ if (_nMask == osl_VolumeInfo_Mask_Attributes)
+ {
+ bool b1 = _aVolumeInfo.getRemoteFlag();
+ bool b2 = _aVolumeInfo.getRemoveableFlag();
+ bool b3 = _aVolumeInfo.getCompactDiscFlag();
+ bool b4 = _aVolumeInfo.getFloppyDiskFlag();
+ bool b5 = _aVolumeInfo.getFixedDiskFlag();
+ bool b6 = _aVolumeInfo.getRAMDiskFlag();
+
+ OString sAttr;
+ if (b1) sAttr = "Remote";
+ if (b2) sAttr += " Removeable";
+ if (b3) sAttr += " CDROM";
+ if (b4) sAttr += " Floppy";
+ if (b5) sAttr += " FixedDisk";
+ if (b6) sAttr += " RAMDisk";
+
+ printf("Attributes: %s\n", sAttr.getStr());
+ }
+ if (_nMask == osl_VolumeInfo_Mask_TotalSpace)
+ {
+ // within Linux, df / * 1024 bytes is the result
+ sal_uInt64 nSize = _aVolumeInfo.getTotalSpace();
+ printf("Total space: %" SAL_PRIuUINT64 "\n", nSize);
+ }
+ if (_nMask == osl_VolumeInfo_Mask_UsedSpace)
+ {
+ sal_uInt64 nSize = _aVolumeInfo.getUsedSpace();
+ printf(" Used space: %" SAL_PRIuUINT64 "\n", nSize);
+ }
+ if (_nMask == osl_VolumeInfo_Mask_FreeSpace)
+ {
+ sal_uInt64 nSize = _aVolumeInfo.getFreeSpace();
+ printf(" Free space: %" SAL_PRIuUINT64 "\n", nSize);
+ }
+ if (_nMask == osl_VolumeInfo_Mask_MaxNameLength)
+ {
+ sal_uInt32 nLength = _aVolumeInfo.getMaxNameLength();
+ printf("max name length: %" SAL_PRIuUINT32 "\n", nLength);
+ }
+ if (_nMask == osl_VolumeInfo_Mask_MaxPathLength)
+ {
+ sal_uInt32 nLength = _aVolumeInfo.getMaxPathLength();
+ printf("max path length: %" SAL_PRIuUINT32 "\n", nLength);
+ }
+ if (_nMask == osl_VolumeInfo_Mask_FileSystemCaseHandling)
+ {
+ bool bIsCase = _aVolumeInfo.isCaseSensitiveFileSystem();
+ printf("filesystem case sensitive: %s\n", bIsCase ? "yes" : "no");
+ }
+ }
+
+ void checkVolumeInfo(sal_Int32 _nMask)
+ {
+ VolumeInfo aVolumeInfo(_nMask);
+ // call getVolumeInfo here
+ nError1 = Directory::getVolumeInfo(aVolURL1, aVolumeInfo);
+ // LLA: IMHO it's not a bug, if VolumeInfo is not valid, it's a feature
+ // LLA: CPPUNIT_ASSERT_MESSAGE("mask is not valid", sal_True == aVolumeInfo.isValid(_nMask));
+ if (aVolumeInfo.isValid(_nMask))
+ checkValidMask(aVolumeInfo, _nMask);
+ }
+
+ void getVolumeInfo_001_1()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_FileSystemName;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_001_2()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_Attributes;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_001_3()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_TotalSpace;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_001_4()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_UsedSpace;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_001_5()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_FreeSpace;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_001_6()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_MaxNameLength;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_001_7()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_MaxPathLength;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_001_8()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_FileSystemCaseHandling;
+ checkVolumeInfo(mask);
+ }
+
+ void getVolumeInfo_002()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_FileSystemName;
+ VolumeInfo aVolumeInfo(mask);
+ // call getVolumeInfo here
+
+ OUString aRootSysURL;
+ nError1 = osl::File::getFileURLFromSystemPath(aRootSys, aRootSysURL);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("can't convert root path to file url", osl::FileBase::E_None, nError1);
+
+ nError1 = Directory::getVolumeInfo(aRootSys, aVolumeInfo);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getVolumeInfo function: use system path as parameter.",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void getVolumeInfo_003()
+ {
+ sal_Int32 mask = osl_VolumeInfo_Mask_FileSystemName;
+ VolumeInfo aVolumeInfo(mask);
+ // call getVolumeInfo here
+ nError1 = Directory::getVolumeInfo(aTmpName3, aVolumeInfo);
+
+// LLA: in Windows, it reply no error, it did not pass in (W32).
+#if defined(UNX) && !defined(IOS)
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getVolumeInfo function: non-existence test. ",
+ osl::FileBase::E_NOENT, nError1);
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE(getVolumeInfo);
+ CPPUNIT_TEST(getVolumeInfo_001_1);
+ CPPUNIT_TEST(getVolumeInfo_001_2);
+ CPPUNIT_TEST(getVolumeInfo_001_3);
+ CPPUNIT_TEST(getVolumeInfo_001_4);
+ CPPUNIT_TEST(getVolumeInfo_001_5);
+ CPPUNIT_TEST(getVolumeInfo_001_6);
+ CPPUNIT_TEST(getVolumeInfo_001_7);
+ CPPUNIT_TEST(getVolumeInfo_001_8);
+ CPPUNIT_TEST(getVolumeInfo_002);
+ CPPUNIT_TEST(getVolumeInfo_003);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC create(const OUString& ustrDirectoryURL)
+
+ class create : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1, nError2;
+
+ public:
+ create() : nError1(osl::FileBase::E_None),nError2(osl::FileBase::E_None) {}
+ void create_001()
+ {
+ // create directory in $TEMP/tmpdir
+ nError1 = Directory::create(aTmpName3);
+ // check for existence
+ nError2 = Directory::create(aTmpName3);
+ // remove it
+ deleteTestDirectory(aTmpName3);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for create function: create a directory and check its existence.",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for create function: create a directory and check its existence.",
+ osl::FileBase::E_EXIST, nError2);
+ }
+
+ void create_002()
+ {
+#if !defined(_WIN32) && !defined(MACOSX) && defined(SAL_UNX)
+ if (geteuid() == 0) // don't test if building as root
+ return;
+
+ OUString aTmpDir;
+ nError1 = osl::FileBase::createTempFile(nullptr, nullptr, &aTmpDir);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("temp File creation failed", osl::FileBase::E_None, nError1);
+
+ nError1 = File::remove(aTmpDir);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("temp File removal failed", osl::FileBase::E_None, nError1);
+
+ nError1 = Directory::create(aTmpDir);
+ OString sError = "test for create function: create a directory '" +
+ OUStringToOString(aTmpDir, RTL_TEXTENCODING_ASCII_US) +
+ "' and check its existence.";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_None, nError1);
+ osl_setFileAttributes(aTmpDir.pData, 0); // no access allowed now
+
+ // Shouldn't be possible now to create a dir underneath it
+ OUString aTmpSubLevel = aTmpDir + "/notallowedhere";
+ nError1 = Directory::create(aTmpSubLevel);
+
+ // allow removal
+ osl_setFileAttributes(aTmpDir.pData,
+ osl_File_Attribute_OwnRead |
+ osl_File_Attribute_OwnWrite |
+ osl_File_Attribute_OwnExe);
+ deleteTestDirectory(aTmpDir);
+ sError = "test for create function: create a directory under '" +
+ OUStringToOString(aTmpDir, RTL_TEXTENCODING_ASCII_US) +
+ "' for access test.";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_ACCES, nError1);
+#endif
+ }
+
+ void create_003()
+ {
+ // create directory in /tmpname
+ nError1 = Directory::create(aSysPath1);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for create function: create a directory using system path.",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ CPPUNIT_TEST_SUITE(create);
+ CPPUNIT_TEST(create_001);
+ CPPUNIT_TEST(create_002);
+ CPPUNIT_TEST(create_003);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // testing the method
+ // inline static RC remove(const OUString& ustrDirectoryURL)
+
+ class remove : public CppUnit::TestFixture
+ {
+ private:
+ osl::FileBase::RC nError1, nError2;
+
+ public:
+ remove() : nError1(osl::FileBase::E_None),nError2(osl::FileBase::E_None) {}
+
+ void remove_001()
+ {
+ // create directory in $TEMP/tmpdir
+ nError1 = Directory::create(aTmpName3);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // remove it
+ nError1 = Directory::remove(aTmpName3);
+ // check for existence
+ Directory rDirectory(aTmpName3);
+ nError2 = rDirectory.open();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a directory and check its existence.",
+ osl::FileBase::E_None, nError1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a directory and check its existence.",
+ osl::FileBase::E_NOENT, nError2);
+ }
+
+ void remove_002()
+ {
+ // create directory in $TEMP/tmpdir
+ nError1 = Directory::create(aTmpName3);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1);
+ // try to remove it by system path
+ nError1 = Directory::remove(aSysPath3);
+ // check for existence
+ Directory rDirectory(aTmpName3);
+ nError2 = rDirectory.open();
+
+ if (nError2 != osl::FileBase::E_NOENT)
+ Directory::remove(aTmpName3);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a directory by its system path, and check its existence.",
+ osl::FileBase::E_INVAL, nError1);
+ }
+
+ void remove_003()
+ {
+ // try to remove a non-existed directory
+ nError1 = Directory::remove(aTmpName6);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: try to remove a non-existed directory.",
+ osl::FileBase::E_NOENT, nError1);
+ }
+
+ void remove_004()
+ {
+ createTestFile(aTmpName6);
+ bool bExist = ifFileExist(aTmpName6);
+ // try to remove file.
+ nError1 = Directory::remove(aTmpName6);
+ deleteTestFile(aTmpName6);
+
+ CPPUNIT_ASSERT_MESSAGE("test for remove function: try to remove a file but not directory.",
+ bExist);
+ CPPUNIT_ASSERT_MESSAGE("test for remove function: try to remove a file but not directory.",
+ (osl::FileBase::E_NOTDIR == nError1) || (osl::FileBase::E_NOENT == nError1));
+ }
+
+ void remove_005()
+ {
+ createTestDirectory(aTmpName3);
+ createTestFile(aTmpName4);
+ nError1 = Directory::remove(aTmpName3);
+ deleteTestFile(aTmpName4);
+ deleteTestDirectory(aTmpName3);
+ OString sError = "test for remove function: try to remove a directory that is not empty." +
+ errorToStr(nError1);
+#if defined(__sun)
+ // on UNX, the implementation uses rmdir(), which EEXIST is thrown on Solaris when the directory is not empty, refer to: 'man -s 2 rmdir', while on linux, ENOTEMPTY is thrown.
+ // EEXIST The directory contains entries other than those for "." and "..".
+ printf("#Solaris test\n");
+ CPPUNIT_ASSERT_MESSAGE(sError.getStr(), (osl::FileBase::E_EXIST == nError1));
+#else
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_NOTEMPTY, nError1);
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE(remove);
+ CPPUNIT_TEST(remove_001);
+ CPPUNIT_TEST(remove_002);
+ CPPUNIT_TEST(remove_003);
+ CPPUNIT_TEST(remove_004);
+ CPPUNIT_TEST(remove_005);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // TEST Directory::createPath
+
+ #ifdef _WIN32
+ # define PATH_BUFFER_SIZE MAX_PATH
+ #else
+ # define PATH_BUFFER_SIZE PATH_MAX
+ #endif
+
+#define TEST_PATH_POSTFIX "hello/world"
+
+ static OUString const & get_test_path()
+ {
+ static OUString test_path = [&]()
+ {
+ OUString tmp;
+ osl::FileBase::RC rc = osl::FileBase::getTempDirURL(tmp);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Getting the location of TMP dir failed",
+ osl::FileBase::E_None, rc
+ );
+
+ OUString system_path;
+ rc = osl::FileBase::getSystemPathFromFileURL(tmp, system_path);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Cannot convert the TMP dir to system path",
+ osl::FileBase::E_None, rc
+ );
+
+ OString tmp_x(OUStringToOString(system_path, RTL_TEXTENCODING_UTF8));
+ if (tmp_x.lastIndexOf('/') != (tmp_x.getLength() - 1))
+ tmp_x += OString('/');
+
+#if !defined(_WIN32) && !defined(ANDROID) && !defined(AIX)
+ // FIXME would be nice to create unique dir even on Windows
+ tmp_x += "XXXXXX";
+ char *out = mkdtemp(const_cast<char*>(tmp_x.getStr()));
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "mkdtemp call failed",
+ out != nullptr
+ );
+
+ tmp_x += OString('/');
+#endif
+ tmp_x += OString(TEST_PATH_POSTFIX);
+
+ OUString tmpTestPath;
+ rc = osl::FileBase::getFileURLFromSystemPath(OStringToOUString(tmp_x, RTL_TEXTENCODING_UTF8), tmpTestPath);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "Cannot convert the system path back to a URL",
+ osl::FileBase::E_None, rc
+ );
+ return tmpTestPath;
+ }();
+ return test_path;
+ }
+
+ static void rm_test_path(const OUString& path)
+ {
+ sal_Unicode buffer[PATH_BUFFER_SIZE];
+ memcpy(buffer, path.getStr(), (path.getLength() + 1) * sizeof(sal_Unicode));
+
+ sal_Int32 i = rtl_ustr_lastIndexOfChar(buffer, '/');
+ if (i == path.getLength())
+ buffer[i] = 0;
+
+ Directory::remove(buffer);
+
+ i = rtl_ustr_lastIndexOfChar(buffer, '/');
+ assert(i != -1);
+ if (i != -1)
+ {
+ buffer[i] = 0;
+ Directory::remove(buffer);
+ }
+ }
+
+ namespace {
+
+ class DirCreatedObserver : public DirectoryCreationObserver
+ {
+ public:
+ DirCreatedObserver() : i(0) {}
+ virtual void DirectoryCreated(const OUString&) override { i++; };
+
+ int number_of_dirs_created() const { return i; }
+
+ private:
+ int i;
+ };
+
+ }
+
+ class createPath : public CppUnit::TestFixture
+ {
+ public:
+ createPath()
+ {}
+
+ void with_relative_path()
+ {
+ osl::FileBase::RC rc = Directory::createPath(TEST_PATH_POSTFIX);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createDirectoryPath contract broken",
+ osl::FileBase::E_INVAL, rc
+ );
+ }
+
+ void without_callback()
+ {
+ OUString tp_url = get_test_path();
+
+ rm_test_path(tp_url);
+
+ osl::FileBase::RC rc = Directory::createPath(tp_url);
+
+ rm_test_path(tp_url);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createDirectoryPath failed",
+ osl::FileBase::E_None, rc
+ );
+ }
+
+ void with_callback()
+ {
+ OUString tp_url = get_test_path();
+
+ rm_test_path(tp_url);
+
+ DirCreatedObserver* observer = new DirCreatedObserver;
+ osl::FileBase::RC rc = Directory::createPath(tp_url, observer);
+ int nDirs = observer->number_of_dirs_created();
+ delete observer;
+
+ rm_test_path(tp_url);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createDirectoryPath failed",
+ osl::FileBase::E_None, rc
+ );
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "osl_createDirectoryPath failed",
+ nDirs > 0
+ );
+
+ }
+
+#ifdef _WIN32
+
+ const char* get_unused_drive_letter()
+ {
+ static const char m_aBuff[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+ DWORD ld = GetLogicalDrives();
+ DWORD i = 4;
+ DWORD j = 2;
+
+ while ((ld & i) && (i > 1))
+ { i = i << 1; j++; }
+
+ if (i > 2)
+ return m_aBuff + j;
+
+ return nullptr;
+ }
+
+ void at_invalid_logical_drive()
+ {
+ const char* drv = get_unused_drive_letter();
+ char buff[PATH_BUFFER_SIZE];
+ memset(buff, 0, sizeof(buff));
+
+ strncpy(buff, drv, 1);
+ strcat(buff, ":\\");
+ strcat(buff, TEST_PATH_POSTFIX);
+
+ OUString path = OUString::createFromAscii(buff);
+ OUString tp_url;
+ osl::FileBase::getFileURLFromSystemPath(path, tp_url);
+
+ osl::FileBase::RC rc = Directory::createPath(tp_url);
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "osl_createDirectoryPath doesn't fail on unused logical drive letters",
+ rc != osl::FileBase::E_None
+ );
+ }
+#endif /* _WIN32 */
+
+ CPPUNIT_TEST_SUITE(createPath);
+ CPPUNIT_TEST(with_relative_path);
+ CPPUNIT_TEST(without_callback);
+ CPPUNIT_TEST(with_callback);
+#ifdef _WIN32
+ CPPUNIT_TEST(at_invalid_logical_drive);
+#endif
+ CPPUNIT_TEST_SUITE_END();
+
+ };
+
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::ctors);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::open);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::isOpen);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::close);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::reset);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::getNextItem);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::getVolumeInfo);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::create);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::remove);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::createPath);
+}
+
+#if defined UNX
+/** get Current PID.
+*/
+OUString getCurrentPID()
+{
+ //~ Get current PID and turn it into OUString;
+ int nPID = 0;
+#ifdef _WIN32
+ nPID = GetCurrentProcessId();
+#else
+ nPID = getpid();
+#endif
+ return OUString::number(nPID);
+}
+#endif
+
+namespace {
+
+//~ do some clean up work after all test completed.
+class GlobalObject
+{
+public:
+ ~GlobalObject()
+ {
+ try
+ {
+ //~ special clean up task in Windows and Unix separately;
+#if (defined UNX)
+ //~ some clean up task for UNIX OS
+ ;
+#else
+ //~ some clean up task for Windows OS
+ //~ check if some files are in the way, remove them if necessary.
+ if (ifFileExist(aTmpName6))
+ deleteTestFile(aTmpName6);
+ if (ifFileExist(aTmpName4))
+ deleteTestFile(aTmpName4);
+ if (checkDirectory(aTmpName4, oslCheckMode::Exist))
+ deleteTestDirectory(aTmpName4);
+ if (ifFileExist(aTmpName3))
+ deleteTestFile(aTmpName3);
+ if (checkDirectory(aTmpName3, oslCheckMode::Exist))
+ deleteTestDirectory(aTmpName3);
+
+ OUString aUStr(aUserDirectoryURL);
+ concatURL(aUStr, aHidURL1);
+ if (ifFileExist(aUStr))
+ deleteTestFile(aUStr);
+
+ OUString aUStr1(aRootURL);
+ concatURL(aUStr1, aTmpName2);
+ if (ifFileExist(aUStr1))
+ deleteTestFile(aUStr1);
+#endif
+ }
+ catch (const CppUnit::Exception &e)
+ {
+ printf("Exception caught in GlobalObject dtor(). Exception message: '%s'. Source line: %d\n", e.what(), e.sourceLine().lineNumber());
+ }
+ catch (...)
+ {
+ printf("Exception caught (...) in GlobalObject dtor()\n");
+ }
+ }
+};
+
+}
+
+static GlobalObject theGlobalObject;
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/file/osl_File_Const.h b/sal/qa/osl/file/osl_File_Const.h
new file mode 100644
index 000000000..6cf324f29
--- /dev/null
+++ b/sal/qa/osl/file/osl_File_Const.h
@@ -0,0 +1,203 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_OSL_FILE_OSL_FILE_CONST_H
+#define INCLUDED_SAL_QA_OSL_FILE_OSL_FILE_CONST_H
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sal/types.h>
+
+#include <rtl/ustring.hxx>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+static OUString getTempDirectoryURL_()
+{
+ OUString aDir;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("couldn't get system temp URL",
+ osl::FileBase::E_None, osl::FileBase::getTempDirURL(aDir));
+ return aDir;
+}
+
+static OUString getTempDirectorySys_()
+{
+ OUString aDir;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("couldn't get system temp directory",
+ osl::FileBase::E_None, osl::FileBase::getSystemPathFromFileURL(getTempDirectoryURL_(), aDir));
+ return aDir;
+}
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+// common used string resource
+// these common used string will be used as assist resource in test
+// they are mostly OS independent, some of the resource can be reused
+// so, a common test data repository will be better since it can be
+// shared among all test code
+
+const char pBuffer_Char[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+const char pBuffer_Number[] = "1234567890";
+const char pBuffer_Blank[] = "";
+
+// OS dependent/independent definitions/includes
+// we use FILE_PREFIX for URL prefix,
+// TEST_PLATFORM for test platform initial,
+// TEST_PLATFORM_ROOT for root dir in comrresponding platform,
+// TEST_PLATFORM_TEMP for temp dir in comrresponding platform,
+// PATH_LIST_DELIMITER for separator of path list in comrresponding platform,
+// PATH_SEPARATOR for separator in URL or system path in comrresponding platform,
+// PATH_MAX/MAX_PATH for max path length in comrresponding platform,
+
+// OS independent const definition
+
+# define FILE_PREFIX "file:///"
+# define TEST_FILE_SIZE 1024
+
+// OS dependent declaration and includes
+
+#if ( defined UNX ) //Unix
+# include <unistd.h>
+# include <limits.h>
+# include <math.h>
+# include <errno.h>
+# include <fcntl.h>
+# include <sys/stat.h>
+# if !defined(MACOSX) && !defined(IOS) && !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined (DRAGONFLY) && !defined(HAIKU)
+# include <sys/statfs.h>
+# else
+# include <sys/param.h>
+# ifndef HAIKU
+# include <sys/mount.h>
+# endif
+# endif
+# if !defined(ANDROID)
+# include <sys/statvfs.h>
+# endif
+# include <sys/types.h>
+# define TEST_PLATFORM_ROOT "/"
+# define PATH_LIST_DELIMITER ":"
+# define PATH_SEPARATOR "/"
+#endif
+
+#if defined(_WIN32) // Windows
+# include <io.h>
+# define PATH_MAX MAX_PATH
+# define TEST_PLATFORM_ROOT "c:/"
+# define PATH_LIST_DELIMITER ";"
+# define PATH_SEPARATOR "/"
+#endif
+
+// OS independent file definition
+
+OUString aNullURL( "" );
+OUString aSlashURL( PATH_SEPARATOR );
+OUString aPreURL( FILE_PREFIX );
+OUString aRootURL( FILE_PREFIX TEST_PLATFORM_ROOT );
+
+OUString aTempDirectorySys(getTempDirectorySys_());
+OUString aTempDirectoryURL(getTempDirectoryURL_());
+OUString aUserDirectorySys( aTempDirectorySys + "" );
+OUString aUserDirectoryURL( aTempDirectoryURL + "" );
+
+// common used URL:temp, canonical, root, relative, link,etc
+
+OUString aCanURL1( aTempDirectoryURL + "/canonical.name" );
+OUString aCanURL2(
+ RTL_CONSTASCII_USTRINGPARAM("ca@#;+.,$///78no\0ni..name"));
+OUString aCanURL3( "ca@#;+.,$//tmp/678nonical//name" );
+OUString aCanURL4( "canonical.name" );
+OUString aTmpName1( "tmpdir" );
+OUString aTmpName2( "tmpname" );
+OUString aTmpName3( aTempDirectoryURL + "/tmpdir" );
+OUString aTmpName4( aTempDirectoryURL + "/tmpdir/tmpname" );
+OUString aTmpName5( aTempDirectoryURL + "/tmpdir/../tmpdir/./tmpname" );
+OUString aTmpName6( aTempDirectoryURL + "/tmpname" );
+OUString aTmpName7( aTempDirectoryURL + "/noaccess" );
+OUString aTmpName8( aTempDirectoryURL + "/tmpname/tmpdir" );
+OUString aTmpName9( aTempDirectoryURL + "/tmpdir/../tmpdir/./" );
+OUString aTmpName10(aTempDirectoryURL + "/\xE6\x9C\xAA\xE5\x91\xBD\xE5\x90\x8Dzhgb18030");
+
+OUString aRelURL1( "relative/file1" );
+OUString aRelURL2( "relative/./file2" );
+OUString aRelURL3( "relative/../file3" );
+OUString aRelURL4( "././relative/../file4" );
+OUString aRelURL5( aTempDirectoryURL + "/./../" );
+OUString aLnkURL1( aTempDirectoryURL + "/link.file" );
+OUString aHidURL1( ".hiddenfile" );
+
+// common used System Path:temp, root,etc
+
+OUString aRootSys( TEST_PLATFORM_ROOT );
+OUString aSysPath1( aTempDirectorySys + "/system.path" );
+OUString aSysPath2( aTempDirectorySys + "/system/path" );
+OUString aSysPath3( aTempDirectorySys + "/tmpdir" );
+OUString aSysPath4( aTempDirectorySys + "/tmpname" );
+OUString aSysPath5( aTempDirectorySys + "/\xE6\x9C\xAA\xE5\x91\xBD\xE5\x90\x8Dzhgb18030" );
+OUString aSysPathLnk( aTempDirectorySys + "/link.file" );
+OUString aFifoSys( aTempDirectorySys + "/tmpdir/fifo" );
+
+// FileType URL, we pick some canonical file in corresponding system for test:
+// socket, link, etc.
+// Note that this may be changed in the different platform, so be careful to use.
+
+#if ( defined UNX ) // Unix
+OUString aTypeURL1( FILE_PREFIX "dev/ccv"); //socket Solaris/Linux
+OUString aTypeURL2( FILE_PREFIX "devices/pseudo/tcp@0:tcp"); //special Solaris/Linux
+OUString aTypeURL3( FILE_PREFIX "lib" ); //link Solaris
+#else // Windows
+OUString aTypeURL1( FILE_PREFIX "" );
+OUString aTypeURL2( FILE_PREFIX "" );
+OUString aTypeURL3( FILE_PREFIX "" );
+#endif
+
+// Volume device URL, we pick some canonical volume device for test:
+// UNIX file system, Floppy Disk, Proc file system, Temp file system, Compact Disk.
+
+#if ( defined UNX ) // Unix
+OUString aVolURL1( FILE_PREFIX ""); //ufs Solaris/Linux
+#ifdef __sun
+OUString aVolURL2( FILE_PREFIX "dev/fd" ); //fd Solaris
+#else
+OUString aVolURL2( FILE_PREFIX "dev/floppy/0u1440" ); //fd0 Linux
+#endif
+OUString aVolURL3( FILE_PREFIX "proc" ); //proc Solaris/Linux
+OUString aVolURL4( FILE_PREFIX "staroffice" ); //nfs Solaris/Linux
+OUString aVolURL5( FILE_PREFIX "tmp" ); //tmpfs Solaris
+OUString aVolURL6( FILE_PREFIX "cdrom" ); //cd Solaris
+#else // Windows
+OUString aVolURL1( FILE_PREFIX "c:/" );
+OUString aVolURL2( FILE_PREFIX "a:/" );
+OUString aVolURL3( FILE_PREFIX "" );
+OUString aVolURL4( FILE_PREFIX "" );
+OUString aVolURL5( FILE_PREFIX "c:/temp" );
+OUString aVolURL6( FILE_PREFIX "e:/" );
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // INCLUDED_SAL_QA_OSL_FILE_OSL_FILE_CONST_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/file/osl_old_test_file.cxx b/sal/qa/osl/file/osl_old_test_file.cxx
new file mode 100644
index 000000000..ee89b836d
--- /dev/null
+++ b/sal/qa/osl/file/osl_old_test_file.cxx
@@ -0,0 +1,142 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <osl/file.h>
+#include <osl/process.h>
+#include <rtl/ustring.hxx>
+#ifdef SAL_UNX
+#include <unistd.h>
+#include <limits.h>
+#include <string.h>
+#include <sys/stat.h>
+#define TEST_VOLUME ""
+#endif
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+namespace osl_test_file
+{
+
+class oldtestfile : public CppUnit::TestFixture
+{
+public:
+ void test_file_001();
+ void test_file_002();
+ void test_file_004();
+
+ CPPUNIT_TEST_SUITE( oldtestfile );
+ CPPUNIT_TEST( test_file_001 );
+ CPPUNIT_TEST( test_file_002 );
+ CPPUNIT_TEST( test_file_004 );
+ CPPUNIT_TEST_SUITE_END( );
+};
+
+#ifndef _WIN32
+const char * const aSource1[] =
+{
+ "a" , "file:///" TEST_VOLUME "bla/a",
+ ///TODO: check if last slash must be omitted in resolved path.
+// "a/" , "file:///" TEST_VOLUME "bla/a",
+ "../a" , "file:///" TEST_VOLUME "a" ,
+ "a/.." , "file:///" TEST_VOLUME "bla/",
+ "a/../b" , "file:///" TEST_VOLUME "bla/b",
+ ".." , "file:///" TEST_VOLUME "",
+ "a/b/c/d" , "file:///" TEST_VOLUME "bla/a/b/c/d",
+ "a/./c" , "file:///" TEST_VOLUME "bla/a/c",
+ "file:///bla/blub", "file:///" "bla/blub",
+ nullptr , nullptr
+};
+
+const char * const aSource2[ ] =
+{
+ "a" , "file:///" TEST_VOLUME "bla/blubs/schnubbel/a",
+ ///TODO: check if last slash must be omitted in resolved path.
+// "a/", "file:///" TEST_VOLUME "bla/blubs/schnubbel/a",
+ "../a", "file:///" TEST_VOLUME "bla/blubs/a",
+ "../../a", "file:///" TEST_VOLUME "bla/a",
+ "../../../a", "file:///" TEST_VOLUME "a",
+ "../../../a/b/c/d", "file:///" TEST_VOLUME "a/b/c/d",
+ nullptr,nullptr
+};
+#endif
+
+void oldtestfile::test_file_001()
+{
+#ifndef _WIN32
+ OUString base1( "file:///" TEST_VOLUME "bla" );
+ int i;
+ for( i = 0 ; aSource1[i] ; i +=2 )
+ {
+ OUString target;
+ OUString rel = OUString::createFromAscii( aSource1[i] );
+ oslFileError e = osl_getAbsoluteFileURL( base1.pData, rel.pData , &target.pData );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("failure #1", osl_File_E_None, e );
+ if( e == osl_File_E_None )
+ {
+ CPPUNIT_ASSERT_MESSAGE("failure #1.1", target.equalsAscii( aSource1[i+1] ) );
+ }
+ }
+#endif
+}
+
+void oldtestfile::test_file_002()
+{
+#ifndef _WIN32
+ OUString base2( "file:///" TEST_VOLUME "bla/blubs/schnubbel" );
+ int i;
+ for( i = 0 ; aSource2[i] ; i +=2 )
+ {
+ OUString target;
+ OUString rel = OUString::createFromAscii( aSource2[i] );
+ oslFileError e = osl_getAbsoluteFileURL( base2.pData, rel.pData , &target.pData );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("failure #2", osl_File_E_None, e );
+ if( e == osl_File_E_None )
+ {
+ CPPUNIT_ASSERT_MESSAGE("failure #2.1", target.equalsAscii( aSource2[i+1] ) );
+ }
+ }
+#endif
+}
+
+void oldtestfile::test_file_004()
+{
+#ifndef _WIN32
+ OUString base4( "file:///" TEST_VOLUME "bla/" );
+ int i;
+ for( i = 0 ; aSource1[i] ; i +=2 )
+ {
+ OUString target;
+ OUString rel = OUString::createFromAscii( aSource1[i] );
+ oslFileError e = osl_getAbsoluteFileURL( base4.pData, rel.pData , &target.pData );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("failure #10", osl_File_E_None, e );
+ if( e == osl_File_E_None )
+ {
+ CPPUNIT_ASSERT_MESSAGE("failure #10.1", target.equalsAscii( aSource1[i+1] ) );
+ }
+ }
+#endif
+}
+
+} // namespace osl_test_file
+
+CPPUNIT_TEST_SUITE_REGISTRATION( osl_test_file::oldtestfile);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/file/test_cpy_wrt_file.cxx b/sal/qa/osl/file/test_cpy_wrt_file.cxx
new file mode 100644
index 000000000..6843d10b3
--- /dev/null
+++ b/sal/qa/osl/file/test_cpy_wrt_file.cxx
@@ -0,0 +1,76 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <osl/file.hxx>
+#include <osl/thread.h>
+#include <rtl/ustring.hxx>
+
+using namespace osl;
+
+class test_osl_writeFile : public CppUnit::TestFixture
+{
+public:
+ void wrt_file()
+ {
+ FileBase::RC err;
+
+ //create a tempfile
+ OUString aTmpFile;
+ err = FileBase::createTempFile(nullptr, nullptr, &aTmpFile);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("temp File creation failed", osl::FileBase::E_None, err);
+
+ //now attempt to open with Create flag an existing file, should get E_EXIST
+ File tmp_file(aTmpFile);
+ err = tmp_file.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Create);
+
+ OString sErrorMsg = "Expected that '" +
+ OUStringToOString(aTmpFile, RTL_TEXTENCODING_ASCII_US) +
+ "' would exist!";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sErrorMsg.getStr(), FileBase::E_EXIST, err);
+
+ char buffer[1];
+ sal_uInt64 written = 0;
+ err = tmp_file.write(static_cast<void*>(buffer), sizeof(buffer), written);
+ CPPUNIT_ASSERT_MESSAGE("write on unconnected file should fail",
+ err != osl::FileBase::E_None);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("write on unconnected file should fail",
+ sal_uInt64(0), written);
+
+ err = tmp_file.sync();
+ CPPUNIT_ASSERT_MESSAGE("sync on unconnected file should fail", err != FileBase::E_None);
+ err = tmp_file.close();
+ CPPUNIT_ASSERT_MESSAGE("close on unconnected file should fail", err != FileBase::E_None);
+
+ err = ::osl::File::remove(aTmpFile);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("temp file should have existed", FileBase::E_None, err);
+ }
+
+ CPPUNIT_TEST_SUITE(test_osl_writeFile);
+ CPPUNIT_TEST(wrt_file);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+// register test suites
+CPPUNIT_TEST_SUITE_REGISTRATION(test_osl_writeFile);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx b/sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx
new file mode 100644
index 000000000..4fd5d6b16
--- /dev/null
+++ b/sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx
@@ -0,0 +1,243 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <osl/file.hxx>
+
+#if defined(_WIN32)
+#define MY_PATH_IN "/c:/foo/bar"
+#define MY_PATH_OUT "c:\\foo\\bar"
+#define MY_PATH_OUT_CONT MY_PATH_OUT "\\"
+#define MY_PATH_OUT_REL "foo\\bar"
+#else
+#define MY_PATH_IN "/foo/bar"
+#define MY_PATH_OUT MY_PATH_IN
+#define MY_PATH_OUT_CONT MY_PATH_OUT "/"
+#define MY_PATH_OUT_REL "foo/bar"
+#endif
+
+namespace {
+
+class Test: public CppUnit::TestFixture {
+private:
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testBadScheme);
+ CPPUNIT_TEST(testNoScheme);
+ CPPUNIT_TEST(testBadAuthority);
+ CPPUNIT_TEST(testLocalhost1Authority);
+ CPPUNIT_TEST(testLocalhost2Authority);
+ CPPUNIT_TEST(testLocalhost3Authority);
+ CPPUNIT_TEST(testNoAuthority);
+ CPPUNIT_TEST(testEmptyPath);
+ CPPUNIT_TEST(testHomeAbbreviation);
+ CPPUNIT_TEST(testOtherHomeAbbreviation);
+ CPPUNIT_TEST(testRelative);
+ CPPUNIT_TEST(testEscape);
+ CPPUNIT_TEST(testBadEscape2f);
+ CPPUNIT_TEST(testBadEscape2F);
+ CPPUNIT_TEST(testBad0);
+ CPPUNIT_TEST(testBadEscape0);
+ CPPUNIT_TEST(testBadQuery);
+ CPPUNIT_TEST(testBadFragment);
+ CPPUNIT_TEST_SUITE_END();
+
+ void testBadScheme();
+ void testNoScheme();
+ void testBadAuthority();
+ void testLocalhost1Authority();
+ void testLocalhost2Authority();
+ void testLocalhost3Authority();
+ void testNoAuthority();
+ void testEmptyPath();
+ void testHomeAbbreviation();
+ void testOtherHomeAbbreviation();
+ void testRelative();
+ void testEscape();
+ void testBadEscape2f();
+ void testBadEscape2F();
+ void testBad0();
+ void testBadEscape0();
+ void testBadQuery();
+ void testBadFragment();
+};
+
+void Test::testBadScheme() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL("foo:bar", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+}
+
+void Test::testNoScheme() {
+#if !defined(_WIN32) //TODO
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL("//" MY_PATH_IN, p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p);
+#endif
+}
+
+void Test::testBadAuthority() {
+#if defined UNX
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://baz" MY_PATH_IN, p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+#endif
+}
+
+void Test::testLocalhost1Authority() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://localhost" MY_PATH_IN, p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p);
+}
+
+void Test::testLocalhost2Authority() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://LOCALHOST" MY_PATH_IN, p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p);
+}
+
+void Test::testLocalhost3Authority() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://127.0.0.1" MY_PATH_IN, p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p);
+}
+
+void Test::testNoAuthority() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL("file:" MY_PATH_IN, p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p);
+}
+
+void Test::testEmptyPath() {
+#if defined UNX
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL("file://", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT_EQUAL(OUString("/"), p);
+#endif
+}
+
+void Test::testHomeAbbreviation() {
+#if defined UNX
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL("file:///~", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ // could theoretically fail due to osl::Security::getHomeDir problem
+ e = osl::FileBase::getSystemPathFromFileURL("file:///~/foo%2525/bar", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ // could theoretically fail due to osl::Security::getHomeDir problem
+ CPPUNIT_ASSERT(p.endsWith("/foo%25/bar"));
+#endif
+}
+
+void Test::testOtherHomeAbbreviation() {
+#if defined UNX
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file:///~baz" MY_PATH_IN, p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); // not supported for now
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+#endif
+}
+
+void Test::testRelative() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL("foo/bar", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT(p.endsWith(MY_PATH_OUT_REL));
+}
+
+void Test::testEscape() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://" MY_PATH_IN "/b%61z", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT_CONT "baz"), p);
+}
+
+void Test::testBadEscape2f() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://" MY_PATH_IN "/b%2fz", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+}
+
+void Test::testBadEscape2F() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://" MY_PATH_IN "/b%2Fz", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+}
+
+void Test::testBad0() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ OUString(RTL_CONSTASCII_USTRINGPARAM("file://" MY_PATH_IN "/b\x00z")),
+ p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+}
+
+void Test::testBadEscape0() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://" MY_PATH_IN "/b%00z", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+}
+
+void Test::testBadQuery() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://" MY_PATH_IN "?baz", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+}
+
+void Test::testBadFragment() {
+ OUString p;
+ auto e = osl::FileBase::getSystemPathFromFileURL(
+ "file://" MY_PATH_IN "#baz", p);
+ CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e);
+ CPPUNIT_ASSERT_EQUAL(OUString(), p);
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/module/osl_Module.cxx b/sal/qa/osl/module/osl_Module.cxx
new file mode 100644
index 000000000..f440a7151
--- /dev/null
+++ b/sal/qa/osl/module/osl_Module.cxx
@@ -0,0 +1,376 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+// include files
+
+#include "osl_Module_Const.h"
+
+using namespace osl;
+
+/** get dll file URL.
+*/
+static OUString getDllURL()
+{
+#if defined(_WIN32) // lib in Unix and lib in Windows are not same in file name.
+ OUString libPath( "test_Module_DLL.dll" );
+#else
+ OUString libPath( "libtest_Module_DLL.so" );
+#endif
+
+ OUString dirPath, dllPath;
+ osl::Module::getUrlFromAddress(
+ reinterpret_cast<oslGenericFunction>(&getDllURL), dirPath);
+ dirPath = dirPath.copy( 0, dirPath.lastIndexOf('/') + 1);
+ osl::FileBase::getAbsoluteFileURL( dirPath, libPath, dllPath );
+
+ return dllPath;
+}
+
+namespace osl_Module
+{
+ namespace {
+
+ /** class and member function that is available for module test :
+ */
+
+ class testClass
+ {
+ public:
+ static void myFunc()
+ {
+ printf("#Sun Microsystem\n");
+ };
+ };
+
+ }
+
+ /** testing the methods:
+ Module();
+ Module( const OUString& strModuleName, sal_Int32 nRtldMode = SAL_LOADMODULE_DEFAULT);
+ */
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void ctors_none( )
+ {
+ ::osl::Module aMod;
+ bRes = aMod.is();
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor without parameter.",
+ !bRes );
+ }
+
+ void ctors_name_mode( )
+ {
+ OUString aFileURL;
+ bRes = osl::Module::getUrlFromAddress(
+ reinterpret_cast<oslGenericFunction>(
+ &osl_Module::testClass::myFunc),
+ aFileURL);
+
+ if ( !bRes )
+ {
+ CPPUNIT_ASSERT_MESSAGE("Cannot locate current module.", false );
+ }
+
+ ::osl::Module aMod( aFileURL );
+ bRes = aMod.is( );
+ aMod.unload( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with load action.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( ctors );
+ CPPUNIT_TEST( ctors_none );
+ CPPUNIT_TEST( ctors_name_mode );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class ctors
+
+ /** testing the methods:
+ static sal_Bool getUrlFromAddress(void * addr, OUString & libraryUrl)
+ */
+ class getUrlFromAddress : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void getUrlFromAddress_001( )
+ {
+ OUString aFileURL;
+ bRes = osl::Module::getUrlFromAddress(
+ reinterpret_cast<oslGenericFunction>(
+ &osl_Module::testClass::myFunc),
+ aFileURL);
+ if ( !bRes )
+ {
+ CPPUNIT_ASSERT_MESSAGE("Cannot locate current module.", false );
+ }
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test get Module URL from address.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test get Module URL from address.",
+ 0 < aFileURL.lastIndexOf('/') );
+ }
+
+ void getUrlFromAddress_002( )
+ {
+#if !defined( MACOSX )
+ // TODO: Find out why this fails on macOS
+ ::osl::Module aMod( getDllURL( ) );
+ FuncPtr pFunc = reinterpret_cast<FuncPtr>(aMod.getSymbol( "firstfunc" ));
+
+ OUString aFileURL;
+ bRes = osl::Module::getUrlFromAddress(
+ reinterpret_cast<oslGenericFunction>(pFunc), aFileURL);
+ if ( !bRes )
+ {
+ CPPUNIT_ASSERT_MESSAGE("Cannot locate current module.", false );
+ }
+ aMod.unload( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: load an external library, get its function address and get its URL.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: load an external library, get its function address and get its URL.",
+ 0 < aFileURL.lastIndexOf('/') );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: load an external library, get its function address and get its URL.",
+ aFileURL.equalsIgnoreAsciiCase( getDllURL( ) ) );
+#endif
+ }
+
+ /* tester comments: another case is getFunctionSymbol_001*/
+
+ CPPUNIT_TEST_SUITE( getUrlFromAddress );
+ CPPUNIT_TEST( getUrlFromAddress_001 );
+ CPPUNIT_TEST( getUrlFromAddress_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class getUrlFromAddress
+
+ /** testing the method:
+ sal_Bool SAL_CALL load( const OUString& strModuleName,
+ sal_Int32 nRtldMode = SAL_LOADMODULE_DEFAULT)
+ */
+ class load : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void load_001( )
+ {
+ ::osl::Module aMod( getDllURL( ) );
+ ::osl::Module aMod1;
+
+ aMod1.load( getDllURL( ) );
+ bRes = oslModule(aMod) == oslModule(aMod1);
+ aMod.unload( );
+ aMod1.unload( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: load function should do the same thing as constructor with library name.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( load );
+ CPPUNIT_TEST( load_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class load
+
+ /** testing the method:
+ void SAL_CALL unload()
+ */
+ class unload : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void unload_001( )
+ {
+ ::osl::Module aMod( getDllURL( ) );
+
+ aMod.unload( );
+ bRes = oslModule(aMod) ==nullptr;
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: unload function should do the same thing as destructor.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( unload );
+ CPPUNIT_TEST( unload_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class unload
+
+ /** testing the methods:
+ sal_Bool SAL_CALL is() const
+ */
+ class is : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void is_001( )
+ {
+ OUString aFileURL;
+ bRes = osl::Module::getUrlFromAddress(
+ reinterpret_cast<oslGenericFunction>(
+ osl_Module::testClass::myFunc),
+ aFileURL);
+ if ( !bRes )
+ {
+ CPPUNIT_ASSERT_MESSAGE("Cannot locate current module - using executable instead", false );
+ }
+
+ ::osl::Module aMod;
+ bRes = aMod.is( );
+ aMod.load( aFileURL );
+ bRes1 = aMod.is( );
+ aMod.unload( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test if a module is a loaded module.",
+ !bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test if a module is a loaded module.",
+ bRes1 );
+ }
+ CPPUNIT_TEST_SUITE( is );
+ CPPUNIT_TEST( is_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class is
+
+ /** testing the methods:
+ void* SAL_CALL getSymbol( const OUString& strSymbolName)
+ */
+ class getSymbol : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes;
+
+ void getSymbol_001( )
+ {
+#if !defined( MACOSX )
+ // TODO: Find out why this fails on macOS
+ ::osl::Module aMod( getDllURL( ) );
+ FuncPtr pFunc = reinterpret_cast<FuncPtr>(aMod.getSymbol( "firstfunc" ));
+ bRes = false;
+ if ( pFunc )
+ bRes = pFunc( bRes );
+ aMod.unload();
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: load a dll and call one function in it.",
+ bRes );
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE( getSymbol );
+ CPPUNIT_TEST( getSymbol_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class getSymbol
+
+ /** testing the methods:
+ operator oslModule() const
+ */
+ class optr_oslModule : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void optr_oslModule_001( )
+ {
+#if !defined( MACOSX )
+ // TODO: Find out why this fails on macOS
+ ::osl::Module aMod;
+ bRes = ( static_cast<oslModule>(aMod) == nullptr );
+
+ aMod.load( getDllURL( ) );
+ bRes1 = static_cast<oslModule>(aMod) != nullptr;
+
+ aMod.unload( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: the m_Module of a Module instance will be NULL when is not loaded, it will not be NULL after loaded.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: the m_Module of a Module instance will be NULL when is not loaded, it will not be NULL after loaded.",
+ bRes1 );
+#endif
+ }
+
+ void optr_oslModule_002( )
+ {
+#if !defined( MACOSX )
+ // TODO: Find out why this fails on macOS
+ ::osl::Module aMod( getDllURL( ) );
+ OUString funcName( "firstfunc" );
+
+ FuncPtr pFunc = reinterpret_cast<FuncPtr>(osl_getSymbol( static_cast<oslModule>(aMod), funcName.pData ));
+ bRes = false;
+ if ( pFunc )
+ bRes = pFunc( bRes );
+
+ aMod.unload();
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: use m_Module to call osl_getSymbol() function.",
+ bRes );
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE( optr_oslModule );
+ CPPUNIT_TEST( optr_oslModule_001 );
+ CPPUNIT_TEST( optr_oslModule_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class optr_oslModule
+
+ /** testing the methods:
+ oslGenericFunction SAL_CALL getFunctionSymbol( const OUString& ustrFunctionSymbolName )
+ */
+ class getFunctionSymbol : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void getFunctionSymbol_001( )
+ {
+#if !defined( MACOSX )
+ // TODO: Find out why this fails on macOS
+ ::osl::Module aMod( getDllURL( ) );
+ oslGenericFunction oslFunc = aMod.getFunctionSymbol( "firstfunc" );
+ OUString aLibraryURL;
+ bRes = ::osl::Module::getUrlFromAddress( oslFunc, aLibraryURL);
+ aMod.unload();
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: load a dll and get its function addr and get its URL.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: load a dll and get its function addr and get its URL.",
+ aLibraryURL.equalsIgnoreAsciiCase( getDllURL() ) );
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE( getFunctionSymbol );
+ CPPUNIT_TEST( getFunctionSymbol_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class getFunctionSymbol
+
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::ctors);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::getUrlFromAddress);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::load);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::unload);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::is);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::getSymbol);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::optr_oslModule);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::getFunctionSymbol);
+
+} // namespace osl_Module
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/module/osl_Module_Const.h b/sal/qa/osl/module/osl_Module_Const.h
new file mode 100644
index 000000000..3434d439f
--- /dev/null
+++ b/sal/qa/osl/module/osl_Module_Const.h
@@ -0,0 +1,46 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_OSL_MODULE_OSL_MODULE_CONST_H
+#define INCLUDED_SAL_QA_OSL_MODULE_OSL_MODULE_CONST_H
+
+#include <sal/types.h>
+#include <rtl/ustring.hxx>
+#include <osl/module.hxx>
+#include <osl/file.hxx>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#if defined(UNX) // Unix
+# include <unistd.h>
+#elif defined(_WIN32) // Windows
+# include <io.h>
+#endif
+
+# define FILE_PREFIX "file:///"
+
+// function pointer type.
+
+typedef sal_Bool (* FuncPtr )( sal_Bool );
+
+#endif // INCLUDED_SAL_QA_OSL_MODULE_OSL_MODULE_CONST_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/module/osl_Module_DLL.cxx b/sal/qa/osl/module/osl_Module_DLL.cxx
new file mode 100644
index 000000000..b8d488596
--- /dev/null
+++ b/sal/qa/osl/module/osl_Module_DLL.cxx
@@ -0,0 +1,35 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "osl_Module_Const.h"
+
+#include <stdio.h>
+#include <sal/types.h>
+
+// This module contains no tests. It is loaded as a dynamic library by
+// osl_Module.
+// But we instantiate a test plugin to fake the build process.
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+extern "C" SAL_DLLPUBLIC_EXPORT sal_Bool firstfunc( sal_Bool )
+{
+ return true;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/mutex/osl_Mutex.cxx b/sal/qa/osl/mutex/osl_Mutex.cxx
new file mode 100644
index 000000000..c345ae33e
--- /dev/null
+++ b/sal/qa/osl/mutex/osl_Mutex.cxx
@@ -0,0 +1,896 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+// include files
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include "osl_Mutex_Const.h"
+
+using namespace osl;
+
+/** pause nSec seconds helper function.
+*/
+namespace ThreadHelper
+{
+ static void thread_sleep_tenth_sec(sal_uInt32 _nTenthSec)
+ {
+ osl::Thread::wait(std::chrono::milliseconds(_nTenthSec * 100));
+ }
+ static void thread_sleep( sal_uInt32 _nSec )
+ {
+ /// print statement in thread process must use fflush() to force display.
+ // t_print("# wait %d seconds. ", _nSec );
+ fflush(stdout);
+
+ thread_sleep_tenth_sec( _nSec * 10 );
+ // printf("# done\n" );
+ }
+}
+
+// Beginning of the test cases for osl_Mutex class
+
+namespace {
+
+/** mutually exclusive data
+*/
+struct resource {
+ sal_Int32 data1;
+ sal_Int32 data2;
+ Mutex lock;
+};
+
+/** IncreaseThread provide data.
+*/
+class IncreaseThread : public Thread
+{
+public:
+ explicit IncreaseThread( struct resource *pData ): pResource( pData ) { }
+
+ virtual ~IncreaseThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#IncreaseThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ struct resource *pResource;
+
+ void SAL_CALL run( ) override
+ {
+ pResource->lock.acquire( );
+ for( sal_Int8 i = 0; i < 3; i++ )
+ {
+ pResource->data1++;
+ yield( ); //yield() give CPU time to other thread, other thread if not block, they will change the data;
+ }
+ if ( pResource->data2 == 0 )
+ pResource->data2 = ( pResource->data1 > 0 ? pResource->data1 : 0 - pResource->data1 );
+ pResource->lock.release();
+ }
+};
+
+/** DecreaseThread consume data.
+*/
+class DecreaseThread : public Thread
+{
+public:
+ explicit DecreaseThread( struct resource *pData ): pResource( pData ) { }
+
+ virtual ~DecreaseThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#DecreaseThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ struct resource *pResource;
+
+ void SAL_CALL run( ) override
+ {
+ pResource->lock.acquire( );
+ for( sal_Int8 i = 0; i < 3; i++ )
+ {
+ pResource->data1--;
+ yield( ); //yield() give CPU time to other thread, other thread if not block, they will change the data;
+ }
+ if ( pResource->data2 == 0 )
+ pResource->data2 = ( pResource->data1 > 0 ? pResource->data1 : 0 - pResource->data1 );
+ pResource->lock.release();
+ }
+};
+
+/** chain structure used in Threads as critical resource
+*/
+struct chain {
+ sal_Int32 buffer[ BUFFER_SIZE ];
+ Mutex lock;
+ sal_Int8 pos;
+};
+
+/** PutThread write to the chain structure in a mutex manner.
+*/
+class PutThread : public Thread
+{
+public:
+ //get the struct pointer to write data to buffer
+ explicit PutThread( struct chain* pData ): pChain( pData ) { }
+
+ virtual ~PutThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#PutThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ struct chain* pChain;
+
+ void SAL_CALL run( ) override
+ {
+ //block here if the mutex has been acquired
+ pChain->lock.acquire( );
+
+ //current position in buffer to write
+ sal_Int8 nPos = pChain->pos;
+ oslThreadIdentifier oId = getIdentifier( );
+ //write data
+ sal_Int8 i;
+ for ( i = 0; i < 5; i++ )
+ {
+ pChain->buffer[ nPos + i ] = oId;
+ yield( );
+ }
+ //revise the position
+ pChain->pos = nPos + i;
+
+ //finish writing, release the mutex
+ pChain->lock.release();
+ }
+};
+
+/** thread for testing Mutex acquire.
+ */
+class HoldThread : public Thread
+{
+public:
+ //get the Mutex pointer to operate
+ explicit HoldThread( Mutex* pMutex ): pMyMutex( pMutex ) { }
+
+ virtual ~HoldThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#HoldThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ Mutex* pMyMutex;
+
+ void SAL_CALL run() override
+ {
+ // block here if the mutex has been acquired
+ pMyMutex->acquire( );
+ printf("# Mutex acquired. \n" );
+ pMyMutex->release( );
+ }
+};
+
+class WaitThread : public Thread
+{
+public:
+ //get the Mutex pointer to operate
+ explicit WaitThread( Mutex* pMutex ): pMyMutex( pMutex ) { }
+
+ virtual ~WaitThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#WaitThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ Mutex* pMyMutex;
+
+ void SAL_CALL run( ) override
+ {
+ // block here if the mutex has been acquired
+ pMyMutex->acquire( );
+ ThreadHelper::thread_sleep_tenth_sec( 2 );
+ pMyMutex->release( );
+ }
+};
+
+/** thread for testing getGlobalMutex.
+ */
+class GlobalMutexThread : public Thread
+{
+public:
+ //get the Mutex pointer to operate
+ GlobalMutexThread( ){ }
+
+ virtual ~GlobalMutexThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#GlobalMutexThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ void SAL_CALL run( ) override
+ {
+ // block here if the mutex has been acquired
+ Mutex* pGlobalMutex;
+ pGlobalMutex = Mutex::getGlobalMutex( );
+ pGlobalMutex->acquire( );
+ printf("# Global Mutex acquired. \n" );
+ pGlobalMutex->release( );
+ }
+};
+
+}
+
+namespace osl_Mutex
+{
+
+ /** Test of the osl::Mutex::constructor
+ */
+ class ctor : public CppUnit::TestFixture
+ {
+ public:
+ // initialise your test code values here.
+ struct chain m_Data;
+ struct resource m_Res;
+
+ void setUp( ) override
+ {
+ for ( sal_Int8 i=0; i < BUFFER_SIZE; i++ )
+ m_Data.buffer[i] = 0;
+ m_Data.pos = 0;
+
+ m_Res.data1 = 0;
+ m_Res.data2 = 0;
+ }
+
+ /** Create two threads to write data to the same buffer, use Mutex to assure
+ during one thread write data five times, the other thread should not begin writing.
+ the two threads wrote two different data: their thread ID, so we can check the data
+ in buffer to know the order of the two threads writing
+ */
+ void ctor_001()
+ {
+ PutThread myThread1( &m_Data );
+ PutThread myThread2( &m_Data );
+
+ myThread1.create( );
+ myThread2.create( );
+
+ //wait until the two threads terminate
+ myThread1.join( );
+ myThread2.join( );
+
+ bool bRes = false;
+
+ // every 5 data should the same
+ // LLA: this is not a good check, it's too fix
+ if (m_Data.buffer[0] == m_Data.buffer[1] &&
+ m_Data.buffer[1] == m_Data.buffer[2] &&
+ m_Data.buffer[2] == m_Data.buffer[3] &&
+ m_Data.buffer[3] == m_Data.buffer[4] &&
+ m_Data.buffer[5] == m_Data.buffer[6] &&
+ m_Data.buffer[6] == m_Data.buffer[7] &&
+ m_Data.buffer[7] == m_Data.buffer[8] &&
+ m_Data.buffer[8] == m_Data.buffer[9])
+ bRes = true;
+
+ /*for (sal_Int8 i=0; i<BUFFER_SIZE; i++)
+ printf("#data in buffer is %d\n", m_Data.buffer[i]);
+ */
+
+ CPPUNIT_ASSERT_MESSAGE("Mutex ctor", bRes);
+
+ }
+
+ /** Create two threads to write data to operate on the same number , use Mutex to assure,
+ one thread increase data 3 times, the other thread decrease 3 times, store the operate
+ result when the first thread complete, if it is interrupt by the other thread, the stored
+ number will not be 3.
+ */
+ void ctor_002()
+ {
+ IncreaseThread myThread1( &m_Res );
+ DecreaseThread myThread2( &m_Res );
+
+ myThread1.create( );
+ myThread2.create( );
+
+ //wait until the two threads terminate
+ myThread1.join( );
+ myThread2.join( );
+
+ bool bRes = false;
+
+ // every 5 data should the same
+ if ( ( m_Res.data1 == 0 ) && ( m_Res.data2 == 3 ) )
+ bRes = true;
+
+ CPPUNIT_ASSERT_MESSAGE( "test Mutex ctor function: increase and decrease a number 3 times without interrupt.", bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( ctor );
+ CPPUNIT_TEST( ctor_001 );
+ CPPUNIT_TEST( ctor_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class ctor
+
+ /** Test of the osl::Mutex::acquire method
+ */
+ class acquire : public CppUnit::TestFixture
+ {
+ public:
+ // acquire mutex in main thread, and then call acquire again in myThread,
+ // the child thread should block, wait 2 secs, it still block.
+ // Then release mutex in main thread, the child thread could return from acquire,
+ // and go to exec next statement, so could terminate quickly.
+ void acquire_001( )
+ {
+ Mutex aMutex;
+ //acquire here
+ bool bRes = aMutex.acquire( );
+ // pass the pointer of mutex to child thread
+ HoldThread myThread( &aMutex );
+ myThread.create( );
+
+ ThreadHelper::thread_sleep_tenth_sec( 2 );
+ // if acquire in myThread does not work, 2 secs is long enough,
+ // myThread should terminate now, and bRes1 should be sal_False
+ bool bRes1 = myThread.isRunning( );
+
+ aMutex.release( );
+ ThreadHelper::thread_sleep_tenth_sec( 1 );
+ // after release mutex, myThread stops blocking and will terminate immediately
+ bool bRes2 = myThread.isRunning( );
+ myThread.join( );
+
+ CPPUNIT_ASSERT_MESSAGE( "Mutex acquire", bRes );
+ CPPUNIT_ASSERT_MESSAGE( "Mutex acquire", bRes1 );
+ CPPUNIT_ASSERT_MESSAGE( "Mutex acquire", !bRes2 );
+ }
+
+ //in the same thread, acquire twice should success
+ void acquire_002()
+ {
+ Mutex aMutex;
+ //acquire here
+ bool bRes = aMutex.acquire();
+ bool bRes1 = aMutex.acquire();
+
+ bool bRes2 = aMutex.tryToAcquire();
+
+ aMutex.release();
+
+ CPPUNIT_ASSERT_MESSAGE("Mutex acquire", bRes);
+ CPPUNIT_ASSERT_MESSAGE("Mutex acquire", bRes1);
+ CPPUNIT_ASSERT_MESSAGE("Mutex acquire", bRes2);
+
+ }
+
+ CPPUNIT_TEST_SUITE( acquire );
+ CPPUNIT_TEST( acquire_001 );
+ CPPUNIT_TEST( acquire_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class acquire
+
+ /** Test of the osl::Mutex::tryToAcquire method
+ */
+ class tryToAcquire : public CppUnit::TestFixture
+ {
+ public:
+ // First let child thread acquire the mutex, and wait 2 secs, during the 2 secs,
+ // in main thread, tryToAcquire mutex should return False
+ // then after the child thread terminated, tryToAcquire should return True
+ void tryToAcquire_001()
+ {
+ Mutex aMutex;
+ WaitThread myThread(&aMutex);
+ myThread.create();
+
+ // ensure the child thread acquire the mutex
+ ThreadHelper::thread_sleep_tenth_sec(1);
+
+ bool bRes1 = aMutex.tryToAcquire();
+
+ if (bRes1)
+ aMutex.release();
+ // wait the child thread terminate
+ myThread.join();
+
+ bool bRes2 = aMutex.tryToAcquire();
+
+ if (bRes2)
+ aMutex.release();
+
+ CPPUNIT_ASSERT_MESSAGE("Try to acquire Mutex", !bRes1);
+ CPPUNIT_ASSERT_MESSAGE("Try to acquire Mutex", bRes2);
+ }
+
+ CPPUNIT_TEST_SUITE(tryToAcquire);
+ CPPUNIT_TEST(tryToAcquire_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class tryToAcquire
+
+ /** Test of the osl::Mutex::release method
+ */
+ class release : public CppUnit::TestFixture
+ {
+ public:
+ /** acquire/release are not used in pairs: after child thread acquired mutex,
+ the main thread release it, then any thread could acquire it.
+ */
+ void release_001()
+ {
+ Mutex aMutex;
+ WaitThread myThread( &aMutex );
+ myThread.create( );
+
+ // ensure the child thread acquire the mutex
+ ThreadHelper::thread_sleep_tenth_sec( 1 );
+
+ bool bRunning = myThread.isRunning( );
+ bool bRes1 = aMutex.tryToAcquire( );
+ // wait the child thread terminate
+ myThread.join( );
+
+ bool bRes2 = aMutex.tryToAcquire( );
+
+ if ( bRes2 )
+ aMutex.release( );
+
+ CPPUNIT_ASSERT_MESSAGE( "release Mutex: try to acquire before and after the mutex has been released",
+ !bRes1 );
+ CPPUNIT_ASSERT_MESSAGE( "release Mutex: try to acquire before and after the mutex has been released",
+ bRes2 );
+ CPPUNIT_ASSERT_MESSAGE( "release Mutex: try to acquire before and after the mutex has been released",
+ bRunning );
+
+ }
+
+ // how about release twice?
+ void release_002()
+ {
+ }
+
+ CPPUNIT_TEST_SUITE( release );
+ CPPUNIT_TEST( release_001 );
+ CPPUNIT_TEST( release_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class release
+
+ /** Test of the osl::Mutex::getGlobalMutex method
+ */
+ class getGlobalMutex : public CppUnit::TestFixture
+ {
+ public:
+ // initialise your test code values here.
+ void getGlobalMutex_001()
+ {
+ Mutex* pGlobalMutex;
+ pGlobalMutex = Mutex::getGlobalMutex();
+ pGlobalMutex->acquire();
+
+ GlobalMutexThread myThread;
+ myThread.create();
+
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ bool bRes1 = myThread.isRunning();
+
+ pGlobalMutex->release();
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ // after release mutex, myThread stops blocking and will terminate immediately
+ bool bRes2 = myThread.isRunning();
+
+ CPPUNIT_ASSERT_MESSAGE("Global Mutex works", bRes1);
+ CPPUNIT_ASSERT_MESSAGE("Global Mutex works", !bRes2);
+ }
+
+ void getGlobalMutex_002( )
+ {
+ bool bRes;
+
+ Mutex *pGlobalMutex;
+ pGlobalMutex = Mutex::getGlobalMutex( );
+ pGlobalMutex->acquire( );
+ {
+ Mutex *pGlobalMutex1;
+ pGlobalMutex1 = Mutex::getGlobalMutex( );
+ bRes = pGlobalMutex1->release( );
+ }
+
+ CPPUNIT_ASSERT_MESSAGE( "Global Mutex works: if the code between {} get the different mutex as the former one, it will return false when release.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE(getGlobalMutex);
+ CPPUNIT_TEST(getGlobalMutex_001);
+ CPPUNIT_TEST(getGlobalMutex_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class getGlobalMutex
+
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Mutex::ctor, "osl_Mutex");
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Mutex::acquire, "osl_Mutex");
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Mutex::tryToAcquire, "osl_Mutex");
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Mutex::release, "osl_Mutex");
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Mutex::getGlobalMutex, "osl_Mutex");
+} // namespace osl_Mutex
+
+// Beginning of the test cases for osl_Guard class
+
+namespace {
+
+class GuardThread : public Thread
+{
+public:
+ //get the Mutex pointer to operate
+ explicit GuardThread( Mutex* pMutex ): pMyMutex( pMutex ) { }
+
+ virtual ~GuardThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#GuardThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ Mutex* pMyMutex;
+
+ void SAL_CALL run( ) override
+ {
+ // block here if the mutex has been acquired
+ MutexGuard aGuard( pMyMutex );
+ ThreadHelper::thread_sleep_tenth_sec( 2 );
+ }
+};
+
+}
+
+namespace osl_Guard
+{
+ class ctor : public CppUnit::TestFixture
+ {
+ public:
+ // insert your test code here.
+ void ctor_001()
+ {
+ Mutex aMutex;
+ GuardThread myThread(&aMutex);
+ myThread.create();
+
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ bool bRes = aMutex.tryToAcquire();
+ // after 1 second, the mutex has been guarded, and the child thread should be running
+ bool bRes1 = myThread.isRunning();
+
+ myThread.join();
+ bool bRes2 = aMutex.tryToAcquire();
+
+ CPPUNIT_ASSERT_MESSAGE("GuardThread constructor",
+ !bRes);
+ CPPUNIT_ASSERT_MESSAGE("GuardThread constructor",
+ bRes1);
+ CPPUNIT_ASSERT_MESSAGE("GuardThread constructor",
+ bRes2);
+ }
+
+ void ctor_002( )
+ {
+ Mutex aMutex;
+
+ /// use reference constructor here
+ MutexGuard myGuard( aMutex );
+
+ /// the GuardThread will block here when it is initialised.
+ GuardThread myThread( &aMutex );
+ myThread.create( );
+
+ /// is it still blocking?
+ ThreadHelper::thread_sleep_tenth_sec( 2 );
+ bool bRes = myThread.isRunning( );
+
+ /// oh, release him.
+ aMutex.release( );
+ myThread.join( );
+
+ CPPUNIT_ASSERT_MESSAGE("GuardThread constructor: reference initialization, acquire the mutex before running the thread, then check if it is blocking.",
+ bRes);
+ }
+
+ CPPUNIT_TEST_SUITE(ctor);
+ CPPUNIT_TEST(ctor_001);
+ CPPUNIT_TEST(ctor_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ctor
+
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Guard::ctor, "osl_Guard");
+} // namespace osl_Guard
+
+// Beginning of the test cases for osl_ClearableGuard class
+
+namespace {
+
+/** Thread for test ClearableGuard
+ */
+class ClearGuardThread : public Thread
+{
+public:
+ //get the Mutex pointer to operate
+ explicit ClearGuardThread( Mutex* pMutex ): pMyMutex( pMutex ) {}
+
+ virtual ~ClearGuardThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#ClearGuardThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ Mutex* pMyMutex;
+
+ void SAL_CALL run( ) override
+ {
+ // acquire the mutex
+ // printf("# ClearGuardThread" );
+ ClearableMutexGuard aGuard( pMyMutex );
+ ThreadHelper::thread_sleep( 5 );
+
+ // release the mutex
+ aGuard.clear( );
+ ThreadHelper::thread_sleep( 2 );
+ }
+};
+
+}
+
+namespace osl_ClearableGuard
+{
+
+ class ctor : public CppUnit::TestFixture
+ {
+ public:
+ void ctor_001()
+ {
+ Mutex aMutex;
+
+ /// now, the aMutex has been guarded.
+ ClearableMutexGuard myMutexGuard( &aMutex );
+
+ /// it will return sal_False if the aMutex has not been Guarded.
+ bool bRes = aMutex.release( );
+
+ CPPUNIT_ASSERT_MESSAGE("ClearableMutexGuard constructor, test the acquire operation when initialized.",
+ bRes);
+ }
+
+ void ctor_002( )
+ {
+ Mutex aMutex;
+
+ /// now, the aMutex has been guarded, this time, we use reference constructor.
+ ClearableMutexGuard myMutexGuard( aMutex );
+
+ /// it will return sal_False if the aMutex has not been Guarded.
+ bool bRes = aMutex.release( );
+
+ CPPUNIT_ASSERT_MESSAGE("ClearableMutexGuard constructor, test the acquire operation when initialized, we use reference constructor this time.",
+ bRes);
+ }
+
+ CPPUNIT_TEST_SUITE(ctor);
+ CPPUNIT_TEST(ctor_001);
+ CPPUNIT_TEST(ctor_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ctor
+
+ class clear : public CppUnit::TestFixture
+ {
+ public:
+ void clear_001()
+ {
+ Mutex aMutex;
+ ClearGuardThread myThread(&aMutex);
+ myThread.create();
+
+ TimeValue aTimeVal_befor;
+ osl_getSystemTime( &aTimeVal_befor );
+ // wait 1 second to assure the child thread has begun
+ ThreadHelper::thread_sleep(1);
+
+ while (true)
+ {
+ if (aMutex.tryToAcquire())
+ {
+ break;
+ }
+ ThreadHelper::thread_sleep(1);
+ }
+ TimeValue aTimeVal_after;
+ osl_getSystemTime( &aTimeVal_after );
+ sal_Int32 nSec = aTimeVal_after.Seconds - aTimeVal_befor.Seconds;
+ printf("nSec is %" SAL_PRIdINT32 "\n", nSec);
+
+ myThread.join();
+
+ CPPUNIT_ASSERT_MESSAGE("ClearableGuard method: clear",
+ nSec < 7);
+ CPPUNIT_ASSERT_MESSAGE("ClearableGuard method: clear",
+ nSec > 1);
+ }
+
+ void clear_002( )
+ {
+ Mutex aMutex;
+
+ /// now, the aMutex has been guarded.
+ ClearableMutexGuard myMutexGuard( &aMutex );
+
+ /// launch the HoldThread, it will be blocked here.
+ HoldThread myThread( &aMutex );
+ myThread.create( );
+
+ /// is it blocking?
+ ThreadHelper::thread_sleep_tenth_sec( 4 );
+ bool bRes = myThread.isRunning( );
+
+ /// use clear to release.
+ myMutexGuard.clear( );
+ myThread.join( );
+ bool bRes1 = myThread.isRunning( );
+
+ CPPUNIT_ASSERT_MESSAGE( "ClearableGuard method: clear, control the HoldThread's running status!",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "ClearableGuard method: clear, control the HoldThread's running status!",
+ !bRes1 );
+ }
+
+ CPPUNIT_TEST_SUITE( clear );
+ CPPUNIT_TEST( clear_001 );
+ CPPUNIT_TEST( clear_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class clear
+
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_ClearableGuard::ctor, "osl_ClearableGuard" );
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_ClearableGuard::clear, "osl_ClearableGuard" );
+} // namespace osl_ClearableGuard
+
+// Beginning of the test cases for osl_ResettableGuard class
+
+namespace {
+
+/** Thread for test ResettableGuard
+ */
+class ResetGuardThread : public Thread
+{
+public:
+ //get the Mutex pointer to operate
+ explicit ResetGuardThread( Mutex* pMutex ): pMyMutex( pMutex ) {}
+
+ virtual ~ResetGuardThread( ) override
+ {
+ CPPUNIT_ASSERT_MESSAGE( "#ResetGuardThread does not shutdown properly.\n", !isRunning( ) );
+ }
+protected:
+ Mutex* pMyMutex;
+
+ void SAL_CALL run( ) override
+ {
+ // acquire the mutex
+ printf("# ResettableGuard\n" );
+ ResettableMutexGuard aGuard( pMyMutex );
+ // release the mutex
+ aGuard.clear( );
+ ThreadHelper::thread_sleep_tenth_sec( 2 );
+ }
+};
+
+}
+
+namespace osl_ResettableGuard
+{
+ class ctor : public CppUnit::TestFixture
+ {
+ public:
+ void ctor_001()
+ {
+ Mutex aMutex;
+
+ /// now, the aMutex has been guarded.
+ ResettableMutexGuard myMutexGuard( &aMutex );
+
+ /// it will return sal_False if the aMutex has not been Guarded.
+ bool bRes = aMutex.release( );
+
+ CPPUNIT_ASSERT_MESSAGE("ResettableMutexGuard constructor, test the acquire operation when initialized.",
+ bRes);
+ }
+
+ void ctor_002( )
+ {
+ Mutex aMutex;
+
+ /// now, the aMutex has been guarded, this time, we use reference constructor.
+ ResettableMutexGuard myMutexGuard( aMutex );
+
+ /// it will return sal_False if the aMutex has not been Guarded.
+ bool bRes = aMutex.release( );
+
+ CPPUNIT_ASSERT_MESSAGE( "ResettableMutexGuard constructor, test the acquire operation when initialized, we use reference constructor this time.",
+ bRes);
+ }
+
+ CPPUNIT_TEST_SUITE(ctor);
+ CPPUNIT_TEST(ctor_001);
+ CPPUNIT_TEST(ctor_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ctor
+
+ class reset : public CppUnit::TestFixture
+ {
+ public:
+ void reset_001( )
+ {
+ Mutex aMutex;
+ ResetGuardThread myThread( &aMutex );
+ ResettableMutexGuard myMutexGuard( aMutex );
+ myThread.create( );
+
+ /// is it running? and clear done?
+ bool bRes = myThread.isRunning( );
+ myMutexGuard.clear( );
+ ThreadHelper::thread_sleep_tenth_sec( 1 );
+
+ /// if reset is not success, the release will return sal_False
+ myMutexGuard.reset( );
+ bool bRes1 = aMutex.release( );
+ myThread.join( );
+
+ CPPUNIT_ASSERT_MESSAGE( "ResettableMutexGuard method: reset",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "ResettableMutexGuard method: reset",
+ bRes1 );
+ }
+
+#ifdef LINUX
+ void reset_002( )
+ {
+ Mutex aMutex;
+ ResettableMutexGuard myMutexGuard( &aMutex );
+
+ /// shouldn't release after clear;
+ myMutexGuard.clear( );
+ bool bRes = aMutex.release( );
+
+ /// can release after reset.
+ myMutexGuard.reset( );
+ bool bRes1 = aMutex.release( );
+
+ CPPUNIT_ASSERT_MESSAGE( "ResettableMutexGuard method: reset, release after clear and reset, on Solaris, the mutex can be release without acquire, so it can not passed on (SOLARIS), but not the reason for reset_002",
+ !bRes );
+ CPPUNIT_ASSERT_MESSAGE( "ResettableMutexGuard method: reset, release after clear and reset, on Solaris, the mutex can be release without acquire, so it can not passed on (SOLARIS), but not the reason for reset_002",
+ bRes1 );
+ }
+#endif
+
+ CPPUNIT_TEST_SUITE(reset);
+ CPPUNIT_TEST(reset_001);
+#ifdef LINUX
+ CPPUNIT_TEST(reset_002);
+#endif
+ CPPUNIT_TEST_SUITE_END();
+ }; // class reset
+
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_ResettableGuard::ctor);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_ResettableGuard::reset);
+} // namespace osl_ResettableGuard
+
+// The following sets variables for GNU EMACS
+// Local Variables:
+// tab-width:4
+// End:
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/mutex/osl_Mutex_Const.h b/sal/qa/osl/mutex/osl_Mutex_Const.h
new file mode 100644
index 000000000..a5ac53ed4
--- /dev/null
+++ b/sal/qa/osl/mutex/osl_Mutex_Const.h
@@ -0,0 +1,37 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_OSL_MUTEX_OSL_MUTEX_CONST_H
+#define INCLUDED_SAL_QA_OSL_MUTEX_OSL_MUTEX_CONST_H
+
+#include <sal/types.h>
+#include <rtl/ustring.hxx>
+#include <osl/thread.hxx>
+#include <osl/mutex.hxx>
+#include <osl/time.h>
+
+#ifdef UNX
+#include <unistd.h>
+#endif
+
+#define BUFFER_SIZE 16
+
+#endif // INCLUDED_SAL_QA_OSL_MUTEX_OSL_MUTEX_CONST_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/pipe/osl_Pipe.cxx b/sal/qa/osl/pipe/osl_Pipe.cxx
new file mode 100644
index 000000000..0237fa57a
--- /dev/null
+++ b/sal/qa/osl/pipe/osl_Pipe.cxx
@@ -0,0 +1,896 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+// include files
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <rtl/ustring.hxx>
+
+#include <osl/test/uniquepipename.hxx>
+#include <osl/thread.hxx>
+
+#include <osl/pipe.hxx>
+#include <osl/time.h>
+
+#ifdef UNX
+#include <unistd.h>
+#endif
+#include <string.h>
+
+using namespace osl;
+
+/** print last error of pipe system.
+ */
+static void printPipeError( ::osl::Pipe const & aPipe )
+{
+ oslPipeError nError = aPipe.getError( );
+ printf("#printPipeError# " );
+ switch ( nError ) {
+ case osl_Pipe_E_None:
+ printf("Success!\n" );
+ break;
+ case osl_Pipe_E_NotFound:
+ printf("The returned error is: Not found!\n" );
+ break;
+ case osl_Pipe_E_AlreadyExists:
+ printf("The returned error is: Already exist!\n" );
+ break;
+ case osl_Pipe_E_NoProtocol:
+ printf("The returned error is: No protocol!\n" );
+ break;
+ case osl_Pipe_E_NetworkReset:
+ printf("The returned error is: Network reset!\n" );
+ break;
+ case osl_Pipe_E_ConnectionAbort:
+ printf("The returned error is: Connection aborted!\n" );
+ break;
+ case osl_Pipe_E_ConnectionReset:
+ printf("The returned error is: Connection reset!\n" );
+ break;
+ case osl_Pipe_E_NoBufferSpace:
+ printf("The returned error is: No buffer space!\n" );
+ break;
+ case osl_Pipe_E_TimedOut:
+ printf("The returned error is: Timeout!\n" );
+ break;
+ case osl_Pipe_E_ConnectionRefused:
+ printf("The returned error is: Connection refused!\n" );
+ break;
+ case osl_Pipe_E_invalidError:
+ printf("The returned error is: Invalid error!\n" );
+ break;
+ default:
+ printf("The returned error is: Number %d, Unknown Error\n", nError );
+ break;
+ }
+}
+
+// pipe name and transfer contents
+
+const OUString aTestPipeName("testpipe2");
+const OUString aTestPipe1("testpipe1");
+const OUString aTestString("Sun Microsystems");
+
+const OString m_pTestString1("Sun Microsystems");
+const OString m_pTestString2("test pipe PASS/OK");
+
+// test code start here
+
+namespace osl_Pipe
+{
+
+// most return value -1 denote a fail of operation.
+
+#define OSL_PIPE_FAIL -1
+
+ /** testing the methods:
+ inline Pipe();
+ inline Pipe(const OUString& strName, oslPipeOptions Options);
+ inline Pipe(const OUString& strName, oslPipeOptions Options,const Security & rSecurity);
+ inline Pipe(const Pipe& pipe);
+ inline Pipe(oslPipe pipe, __sal_NoAcquire noacquire );
+ inline Pipe(oslPipe Pipe);
+ */
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1, bRes2;
+
+ void ctors_none( )
+ {
+ ::osl::Pipe aPipe;
+ bRes = aPipe.is( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with no parameter, yet no case to test.",
+ !bRes );
+ }
+
+ void ctors_name_option( )
+ {
+ /// create a named pipe.
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ ::osl::Pipe aAssignPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN );
+
+ bRes = aPipe.is( ) && aAssignPipe.is( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with name and option.",
+ bRes );
+ }
+
+ void ctors_name_option_security( )
+ {
+ /// create a security pipe.
+ const ::osl::Security rSecurity;
+ ::osl::Pipe aSecurityPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSecurity );
+
+ bRes = aSecurityPipe.is( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with name, option and security, the test of security is not implemented yet.",
+ bRes );
+ }
+
+ void ctors_copy( )
+ {
+ /// create a pipe.
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ /// create a pipe using copy constructor.
+ ::osl::Pipe aCopyPipe( aPipe );
+
+ bRes = aCopyPipe.is( ) && aCopyPipe == aPipe;
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test copy constructor.",
+ bRes );
+ }
+
+ /* Note: DO NOT DO THIS - I have very deliberately caused send to FAIL, *on purpose* as this is the
+ only sane way to test noacquire. This is a terrible misuse of no-acquire, but in this case is
+ needed only so we can test to make sure no-acquire is working!
+ */
+ void ctors_no_acquire( )
+ {
+ /// create a pipe.
+ OUString aPipeName(test::uniquePipeName(aTestPipeName));
+ oslPipe handle(osl_createPipe(aPipeName.pData, osl_Pipe_CREATE, nullptr));
+ /// constructs a pipe reference without acquiring the handle.
+ std::unique_ptr<osl::Pipe> xNoAcquirePipe(new osl::Pipe(handle, SAL_NO_ACQUIRE));
+
+ StreamPipe aStreamPipe(handle);
+ xNoAcquirePipe.reset();
+ int nRet = aStreamPipe.send("a", 1);
+
+ if (nRet >= 0)
+ bRes = false;
+ else
+ bRes = true;
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with no acquire of handle, deleted nonacquired pipe but could still send on original pipe!.",
+ bRes );
+ }
+
+ void ctors_acquire( )
+ {
+ /// create a base pipe.
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ /// constructs two pipes, the second acquires the first pipe's handle.
+ ::osl::Pipe aAcquirePipe( aPipe.getHandle( ) );
+ ::osl::Pipe aAcquirePipe1( nullptr );
+
+ bRes = aAcquirePipe.is();
+ bRes1 = aAcquirePipe1.is();
+ bRes2 = aPipe == aAcquirePipe;
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with acquire of handle, original pipe does not exist.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with acquire of handle, copied pipe does not exist",
+ !bRes1 );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test pipes should have same handle", bRes2);
+ }
+
+ CPPUNIT_TEST_SUITE( ctors );
+ CPPUNIT_TEST( ctors_none );
+ CPPUNIT_TEST( ctors_name_option );
+ CPPUNIT_TEST( ctors_name_option_security );
+ CPPUNIT_TEST( ctors_copy );
+ CPPUNIT_TEST( ctors_no_acquire );
+ CPPUNIT_TEST( ctors_acquire );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the method:
+ inline sal_Bool SAL_CALL is() const;
+ */
+ class is : public CppUnit::TestFixture
+ {
+ public:
+ void is_001( )
+ {
+ ::osl::Pipe aPipe;
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test is(), check if the pipe is a valid one.", !aPipe.is( ) );
+ }
+
+ void is_002( )
+ {
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test is(), a normal pipe creation.", aPipe.is( ) );
+ }
+
+ void is_003( )
+ {
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test is(), an invalid case.", !aPipe.is( ) );
+ }
+
+ void is_004( )
+ {
+ ::osl::Pipe aPipe( nullptr );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test is(), an invalid constructor.", !aPipe.is( ) );
+ }
+
+ CPPUNIT_TEST_SUITE( is );
+ CPPUNIT_TEST( is_001 );
+ CPPUNIT_TEST( is_002 );
+ CPPUNIT_TEST( is_003 );
+ CPPUNIT_TEST( is_004 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the methods:
+ inline sal_Bool create( const OUString & strName,
+ oslPipeOptions Options, const Security &rSec );
+ nline sal_Bool create( const OUString & strName,
+ oslPipeOptions Options = osl_Pipe_OPEN );
+ */
+ class create : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ /** tester comment:
+
+ security create only be tested creation, security section is
+ untested yet.
+ */
+
+ void create_named_security_001( )
+ {
+ const Security rSec;
+ ::osl::Pipe aPipe;
+ bRes = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSec );
+ bRes1 = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSec );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation.",
+ bRes);
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation.",
+ !bRes1);
+ }
+
+ void create_named_security_002( )
+ {
+ const Security rSec;
+ ::osl::Pipe aPipe, aPipe1;
+ bRes = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSec );
+ bRes1 = aPipe1.create( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN, rSec );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation and open.",
+ bRes);
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation and open.",
+ bRes1);
+ }
+
+ void create_named_001( )
+ {
+ ::osl::Pipe aPipe;
+ bRes = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ bRes1 = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation.",
+ bRes);
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation.",
+ !bRes1);
+ }
+
+ void create_named_002( )
+ {
+ ::osl::Pipe aPipe, aPipe1;
+ bRes = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ bRes1 = aPipe1.create( test::uniquePipeName(aTestPipeName) );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation and open.",
+ bRes);
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation and open.",
+ bRes1);
+ }
+
+ void create_named_003( )
+ {
+ ::osl::Pipe aPipe;
+ bRes = aPipe.create( test::uniquePipeName(aTestPipeName) );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test default option is open.",
+ !bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( create );
+ CPPUNIT_TEST( create_named_security_001 );
+ CPPUNIT_TEST( create_named_security_002 );
+ CPPUNIT_TEST( create_named_001 );
+ CPPUNIT_TEST( create_named_002 );
+ CPPUNIT_TEST( create_named_003 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the method:
+ inline void SAL_CALL clear();
+ */
+ class clear : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void clear_001( )
+ {
+ ::osl::Pipe aPipe;
+ aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ aPipe.clear( );
+ bRes = aPipe.is( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test clear.",
+ !bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( clear );
+ CPPUNIT_TEST( clear_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the methods:
+ inline Pipe& SAL_CALL operator= (const Pipe& pipe);
+ inline Pipe& SAL_CALL operator= (const oslPipe pipe );
+ */
+ class assign : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void assign_ref( )
+ {
+ ::osl::Pipe aPipe, aPipe1;
+ aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ aPipe1 = aPipe;
+ bRes = aPipe1.is( );
+ bRes1 = aPipe == aPipe1;
+ aPipe.close( );
+ aPipe1.close( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test assign with reference.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test assign with reference.",
+ bRes1 );
+ }
+
+ void assign_handle( )
+ {
+ ::osl::Pipe aPipe, aPipe1;
+ aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ aPipe1 = aPipe.getHandle( );
+ bRes = aPipe1.is( );
+ bRes1 = aPipe == aPipe1;
+ aPipe.close( );
+ aPipe1.close( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test assign with handle.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test assign with handle.",
+ bRes1 );
+ }
+
+ CPPUNIT_TEST_SUITE( assign );
+ CPPUNIT_TEST( assign_ref );
+ CPPUNIT_TEST( assign_handle );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the method:
+ inline sal_Bool SAL_CALL isValid() const;
+ isValid( ) has not been implemented under the following platforms, please refer to osl/pipe.hxx
+ */
+
+ /** testing the method:
+ inline sal_Bool SAL_CALL operator==( const Pipe& rPipe ) const;
+ */
+ class isEqual : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void isEqual_001( )
+ {
+ ::osl::Pipe aPipe;
+ aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ bRes = aPipe == aPipe; // NOLINT(misc-redundant-expression)
+ aPipe.close( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test isEqual(), compare itself.",
+ bRes );
+ }
+
+ void isEqual_002( )
+ {
+ ::osl::Pipe aPipe, aPipe1, aPipe2;
+ aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+
+ aPipe1 = aPipe;
+ aPipe2.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+
+ bRes = aPipe == aPipe1;
+ bRes1 = aPipe == aPipe2;
+ aPipe.close( );
+ aPipe1.close( );
+ aPipe2.close( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test isEqual(),create one copy instance, and compare.",
+ bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test isEqual(),create one copy instance, and compare.",
+ !bRes1 );
+ }
+
+ CPPUNIT_TEST_SUITE( isEqual );
+ CPPUNIT_TEST( isEqual_001 );
+ CPPUNIT_TEST( isEqual_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the method:
+ inline void SAL_CALL close();
+ */
+ class close : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void close_001( )
+ {
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipe1), osl_Pipe_CREATE );
+ aPipe.close( );
+ bRes = aPipe.is( );
+
+ aPipe.clear( );
+ bRes1 = aPipe.is( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: difference between close and clear.",
+ bRes);
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: difference between close and clear.",
+ !bRes1);
+ }
+
+ void close_002( )
+ {
+ ::osl::StreamPipe aPipe( test::uniquePipeName(aTestPipe1), osl_Pipe_CREATE );
+ aPipe.close( );
+ int nRet = aPipe.send( m_pTestString1.getStr(), 3 );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#test comment#: use after close.",
+ OSL_PIPE_FAIL, nRet );
+ }
+
+ CPPUNIT_TEST_SUITE( close );
+ CPPUNIT_TEST( close_001 );
+ CPPUNIT_TEST( close_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the method:
+ inline oslPipeError SAL_CALL accept(StreamPipe& Connection);
+ please refer to StreamPipe::recv
+ */
+
+ /** testing the method:
+ inline oslPipeError SAL_CALL getError() const;
+ */
+ class getError : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void getError_001( )
+ {
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN );
+ oslPipeError nError = aPipe.getError( );
+ printPipeError( aPipe );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: open a non-exist pipe.",
+ nError != osl_Pipe_E_None );
+ }
+
+ void getError_002( )
+ {
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ ::osl::Pipe aPipe1( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ oslPipeError nError = aPipe.getError( );
+ printPipeError( aPipe );
+ aPipe.clear( );
+ aPipe1.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: create an already exist pipe.",
+ nError != osl_Pipe_E_None );
+ }
+
+ CPPUNIT_TEST_SUITE( getError );
+ CPPUNIT_TEST( getError_001 );
+ CPPUNIT_TEST( getError_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the method:
+ inline oslPipe SAL_CALL getHandle() const;
+ */
+ class getHandle : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void getHandle_equalityOperatorAgainstSelf( )
+ {
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN );
+ bRes = aPipe == aPipe.getHandle( );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: one pipe should equal to its handle.",
+ bRes );
+ }
+
+ void getHandle_equalityOperatorAgainstDerivedPipe( )
+ {
+ ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ ::osl::Pipe aPipe1( aPipe.getHandle( ) );
+ bRes = aPipe == aPipe1;
+ aPipe.clear( );
+ aPipe1.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: one pipe derived from another pipe's handle.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( getHandle );
+ CPPUNIT_TEST( getHandle_equalityOperatorAgainstSelf );
+ CPPUNIT_TEST( getHandle_equalityOperatorAgainstDerivedPipe );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::ctors);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::is);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::create);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::clear);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::assign);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::isEqual);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::close);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::getError);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::getHandle);
+
+} // namespace osl_Pipe
+
+namespace osl_StreamPipe
+{
+
+ /** testing the methods:
+ inline StreamPipe();
+ inline StreamPipe(oslPipe Pipe);
+ inline StreamPipe(const StreamPipe& Pipe);
+ inline StreamPipe(const OUString& strName, oslPipeOptions Options = osl_Pipe_OPEN);
+ inline StreamPipe(const OUString& strName, oslPipeOptions Options, const Security &rSec );
+ inline StreamPipe( oslPipe pipe, __sal_NoAcquire noacquire );
+ */
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void ctors_none( )
+ {
+ // create a pipe.
+ ::osl::StreamPipe aStreamPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ // create an unattached pipe.
+ ::osl::StreamPipe aStreamPipe1;
+ bRes = aStreamPipe1.is( );
+
+ // assign it and check.
+ aStreamPipe1 = aStreamPipe;
+ bRes1 = aStreamPipe1.is( );
+ aStreamPipe.clear( );
+ aStreamPipe1.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with no parameter, before and after assign.",
+ !bRes );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with no parameter, before and after assign.",
+ bRes1 );
+ }
+
+ void ctors_handle( )
+ {
+ // create a pipe.
+ ::osl::StreamPipe aStreamPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ // create a pipe with last handle.
+ ::osl::StreamPipe aStreamPipe1( aStreamPipe.getHandle( ) );
+ bRes = aStreamPipe1.is( ) && aStreamPipe == aStreamPipe1;
+ aStreamPipe.clear( );
+ aStreamPipe1.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with other's handle.",
+ bRes );
+ }
+
+ void ctors_copy( )
+ {
+ // create a pipe.
+ ::osl::StreamPipe aStreamPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ // create an unattached pipe.
+ ::osl::StreamPipe aStreamPipe1( aStreamPipe );
+ bRes = aStreamPipe1.is( ) && aStreamPipe == aStreamPipe1;
+ aStreamPipe.clear( );
+ aStreamPipe1.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test copy constructor.",
+ bRes );
+ }
+
+ void ctors_name_option( )
+ {
+ // create a pipe.
+ ::osl::StreamPipe aStreamPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ // create an unattached pipe.
+ ::osl::StreamPipe aStreamPipe1( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN );
+ bRes = aStreamPipe1.is( ) && aStreamPipe.is( );
+ aStreamPipe.clear( );
+ aStreamPipe1.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with name and option.",
+ bRes );
+ }
+
+ void ctors_name_option_security( )
+ {
+ /// create a security pipe.
+ const ::osl::Security rSecurity;
+ ::osl::StreamPipe aSecurityPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSecurity );
+
+ bRes = aSecurityPipe.is( );
+ aSecurityPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with name, option and security, the test of security is not implemented yet.",
+ bRes );
+ }
+
+ /** tester comment:
+
+ When test the following constructor, don't know how to test the
+ acquire and no acquire action. possible plans:
+ 1.release one handle and check the other( did not success since the
+ other still exist and valid. )
+ 2. release one handle twice to see getLastError( )(the getLastError
+ always returns invalidError(LINUX)).
+ */
+
+ void ctors_no_acquire( )
+ {
+ // create a pipe.
+ ::osl::StreamPipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ osl_acquirePipe(aPipe.getHandle());
+ // constructs a pipe reference without acquiring the handle.
+ ::osl::StreamPipe aNoAcquirePipe( aPipe.getHandle( ), SAL_NO_ACQUIRE );
+
+ bRes = aNoAcquirePipe.is( );
+ aPipe.clear( );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with no acquire of handle, only validation test, do not know how to test no acquire.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( ctors );
+ CPPUNIT_TEST( ctors_none );
+ CPPUNIT_TEST( ctors_handle );
+ CPPUNIT_TEST( ctors_copy );
+ CPPUNIT_TEST( ctors_name_option );
+ CPPUNIT_TEST( ctors_name_option_security );
+ CPPUNIT_TEST( ctors_no_acquire );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ /** testing the methods:
+ inline StreamPipe & SAL_CALL operator=(oslPipe Pipe);
+ inline StreamPipe& SAL_CALL operator=(const Pipe& pipe);
+ mindy: not implemented in osl/pipe.hxx, so remove the cases
+ */
+
+ /** wait _nSec seconds.
+ */
+ static void thread_sleep( sal_uInt32 _nSec )
+ {
+ /// print statement in thread process must use fflush() to force display.
+ fflush(stdout);
+
+ osl::Thread::wait(std::chrono::seconds(_nSec));
+ }
+ // test read/write & send/recv data to pipe
+
+ namespace {
+
+ class Pipe_DataSink_Thread : public Thread
+ {
+ public:
+ char buf[256];
+ Pipe_DataSink_Thread( ) { }
+
+ protected:
+ void SAL_CALL run( ) override
+ {
+ printf("open pipe\n");
+ ::osl::StreamPipe aSenderPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN ); // test::uniquePipeName(aTestPipeName) is a string = "TestPipe"
+ if ( !aSenderPipe.is() )
+ {
+ printf("pipe open failed! \n");
+ }
+ else
+ {
+ printf("read\n");
+ sal_Int32 nChars = aSenderPipe.read( buf, m_pTestString1.getLength() + 1 );
+ if ( nChars < 0 )
+ {
+ printf("read failed! \n");
+ return;
+ }
+ buf[sizeof(buf)-1] = '\0';
+ printf("buffer is %s \n", buf);
+ printf("send\n");
+ nChars = aSenderPipe.send( m_pTestString2.getStr(), m_pTestString2.getLength() + 1 );
+ if ( nChars < 0 )
+ {
+ printf("client send failed! \n");
+ return;
+ }
+ }
+ }
+
+ };
+
+ class Pipe_DataSource_Thread : public Thread
+ {
+ public:
+ char buf[256];
+ ::osl::Pipe aListenPipe;
+ ::osl::StreamPipe aConnectionPipe;
+ Pipe_DataSource_Thread( )
+ {
+ printf("create pipe\n");
+ aListenPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
+ }
+ virtual ~Pipe_DataSource_Thread( ) override
+ {
+ aListenPipe.close();
+ }
+ protected:
+ void SAL_CALL run( ) override
+ {
+ //create pipe.
+ sal_Int32 nChars;
+ printf("listen\n");
+ if ( !aListenPipe.is() )
+ {
+ printf("pipe create failed! \n");
+ }
+ else
+ {
+ //start server and wait for connection.
+ printf("accept\n");
+ if ( aListenPipe.accept( aConnectionPipe ) != osl_Pipe_E_None )
+ {
+ printf("pipe accept failed!");
+ return;
+ }
+ printf("write\n");
+ // write to pipe
+ nChars = aConnectionPipe.write( m_pTestString1.getStr(), m_pTestString1.getLength() + 1 );
+ if ( nChars < 0)
+ {
+ printf("server write failed! \n");
+ return;
+ }
+ printf("recv\n");
+ nChars = aConnectionPipe.recv( buf, 256 );
+
+ if ( nChars < 0)
+ {
+ printf("server receive failed! \n");
+ return;
+ }
+ buf[sizeof(buf)-1] = '\0';
+ printf("received message is: %s\n", buf );
+ }
+ }
+ };
+
+ }
+
+ /** testing the method: read/write/send/recv and Pipe::accept
+ */
+ class recv : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void recv_001( )
+ {
+ //launch threads.
+ Pipe_DataSource_Thread myDataSourceThread;
+ Pipe_DataSink_Thread myDataSinkThread;
+ myDataSourceThread.create( );
+ thread_sleep( 1 );
+ myDataSinkThread.create( );
+
+ //wait until the thread terminate
+ myDataSinkThread.join( );
+ myDataSourceThread.join( );
+
+ int nCompare1 = strcmp( myDataSinkThread.buf, m_pTestString1.getStr() );
+ int nCompare2 = strcmp( myDataSourceThread.buf, m_pTestString2.getStr() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "test send/recv/write/read.", 0, nCompare1 );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "test send/recv/write/read.", 0, nCompare2 );
+ }
+ //close pipe when accept
+ void recv_002()
+ {
+ thread_sleep( 1 );
+
+ Pipe_DataSource_Thread myDataSourceThread;
+ Pipe_DataSink_Thread myDataSinkThread;
+ myDataSourceThread.create( );
+ thread_sleep( 1 );
+ myDataSourceThread.aListenPipe.close();
+ myDataSourceThread.join( );
+ //no condition judgement here, if the case could finish executing within 1 or 2 seconds, it passes.
+ }
+
+ CPPUNIT_TEST_SUITE( recv );
+ CPPUNIT_TEST( recv_001 );
+ CPPUNIT_TEST( recv_002 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_StreamPipe::ctors);
+//CPPUNIT_TEST_SUITE_REGISTRATION(osl_StreamPipe::assign);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_StreamPipe::recv);
+
+} // namespace osl_StreamPipe
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/process/batch.bat b/sal/qa/osl/process/batch.bat
new file mode 100755
index 000000000..e27f7191b
--- /dev/null
+++ b/sal/qa/osl/process/batch.bat
@@ -0,0 +1,19 @@
+rem
+rem This file is part of the LibreOffice project.
+rem
+rem This Source Code Form is subject to the terms of the Mozilla Public
+rem License, v. 2.0. If a copy of the MPL was not distributed with this
+rem file, You can obtain one at http://mozilla.org/MPL/2.0/.
+rem
+rem This file incorporates work covered by the following license notice:
+rem
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed
+rem with this work for additional information regarding copyright
+rem ownership. The ASF licenses this file to you under the Apache
+rem License, Version 2.0 (the "License"); you may not use this file
+rem except in compliance with the License. You may obtain a copy of
+rem the License at http://www.apache.org/licenses/LICENSE-2.0 .
+rem
+@echo off
+echo "Hello world" \ No newline at end of file
diff --git a/sal/qa/osl/process/batch.sh b/sal/qa/osl/process/batch.sh
new file mode 100755
index 000000000..fd3828c6a
--- /dev/null
+++ b/sal/qa/osl/process/batch.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo "Hello world" \ No newline at end of file
diff --git a/sal/qa/osl/process/osl_Thread.cxx b/sal/qa/osl/process/osl_Thread.cxx
new file mode 100644
index 000000000..d551f471d
--- /dev/null
+++ b/sal/qa/osl/process/osl_Thread.cxx
@@ -0,0 +1,1989 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <algorithm>
+#ifdef _WIN32
+#if !defined WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#include <unistd.h>
+#include <time.h>
+#endif
+
+// include files
+
+#include <sal/types.h>
+#include <rtl/string.hxx>
+#include <rtl/strbuf.hxx>
+#include <osl/thread.hxx>
+#include <osl/mutex.hxx>
+#include <osl/time.h>
+
+#include <string.h>
+#include <memory>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#define t_print printf
+
+using namespace osl;
+
+namespace {
+
+// Small stopwatch
+class StopWatch {
+ TimeValue t1,t2; // Start and stoptime
+
+protected:
+ sal_Int32 m_nNanoSec;
+ sal_Int32 m_nSeconds;
+
+ bool m_bIsValid; // TRUE, when started and stopped
+ bool m_bIsRunning; // TRUE, when started
+
+public:
+ StopWatch();
+
+ void start(); // Starts time
+ void stop(); // Stops time
+
+ double getSeconds() const;
+ double getTenthSec() const;
+};
+
+}
+
+// ================================= Stop Watch =================================
+
+// A small stopwatch for internal use
+// (c) Lars Langhans 29.12.1996 22:10
+
+StopWatch::StopWatch()
+ : m_nNanoSec(0)
+ , m_nSeconds(0)
+ , m_bIsValid(false)
+ , m_bIsRunning(false)
+{
+ t1.Seconds = 0;
+ t1.Nanosec = 0;
+ t2.Seconds = 0;
+ t2.Nanosec = 0;
+}
+
+void StopWatch::start()
+{
+// pre: %
+// post: Start Timer
+
+ m_bIsValid = false;
+ m_bIsRunning = true;
+ osl_getSystemTime( &t1 );
+ t_print("# %u %u nsecs\n", static_cast<unsigned>(t1.Seconds), static_cast<unsigned>(t1.Nanosec));
+ // gettimeofday(&t1, 0);
+}
+
+void StopWatch::stop()
+{
+// pre: Timer should be started
+// post: Timer will stopped
+
+ osl_getSystemTime( &t2 );
+ t_print("# %u %u nsecs\n", static_cast<unsigned>(t2.Seconds), static_cast<unsigned>(t2.Nanosec));
+
+ if (m_bIsRunning)
+ { // check if started.
+ m_nSeconds = static_cast<sal_Int32>(t2.Seconds) - static_cast<sal_Int32>(t1.Seconds);
+ if ( t2.Nanosec > t1.Nanosec )
+ m_nNanoSec = static_cast<sal_Int32>(t2.Nanosec) - static_cast<sal_Int32>(t1.Nanosec);
+ else
+ {
+ m_nNanoSec = 1000000000 + static_cast<sal_Int32>(t2.Nanosec) - static_cast<sal_Int32>(t1.Nanosec);
+ m_nSeconds -= 1;
+ }
+ t_print("# %u %u nsecs\n", static_cast<unsigned>(m_nSeconds), static_cast<unsigned>(m_nNanoSec) );
+ m_bIsValid = true;
+ m_bIsRunning = false;
+ }
+}
+
+double StopWatch::getSeconds() const
+{
+// pre: valid = TRUE
+// BACK: time in seconds
+
+ double nValue = 0.0;
+ if (m_bIsValid)
+ {
+ nValue = double(m_nNanoSec) / 1000000000.0 + m_nSeconds; // milli micro nano
+ }
+ return nValue;
+}
+
+double StopWatch::getTenthSec() const
+{
+ double nValue = 0.0;
+ if (m_bIsValid)
+ {
+ nValue = double(m_nNanoSec) / 100000000.0 + m_nSeconds * 10;
+ }
+ return nValue ;
+}
+
+namespace {
+
+template <class T>
+class ThreadSafeValue
+{
+ T m_nFlag;
+ Mutex m_aMutex;
+public:
+ explicit ThreadSafeValue(T n = 0): m_nFlag(n) {}
+ T getValue()
+ {
+ //block if already acquired by another thread.
+ osl::MutexGuard g(m_aMutex);
+ return m_nFlag;
+ }
+ void incValue()
+ {
+ //only one thread operate on the flag.
+ osl::MutexGuard g(m_aMutex);
+ m_nFlag++;
+ }
+ void acquire() {m_aMutex.acquire();}
+ void release() {m_aMutex.release();}
+};
+
+}
+
+namespace ThreadHelper
+{
+ static void thread_sleep_tenth_sec(sal_Int32 _nTenthSec)
+ {
+ osl::Thread::wait(std::chrono::milliseconds(_nTenthSec * 100));
+ }
+
+ static void outputPriority(oslThreadPriority const& _aPriority)
+ {
+ // LLA: output the priority
+ if (_aPriority == osl_Thread_PriorityHighest)
+ {
+ t_print("Prio is High\n");
+ }
+ else if (_aPriority == osl_Thread_PriorityAboveNormal)
+ {
+ t_print("Prio is above normal\n");
+ }
+ else if (_aPriority == osl_Thread_PriorityNormal)
+ {
+ t_print("Prio is normal\n");
+ }
+ else if (_aPriority == osl_Thread_PriorityBelowNormal)
+ {
+ t_print("Prio is below normal\n");
+ }
+ else if (_aPriority == osl_Thread_PriorityLowest)
+ {
+ t_print("Prio is lowest\n");
+ }
+ else
+ {
+ t_print("Prio is unknown\n");
+ }
+ }
+}
+
+namespace {
+
+/** Simple thread for testing Thread-create.
+
+ Just add 1 of value 0, and after running, result is 1.
+ */
+class myThread : public Thread
+{
+ ThreadSafeValue<sal_Int32> m_aFlag;
+public:
+ sal_Int32 getValue() { return m_aFlag.getValue(); }
+protected:
+ /** guarded value which initialized 0
+
+ @see ThreadSafeValue
+ */
+ void SAL_CALL run() override
+ {
+ while(schedule())
+ {
+ m_aFlag.incValue();
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ }
+ }
+
+public:
+
+ virtual void SAL_CALL suspend() override
+ {
+ m_aFlag.acquire();
+ ::osl::Thread::suspend();
+ m_aFlag.release();
+ }
+
+ virtual ~myThread() override
+ {
+ if (isRunning())
+ {
+ t_print("error: not terminated.\n");
+ }
+ }
+
+};
+
+/** Thread which has a flag add 1 every second until 20
+ */
+class OCountThread : public Thread
+{
+ ThreadSafeValue<sal_Int32> m_aFlag;
+public:
+ OCountThread() : m_nWaitSec(0)
+ {
+ t_print("new OCountThread thread %u!\n", static_cast<unsigned>(getIdentifier()));
+ }
+ sal_Int32 getValue() { return m_aFlag.getValue(); }
+
+ void setWait(sal_Int32 nSec)
+ {
+ m_nWaitSec = nSec;
+ //m_bWait = sal_True;
+ }
+
+ virtual void SAL_CALL suspend() override
+ {
+ m_aFlag.acquire();
+ ::osl::Thread::suspend();
+ m_aFlag.release();
+ }
+
+protected:
+ //sal_Bool m_bWait;
+ sal_Int32 m_nWaitSec;
+
+ void SAL_CALL run() override
+ {
+ /// if the thread should terminate, schedule return false
+ while (m_aFlag.getValue() < 20 && schedule())
+ {
+ m_aFlag.incValue();
+ ThreadHelper::thread_sleep_tenth_sec(1);
+
+ if (m_nWaitSec != 0)
+ {
+ TimeValue nTV;
+ nTV.Seconds = m_nWaitSec / 10 ;
+ nTV.Nanosec = ( m_nWaitSec%10 ) * 100000000 ;
+ wait( nTV );
+ m_nWaitSec = 0;
+ }
+ }
+ }
+ void SAL_CALL onTerminated() override
+ {
+ t_print("normally terminate this thread %u!\n", static_cast<unsigned>(getIdentifier()));
+ }
+public:
+
+ virtual ~OCountThread() override
+ {
+ if (isRunning())
+ {
+ t_print("error: not terminated.\n");
+ }
+ }
+
+};
+
+/** no call schedule in the run method
+*/
+class ONoScheduleThread : public Thread
+{
+ ThreadSafeValue<sal_Int32> m_aFlag;
+public:
+ sal_Int32 getValue() { return m_aFlag.getValue(); }
+
+ virtual void SAL_CALL suspend() override
+ {
+ m_aFlag.acquire();
+ ::osl::Thread::suspend();
+ m_aFlag.release();
+ }
+protected:
+ void SAL_CALL run() override
+ {
+ while (m_aFlag.getValue() < 10)
+ {
+ m_aFlag.incValue();
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ }
+ }
+ void SAL_CALL onTerminated() override
+ {
+ t_print("normally terminate this thread %u!\n", static_cast<unsigned>(getIdentifier()));
+ }
+public:
+ ONoScheduleThread()
+ {
+ t_print("new thread id %u!\n", static_cast<unsigned>(getIdentifier()));
+ }
+ virtual ~ONoScheduleThread() override
+ {
+ if (isRunning())
+ {
+ t_print("error: not terminated.\n");
+ }
+ }
+
+};
+
+
+class OAddThread : public Thread
+{
+ ThreadSafeValue<sal_Int32> m_aFlag;
+public:
+ //oslThreadIdentifier m_id, m_CurId;
+ OAddThread(){}
+ sal_Int32 getValue() { return m_aFlag.getValue(); }
+
+ virtual void SAL_CALL suspend() override
+ {
+ m_aFlag.acquire();
+ ::osl::Thread::suspend();
+ m_aFlag.release();
+ }
+protected:
+ void SAL_CALL run() override
+ {
+ //if the thread should terminate, schedule return false
+ while (schedule())
+ {
+ m_aFlag.incValue();
+ }
+ }
+ void SAL_CALL onTerminated() override
+ {
+ // t_print("normally terminate this thread %d!\n", getIdentifier());
+ }
+public:
+
+ virtual ~OAddThread() override
+ {
+ if (isRunning())
+ {
+ // t_print("error: not terminated.\n");
+ }
+ }
+
+};
+
+}
+
+namespace osl_Thread
+{
+
+ static void resumeAndWaitThread(Thread* _pThread)
+ {
+ // This function starts a thread, wait a second and suspends the thread
+ // Due to the fact, that a suspend and never run thread never really exists.
+
+ // Note: on UNX, after createSuspended, and then terminate the thread, it performs well;
+ // while on Windows, after createSuspended, the thread can not terminate, wait endlessly,
+ // so here call resume at first, then call terminate.
+#ifdef _WIN32
+ t_print("resumeAndWaitThread\n");
+ _pThread->resume();
+ ThreadHelper::thread_sleep_tenth_sec(1);
+#else
+ _pThread->resume();
+#endif
+ }
+
+ // kill a running thread and join it, if it has terminated, do nothing
+ static void termAndJoinThread(Thread* _pThread)
+ {
+ _pThread->terminate();
+
+// LLA: Windows feature???, a suspended thread can not terminated, so we have to weak it up
+#ifdef _WIN32
+ _pThread->resume();
+ ThreadHelper::thread_sleep_tenth_sec(1);
+#endif
+ t_print("#wait for join.\n");
+ _pThread->join();
+ }
+/** Test of the osl::Thread::create method
+ */
+
+ class create : public CppUnit::TestFixture
+ {
+ public:
+ /** Simple create a thread.
+
+ Create a simple thread, it just does add 1 to value(which initialized 0),
+ if the thread run, the value should be 1.
+ */
+ void create_001()
+ {
+ myThread* newthread = new myThread;
+ bool bRes = newthread->create();
+ CPPUNIT_ASSERT_MESSAGE("Can not creates a new thread!\n", bRes);
+
+ ThreadHelper::thread_sleep_tenth_sec(1); // wait short
+ bool isRunning = newthread->isRunning(); // check if thread is running
+ /// wait for the new thread to assure it has run
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ sal_Int32 nValue = newthread->getValue();
+ /// to assure the new thread has terminated
+ termAndJoinThread(newthread);
+ delete newthread;
+
+ t_print(" nValue = %d\n", static_cast<int>(nValue));
+ t_print("isRunning = %s\n", isRunning ? "true" : "false");
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a new thread",
+ nValue >= 1
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a new thread",
+ isRunning
+ );
+
+ }
+
+ /** only one running thread per instance, return false if create secondly
+ */
+ void create_002()
+ {
+ myThread* newthread = new myThread;
+ bool res1 = newthread->create();
+ bool res2 = newthread->create();
+ t_print("In non pro, an assertion should occurred. This behaviour is right.\n");
+ termAndJoinThread(newthread);
+ delete newthread;
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a new thread: can not create two threads per instance",
+ res1
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a new thread: can not create two threads per instance",
+ !res2
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE(create);
+ CPPUNIT_TEST(create_001);
+ CPPUNIT_TEST(create_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class create
+
+ /** Test of the osl::Thread::createSuspended method
+ */
+ class createSuspended : public CppUnit::TestFixture
+ {
+ public:
+ /** Create a suspended thread, use the same class as create_001
+
+ after create, wait enough time, check the value, if it's still the initial value, pass
+ */
+ void createSuspended_001()
+ {
+ myThread* newthread = new myThread;
+ bool bRes = newthread->createSuspended();
+ CPPUNIT_ASSERT_MESSAGE("Can not creates a new thread!", bRes);
+
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ bool isRunning = newthread->isRunning();
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ sal_Int32 nValue = newthread->getValue();
+
+ resumeAndWaitThread(newthread);
+
+ termAndJoinThread(newthread);
+ delete newthread;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "Creates a new suspended thread",
+ sal_Int32(0), nValue
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a new suspended thread",
+ isRunning
+ );
+ }
+
+ void createSuspended_002()
+ {
+ myThread* newthread = new myThread;
+ bool res1 = newthread->createSuspended();
+ bool res2 = newthread->createSuspended();
+
+ resumeAndWaitThread(newthread);
+
+ termAndJoinThread(newthread);
+
+ delete newthread;
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a new thread: can not create two threads per instance",
+ res1
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a new thread: can not create two threads per instance",
+ !res2
+ );
+ }
+
+ CPPUNIT_TEST_SUITE(createSuspended);
+ CPPUNIT_TEST(createSuspended_001);
+ // LLA: Deadlocked!!!
+ CPPUNIT_TEST(createSuspended_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class createSuspended
+
+ /** when the count value equal to or more than 3, suspend the thread.
+ */
+ static void suspendCountThread(OCountThread* _pCountThread)
+ {
+ sal_Int32 nValue = 0;
+ while (true)
+ {
+ nValue = _pCountThread->getValue();
+ if (nValue >= 3)
+ {
+ _pCountThread->suspend();
+ break;
+ }
+ }
+ }
+
+ /** Test of the osl::Thread::suspend method
+ */
+ class suspend : public CppUnit::TestFixture
+ {
+ public:
+ /** Use a thread which has a flag added 1 every second
+
+ ALGORITHM:
+ create the thread, after running special time, record value of flag, then suspend it,
+ wait a long time, check the flag, if it remains unchanged during suspending
+ */
+ void suspend_001()
+ {
+ OCountThread* aCountThread = new OCountThread();
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+ // the thread run for some seconds, but not terminate
+ suspendCountThread( aCountThread );
+
+ // the value just after calling suspend
+ sal_Int32 nValue = aCountThread->getValue(); // (2)
+
+ ThreadHelper::thread_sleep_tenth_sec(3);
+
+ // the value after waiting 3 seconds
+ sal_Int32 nLaterValue = aCountThread->getValue(); // (3)
+
+ resumeAndWaitThread(aCountThread);
+ termAndJoinThread(aCountThread);
+ delete aCountThread;
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Suspend the thread",
+ bRes
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "Suspend the thread",
+ nValue, nLaterValue
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE(suspend);
+ CPPUNIT_TEST(suspend_001);
+ // LLA: Deadlocked!!!
+ // CPPUNIT_TEST(createSuspended_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class suspend
+
+ /** Test of the osl::Thread::resume method
+ */
+ class resume : public CppUnit::TestFixture
+ {
+ public:
+ /** check if the thread run samely as usual after suspend and resume
+
+ ALGORITHM:
+ compare the values before and after suspend, they should be same,
+ then compare values before and after resume, the difference should be same as the sleep seconds number
+ */
+ void resume_001()
+ {
+ OCountThread* pCountThread = new OCountThread();
+ bool bRes = pCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ suspendCountThread(pCountThread);
+
+ sal_Int32 nSuspendValue = pCountThread->getValue(); // (2)
+ // suspend for 3 seconds
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ pCountThread->resume();
+
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ sal_Int32 nResumeValue = pCountThread->getValue();
+
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ sal_Int32 nLaterValue = pCountThread->getValue();
+
+ termAndJoinThread(pCountThread);
+ delete pCountThread;
+
+ t_print("SuspendValue: %d\n", static_cast<int>(nSuspendValue));
+ t_print("ResumeValue: %d\n", static_cast<int>(nResumeValue));
+ t_print("LaterValue: %d\n", static_cast<int>(nLaterValue));
+
+ /* LLA: this assumption is no longer relevant: nResumeValue == nSuspendValue && */
+ CPPUNIT_ASSERT_MESSAGE(
+ "Suspend then resume the thread",
+ nLaterValue >= 9
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Suspend then resume the thread",
+ nResumeValue > nSuspendValue
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Suspend then resume the thread",
+ nLaterValue > nResumeValue
+ );
+
+ }
+
+ /** Create a suspended thread then resume, check if the thread has run
+ */
+ void resume_002()
+ {
+ myThread* newthread = new myThread;
+ bool bRes = newthread->createSuspended();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't create thread!", bRes );
+
+ newthread->resume();
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ sal_Int32 nValue = newthread->getValue();
+
+ termAndJoinThread(newthread);
+ delete newthread;
+
+ t_print(" nValue = %d\n", static_cast<int>(nValue));
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Creates a suspended thread, then resume",
+ nValue >= 1
+ );
+ }
+
+ CPPUNIT_TEST_SUITE(resume);
+ CPPUNIT_TEST(resume_001);
+ CPPUNIT_TEST(resume_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class resume
+
+ /** Test of the osl::Thread::terminate method
+ */
+ class terminate : public CppUnit::TestFixture
+ {
+ public:
+ /** Check after call terminate if the running thread running go on executing
+
+ ALGORITHM:
+ before and after call terminate, the values should be the same
+ */
+ void terminate_001()
+ {
+ OCountThread* aCountThread = new OCountThread();
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ sal_Int32 nValue = aCountThread->getValue();
+ aCountThread->terminate();
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ sal_Int32 nLaterValue = aCountThread->getValue();
+
+ // isRunning should be false after terminate
+ bool isRunning = aCountThread->isRunning();
+ aCountThread->join();
+ delete aCountThread;
+
+ t_print(" nValue = %d\n", static_cast<int>(nValue));
+ t_print("nLaterValue = %d\n", static_cast<int>(nLaterValue));
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Terminate the thread",
+ !isRunning
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Terminate the thread",
+ nLaterValue >= nValue
+ );
+ }
+ /** Check if a suspended thread will terminate after call terminate, different on w32 and on UNX
+ */
+ void terminate_002()
+ {
+ OCountThread* aCountThread = new OCountThread();
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ suspendCountThread(aCountThread);
+ sal_Int32 nValue = aCountThread->getValue();
+
+ // seems a suspended thread can not be terminated on W32, while on Solaris can
+ resumeAndWaitThread(aCountThread);
+
+ ThreadHelper::thread_sleep_tenth_sec(2);
+
+ termAndJoinThread(aCountThread);
+ sal_Int32 nLaterValue = aCountThread->getValue();
+ delete aCountThread;
+
+ t_print(" nValue = %d\n", static_cast<int>(nValue));
+ t_print("nLaterValue = %d\n", static_cast<int>(nLaterValue));
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Suspend then resume the thread",
+ nLaterValue > nValue );
+ }
+
+ CPPUNIT_TEST_SUITE(terminate);
+ CPPUNIT_TEST(terminate_001);
+ CPPUNIT_TEST(terminate_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class terminate
+
+ /** Test of the osl::Thread::join method
+ */
+ class join : public CppUnit::TestFixture
+ {
+ public:
+ /** Check after call terminate if the thread running function will not go on executing
+
+ the next statement after join will not exec before the thread terminates
+ ALGORITHM:
+ recode system time at the beginning of the thread run, call join, then record system time again,
+ the difference of the two times should be equal or more than 20 seconds, the CountThread normally terminates
+ */
+ void join_001()
+ {
+ OCountThread *aCountThread = new OCountThread();
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ StopWatch aStopWatch;
+ aStopWatch.start();
+ // TimeValue aTimeVal_befor;
+ // osl_getSystemTime( &aTimeVal_befor );
+ //t_print("#join:the system time is %d,%d\n", pTimeVal_befor->Seconds,pTimeVal_befor->Nanosec);
+
+ aCountThread->join();
+
+ //the below line will be executed after aCountThread terminate
+ // TimeValue aTimeVal_after;
+ // osl_getSystemTime( &aTimeVal_after );
+ aStopWatch.stop();
+ // sal_uInt32 nSec = aTimeVal_after.Seconds - aTimeVal_befor.Seconds;
+ double nSec = aStopWatch.getSeconds();
+ t_print("join_001 nSec=%f\n", nSec);
+ delete aCountThread;
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Join the thread: after the thread terminate",
+ nSec >= 2
+ );
+
+ }
+ /** after terminated by another thread, join exited immediately
+
+ ALGORITHM:
+ terminate the thread when value>=3, call join, check the beginning time and time after join,
+ the difference should be 3 seconds, join costs little time
+ */
+ void join_002()
+ {
+ OCountThread *aCountThread = new OCountThread();
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ //record the time when the running begin
+ // TimeValue aTimeVal_befor;
+ // osl_getSystemTime( &aTimeVal_befor );
+ StopWatch aStopWatch;
+ aStopWatch.start();
+
+ ThreadHelper::thread_sleep_tenth_sec(10);
+ termAndJoinThread(aCountThread);
+
+ //the below line will be executed after aCountThread terminate
+ // TimeValue aTimeVal_after;
+ // osl_getSystemTime( &aTimeVal_after );
+ // sal_uInt32 nSec = aTimeVal_after.Seconds - aTimeVal_befor.Seconds;
+ aStopWatch.stop();
+ double nSec = aStopWatch.getSeconds();
+ t_print("join_002 nSec=%f\n", nSec);
+
+ delete aCountThread;
+ CPPUNIT_ASSERT_MESSAGE(
+ "Join the thread: after thread terminate by another thread",
+ nSec >= 1
+ );
+ }
+
+ CPPUNIT_TEST_SUITE(join);
+ CPPUNIT_TEST(join_001);
+ CPPUNIT_TEST(join_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class join
+
+ /** Test of the osl::Thread::isRunning method
+ */
+ class isRunning : public CppUnit::TestFixture
+ {
+ public:
+ void isRunning_001()
+ {
+ OCountThread *aCountThread = new OCountThread();
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ bool bRun = aCountThread->isRunning();
+
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ termAndJoinThread(aCountThread);
+ bool bTer = aCountThread->isRunning();
+ delete aCountThread;
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Test isRunning",
+ bRun
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Test isRunning",
+ !bTer
+ );
+ }
+ /** check the value of isRunning when suspending and after resume
+ */
+ void isRunning_002()
+ {
+ OCountThread *aCountThread = new OCountThread();
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ // sal_Bool bRunning = aCountThread->isRunning();
+ // sal_Int32 nValue = 0;
+ suspendCountThread(aCountThread);
+
+ bool bRunning_sup = aCountThread->isRunning();
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ aCountThread->resume();
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ bool bRunning_res = aCountThread->isRunning();
+ termAndJoinThread(aCountThread);
+ bool bRunning_ter = aCountThread->isRunning();
+ delete aCountThread;
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Test isRunning",
+ bRes && bRunning_sup );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Test isRunning",
+ bRunning_res );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Test isRunning",
+ !bRunning_ter );
+
+ }
+
+ CPPUNIT_TEST_SUITE(isRunning);
+ CPPUNIT_TEST(isRunning_001);
+ CPPUNIT_TEST(isRunning_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class isRunning
+
+ /// check osl::Thread::setPriority
+ class setPriority : public CppUnit::TestFixture
+ {
+ public:
+ // insert your test code here.
+ OString getPrioName(oslThreadPriority _aPriority)
+ {
+ OString sPrioStr;
+ switch (_aPriority)
+ {
+ case osl_Thread_PriorityHighest:
+ sPrioStr = "Highest";
+ break;
+
+ case osl_Thread_PriorityAboveNormal:
+ sPrioStr = "AboveNormal";
+ break;
+
+ case osl_Thread_PriorityNormal:
+ sPrioStr = "Normal";
+ break;
+
+ case osl_Thread_PriorityBelowNormal:
+ sPrioStr = "BelowNormal";
+ break;
+
+ case osl_Thread_PriorityLowest:
+ sPrioStr = "Lowest";
+ break;
+ default:
+ sPrioStr = "unknown";
+ }
+ return sPrioStr;
+ }
+
+ /** check 2 threads.
+
+ ALGORITHM:
+ Here the function should show, that 2 different threads,
+ which only increase a value, should run at the same time with same prio.
+ The test fails, if the difference between the two values is more than 5%
+ but IMHO this isn't a failure, it's only a feature of the OS.
+ */
+
+ void check2Threads(oslThreadPriority _aPriority)
+ {
+ // initial 5 threads with different priorities
+ OAddThread* pThread = new OAddThread();
+ OAddThread* p2Thread = new OAddThread();
+
+ //Create them and start running at the same time
+ pThread->create();
+ pThread->setPriority(_aPriority);
+ p2Thread->create();
+ p2Thread->setPriority(_aPriority);
+
+ ThreadHelper::thread_sleep_tenth_sec(5);
+
+ pThread->terminate();
+ p2Thread->terminate();
+
+ sal_Int32 nValueNormal = pThread->getValue();
+
+ sal_Int32 nValueNormal2 = p2Thread->getValue();
+
+ OString sPrio = getPrioName(_aPriority);
+ t_print("After 10 tenth seconds\n");
+
+ t_print("nValue in %s Prio Thread is %d\n",sPrio.getStr(), static_cast<int>(nValueNormal));
+ t_print("nValue in %s Prio Thread is %d\n", sPrio.getStr(), static_cast<int>(nValueNormal2));
+
+ // ThreadHelper::thread_sleep_tenth_sec(1);
+ pThread->join();
+ p2Thread->join();
+
+ delete pThread;
+ delete p2Thread;
+
+ sal_Int32 nDelta = abs(nValueNormal - nValueNormal2);
+ double nQuotient = std::max(nValueNormal, nValueNormal2);
+ CPPUNIT_ASSERT_MESSAGE(
+ "Quotient is zero, which means, there exist no right values.",
+ nQuotient != 0
+ );
+ double nDeltaPercent = nDelta / nQuotient * 100;
+
+ t_print("Delta value %d, percent %f\n", static_cast<int>(nDelta), nDeltaPercent);
+
+ // LLA: it's not a bug if the current OS is not able to handle thread scheduling right and good.
+ // like Windows XP
+ // LLA: CPPUNIT_ASSERT_MESSAGE(
+ // LLA: "Run 2 normal threads, the count diff more than 5 percent.",
+ // LLA: nDeltaPercent <= 5
+ // LLA: );
+ }
+
+ void setPriority_001_1()
+ {
+ check2Threads(osl_Thread_PriorityHighest);
+ }
+ void setPriority_001_2()
+ {
+ check2Threads(osl_Thread_PriorityAboveNormal);
+ }
+ void setPriority_001_3()
+ {
+ check2Threads(osl_Thread_PriorityNormal);
+ }
+ void setPriority_001_4()
+ {
+ check2Threads(osl_Thread_PriorityBelowNormal);
+ }
+ void setPriority_001_5()
+ {
+ check2Threads(osl_Thread_PriorityLowest);
+ }
+
+ void setPriority_002()
+ {
+ // initial 5 threads with different priorities
+
+ OAddThread aHighestThread;
+ OAddThread aAboveNormalThread;
+ OAddThread aNormalThread;
+ //OAddThread *aBelowNormalThread = new OAddThread();
+ //OAddThread *aLowestThread = new OAddThread();
+
+ //Create them and start running at the same time
+ aHighestThread.createSuspended();
+ aHighestThread.setPriority(osl_Thread_PriorityHighest);
+
+ aAboveNormalThread.createSuspended();
+ aAboveNormalThread.setPriority(osl_Thread_PriorityAboveNormal);
+
+ aNormalThread.createSuspended();
+ aNormalThread.setPriority(osl_Thread_PriorityNormal);
+ /*aBelowNormalThread->create();
+ aBelowNormalThread->setPriority(osl_Thread_PriorityBelowNormal);
+ aLowestThread->create();
+ aLowestThread->setPriority(osl_Thread_PriorityLowest);
+ */
+
+ aHighestThread.resume();
+ aAboveNormalThread.resume();
+ aNormalThread.resume();
+
+ ThreadHelper::thread_sleep_tenth_sec(5);
+
+ aHighestThread.suspend();
+ aAboveNormalThread.suspend();
+ aNormalThread.suspend();
+
+ termAndJoinThread(&aNormalThread);
+ termAndJoinThread(&aAboveNormalThread);
+ termAndJoinThread(&aHighestThread);
+ //aBelowNormalThread->terminate();
+ //aLowestThread->terminate();
+
+ sal_Int32 nValueHighest = aHighestThread.getValue();
+
+ sal_Int32 nValueAboveNormal = aAboveNormalThread.getValue();
+
+ sal_Int32 nValueNormal = aNormalThread.getValue();
+
+ t_print("After 10 tenth seconds\n");
+ t_print("nValue in Highest Prio Thread is %d\n", static_cast<int>(nValueHighest));
+ t_print("nValue in AboveNormal Prio Thread is %d\n", static_cast<int>(nValueAboveNormal));
+ t_print("nValue in Normal Prio Thread is %d\n", static_cast<int>(nValueNormal));
+
+#ifndef _WIN32
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueHighest > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueAboveNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueNormal > 0
+ );
+#endif
+ }
+
+ void setPriority_003()
+ {
+ // initial 5 threads with different priorities
+ OAddThread pHighestThread;
+ OAddThread pAboveNormalThread;
+ OAddThread pNormalThread;
+ OAddThread pBelowNormalThread;
+ OAddThread pLowestThread;
+
+ //Create them and start running at the same time
+ pHighestThread.createSuspended();
+ pHighestThread.setPriority(osl_Thread_PriorityHighest);
+
+ pAboveNormalThread.createSuspended();
+ pAboveNormalThread.setPriority(osl_Thread_PriorityAboveNormal);
+
+ pNormalThread.createSuspended();
+ pNormalThread.setPriority(osl_Thread_PriorityNormal);
+
+ pBelowNormalThread.createSuspended();
+ pBelowNormalThread.setPriority(osl_Thread_PriorityBelowNormal);
+
+ pLowestThread.createSuspended();
+ pLowestThread.setPriority(osl_Thread_PriorityLowest);
+
+ pHighestThread.resume();
+ pAboveNormalThread.resume();
+ pNormalThread.resume();
+ pBelowNormalThread.resume();
+ pLowestThread.resume();
+
+ ThreadHelper::thread_sleep_tenth_sec(5);
+
+ pHighestThread.suspend();
+ pAboveNormalThread.suspend();
+ pNormalThread.suspend();
+ pBelowNormalThread.suspend();
+ pLowestThread.suspend();
+
+ termAndJoinThread(&pHighestThread);
+ termAndJoinThread(&pAboveNormalThread);
+ termAndJoinThread(&pNormalThread);
+ termAndJoinThread(&pBelowNormalThread);
+ termAndJoinThread(&pLowestThread);
+
+ sal_Int32 nValueHighest = pHighestThread.getValue();
+
+ sal_Int32 nValueAboveNormal = pAboveNormalThread.getValue();
+
+ sal_Int32 nValueNormal = pNormalThread.getValue();
+
+ sal_Int32 nValueBelowNormal = pBelowNormalThread.getValue();
+
+ sal_Int32 nValueLowest = pLowestThread.getValue();
+
+ t_print("After 10 tenth seconds\n");
+ t_print("nValue in Highest Prio Thread is %d\n", static_cast<int>(nValueHighest));
+ t_print("nValue in AboveNormal Prio Thread is %d\n", static_cast<int>(nValueAboveNormal));
+ t_print("nValue in Normal Prio Thread is %d\n", static_cast<int>(nValueNormal));
+ t_print("nValue in BelowNormal Prio Thread is %d\n", static_cast<int>(nValueBelowNormal));
+ t_print("nValue in Lowest Prio Thread is %d\n", static_cast<int>(nValueLowest));
+
+#ifndef _WIN32
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueHighest > 0 &&
+ nValueAboveNormal > 0 &&
+ nValueNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueBelowNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueLowest > 0
+ );
+#endif
+ }
+
+ void setPriority_004()
+ {
+ // initial 5 threads with different priorities
+ // OAddThread *pHighestThread = new OAddThread();
+ OAddThread pAboveNormalThread;
+ OAddThread pNormalThread;
+ OAddThread pBelowNormalThread;
+ OAddThread pLowestThread;
+
+ //Create them and start running at the same time
+ // pHighestThread->createSuspended();
+ // pHighestThread->setPriority(osl_Thread_PriorityHighest);
+
+ pAboveNormalThread.createSuspended();
+ pAboveNormalThread.setPriority(osl_Thread_PriorityAboveNormal);
+
+ pNormalThread.createSuspended();
+ pNormalThread.setPriority(osl_Thread_PriorityNormal);
+
+ pBelowNormalThread.createSuspended();
+ pBelowNormalThread.setPriority(osl_Thread_PriorityBelowNormal);
+
+ pLowestThread.createSuspended();
+ pLowestThread.setPriority(osl_Thread_PriorityLowest);
+
+ // pHighestThread->resume();
+ pAboveNormalThread.resume();
+ pNormalThread.resume();
+ pBelowNormalThread.resume();
+ pLowestThread.resume();
+
+ ThreadHelper::thread_sleep_tenth_sec(5);
+
+ // pHighestThread->suspend();
+ pAboveNormalThread.suspend();
+ pNormalThread.suspend();
+ pBelowNormalThread.suspend();
+ pLowestThread.suspend();
+
+ // termAndJoinThread(pHighestThread);
+ termAndJoinThread(&pAboveNormalThread);
+ termAndJoinThread(&pNormalThread);
+ termAndJoinThread(&pBelowNormalThread);
+ termAndJoinThread(&pLowestThread);
+
+ // sal_Int32 nValueHighest = 0;
+ // nValueHighest = pHighestThread->getValue();
+
+ sal_Int32 nValueAboveNormal = pAboveNormalThread.getValue();
+
+ sal_Int32 nValueNormal = pNormalThread.getValue();
+
+ sal_Int32 nValueBelowNormal = pBelowNormalThread.getValue();
+
+ sal_Int32 nValueLowest = pLowestThread.getValue();
+
+ t_print("After 5 tenth seconds\n");
+ t_print("nValue in AboveNormal Prio Thread is %d\n", static_cast<int>(nValueAboveNormal));
+ t_print("nValue in Normal Prio Thread is %d\n", static_cast<int>(nValueNormal));
+ t_print("nValue in BelowNormal Prio Thread is %d\n", static_cast<int>(nValueBelowNormal));
+ t_print("nValue in Lowest Prio Thread is %d\n", static_cast<int>(nValueLowest));
+
+ // delete pHighestThread;
+
+#ifndef _WIN32
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ /* nValueHighest > 0 && */
+ nValueAboveNormal > 0 &&
+ nValueNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueBelowNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueLowest > 0
+ );
+#endif
+ }
+ void setPriority_005()
+ {
+ // initial 5 threads with different priorities
+ // OAddThread *pHighestThread = new OAddThread();
+ // OAddThread *pAboveNormalThread = new OAddThread();
+ OAddThread pNormalThread;
+ OAddThread pBelowNormalThread;
+ OAddThread pLowestThread;
+
+ //Create them and start running at the same time
+ // pHighestThread->createSuspended();
+ // pHighestThread->setPriority(osl_Thread_PriorityHighest);
+
+ // pAboveNormalThread->createSuspended();
+ // pAboveNormalThread->setPriority(osl_Thread_PriorityAboveNormal);
+
+ pNormalThread.createSuspended();
+ pNormalThread.setPriority(osl_Thread_PriorityNormal);
+
+ pBelowNormalThread.createSuspended();
+ pBelowNormalThread.setPriority(osl_Thread_PriorityBelowNormal);
+
+ pLowestThread.createSuspended();
+ pLowestThread.setPriority(osl_Thread_PriorityLowest);
+
+ // pHighestThread->resume();
+ // pAboveNormalThread->resume();
+ pNormalThread.resume();
+ pBelowNormalThread.resume();
+ pLowestThread.resume();
+
+ ThreadHelper::thread_sleep_tenth_sec(5);
+
+ // pHighestThread->suspend();
+ // pAboveNormalThread->suspend();
+ pNormalThread.suspend();
+ pBelowNormalThread.suspend();
+ pLowestThread.suspend();
+
+ // termAndJoinThread(pHighestThread);
+ // termAndJoinThread(pAboveNormalThread);
+ termAndJoinThread(&pNormalThread);
+ termAndJoinThread(&pBelowNormalThread);
+ termAndJoinThread(&pLowestThread);
+
+ // sal_Int32 nValueHighest = 0;
+ // nValueHighest = pHighestThread->getValue();
+
+ // sal_Int32 nValueAboveNormal = 0;
+ // nValueAboveNormal = pAboveNormalThread->getValue();
+
+ sal_Int32 nValueNormal = pNormalThread.getValue();
+
+ sal_Int32 nValueBelowNormal = pBelowNormalThread.getValue();
+
+ sal_Int32 nValueLowest = pLowestThread.getValue();
+
+ t_print("After 5 tenth seconds\n");
+ t_print("nValue in Normal Prio Thread is %d\n", static_cast<int>(nValueNormal));
+ t_print("nValue in BelowNormal Prio Thread is %d\n", static_cast<int>(nValueBelowNormal));
+ t_print("nValue in Lowest Prio Thread is %d\n", static_cast<int>(nValueLowest));
+
+#ifndef _WIN32
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ /* nValueHighest > 0 && */
+ /* nValueAboveNormal > 0 && */
+ nValueNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueBelowNormal > 0
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "SetPriority",
+ nValueLowest > 0
+ );
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE(setPriority);
+#ifndef __sun
+ CPPUNIT_TEST(setPriority_002);
+ CPPUNIT_TEST(setPriority_003);
+ CPPUNIT_TEST(setPriority_004);
+ CPPUNIT_TEST(setPriority_005);
+#endif
+ CPPUNIT_TEST(setPriority_001_1);
+ CPPUNIT_TEST(setPriority_001_2);
+ CPPUNIT_TEST(setPriority_001_3);
+ CPPUNIT_TEST(setPriority_001_4);
+ CPPUNIT_TEST(setPriority_001_5);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class setPriority
+
+ /** Test of the osl::Thread::getPriority method
+ */
+ class getPriority : public CppUnit::TestFixture
+ {
+ public:
+ // insert your test code here.
+ void getPriority_001()
+ {
+ OAddThread *pHighestThread = new OAddThread();
+
+ //Create them and start running at the same time
+ pHighestThread->create();
+ pHighestThread->setPriority(osl_Thread_PriorityHighest);
+
+ oslThreadPriority aPriority = pHighestThread->getPriority();
+ termAndJoinThread(pHighestThread);
+ delete pHighestThread;
+
+ ThreadHelper::outputPriority(aPriority);
+
+// LLA: Priority settings may not work within some OS versions.
+#if defined(_WIN32) || defined(__sun)
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "getPriority",
+ osl_Thread_PriorityHighest, aPriority
+ );
+#else
+// LLA: Linux
+// NO_PTHREAD_PRIORITY ???
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "getPriority",
+ osl_Thread_PriorityNormal, aPriority
+ );
+#endif
+ }
+
+ CPPUNIT_TEST_SUITE(getPriority);
+ CPPUNIT_TEST(getPriority_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class getPriority
+
+ class getIdentifier : public CppUnit::TestFixture
+ {
+ public:
+ // initialise your test code values here.
+
+ void getIdentifier_001()
+ {
+ // insert your test code here.
+ }
+
+ CPPUNIT_TEST_SUITE(getIdentifier);
+ CPPUNIT_TEST(getIdentifier_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class getIdentifier
+
+ /** Test of the osl::Thread::getCurrentIdentifier method
+ */
+ class getCurrentIdentifier : public CppUnit::TestFixture
+ {
+ public:
+ void getCurrentIdentifier_001()
+ {
+ oslThreadIdentifier oId;
+ OCountThread* pCountThread = new OCountThread;
+ pCountThread->create();
+ pCountThread->setWait(3);
+ oId = Thread::getCurrentIdentifier();
+ oslThreadIdentifier oIdChild = pCountThread->getIdentifier();
+ termAndJoinThread(pCountThread);
+ delete pCountThread;
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Get the identifier for the current active thread.",
+ oId != oIdChild);
+ }
+
+ CPPUNIT_TEST_SUITE(getCurrentIdentifier);
+ CPPUNIT_TEST(getCurrentIdentifier_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class getCurrentIdentifier
+
+ /** Test of the osl::Thread::wait method
+ */
+ class waittest : public CppUnit::TestFixture
+ {
+ public:
+ /** call wait in the run method
+
+ ALGORITHM:
+ tested thread wait nWaitSec seconds, main thread sleep (2) seconds,
+ then terminate the tested thread, due to the fact that the thread do a sleep(1) + wait(5)
+ it's finish after 6 seconds.
+ */
+ void wait_001()
+ {
+ OCountThread *aCountThread = new OCountThread();
+ sal_Int32 nWaitSec = 5;
+ aCountThread->setWait(nWaitSec);
+ // thread runs at least 5 seconds.
+ bool bRes = aCountThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ //record the time when the running begin
+ StopWatch aStopWatch;
+ aStopWatch.start();
+
+ // wait a little bit, to let the thread the time, to start
+ ThreadHelper::thread_sleep_tenth_sec( 4 );
+
+ // if wait works,
+ // this function returns, after 4 sec. later
+ termAndJoinThread(aCountThread);
+
+ // value should be one.
+ sal_Int32 nValue = aCountThread->getValue();
+
+ aStopWatch.stop();
+
+ // sal_uInt32 nSec = aTimeVal_after.Seconds - aTimeVal_befor.Seconds;
+ double nTenthSec = aStopWatch.getTenthSec();
+ double nSec = aStopWatch.getSeconds();
+ delete aCountThread;
+ t_print("nTenthSec = %f \n", nTenthSec);
+ t_print("nSec = %f \n", nSec);
+ t_print("nValue = %d \n", static_cast<int>(nValue));
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Wait: Blocks the calling thread for the given number of time.",
+ nTenthSec >= 5
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "Wait: Blocks the calling thread for the given number of time.",
+ sal_Int32(1), nValue
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE(waittest);
+ CPPUNIT_TEST(wait_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class waittest
+
+ /** osl::Thread::yield method: can not design good test scenario to test up to now
+ */
+ class yield : public CppUnit::TestFixture
+ {
+ public:
+ void yield_001()
+ {
+ // insert your test code here.
+ }
+
+ CPPUNIT_TEST_SUITE(yield);
+ CPPUNIT_TEST(yield_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class yield
+
+ /** Test of the osl::Thread::schedule method
+ */
+ class schedule : public CppUnit::TestFixture
+ {
+ public:
+
+ /** The requested thread will get terminate the next time schedule() is called.
+
+ Note: on UNX, if call suspend thread is not the to be suspended thread, the to be
+ suspended thread will get suspended the next time schedule() is called,
+ while on w32, it's nothing with schedule.
+
+ check if suspend and terminate work well via schedule
+ */
+ void schedule_001()
+ {
+ OAddThread* aThread = new OAddThread();
+ bool bRes = aThread->create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ aThread->suspend();
+ ThreadHelper::thread_sleep_tenth_sec(1);
+ sal_Int32 nValue = aThread->getValue();
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ sal_Int32 nLaterValue = aThread->getValue();
+ // resumeAndWaitThread(aThread);
+ t_print(" value = %d\n", static_cast<int>(nValue));
+ t_print("later value = %d\n", static_cast<int>(nLaterValue));
+ // if value and latervalue not equal, then the thread would not suspended
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "Schedule: suspend works.",
+ nValue, nLaterValue
+ );
+
+ aThread->resume();
+ ThreadHelper::thread_sleep_tenth_sec(2);
+
+ aThread->terminate();
+ sal_Int32 nValue_term = aThread->getValue();
+
+ aThread->join();
+ sal_Int32 nValue_join = aThread->getValue();
+
+ t_print("value after term = %d\n", static_cast<int>(nValue_term));
+ t_print("value after join = %d\n", static_cast<int>(nValue_join));
+
+ // nValue_term and nValue_join should be the same
+ // but should be differ from nValue
+
+ delete aThread;
+ //check if thread really terminate after call terminate, if join immediately return
+ CPPUNIT_ASSERT_MESSAGE(
+ "Schedule: Returns False if the thread should terminate.",
+ nValue_join - nValue_term <= 1
+ );
+ CPPUNIT_ASSERT_MESSAGE(
+ "Schedule: Returns False if the thread should terminate.",
+ nValue_join - nValue_term >= 0
+ );
+
+ }
+
+ /** design a thread that has not call schedule in the workfunction--run method
+ */
+ void schedule_002()
+ {
+ ONoScheduleThread aThread; // this thread runs 10 sec. (no schedule() used)
+ bool bRes = aThread.create();
+ CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes );
+
+ ThreadHelper::thread_sleep_tenth_sec(2);
+ aThread.suspend();
+ sal_Int32 nValue = aThread.getValue();
+
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ sal_Int32 nLaterValue = aThread.getValue();
+ ThreadHelper::thread_sleep_tenth_sec(5);
+
+ resumeAndWaitThread(&aThread);
+
+ t_print(" value = %d\n", static_cast<int>(nValue));
+ t_print("later value = %d\n", static_cast<int>(nLaterValue));
+
+ //On windows, suspend works, so the values are same
+#ifdef _WIN32
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "Schedule: don't schedule in thread run method, suspend works.",
+ nValue, nLaterValue
+ );
+#endif
+
+ //On UNX, suspend does not work, so the difference of the values equals to sleep seconds number
+#ifdef UNX
+ aThread.resume();
+ CPPUNIT_ASSERT_MESSAGE(
+ "Schedule: don't schedule in thread run method, suspend does not work too.",
+ nLaterValue > nValue
+ );
+#endif
+
+ // terminate will not work if no schedule in thread's work function
+ termAndJoinThread(&aThread);
+ sal_Int32 nValue_term = aThread.getValue();
+
+ t_print(" value term = %d\n", static_cast<int>(nValue_term));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "Schedule: don't schedule in thread run method, terminate failed.",
+ static_cast<sal_Int32>(10), nValue_term
+ );
+ }
+
+ CPPUNIT_TEST_SUITE(schedule);
+ CPPUNIT_TEST(schedule_001);
+ CPPUNIT_TEST(schedule_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class schedule
+
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::create, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::createSuspended, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::suspend, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::resume, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::terminate, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::join, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::isRunning, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::setPriority, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::getPriority, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::getIdentifier, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::getCurrentIdentifier, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::waittest, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::yield, "osl_Thread");
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::schedule, "osl_Thread");
+} // namespace osl_Thread
+
+// destroy function when the binding thread terminate
+static void destroyCallback(void * data)
+{
+ delete[] static_cast<char *>(data);
+}
+
+static ThreadData myThreadData(destroyCallback);
+
+namespace {
+
+class myKeyThread : public Thread
+{
+public:
+ // a public char member for test result checking
+ char m_Char_Test;
+ // for pass thread-special data to thread
+ explicit myKeyThread(const char cData)
+ : m_Char_Test(0)
+ {
+ m_nData = cData;
+ }
+private:
+ char m_nData;
+
+ void SAL_CALL run() override
+ {
+ char * pc = new char[2];
+// strcpy(pc, &m_nData);
+ memcpy(pc, &m_nData, 1);
+ pc[1] = '\0';
+
+ myThreadData.setData(pc);
+ char* pData = static_cast<char*>(myThreadData.getData());
+ m_Char_Test = *pData;
+ // wait for long time to check the data value in main thread
+ ThreadHelper::thread_sleep_tenth_sec(3);
+ }
+public:
+ virtual ~myKeyThread() override
+ {
+ if (isRunning())
+ {
+ t_print("error: not terminated.\n");
+ }
+ }
+};
+
+}
+
+static ThreadData idData;
+
+namespace {
+
+class idThread: public Thread
+{
+public:
+ oslThreadIdentifier m_Id;
+private:
+ void SAL_CALL run() override
+ {
+ std::unique_ptr<oslThreadIdentifier> pId( new oslThreadIdentifier );
+ *pId = getIdentifier();
+ idData.setData(pId.get());
+ oslThreadIdentifier* pIdData = static_cast<oslThreadIdentifier*>(idData.getData());
+ //t_print("Thread %d has Data %d\n", getIdentifier(), *pIdData);
+ m_Id = *pIdData;
+ }
+
+public:
+ virtual ~idThread() override
+ {
+ if (isRunning())
+ {
+ t_print("error: not terminated.\n");
+ }
+ }
+};
+
+}
+
+namespace osl_ThreadData
+{
+
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+
+ // insert your test code here.
+ void ctor_001()
+ {
+
+ }
+
+ CPPUNIT_TEST_SUITE(ctors);
+ CPPUNIT_TEST(ctor_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ctors
+
+ class setData : public CppUnit::TestFixture
+ {
+ public:
+
+ /** the same instance of the class can have different values in different threads
+ */
+ void setData_001()
+ {
+ idThread aThread1;
+ aThread1.create();
+ idThread aThread2;
+ aThread2.create();
+
+ aThread1.join();
+ aThread2.join();
+
+ oslThreadIdentifier aThreadId1 = aThread1.getIdentifier();
+ oslThreadIdentifier aThreadId2 = aThread2.getIdentifier();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ aThread1.m_Id, aThreadId1
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ aThread2.m_Id, aThreadId2
+ );
+
+ }
+
+ void setData_002()
+ {
+ // at first, set the data a value
+ char* pc = new char[2];
+ char nData = 'm';
+ pc[0] = nData;
+ pc[1] = '\0';
+
+ myThreadData.setData(pc);
+
+ myKeyThread aThread1('a');
+ aThread1.create();
+ myKeyThread aThread2('b');
+ aThread2.create();
+ // aThread1 and aThread2 should have not terminated yet, check current data, not 'a' 'b'
+ char* pChar = static_cast<char*>(myThreadData.getData());
+ char aChar = *pChar;
+
+ aThread1.join();
+ aThread2.join();
+
+ // the saved thread data of aThread1 & aThread2, different
+ char cData1 = aThread1.m_Char_Test;
+ char cData2 = aThread2.m_Char_Test;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'a', cData1
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'b', cData2
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'm', aChar
+ );
+
+ }
+ /** setData the second time, and then getData
+ */
+ void setData_003()
+ {
+ // at first, set the data a value
+ char* pc = new char[2];
+ char nData = 'm';
+ memcpy(pc, &nData, 1);
+ pc[1] = '\0';
+ myThreadData.setData(pc);
+
+ myKeyThread aThread1('a');
+ aThread1.create();
+ myKeyThread aThread2('b');
+ aThread2.create();
+ // aThread1 and aThread2 should have not terminated yet
+ // setData the second time
+ char* pc2 = new char[2];
+ nData = 'o';
+ memcpy(pc2, &nData, 1);
+ pc2[1] = '\0';
+
+ myThreadData.setData(pc2);
+ char* pChar = static_cast<char*>(myThreadData.getData());
+ char aChar = *pChar;
+
+ aThread1.join();
+ aThread2.join();
+
+ // the saved thread data of aThread1 & aThread2, different
+ char cData1 = aThread1.m_Char_Test;
+ char cData2 = aThread2.m_Char_Test;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'a', cData1
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'b', cData2
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'o', aChar
+ );
+ }
+
+ CPPUNIT_TEST_SUITE(setData);
+ CPPUNIT_TEST(setData_001);
+ CPPUNIT_TEST(setData_002);
+ CPPUNIT_TEST(setData_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class setData
+
+ class getData : public CppUnit::TestFixture
+ {
+ public:
+
+ // After setData in child threads, get Data in the main thread, should be independent
+ void getData_001()
+ {
+ char* pc = new char[2];
+ strcpy(pc, "i");
+ myThreadData.setData(pc);
+
+ myKeyThread aThread1('c');
+ aThread1.create();
+ myKeyThread aThread2('d');
+ aThread2.create();
+
+ aThread1.join();
+ aThread2.join();
+
+ char cData1 = aThread1.m_Char_Test;
+ char cData2 = aThread2.m_Char_Test;
+
+ char* pChar = static_cast<char*>(myThreadData.getData());
+ char aChar = *pChar;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'c', cData1
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'd', cData2
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'i', aChar
+ );
+ }
+
+ // setData then change the value in the address data pointer points,
+ // and then getData, should get the new value
+ void getData_002()
+ {
+ char* pc = new char[2];
+ char nData = 'i';
+ memcpy(pc, &nData, 1);
+ pc[1] = '\0';
+
+ myThreadData.setData(pc);
+
+ myKeyThread aThread1('a');
+ aThread1.create();
+ myKeyThread aThread2('b');
+ aThread2.create();
+
+ // change the value which pc points
+ char nData2 = 'j';
+ memcpy(pc, &nData2, 1);
+ pc[1] = '\0';
+
+ void* pChar = myThreadData.getData();
+ char aChar = *static_cast<char*>(pChar);
+
+ aThread1.join();
+ aThread2.join();
+
+ char cData1 = aThread1.m_Char_Test;
+ char cData2 = aThread2.m_Char_Test;
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "ThreadData setData: ",
+ cData1 == 'a' && cData2 == 'b'
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "ThreadData setData: ",
+ 'j', aChar
+ );
+
+ }
+
+ CPPUNIT_TEST_SUITE(getData);
+ CPPUNIT_TEST(getData_001);
+ CPPUNIT_TEST(getData_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class getData
+
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_ThreadData::ctors);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_ThreadData::setData);
+ CPPUNIT_TEST_SUITE_REGISTRATION(osl_ThreadData::getData);
+} // namespace osl_ThreadData
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/process/osl_Thread.xsce b/sal/qa/osl/process/osl_Thread.xsce
new file mode 100644
index 000000000..11d0c5da1
--- /dev/null
+++ b/sal/qa/osl/process/osl_Thread.xsce
@@ -0,0 +1,18 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+osl_Thread.setPriority.setPriority_001_1 unxsols4
diff --git a/sal/qa/osl/process/osl_process.cxx b/sal/qa/osl/process/osl_process.cxx
new file mode 100644
index 000000000..4555a0d83
--- /dev/null
+++ b/sal/qa/osl/process/osl_process.cxx
@@ -0,0 +1,448 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifdef IOS
+#define CPPUNIT_PLUGIN_EXPORTED_NAME cppunitTest_osl_process
+#endif
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <osl/process.h>
+#include <osl/file.hxx>
+#include <osl/thread.h>
+#include <rtl/ustring.hxx>
+#include <signal.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <osl/module.hxx>
+#include <sal/macros.h>
+
+#if defined HAVE_VALGRIND_HEADERS
+#include <valgrind/valgrind.h>
+#elif !defined _WIN32
+#define RUNNING_ON_VALGRIND false
+#endif
+
+#if !defined(_WIN32) // Windows
+#include <unistd.h>
+#endif
+
+#include <iostream>
+#include <fstream>
+#include <vector>
+#include <algorithm>
+#include <iterator>
+#include <string>
+
+#ifdef UNX
+#if defined( MACOSX )
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron())
+# else
+ extern char** environ;
+# endif
+#endif
+
+using namespace osl;
+
+/** get binary Path.
+*/
+static OUString getExecutablePath()
+{
+ OUString dirPath;
+ osl::Module::getUrlFromAddress(
+ reinterpret_cast<oslGenericFunction>(&getExecutablePath), dirPath);
+ dirPath = dirPath.copy( 0, dirPath.lastIndexOf('/') );
+ dirPath = dirPath.copy( 0, dirPath.lastIndexOf('/') + 1) +
+ "Executable";
+ return dirPath;
+}
+
+#if !defined _WIN32
+
+namespace {
+
+class exclude
+{
+public:
+
+ explicit exclude(const std::vector<OString>& exclude_list)
+ {
+ for (auto& exclude_list_item : exclude_list)
+ exclude_list_.push_back(env_var_name(exclude_list_item));
+ }
+
+ bool operator() (const OString& env_var) const
+ {
+ return (exclude_list_.end() !=
+ std::find(
+ exclude_list_.begin(),
+ exclude_list_.end(),
+ env_var_name(env_var)));
+ }
+
+private:
+
+ // extract the name from an environment variable
+ // that is given in the form "NAME=VALUE"
+ static OString env_var_name(const OString& env_var)
+ {
+ sal_Int32 pos_equal_sign =
+ env_var.indexOf('=');
+
+ if (pos_equal_sign != -1)
+ return env_var.copy(0, pos_equal_sign);
+
+ return OString();
+ }
+
+private:
+ std::vector<OString> exclude_list_;
+};
+
+ void tidy_container(std::vector<OString> &env_container)
+ {
+ //sort them because there are no guarantees to ordering
+ std::sort(env_container.begin(), env_container.end());
+ if (RUNNING_ON_VALGRIND)
+ {
+ env_container.erase(
+ std::remove_if(
+ env_container.begin(), env_container.end(),
+ [](OString const & s) {
+ return s.startsWith("LD_PRELOAD=")
+ || s.startsWith("VALGRIND_LIB="); }),
+ env_container.end());
+ }
+ }
+}
+
+ static void read_parent_environment(std::vector<OString>* env_container)
+ {
+ for (int i = 0; environ[i] != nullptr; i++)
+ env_container->push_back(OString(environ[i]));
+ tidy_container(*env_container);
+ }
+
+#endif
+
+class Test_osl_executeProcess : public CppUnit::TestFixture
+{
+ const OUString env_param_;
+
+ OUString temp_file_url_;
+ OUString temp_file_path_;
+ rtl_uString* parameters_[2];
+ static const int parameters_count_ = 2;
+ OUString suCWD;
+ OUString suExecutableFileURL;
+
+public:
+
+ // ctor
+ Test_osl_executeProcess() :
+ env_param_(OUString("-env")), suCWD(getExecutablePath())
+ {
+ parameters_[0] = env_param_.pData;
+
+#if defined(_WIN32)
+ suExecutableFileURL = suCWD + "/" "osl_process_child.exe";
+#else
+ suExecutableFileURL = suCWD + "/" "osl_process_child";
+#endif
+ }
+
+ virtual void setUp() override
+ {
+ temp_file_path_ = create_temp_file(temp_file_url_);
+ parameters_[1] = temp_file_path_.pData;
+ }
+
+ virtual void tearDown() override
+ {
+ osl::File::remove(temp_file_url_);
+ }
+
+ OUString create_temp_file(OUString &temp_file_url)
+ {
+ FileBase::RC rc = FileBase::createTempFile(nullptr, nullptr, &temp_file_url);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile failed", FileBase::E_None, rc);
+
+ OUString temp_file_path;
+ rc = FileBase::getSystemPathFromFileURL(temp_file_url, temp_file_path);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("getSystemPathFromFileURL failed", FileBase::E_None, rc);
+
+ return temp_file_path;
+ }
+
+#if !defined _WIN32
+
+ void read_child_environment(std::vector<OString>* env_container)
+ {
+ OString temp_file_name = OUStringToOString(OUString(
+ parameters_[1]), osl_getThreadTextEncoding());
+ std::ifstream file(temp_file_name.getStr());
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "I/O error, cannot open child environment file",
+ file.is_open()
+ );
+
+ std::string line;
+ line.reserve(1024);
+ while (std::getline(file, line, '\0'))
+ env_container->push_back(OString(line.c_str()));
+ tidy_container(*env_container);
+ }
+
+ // environment of the child process that was
+ // started. The child process writes his
+ // environment into a file
+ void compare_environments()
+ {
+ std::vector<OString> parent_env;
+ read_parent_environment(&parent_env);
+
+ std::vector<OString> child_env;
+ read_child_environment(&child_env);
+
+ OString msg(
+ OString::number(parent_env.size()) + "/"
+ + OString::number(child_env.size()));
+ auto min = std::min(parent_env.size(), child_env.size());
+ for (decltype(min) i = 0; i != min; ++i) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ msg.getStr(), parent_env[i], child_env[i]);
+ }
+ if (parent_env.size() != child_env.size()) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ (parent_env.size() >= child_env.size()
+ ? parent_env.back() : child_env.back()).getStr(),
+ parent_env.size(), child_env.size());
+ }
+ }
+
+ // compare the equal environment parts and the
+ // different part of the child environment
+ bool compare_merged_environments(const std::vector<OString>& different_env_vars)
+ {
+ std::vector<OString> parent_env;
+ read_parent_environment(&parent_env);
+
+ for (auto& env : parent_env)
+ std::cout << "initially parent env: " << env << "\n";
+
+ //remove the environment variables that we have changed
+ //in the child environment from the read parent environment
+ parent_env.erase(
+ std::remove_if(parent_env.begin(), parent_env.end(), exclude(different_env_vars)),
+ parent_env.end());
+
+ for (auto& env : parent_env)
+ std::cout << "stripped parent env: " << env << "\n";
+
+ //read the child environment and exclude the variables that
+ //are different
+ std::vector<OString> child_env;
+ read_child_environment(&child_env);
+
+ for (auto& env : child_env)
+ std::cout << "initial child env: " << env << "\n";
+ //partition the child environment into the variables that
+ //are different to the parent environment (they come first)
+ //and the variables that should be equal between parent
+ //and child environment
+ auto iter_logical_end =
+ std::stable_partition(child_env.begin(), child_env.end(), exclude(different_env_vars));
+
+ std::vector<OString> different_child_env_vars(child_env.begin(), iter_logical_end);
+ child_env.erase(child_env.begin(), iter_logical_end);
+
+ for (auto& env : child_env)
+ std::cout << "stripped child env: " << env << "\n";
+
+ bool common_env_size_equals = (parent_env.size() == child_env.size());
+ bool common_env_content_equals = std::equal(child_env.begin(), child_env.end(), parent_env.begin());
+
+ for (auto& env_var : different_env_vars)
+ std::cout << "different should be: " << env_var << "\n";
+
+ for (auto& env_var : different_child_env_vars)
+ std::cout << "different are: " << env_var << "\n";
+
+ bool different_env_size_equals = (different_child_env_vars.size() == different_env_vars.size());
+ bool different_env_content_equals =
+ std::equal(different_env_vars.begin(), different_env_vars.end(), different_child_env_vars.begin());
+
+ return (common_env_size_equals && common_env_content_equals &&
+ different_env_size_equals && different_env_content_equals);
+ }
+
+ // test that parent and child process have the
+ // same environment when osl_executeProcess will
+ // be called without setting new environment
+ // variables
+ void osl_execProc_parent_equals_child_environment()
+ {
+ oslProcess process;
+ oslProcessError osl_error = osl_executeProcess(
+ suExecutableFileURL.pData,
+ parameters_,
+ parameters_count_,
+ osl_Process_NORMAL,
+ nullptr,
+ suCWD.pData,
+ nullptr,
+ 0,
+ &process);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createProcess failed",
+ osl_Process_E_None, osl_error
+ );
+
+ osl_error = ::osl_joinProcess(process);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_joinProcess returned with failure",
+ osl_Process_E_None, osl_error
+ );
+
+ osl_freeProcessHandle(process);
+
+ compare_environments();
+ }
+
+ #define ENV1 "PAT=a:\\"
+ #define ENV2 "PATHb=b:\\"
+ #define ENV3 "Patha=c:\\"
+ #define ENV4 "Patha=d:\\"
+
+ void osl_execProc_merged_child_environment()
+ {
+ rtl_uString* child_env[4];
+ OUString env1(ENV1);
+ OUString env2(ENV2);
+ OUString env3(ENV3);
+ OUString env4(ENV4);
+
+ child_env[0] = env1.pData;
+ child_env[1] = env2.pData;
+ child_env[2] = env3.pData;
+ child_env[3] = env4.pData;
+
+ oslProcess process;
+ oslProcessError osl_error = osl_executeProcess(
+ suExecutableFileURL.pData,
+ parameters_,
+ parameters_count_,
+ osl_Process_NORMAL,
+ nullptr,
+ suCWD.pData,
+ child_env,
+ SAL_N_ELEMENTS(child_env),
+ &process);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createProcess failed",
+ osl_Process_E_None, osl_error
+ );
+
+ osl_error = ::osl_joinProcess(process);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_joinProcess returned with failure",
+ osl_Process_E_None, osl_error
+ );
+
+ osl_freeProcessHandle(process);
+
+ std::vector<OString> different_child_env_vars;
+ different_child_env_vars.push_back(ENV1);
+ different_child_env_vars.push_back(ENV2);
+ different_child_env_vars.push_back(ENV4);
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "osl_execProc_merged_child_environment",
+ compare_merged_environments(different_child_env_vars)
+ );
+ }
+
+#endif
+
+ void osl_execProc_test_batch()
+ {
+ oslProcess process;
+#if defined(_WIN32)
+ OUString suBatch = suCWD + "/batch.bat";
+#else
+ OUString suBatch = suCWD + "/batch.sh";
+#endif
+ oslProcessError osl_error = osl_executeProcess(
+ suBatch.pData,
+ nullptr,
+ 0,
+ osl_Process_NORMAL,
+ nullptr,
+ suCWD.pData,
+ nullptr,
+ 0,
+ &process);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createProcess failed",
+ osl_Process_E_None, osl_error
+ );
+
+ osl_error = ::osl_joinProcess(process);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_joinProcess returned with failure",
+ osl_Process_E_None, osl_error
+ );
+
+ osl_freeProcessHandle(process);
+ }
+
+ CPPUNIT_TEST_SUITE(Test_osl_executeProcess);
+ //TODO: Repair these (at least under Windows)
+#if !defined(_WIN32)
+ CPPUNIT_TEST(osl_execProc_parent_equals_child_environment);
+ CPPUNIT_TEST(osl_execProc_merged_child_environment);
+#endif
+ CPPUNIT_TEST(osl_execProc_test_batch);
+ ///TODO: Repair test (or tested function ;-) - test fails.
+ CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test_osl_executeProcess);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/process/osl_process_child.cxx b/sal/qa/osl/process/osl_process_child.cxx
new file mode 100644
index 000000000..17f749bc2
--- /dev/null
+++ b/sal/qa/osl/process/osl_process_child.cxx
@@ -0,0 +1,101 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#if defined(_WIN32) // Windows
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#else
+# include <unistd.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fstream>
+#include <string.h>
+
+
+#ifdef UNX
+#if defined( MACOSX )
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron())
+# else
+ extern char** environ;
+# endif
+#endif
+
+#ifdef _WIN32
+# define SLEEP(t) (Sleep((t)*1000))
+#else
+# define SLEEP(t) (sleep((t)))
+#endif
+
+static void wait_for_seconds(char* time)
+{
+ SLEEP(atoi(time));
+}
+
+#ifdef _WIN32
+
+static void w_to_a(LPCWSTR strW, LPSTR strA, DWORD size)
+{
+ WideCharToMultiByte(CP_ACP, 0, strW, -1, strA, size, nullptr, nullptr);
+}
+
+ static void dump_env(char* file_path)
+ {
+ LPWSTR env = GetEnvironmentStringsW();
+ LPWSTR p = env;
+
+ std::ofstream file(file_path);
+
+ char buffer[32767];
+ while (size_t l = wcslen(p))
+ {
+ w_to_a(p, buffer, sizeof(buffer));
+ file << buffer << '\0';
+ p += l + 1;
+ }
+ FreeEnvironmentStringsW(env);
+ }
+#else
+ static void dump_env(char* file_path)
+ {
+ std::ofstream file(file_path);
+ for (int i = 0; environ[i] != nullptr; ++i)
+ file << environ[i] << '\0';
+ }
+#endif
+
+int main(int argc, char* argv[])
+{
+ if (argc > 2)
+ {
+ if (strcmp("-join", argv[1]) == 0)
+ {
+ // coverity[tainted_data] - this is a build-time only test tool
+ wait_for_seconds(argv[2]);
+ }
+ else if (strcmp("-env", argv[1]) == 0)
+ dump_env(argv[2]);
+ }
+
+ return 0;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/profile/osl_old_testprofile.cxx b/sal/qa/osl/profile/osl_old_testprofile.cxx
new file mode 100644
index 000000000..d1556bb15
--- /dev/null
+++ b/sal/qa/osl/profile/osl_old_testprofile.cxx
@@ -0,0 +1,62 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <osl/profile.h>
+#include <rtl/bootstrap.hxx>
+
+namespace osl_Profile
+{
+ class oldtests : public CppUnit::TestFixture
+ {
+ public:
+ void test_profile();
+
+ CPPUNIT_TEST_SUITE( oldtests );
+ CPPUNIT_TEST( test_profile );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+void oldtests::test_profile()
+{
+ OUString baseUrl;
+ CPPUNIT_ASSERT(rtl::Bootstrap::get("UserInstallation", baseUrl));
+
+ // successful write
+ oslProfile hProfile = osl_openProfile( OUString(baseUrl + "/soffice.ini").pData, osl_Profile_WRITELOCK );
+ CPPUNIT_ASSERT(hProfile != nullptr);
+ CPPUNIT_ASSERT_MESSAGE(
+ "cannot write into init file",
+ osl_writeProfileBool( hProfile, "testsection", "testbool", true ));
+ CPPUNIT_ASSERT(osl_closeProfile( hProfile ));
+
+ // unsuccessful open
+ CPPUNIT_ASSERT_EQUAL(oslProfile(nullptr), osl_openProfile( OUString(baseUrl + "/not_existing_path/soffice.ini").pData, osl_Profile_WRITELOCK ));
+}
+
+} // namespace osl_Profile
+
+CPPUNIT_TEST_SUITE_REGISTRATION( osl_Profile::oldtests );
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/security/TODO.h b/sal/qa/osl/security/TODO.h
new file mode 100644
index 000000000..082c54633
--- /dev/null
+++ b/sal/qa/osl/security/TODO.h
@@ -0,0 +1,8 @@
+#include "sal/types.h"
+#define T1(x) do { x; } while (0)
+#define T2(x) do { x; } while (sal_False)
+#define T3(x) do { x; } while (false)
+#define T4(x, y) do { x; } while (y)
+#define T5(x) T4(x, 0)
+#define T6(x) T4(x, sal_False)
+#define T7(x) T4(x, false)
diff --git a/sal/qa/osl/security/osl_Security.cxx b/sal/qa/osl/security/osl_Security.cxx
new file mode 100644
index 000000000..f37187480
--- /dev/null
+++ b/sal/qa/osl/security/osl_Security.cxx
@@ -0,0 +1,627 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <algorithm>
+#ifdef _WIN32
+#if !defined WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#include <sddl.h>
+#undef min
+#endif
+#include "osl_Security_Const.h"
+#include <osl/thread.h>
+#include <rtl/process.h>
+#include <rtl/strbuf.hxx>
+#include <sal/log.hxx>
+#include <o3tl/char16_t2wchar_t.hxx>
+
+using namespace osl;
+using namespace rtl;
+
+/** print a UNICODE String.
+*/
+static void printUString( const OUString & str )
+{
+ //t_print("#printUString_u# " );
+ OString aString = OUStringToOString( str, RTL_TEXTENCODING_ASCII_US );
+ t_print("%s\n", aString.getStr( ) );
+}
+
+// test code start here
+
+namespace osl_Security
+{
+
+ /** testing the method:
+ Security()
+ */
+ class ctors : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void ctors_001( )
+ {
+ ::osl::Security aSec;
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: create a security its handle should not be NULL.",
+ aSec.getHandle( ) != nullptr );
+ }
+
+ CPPUNIT_TEST_SUITE( ctors );
+ CPPUNIT_TEST( ctors_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class ctors
+
+ /** testing the methods:
+ inline sal_Bool SAL_CALL logonUser(const OUString& strName,
+ const OUString& strPasswd);
+ inline sal_Bool SAL_CALL logonUser(const OUString & strName,
+ const OUString & strPasswd,
+ const OUString & strFileServer);
+ */
+ class logonUser : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes;
+
+ void logonUser_user_pwd( )
+ {
+ ::osl::Security aSec;
+ bRes = aSec.logonUser( aLogonUser, aLogonPasswd );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: check logon user through forwarded user name, pwd, passed in (UNX), failed in (W32).",
+ bRes );
+ }
+
+ void logonUser_user_pwd_server( )
+ {
+ ::osl::Security aSec;
+ bRes = aSec.logonUser( aLogonUser, aLogonPasswd, aFileServer );
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: check logon user through forwarded user name, pwd and server name, failed in (UNX)(W32).",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( logonUser );
+ if ( !aStringForward.isEmpty() && aStringForward.indexOf( ' ' ) != -1 && ( aStringForward.indexOf( ' ' ) == aStringForward.lastIndexOf( ' ' ) ) )
+ /// if user name and passwd are forwarded
+ {
+ CPPUNIT_TEST( logonUser_user_pwd );
+ }
+ if ( !aStringForward.isEmpty() && aStringForward.indexOf( ' ' ) != -1 && ( aStringForward.indexOf( ' ' ) != aStringForward.lastIndexOf( ' ' ) ) )
+ /// if user name and passwd and file server are forwarded
+ {
+ CPPUNIT_TEST( logonUser_user_pwd_server );
+ }
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class logonUser
+
+ /** testing the method:
+ inline sal_Bool Security::getUserIdent( OUString& strIdent) const
+ */
+ class getUserIdent : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void getUserIdent_001( )
+ {
+ ::osl::Security aSec;
+ OUString strID;
+ bRes = aSec.getUserIdent( strID );
+
+ OString aMessage = "strUserID: " +
+ OUStringToOString(strUserID, osl_getThreadTextEncoding()) +
+ ", strID: " +
+ OUStringToOString(strID, osl_getThreadTextEncoding()) +
+ ", bRes: " +
+ OString::boolean(bRes);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( aMessage.getStr(), strUserID, strID );
+ CPPUNIT_ASSERT_MESSAGE( aMessage.getStr(), bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( getUserIdent );
+ CPPUNIT_TEST( getUserIdent_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class getUserIdent
+
+ /** testing the method:
+ inline sal_Bool SAL_CALL getUserName( OUString& strName) const;
+ */
+ class getUserName : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void getUserName_001( )
+ {
+ ::osl::Security aSec;
+#ifdef _WIN32
+ OUString strName( strUserName ), strGetName;
+#else
+ OUString strName( strUserName ), strGetName;
+#endif
+ bRes = aSec.getUserName( strGetName );
+
+ sal_Int32 nPos = -1;
+ if (!strName.isEmpty())
+ {
+ nPos = strGetName.indexOf(strName);
+ }
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: get UserName and compare it with names got at the beginning of the test.",
+ ( nPos >= 0 ) );
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: get UserName and compare it with names got at the beginning of the test.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( getUserName );
+ CPPUNIT_TEST( getUserName_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class getUserName
+
+ /** testing the method:
+ inline sal_Bool Security::getConfigDir( OUString& strDirectory ) const
+ */
+ class getConfigDir : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes, bRes1;
+
+ void getConfigDir_001( )
+ {
+ ::osl::Security aSec;
+ OUString strConfig;
+ bRes = aSec.getConfigDir( strConfig );
+
+ CPPUNIT_ASSERT_MESSAGE( "failed to find a ConfigDir!", bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( getConfigDir );
+ CPPUNIT_TEST( getConfigDir_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class getConfigDir
+
+ /** testing the method:
+ inline sal_Bool SAL_CALL isAdministrator() const;
+ */
+ class isAdministrator : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes;
+
+ void isAdministrator_001( )
+ {
+ ::osl::Security aSec;
+ bRes = aSec.isAdministrator( );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#test comment#: check if the user is administrator at beginning, compare here.",
+ isAdmin, bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( isAdministrator );
+ CPPUNIT_TEST( isAdministrator_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class isAdministrator
+
+ /** testing the method:
+ inline oslSecurity getHandle() const;
+ */
+ class getHandle : public CppUnit::TestFixture
+ {
+ public:
+ bool bRes;
+
+ void getHandle_001( )
+ {
+ ::osl::Security aSec;
+ bRes = aSec.isAdministrator( ) == bool(osl_isAdministrator( aSec.getHandle( ) ));
+
+ CPPUNIT_ASSERT_MESSAGE( "#test comment#: use getHandle function to call C API.",
+ bRes );
+ }
+
+ CPPUNIT_TEST_SUITE( getHandle );
+ CPPUNIT_TEST( getHandle_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class getHandle
+
+ class UserProfile : public CppUnit::TestFixture
+ {
+ public:
+
+ void loadUserProfile( )
+ {
+ ::osl::Security aSec;
+ bool bValue = osl_loadUserProfile(aSec.getHandle());
+
+ CPPUNIT_ASSERT_MESSAGE( "empty function.", !bValue );
+ }
+
+ void unloadUserProfile( )
+ {
+ ::osl::Security aSec;
+ osl_unloadUserProfile(aSec.getHandle());
+ CPPUNIT_ASSERT_MESSAGE( "empty function.", true );
+ }
+
+ CPPUNIT_TEST_SUITE( UserProfile );
+ CPPUNIT_TEST( loadUserProfile );
+ CPPUNIT_TEST( unloadUserProfile );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class UserProfile
+
+ class loginUserOnFileServer : public CppUnit::TestFixture
+ {
+ public:
+
+ void loginUserOnFileServer_001( )
+ {
+ OUString suUserName;
+ OUString suPassword;
+ OUString suFileServer;
+ ::osl::Security aSec;
+ oslSecurity pSec = aSec.getHandle();
+
+ oslSecurityError erg = osl_loginUserOnFileServer(suUserName.pData, suPassword.pData, suFileServer.pData, &pSec);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "empty function.", osl_Security_E_UserUnknown, erg );
+ }
+
+ CPPUNIT_TEST_SUITE( loginUserOnFileServer );
+ CPPUNIT_TEST( loginUserOnFileServer_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ }; // class loginUserOnFileServer
+
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::ctors);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::logonUser);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getUserIdent);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getUserName);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getConfigDir);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::isAdministrator);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getHandle);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::UserProfile);
+CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::loginUserOnFileServer);
+
+} // namespace osl_Security
+
+/* This defines an own TestPlugIn implementation with an own initialize()
+ method that will be called after loading the PlugIn
+ */
+#include <cppunit/plugin/TestPlugInDefaultImpl.h>
+
+namespace {
+
+class MyTestPlugInImpl: public CPPUNIT_NS::TestPlugInDefaultImpl
+{
+ public:
+ MyTestPlugInImpl() {};
+ void initialize( CPPUNIT_NS::TestFactoryRegistry *registry,
+ const CPPUNIT_NS::PlugInParameters &parameters ) override;
+};
+
+}
+
+void MyTestPlugInImpl::initialize( CPPUNIT_NS::TestFactoryRegistry *,
+ const CPPUNIT_NS::PlugInParameters & )
+{
+ /// start message
+ t_print("#Initializing ...\n" );
+ t_print("#\n#logonUser function need root/Administrator account to test.\n" );
+ t_print("#You can test by login with root/Administrator, and execute:\n" );
+ t_print("#testshl2 -forward \"username password\" ../../../wntmsci9/bin/Security.dll\n" );
+ t_print("# where username and password are forwarded account info.\n" );
+ t_print("#if no text forwarded, this function will be skipped.\n" );
+
+ /// get system information
+#if ( defined UNX )
+ /// some initialization work for UNIX OS
+
+ struct passwd* pw;
+ CPPUNIT_ASSERT_MESSAGE( "getpwuid: no password entry\n",( pw = getpwuid( getuid() ) ) != nullptr );
+
+ /// get user ID;
+ strUserID = OUString::number( getuid( ) );
+
+ /// get user Name;
+ strUserName = OUString::createFromAscii( pw->pw_name );
+
+ /// get home directory;
+ char *pw_dir = pw->pw_dir;
+ if( getenv( "FAKEROOTKEY" ) )
+ pw_dir = getenv("HOME");
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#Convert from system path to URL failed.",
+ ::osl::File::E_None, ::osl::File::getFileURLFromSystemPath( OUString::createFromAscii( pw_dir ), strHomeDirectory ) );
+
+ /// get config directory;
+ strConfigDirectory = strHomeDirectory.copy(0);
+
+ /// is administrator;
+ if( !getuid( ) )
+ isAdmin = true;
+
+#endif
+#if defined(_WIN32)
+ /// some initialization work for Windows OS
+
+ /// Get the user name, computer name, user home directory.
+ LPWSTR lpszSystemInfo; // pointer to system information string
+ DWORD cchBuff = BUFSIZE; // size of computer or user name
+ WCHAR wchBuffer[BUFSIZE]; // buffer for string
+
+ lpszSystemInfo = wchBuffer;
+ if( GetUserNameW(lpszSystemInfo, &cchBuff) )
+ strUserName = o3tl::toU(lpszSystemInfo);
+
+ cchBuff = BUFSIZE;
+ if( GetComputerNameW(lpszSystemInfo, &cchBuff) )
+ strComputerName = o3tl::toU(lpszSystemInfo);
+
+ /// Get user home directory.
+ HKEY hRegKey;
+ if (RegOpenKeyW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", &hRegKey) == ERROR_SUCCESS)
+ {
+ sal_Unicode PathW[_MAX_PATH];
+ LSTATUS lRet;
+ DWORD lSize = sizeof(PathW);
+ DWORD Type;
+
+ lRet = RegQueryValueExW(hRegKey, L"AppData", nullptr, &Type, reinterpret_cast<unsigned char *>(PathW), &lSize);
+ if ( ( lRet == ERROR_SUCCESS ) && ( Type == REG_SZ ) && ( _waccess( o3tl::toW(PathW), 0 ) == 0 ) )
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#Convert from system path to URL failed.",
+ ::osl::File::E_None, ::osl::File::getFileURLFromSystemPath( PathW, strConfigDirectory ) );
+ }
+
+ lSize = sizeof(PathW);
+ lRet = RegQueryValueExW(hRegKey, L"Personal", nullptr, &Type, reinterpret_cast<unsigned char *>(PathW), &lSize);
+ if ( ( lRet == ERROR_SUCCESS ) && ( Type == REG_SZ ) && ( _waccess( o3tl::toW(PathW), 0 ) == 0 ) )
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "#Convert from system path to URL failed.",
+ ::osl::File::E_None, ::osl::File::getFileURLFromSystemPath( PathW, strHomeDirectory ) );
+ }
+
+ RegCloseKey(hRegKey);
+ }
+
+ /// Get user Security ID:
+
+ // Create buffers that may be large enough. If a buffer is too small, the count parameter will be set to the size needed.
+ const DWORD INITIAL_SIZE = 32;
+ DWORD cbSid = 0;
+ DWORD dwSidBufferSize = INITIAL_SIZE;
+ DWORD cchDomainName = 0;
+ DWORD dwDomainBufferSize = INITIAL_SIZE;
+ WCHAR * wszDomainName = nullptr;
+ SID_NAME_USE eSidType;
+ DWORD dwErrorCode = 0;
+
+ OUString sLookupUserName = strUserName;
+ LPCWSTR wszAccName = o3tl::toW(sLookupUserName.getStr( ));
+
+ // Create buffers for the SID and the domain name.
+ PSID pSid = static_cast<PSID>(new BYTE[dwSidBufferSize]);
+ memset( pSid, 0, dwSidBufferSize);
+
+ wszDomainName = new WCHAR[dwDomainBufferSize];
+ memset(wszDomainName, 0, dwDomainBufferSize*sizeof(WCHAR));
+
+ // Obtain the SID for the account name passed.
+ for ( ; ; )
+ {
+ // Set the count variables to the buffer sizes and retrieve the SID.
+ cbSid = dwSidBufferSize;
+ cchDomainName = dwDomainBufferSize;
+ if (LookupAccountNameW(
+ nullptr, // Computer name. NULL for the local computer
+ wszAccName,
+ pSid, // Pointer to the SID buffer. Use NULL to get the size needed,
+ &cbSid, // Size of the SID buffer needed.
+ wszDomainName, // wszDomainName,
+ &cchDomainName,
+ &eSidType
+ ))
+ {
+ if (eSidType == SID_NAME_USE::SidTypeDomain)
+ {
+ // LookupAccountNameW returned SID of a domain; likely the hostname is the same as
+ // username (case-insensitive): something like "JOHNSMITH\JohnSmith", so looking up
+ // for "JohnSmith" without domain returns domain itself. Try getting the SID of the
+ // user using fully qualified name (the case of user of another domain having name
+ // identical this hostname is not handled).
+ sLookupUserName = o3tl::toU(wszDomainName) + OUStringLiteral("\\") + strUserName;
+ wszAccName = o3tl::toW(sLookupUserName.getStr());
+ continue;
+ }
+ if (IsValidSid( pSid) == FALSE)
+ wprintf(L"# The SID for %s is invalid.\n", wszAccName);
+ break;
+ }
+ dwErrorCode = GetLastError();
+
+ // Check if one of the buffers was too small.
+ if (dwErrorCode == ERROR_INSUFFICIENT_BUFFER)
+ {
+ if (cbSid > dwSidBufferSize)
+ {
+ // Reallocate memory for the SID buffer.
+ wprintf(L"# The SID buffer was too small. It will be reallocated.\n");
+ delete[] static_cast<BYTE*>(pSid);
+ pSid = static_cast<PSID>(new BYTE[cbSid]);
+ memset( pSid, 0, cbSid);
+ dwSidBufferSize = cbSid;
+ }
+ if (cchDomainName > dwDomainBufferSize)
+ {
+ // Reallocate memory for the domain name buffer.
+ wprintf(L"# The domain name buffer was too small. It will be reallocated.\n");
+ delete [] wszDomainName;
+ wszDomainName = new WCHAR[cchDomainName];
+ memset(wszDomainName, 0, cchDomainName*sizeof(WCHAR));
+ dwDomainBufferSize = cchDomainName;
+ }
+ }
+ else
+ {
+ wprintf(L"# LookupAccountNameW failed. GetLastError returned: %d\n", dwErrorCode);
+ break;
+ }
+ }
+
+ LPWSTR pSidStr = nullptr;
+ if (ConvertSidToStringSidW(pSid, &pSidStr))
+ {
+ strUserID = o3tl::toU(pSidStr);
+ LocalFree(pSidStr);
+ }
+ else
+ {
+ wprintf(L"# ConvertSidToStringSidW failed. GetLastError returned: %d\n", GetLastError());
+ }
+
+ delete [] static_cast<BYTE*>(pSid);
+ delete [] wszDomainName;
+
+ /// check if logged in user is administrator:
+
+ BOOL b;
+ SID_IDENTIFIER_AUTHORITY NtAuthority = { SECURITY_NT_AUTHORITY };
+ PSID AdministratorsGroup;
+ b = AllocateAndInitializeSid(
+ &NtAuthority,
+ 2,
+ SECURITY_BUILTIN_DOMAIN_RID,
+ DOMAIN_ALIAS_RID_ADMINS,
+ 0, 0, 0, 0, 0, 0,
+ &AdministratorsGroup);
+ if(b)
+ {
+ if (!CheckTokenMembership( nullptr, AdministratorsGroup, &b))
+ {
+ b = FALSE;
+ }
+ FreeSid(AdministratorsGroup);
+ }
+
+ isAdmin = b;
+
+#endif
+
+ /// print the information.
+ t_print("#\n#Retrieved system information is below:\n");
+
+ t_print("Computer Name: ");
+ if ( strComputerName.isEmpty())
+ t_print("Not retrieved\n" );
+ else
+ printUString( strComputerName );
+
+ t_print("Current User Name: ");
+ if ( strUserName.isEmpty())
+ t_print("Not retrieved\n" );
+ else
+ printUString( strUserName );
+
+ t_print("Current User Home Directory:");
+ if ( strHomeDirectory.isEmpty())
+ t_print("Not retrieved\n" );
+ else
+ printUString( strHomeDirectory );
+
+ t_print("Current Config Directory: ");
+ if ( strConfigDirectory.isEmpty())
+ t_print("Not retrieved\n" );
+ else
+ printUString( strConfigDirectory );
+
+ t_print("Current UserID: ");
+ if ( strUserID.isEmpty())
+ t_print("Not retrieved\n" );
+ else
+ printUString( strUserID );
+
+ t_print("Current User is: ");
+ if ( !isAdmin )
+ t_print("NOT Administrator.\n" );
+ else
+ t_print("Administrator.\n" );
+
+ /// get and display forwarded text if available.
+ OUString args[ 3 ];
+ int argsCount = 0;
+ sal_uInt32 n = rtl_getAppCommandArgCount();
+ for (sal_uInt32 i = 0; i < n; ++i)
+ {
+ OUString arg;
+ rtl_getAppCommandArg(i, &arg.pData);
+ if( arg.startsWith("-") )
+ continue;
+ if( argsCount >= 3 )
+ {
+ SAL_WARN( "sal.osl", "Too many test arguments" );
+ continue;
+ }
+ args[ argsCount++ ] = arg;
+ }
+ /// only forwarded two parameters, username and password.
+ if( argsCount == 2 )
+ {
+ aLogonUser = args[ 0 ];
+ t_print("\n#Forwarded username: ");
+ printUString( aLogonUser);
+
+ aLogonPasswd = args[ 1 ];
+ t_print("#Forwarded password: ");
+ for (int i = 0; i < aLogonPasswd.getLength(); ++i)
+ t_print("*");
+ t_print("\n" );
+ }
+ else if( argsCount == 3 )
+ /// forwarded three parameters, username, password and fileserver.
+ {
+ aLogonUser = args[ 0 ];
+ t_print("#Forwarded username: ");
+ printUString( aLogonUser);
+
+ aLogonPasswd = args[ 1 ];
+ t_print("#Forwarded password: ");
+ for (int i = 0; i < aLogonPasswd.getLength(); ++i)
+ t_print("*");
+ t_print("\n" );
+
+ aFileServer = args[ 2 ];
+ t_print("#Forwarded FileServer: ");
+ printUString( aFileServer );
+ }
+ t_print("#\n#Initialization Done.\n" );
+
+}
+
+/* Instantiate and register the own TestPlugIn and instantiate the default
+ main() function.
+ (This is done by CPPUNIT_PLUGIN_IMPLEMENT() for TestPlugInDefaultImpl)
+ */
+
+CPPUNIT_PLUGIN_EXPORTED_FUNCTION_IMPL( MyTestPlugInImpl );
+CPPUNIT_PLUGIN_IMPLEMENT_MAIN();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/security/osl_Security_Const.h b/sal/qa/osl/security/osl_Security_Const.h
new file mode 100644
index 000000000..58f578814
--- /dev/null
+++ b/sal/qa/osl/security/osl_Security_Const.h
@@ -0,0 +1,58 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_OSL_SECURITY_OSL_SECURITY_CONST_H
+#define INCLUDED_SAL_QA_OSL_SECURITY_OSL_SECURITY_CONST_H
+
+#if defined(_WIN32) // Windows
+#include <io.h>
+#endif
+
+#include <sal/types.h>
+#include <rtl/ustring.hxx>
+#include <osl/file.hxx>
+#include <osl/security.hxx>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#if ( defined UNX )
+#include <unistd.h>
+#include <pwd.h>
+#endif
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <cppunit/plugin/TestPlugInDefaultImpl.h>
+
+#define t_print printf
+
+#define BUFSIZE 1024
+const char pTestString[17] = "Sun Microsystems";
+
+OUString aLogonUser, aLogonPasswd, aFileServer, aStringForward;
+OUString strUserName, strComputerName, strHomeDirectory;
+OUString strConfigDirectory, strUserID;
+
+bool isAdmin = false;
+
+#endif // INCLUDED_SAL_QA_OSL_SECURITY_OSL_SECURITY_CONST_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/setthreadname/test-setthreadname.cxx b/sal/qa/osl/setthreadname/test-setthreadname.cxx
new file mode 100644
index 000000000..c0c884eea
--- /dev/null
+++ b/sal/qa/osl/setthreadname/test-setthreadname.cxx
@@ -0,0 +1,80 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cstdlib>
+#include <iostream>
+#include <limits>
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <osl/thread.hxx>
+
+namespace {
+
+class TestThread: public osl::Thread {
+private:
+ virtual void SAL_CALL run() override;
+public:
+ TestThread() = default;
+ TestThread(const TestThread&) = delete;
+ TestThread& operator=(const TestThread&) = delete;
+};
+
+void TestThread::run() {
+#if defined(_WIN32)
+ if (std::getenv("URE_TEST_SETTHREADNAME") != nullptr) {
+ // On Windows, setting thread names appears to only take effect when the
+ // process is being debugged, so attach a debugger now:
+ std::cout << "set: ";
+ std::cin.ignore(std::numeric_limits< int >::max(), '\n');
+ }
+#endif
+ setName("TestThread");
+ if (std::getenv("URE_TEST_SETTHREADNAME") != nullptr) {
+ // On Linux, the thread name can now be observed with "ps -L"; on
+ // Windows with the Microsoft compiler, the thread name can now be
+ // observed in a debugger.
+ std::cout << "stop: ";
+ std::cin.ignore(std::numeric_limits< int >::max(), '\n');
+ }
+}
+
+class Test: public CppUnit::TestFixture {
+private:
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+
+ void test();
+};
+
+void Test::test() {
+ TestThread t;
+ t.create();
+ t.join();
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/osl/thread/test_thread.cxx b/sal/qa/osl/thread/test_thread.cxx
new file mode 100644
index 000000000..12ddafc6d
--- /dev/null
+++ b/sal/qa/osl/thread/test_thread.cxx
@@ -0,0 +1,80 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include "osl/conditn.hxx"
+#include "osl/thread.hxx"
+#include "osl/time.h"
+#include <chrono>
+
+namespace {
+
+osl::Condition global;
+
+class Thread: public osl::Thread {
+public:
+ explicit Thread(osl::Condition & cond): m_cond(cond) {}
+
+private:
+ virtual void SAL_CALL run() {}
+
+ virtual void SAL_CALL onTerminated() {
+ m_cond.set();
+ CPPUNIT_ASSERT_EQUAL(osl::Condition::result_ok, global.wait());
+ }
+
+ osl::Condition & m_cond;
+};
+
+class Test: public CppUnit::TestFixture {
+public:
+ // Nondeterministic, best effort test that an osl::Thread can be destroyed
+ // (and in particular osl_destroyThread---indirectly---be called) before the
+ // corresponding thread has terminated:
+ void test() {
+ for (int i = 0; i < 50; ++i) {
+ osl::Condition c;
+ Thread t(c);
+ CPPUNIT_ASSERT(t.create());
+ // Make sure virtual Thread::run/onTerminated are called before
+ // Thread::~Thread:
+ CPPUNIT_ASSERT_EQUAL(osl::Condition::result_ok, c.wait());
+ }
+ // Make sure Thread::~Thread is called before each spawned thread
+ // terminates:
+ global.set();
+ // Give the spawned threads enough time to terminate:
+ osl::Thread::wait(std::chrono::seconds(20));
+ }
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/alloc/rtl_alloc.cxx b/sal/qa/rtl/alloc/rtl_alloc.cxx
new file mode 100644
index 000000000..419a3f3b0
--- /dev/null
+++ b/sal/qa/rtl/alloc/rtl_alloc.cxx
@@ -0,0 +1,211 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <rtl/alloc.h>
+#include <rtl/ustrbuf.hxx>
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include "../../../rtl/strimp.hxx"
+
+#include <memory.h>
+
+namespace rtl_alloc
+{
+
+ // small memory check routine, which return false, if there is a problem
+
+ static bool checkMemory(const char* _pMemory, sal_uInt32 _nSize, char _n)
+ {
+ bool bOk = true;
+
+ for (sal_uInt32 i=0;i<_nSize;i++)
+ {
+ if (_pMemory[i] != _n)
+ {
+ bOk = false;
+ }
+ }
+ return bOk;
+ }
+
+class Memory : public CppUnit::TestFixture
+{
+ // for normal alloc functions
+ char *m_pMemory;
+ static const sal_uInt32 m_nSizeOfMemory = 1024;
+
+public:
+ Memory()
+ : m_pMemory(nullptr)
+ {
+ }
+
+ // initialise your test code values here.
+ void setUp() override
+ {
+ m_pMemory = static_cast<char*>(rtl_allocateMemory( m_nSizeOfMemory ));
+ }
+
+ void tearDown() override
+ {
+ rtl_freeMemory(m_pMemory);
+ m_pMemory = nullptr;
+ }
+
+ void rtl_allocateMemory_001()
+ {
+ CPPUNIT_ASSERT_MESSAGE( "Can get zero memory.", m_pMemory != nullptr);
+ memset(m_pMemory, 1, m_nSizeOfMemory);
+ CPPUNIT_ASSERT_MESSAGE( "memory contains wrong value.", checkMemory(m_pMemory, m_nSizeOfMemory, 1));
+ }
+
+ void rtl_reallocateMemory_001()
+ {
+ sal_uInt32 nSize = 2 * 1024;
+ m_pMemory = static_cast<char*>(rtl_reallocateMemory(m_pMemory, nSize));
+
+ CPPUNIT_ASSERT_MESSAGE( "Can reallocate memory.", m_pMemory != nullptr);
+ memset(m_pMemory, 2, nSize);
+ CPPUNIT_ASSERT_MESSAGE( "memory contains wrong value.", checkMemory(m_pMemory, nSize, 2));
+ }
+
+ CPPUNIT_TEST_SUITE(Memory);
+ CPPUNIT_TEST(rtl_allocateMemory_001);
+ CPPUNIT_TEST(rtl_reallocateMemory_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class test
+
+class TestZeroMemory : public CppUnit::TestFixture
+{
+ // for zero functions
+ char *m_pZeroMemory;
+ static const sal_uInt32 m_nSizeOfZeroMemory = 50 * 1024 * 1024;
+
+public:
+ TestZeroMemory()
+ : m_pZeroMemory(nullptr)
+ {
+ }
+
+ // initialise your test code values here.
+ void setUp() override
+ {
+ m_pZeroMemory = static_cast<char*>(rtl_allocateZeroMemory( m_nSizeOfZeroMemory ));
+ }
+
+ void tearDown() override
+ {
+ rtl_freeZeroMemory(m_pZeroMemory, m_nSizeOfZeroMemory);
+ // LLA: no check possible, may GPF if there is something wrong.
+ // CPPUNIT_ASSERT_MESSAGE( "Can get zero memory.", pZeroMemory != NULL);
+ }
+
+ // insert your test code here.
+
+ void rtl_allocateZeroMemory_001()
+ {
+ CPPUNIT_ASSERT_MESSAGE( "Can get zero memory.", m_pZeroMemory != nullptr);
+ CPPUNIT_ASSERT_MESSAGE( "memory contains wrong value.", checkMemory(m_pZeroMemory, m_nSizeOfZeroMemory, 0));
+
+ memset(m_pZeroMemory, 3, m_nSizeOfZeroMemory);
+ CPPUNIT_ASSERT_MESSAGE( "memory contains wrong value.", checkMemory(m_pZeroMemory, m_nSizeOfZeroMemory, 3));
+ }
+
+ CPPUNIT_TEST_SUITE(TestZeroMemory);
+ CPPUNIT_TEST(rtl_allocateZeroMemory_001);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+class TestPreinit : public CppUnit::TestFixture
+{
+public:
+ TestPreinit()
+ {
+ }
+
+ // initialise your test code values here.
+ void setUp() override
+ {
+ }
+
+ void tearDown() override
+ {
+ }
+
+ // insert your test code here.
+
+ void test()
+ {
+ const char sample[] = "Hello World";
+ std::vector<OUString> aStrings;
+
+ rtl_alloc_preInit(true);
+
+ OUString aFoo("foo");
+
+ // fill some cache bits
+ for (int iter = 0; iter < 4; iter++)
+ {
+ for (int i = 1; i < 4096; i += 8)
+ {
+ OUStringBuffer aBuf(i);
+ aBuf.appendAscii(sample, (i/8) % (SAL_N_ELEMENTS(sample)-1));
+ OUString aStr = aBuf.makeStringAndClear();
+ aStrings.push_back(aStr);
+ }
+ // free some pieces to make holes
+ for (size_t i = iter; i < aStrings.size(); i += 17)
+ aStrings[i] = aFoo;
+ }
+
+ for (size_t i = 0; i < aStrings.size(); ++i)
+ {
+ CPPUNIT_ASSERT_MESSAGE( "not static before.", !(aStrings[i].pData->refCount & SAL_STRING_STATIC_FLAG) );
+ }
+
+ // should static-ize all the strings.
+ rtl_alloc_preInit(false);
+
+ for (size_t i = 0; i < aStrings.size(); ++i)
+ CPPUNIT_ASSERT_MESSAGE( "static after.", (aStrings[i].pData->refCount & SAL_STRING_STATIC_FLAG) );
+ }
+
+ void test2()
+ {
+ // should never happen but lets try it again.
+ test();
+ }
+
+ CPPUNIT_TEST_SUITE(TestPreinit);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST(test2);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_alloc::Memory);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_alloc::TestZeroMemory);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_alloc::TestPreinit);
+} // namespace rtl_alloc
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/bootstrap/expand.cxx b/sal/qa/rtl/bootstrap/expand.cxx
new file mode 100644
index 000000000..e9799c15f
--- /dev/null
+++ b/sal/qa/rtl/bootstrap/expand.cxx
@@ -0,0 +1,58 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <rtl/bootstrap.hxx>
+#include <rtl/ustring.hxx>
+
+namespace {
+
+class Test: public CppUnit::TestFixture {
+public:
+ virtual void setUp() override;
+
+private:
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testDollar);
+ CPPUNIT_TEST(testIndirectDollar);
+ CPPUNIT_TEST_SUITE_END();
+
+ void testDollar();
+
+ void testIndirectDollar();
+};
+
+void Test::setUp() {
+ rtl::Bootstrap::set("TEST", "<expanded TEST>");
+ rtl::Bootstrap::set("WITH_DOLLAR", "foo\\$TEST");
+ rtl::Bootstrap::set("INDIRECT", "$WITH_DOLLAR");
+}
+
+void Test::testDollar() {
+ OUString s("$WITH_DOLLAR");
+ rtl::Bootstrap::expandMacros(s);
+ CPPUNIT_ASSERT_EQUAL(OUString("foo$TEST"), s);
+}
+
+void Test::testIndirectDollar() {
+ OUString s("$INDIRECT");
+ rtl::Bootstrap::expandMacros(s);
+ CPPUNIT_ASSERT_EQUAL(OUString("foo$TEST"), s);
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/cipher/rtl_cipher.cxx b/sal/qa/rtl/cipher/rtl_cipher.cxx
new file mode 100644
index 000000000..1f6852184
--- /dev/null
+++ b/sal/qa/rtl/cipher/rtl_cipher.cxx
@@ -0,0 +1,600 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cstring>
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/cipher.h>
+
+namespace rtl_cipher
+{
+
+class create : public CppUnit::TestFixture
+{
+public:
+
+ void create_001()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ void create_002()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeECB);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast<rtlCipher>(nullptr), aCipher);
+ }
+ void create_003()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeCBC);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ void create_004()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeCBC);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast<rtlCipher>(nullptr), aCipher);
+ }
+ void create_005()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeStream);
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroy(aCipher);
+ }
+ void create_006()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeStream);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast<rtlCipher>(nullptr), aCipher);
+ }
+ void create_007()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeInvalid);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast<rtlCipher>(nullptr), aCipher);
+ }
+ void create_008()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeInvalid);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast<rtlCipher>(nullptr), aCipher);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(create);
+ CPPUNIT_TEST(create_001);
+ CPPUNIT_TEST(create_002);
+ CPPUNIT_TEST(create_003);
+ CPPUNIT_TEST(create_004);
+ CPPUNIT_TEST(create_005);
+ CPPUNIT_TEST(create_006);
+ CPPUNIT_TEST(create_007);
+ CPPUNIT_TEST(create_008);
+ CPPUNIT_TEST_SUITE_END();
+}; // class create
+
+class createBF : public CppUnit::TestFixture
+{
+public:
+
+ void createBF_001()
+ {
+ rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ void createBF_002()
+ {
+ rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeCBC);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ void createBF_003()
+ {
+ rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeStream);
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroy(aCipher);
+ }
+ void createBF_004()
+ {
+ rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeInvalid);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast<rtlCipher>(nullptr), aCipher);
+ // rtl_cipher_destroy(aCipher);
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(createBF);
+ CPPUNIT_TEST(createBF_001);
+ CPPUNIT_TEST(createBF_002);
+ CPPUNIT_TEST(createBF_003);
+ CPPUNIT_TEST(createBF_004);
+ CPPUNIT_TEST_SUITE_END();
+}; // class createBF
+
+class decode : public CppUnit::TestFixture
+{
+public:
+
+ void test_encode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, OString const& _sPlainTextStr)
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+ (void) _nKeyValue;
+ (void) _nArgValue;
+ (void) _sPlainTextStr;
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+
+ sal_uInt32 nKeyLen = 16;
+ sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
+ memset(pKeyBuffer, 0, nKeyLen);
+ pKeyBuffer[0] = _nKeyValue;
+
+ sal_uInt32 nArgLen = 16;
+ sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
+ memset(pArgBuffer, 0, nArgLen);
+ pArgBuffer[0] = _nArgValue;
+
+ rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError);
+
+ sal_uInt32 nPlainTextLen = 16;
+ sal_uInt8 *pPlainTextBuffer = new sal_uInt8[ nPlainTextLen ];
+ memset(pPlainTextBuffer, 0, nPlainTextLen);
+ strncpy(reinterpret_cast<char*>(pPlainTextBuffer), _sPlainTextStr.getStr(), 16);
+
+ sal_uInt32 nCipherLen = 16;
+ sal_uInt8 *pCipherBuffer = new sal_uInt8[ nCipherLen ];
+ memset(pCipherBuffer, 0, nCipherLen);
+
+ /* rtlCipherError */ aError = rtl_cipher_encode(aCipher, pPlainTextBuffer, nPlainTextLen, pCipherBuffer, nCipherLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong encode", rtl_Cipher_E_None, aError);
+
+ sal_uInt32 nPlainText2Len = 16;
+ sal_uInt8 *pPlainText2Buffer = new sal_uInt8[ nPlainText2Len ];
+ memset(pPlainText2Buffer, 0, nPlainText2Len);
+
+ /* rtlCipherError */ aError = rtl_cipher_decode(aCipher, pCipherBuffer, nCipherLen, pPlainText2Buffer, nPlainText2Len);
+ CPPUNIT_ASSERT_MESSAGE("decode should not work", aError != rtl_Cipher_E_None);
+
+ delete [] pPlainText2Buffer;
+
+ delete [] pCipherBuffer;
+ delete [] pPlainTextBuffer;
+
+ delete [] pArgBuffer;
+ delete [] pKeyBuffer;
+
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+
+ void test_encode_and_decode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, OString const& _sPlainTextStr)
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+ (void) _nKeyValue;
+ (void) _nArgValue;
+ (void) _sPlainTextStr;
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+
+ sal_uInt32 nKeyLen = 16;
+ sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
+ memset(pKeyBuffer, 0, nKeyLen);
+ pKeyBuffer[0] = _nKeyValue;
+
+ sal_uInt32 nArgLen = 16;
+ sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
+ memset(pArgBuffer, 0, nArgLen);
+ pArgBuffer[0] = _nArgValue;
+
+ rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionBoth, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError);
+
+ sal_uInt32 nPlainTextLen = 16;
+ sal_uInt8 *pPlainTextBuffer = new sal_uInt8[ nPlainTextLen ];
+ memset(pPlainTextBuffer, 0, nPlainTextLen);
+ strncpy(reinterpret_cast<char*>(pPlainTextBuffer), _sPlainTextStr.getStr(), 16);
+
+ sal_uInt32 nCipherLen = 16;
+ sal_uInt8 *pCipherBuffer = new sal_uInt8[ nCipherLen ];
+ memset(pCipherBuffer, 0, nCipherLen);
+
+ /* rtlCipherError */ aError = rtl_cipher_encode(aCipher, pPlainTextBuffer, nPlainTextLen, pCipherBuffer, nCipherLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong encode", rtl_Cipher_E_None, aError);
+
+ sal_uInt32 nPlainText2Len = 16;
+ sal_uInt8 *pPlainText2Buffer = new sal_uInt8[ nPlainText2Len ];
+ memset(pPlainText2Buffer, 0, nPlainText2Len);
+
+ /* rtlCipherError */ aError = rtl_cipher_decode(aCipher, pCipherBuffer, nCipherLen, pPlainText2Buffer, nPlainText2Len);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong decode", rtl_Cipher_E_None, aError);
+
+ sal_Int32 nCompare = memcmp(pPlainTextBuffer, pPlainText2Buffer, 16);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("compare between plain and decoded plain failed", static_cast<sal_Int32>(0), nCompare);
+
+ delete [] pPlainText2Buffer;
+
+ delete [] pCipherBuffer;
+ delete [] pPlainTextBuffer;
+
+ delete [] pArgBuffer;
+ delete [] pKeyBuffer;
+
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+
+ void decode_001()
+ {
+ test_encode_and_decode(0,0,"");
+ test_encode_and_decode(0,0,"hallo");
+ test_encode_and_decode(1,0,"B2Aahg5B");
+ test_encode_and_decode(1,2,"Longer text string");
+ }
+
+ void decode_002()
+ {
+ test_encode(0,0,"");
+ test_encode(0,0,"hallo");
+ test_encode(1,0,"B2Aahg5B");
+ test_encode(1,2,"Longer text string");
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(decode);
+ CPPUNIT_TEST(decode_001);
+ CPPUNIT_TEST(decode_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class decode
+
+class decodeBF : public CppUnit::TestFixture
+{
+public:
+
+ void decodeBF_001()
+ {
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(decodeBF);
+ CPPUNIT_TEST(decodeBF_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class decodeBF
+
+class destroy : public CppUnit::TestFixture
+{
+public:
+
+ void destroy_001()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeCBC);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(destroy);
+ CPPUNIT_TEST(destroy_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class destroy
+
+class destroyBF : public CppUnit::TestFixture
+{
+public:
+
+ void destroyBF_001()
+ {
+ rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+ rtl_cipher_destroyBF(aCipher);
+ // more proforma
+ // should not GPF
+#endif
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(destroyBF);
+ CPPUNIT_TEST(destroyBF_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class destroyBF
+
+class encode : public CppUnit::TestFixture
+{
+public:
+
+ void test_encode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, sal_uInt8 _nDataValue)
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+ (void) _nKeyValue;
+ (void) _nArgValue;
+ (void) _nDataValue;
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+
+ sal_uInt32 nKeyLen = 16;
+ sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
+ memset(pKeyBuffer, 0, nKeyLen);
+ pKeyBuffer[0] = _nKeyValue;
+
+ sal_uInt32 nArgLen = 16;
+ sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
+ memset(pArgBuffer, 0, nArgLen);
+ pArgBuffer[0] = _nArgValue;
+
+ rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError);
+
+ sal_uInt32 nDataLen = 16;
+ sal_uInt8 *pDataBuffer = new sal_uInt8[ nDataLen ];
+ memset(pDataBuffer, 0, nDataLen);
+ pDataBuffer[0] = _nDataValue;
+
+ sal_uInt32 nLen = 16;
+ sal_uInt8 *pBuffer = new sal_uInt8[ nLen ];
+ memset(pBuffer, 0, nLen);
+
+ /* rtlCipherError */ aError = rtl_cipher_encode(aCipher, pDataBuffer, nDataLen, pBuffer, nLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong encode", rtl_Cipher_E_None, aError);
+
+ delete [] pBuffer;
+ delete [] pDataBuffer;
+
+ delete [] pArgBuffer;
+ delete [] pKeyBuffer;
+
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+
+ void encode_001()
+ {
+ test_encode(0,0,0);
+ test_encode(1,0,0);
+ test_encode(0,1,0);
+ test_encode(1,1,0);
+
+ test_encode(0,0,1);
+ test_encode(1,0,1);
+ test_encode(0,1,1);
+ test_encode(1,1,1);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(encode);
+ CPPUNIT_TEST(encode_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class encode
+
+class encodeBF : public CppUnit::TestFixture
+{
+public:
+
+ void encodeBF_001()
+ {
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(encodeBF);
+ CPPUNIT_TEST(encodeBF_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class encodeBF
+
+class init : public CppUnit::TestFixture
+{
+public:
+
+ void init_001()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+
+ sal_uInt32 nKeyLen = 16;
+ sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
+ memset(pKeyBuffer, 0, nKeyLen);
+
+ sal_uInt32 nArgLen = 16;
+ sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
+ memset(pArgBuffer, 0, nArgLen);
+
+ rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError);
+
+ delete [] pArgBuffer;
+ delete [] pKeyBuffer;
+
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+
+ void init_002()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+
+ sal_uInt32 nKeyLen = 16;
+ sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
+ memset(pKeyBuffer, 0, nKeyLen);
+ pKeyBuffer[0] = 1;
+
+ sal_uInt32 nArgLen = 16;
+ sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
+ memset(pArgBuffer, 0, nArgLen);
+
+ rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError);
+
+ delete [] pArgBuffer;
+ delete [] pKeyBuffer;
+
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ void init_003()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+
+ sal_uInt32 nKeyLen = 16;
+ sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
+ memset(pKeyBuffer, 0, nKeyLen);
+
+ sal_uInt32 nArgLen = 16;
+ sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
+ memset(pArgBuffer, 0, nArgLen);
+ pArgBuffer[0] = 1;
+
+ rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError);
+
+ delete [] pArgBuffer;
+ delete [] pKeyBuffer;
+
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ void init_004()
+ {
+ rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
+#if defined LIBO_CIPHER_OPENSSL_BACKEND
+ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher);
+#else
+ CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr);
+
+ sal_uInt32 nKeyLen = 16;
+ sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
+ memset(pKeyBuffer, 0, nKeyLen);
+ pKeyBuffer[0] = 1;
+
+ sal_uInt32 nArgLen = 16;
+ sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
+ memset(pArgBuffer, 0, nArgLen);
+ pArgBuffer[0] = 1;
+
+ rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError);
+
+ delete [] pArgBuffer;
+ delete [] pKeyBuffer;
+
+ rtl_cipher_destroy(aCipher);
+#endif
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(init);
+ CPPUNIT_TEST(init_001);
+ CPPUNIT_TEST(init_002);
+ CPPUNIT_TEST(init_003);
+ CPPUNIT_TEST(init_004);
+ CPPUNIT_TEST_SUITE_END();
+}; // class init
+
+class initBF : public CppUnit::TestFixture
+{
+public:
+
+ void initBF_001()
+ {
+ // seems to be the same as init, so empty
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(initBF);
+ CPPUNIT_TEST(initBF_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class initBF
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::create);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::createBF);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::decode);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::decodeBF);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::destroy);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::destroyBF);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::encode);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::encodeBF);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::init);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::initBF);
+
+} // namespace rtl_cipher
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/crc32/rtl_crc32.cxx b/sal/qa/rtl/crc32/rtl_crc32.cxx
new file mode 100644
index 000000000..00933b589
--- /dev/null
+++ b/sal/qa/rtl/crc32/rtl_crc32.cxx
@@ -0,0 +1,154 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <rtl/crc.h>
+
+namespace rtl_CRC32
+{
+
+class test : public CppUnit::TestFixture
+{
+public:
+
+ // insert your test code here.
+ void rtl_crc32_001()
+ {
+ // this is demonstration code
+ // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1);
+
+ sal_uInt32 nCRC = 0;
+
+ char buf[] = {0};
+ int num = 0;
+
+ nCRC = rtl_crc32(nCRC, buf, num);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("empty crc buffer", static_cast<sal_uInt32>(0), nCRC);
+ }
+
+ void rtl_crc32_002()
+ {
+ sal_uInt32 nCRC = 0;
+
+ char buf[] = {0,0};
+ int num = sizeof(buf);
+
+ nCRC = rtl_crc32(nCRC, buf, num);
+
+ CPPUNIT_ASSERT_MESSAGE("buffer contain 2 empty bytes, crc is zero", nCRC != 0);
+ }
+
+ void rtl_crc32_002_1()
+ {
+ sal_uInt32 nCRC = 0;
+
+ char buf[] = {0,0,0};
+ int num = sizeof(buf);
+
+ nCRC = rtl_crc32(nCRC, buf, num);
+
+ CPPUNIT_ASSERT_MESSAGE("buffer contain 3 empty bytes, crc is zero", nCRC != 0);
+ }
+
+ /**
+ * crc32 check:
+ * Build checksum on two buffers with same size but different content,
+ * the result (crc32 checksum) must differ
+ */
+
+ void rtl_crc32_003()
+ {
+ sal_uInt32 nCRC1 = 0;
+ char buf1[] = {2};
+ int num1 = sizeof(buf1);
+
+ nCRC1 = rtl_crc32(nCRC1, buf1, num1);
+
+ sal_uInt32 nCRC2 = 0;
+ char buf2[] = {3};
+ int num2 = sizeof(buf2);
+
+ nCRC2 = rtl_crc32(nCRC2, buf2, num2);
+
+ CPPUNIT_ASSERT_MESSAGE("checksum should differ for buf1 and buf2", nCRC1 != nCRC2);
+ }
+
+ /** check if the crc32 only use as much values, as given
+ *
+ */
+ void rtl_crc32_003_1()
+ {
+ sal_uInt32 nCRC1 = 0;
+ char buf1[] = {2,1};
+ int num1 = sizeof(buf1) - 1;
+
+ nCRC1 = rtl_crc32(nCRC1, buf1, num1);
+
+ sal_uInt32 nCRC2 = 0;
+ char buf2[] = {2,2};
+ int num2 = sizeof(buf2) - 1;
+
+ nCRC2 = rtl_crc32(nCRC2, buf2, num2);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("checksum leave it's bounds", nCRC2, nCRC1);
+ }
+
+ /** check if the crc32 differ at same content in reverse order
+ *
+ */
+ void rtl_crc32_003_2()
+ {
+ sal_uInt32 nCRC1 = 0;
+ char buf1[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
+ int num1 = sizeof(buf1);
+
+ nCRC1 = rtl_crc32(nCRC1, buf1, num1);
+
+ sal_uInt32 nCRC2 = 0;
+ char buf2[] = {20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};
+ int num2 = sizeof(buf2);
+
+ nCRC2 = rtl_crc32(nCRC2, buf2, num2);
+
+ CPPUNIT_ASSERT_MESSAGE("checksum should differ", nCRC1 != nCRC2);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(test);
+ CPPUNIT_TEST(rtl_crc32_001);
+ CPPUNIT_TEST(rtl_crc32_002);
+ CPPUNIT_TEST(rtl_crc32_002_1);
+ CPPUNIT_TEST(rtl_crc32_003);
+ CPPUNIT_TEST(rtl_crc32_003_1);
+ CPPUNIT_TEST(rtl_crc32_003_2);
+ CPPUNIT_TEST_SUITE_END();
+}; // class test
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_CRC32::test);
+} // namespace rtl_CRC32
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/digest/rtl_digest.cxx b/sal/qa/rtl/digest/rtl_digest.cxx
new file mode 100644
index 000000000..6bc9070be
--- /dev/null
+++ b/sal/qa/rtl/digest/rtl_digest.cxx
@@ -0,0 +1,516 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <memory>
+
+#include <rtl/digest.h>
+#include <rtl/string.h>
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/strbuf.hxx>
+
+#include <string.h>
+
+using namespace rtl;
+
+namespace
+{
+
+const OString sSampleString = "This is a sample sentence, which we use to check some crypto functions in sal.";
+const OString sSampleString_only_one_diff = "This is a sample sentence. which we use to check some crypto functions in sal.";
+
+const rtlDigestAlgorithm constDigestAlgorithms[] =
+{
+ rtl_Digest_AlgorithmMD2,
+ rtl_Digest_AlgorithmMD5,
+ rtl_Digest_AlgorithmSHA,
+ rtl_Digest_AlgorithmSHA1,
+ rtl_Digest_AlgorithmHMAC_MD5,
+ rtl_Digest_AlgorithmHMAC_SHA1,
+};
+
+const sal_uInt32 constDigestAlgorithmLengths[] =
+{
+ RTL_DIGEST_LENGTH_MD2,
+ RTL_DIGEST_LENGTH_MD5,
+ RTL_DIGEST_LENGTH_SHA,
+ RTL_DIGEST_LENGTH_SHA1,
+ RTL_DIGEST_LENGTH_HMAC_MD5,
+ RTL_DIGEST_LENGTH_HMAC_SHA1,
+};
+
+const OString constSampleStringSums[] =
+{
+ "647ee6c9d4aa5fdd374ed9d7a156acbf",
+ "b16b903e6fc0b62ae389013ed93fe531",
+ "eab2814429b2613301c8a077b806af3680548914",
+ "2bc5bdb7506a2cdc2fd27fc8b9889343012d5008",
+ "0b1b0e1a6f2e4420326354b031063605",
+ "1998c6a556915be76451bfb587fa7c34d849936e"
+};
+
+// Create hex-value string from the digest value to keep the string size minimal
+OString createHex(const sal_uInt8* pKeyBuffer, sal_uInt32 nKeyLen)
+{
+ OStringBuffer aBuffer(nKeyLen * 2 + 1);
+ for (sal_uInt32 i = 0; i < nKeyLen; ++i)
+ {
+ sal_Int32 nValue = static_cast<sal_Int32>(pKeyBuffer[i]);
+ if (nValue < 16)
+ aBuffer.append('0');
+ aBuffer.append(nValue, 16);
+ }
+ return aBuffer.makeStringAndClear();
+}
+
+OString getDigest(const OString& aMessage, rtlDigestAlgorithm aAlgorithm)
+{
+ rtlDigest handle = rtl_digest_create(aAlgorithm);
+
+ const sal_uInt8* pData = reinterpret_cast<const sal_uInt8*>(aMessage.getStr());
+ sal_uInt32 nSize = aMessage.getLength();
+
+ rtl_digest_init(handle, pData, nSize);
+ rtl_digest_update(handle, pData, nSize);
+
+ sal_uInt32 nKeyLen = rtl_digest_queryLength(handle);
+ std::unique_ptr<sal_uInt8[]> pKeyBuffer(new sal_uInt8[nKeyLen]);
+
+ rtl_digest_get(handle, pKeyBuffer.get(), nKeyLen);
+ OString aSum = createHex(pKeyBuffer.get(), nKeyLen);
+
+ rtl_digest_destroy( handle );
+ return aSum;
+}
+
+class DigestTest : public CppUnit::TestFixture
+{
+public:
+ void testCreate()
+ {
+ for (size_t i = 0; i < SAL_N_ELEMENTS(constDigestAlgorithms); i++)
+ {
+ rtlDigest handle = rtl_digest_create( constDigestAlgorithms[i] );
+ CPPUNIT_ASSERT_MESSAGE("create digest", handle != nullptr);
+ rtl_digest_destroy( handle );
+ }
+
+ rtlDigest handle = rtl_digest_create( rtl_Digest_AlgorithmInvalid );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("create invalid digest", static_cast<rtlDigest>(nullptr), handle);
+ rtl_digest_destroy( handle );
+ }
+
+ void testQuery()
+ {
+ for (size_t i = 0; i < SAL_N_ELEMENTS(constDigestAlgorithms); i++)
+ {
+ rtlDigest handle = rtl_digest_create(constDigestAlgorithms[i]);
+ rtlDigestAlgorithm aAlgo = rtl_digest_queryAlgorithm(handle);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("query handle", aAlgo, constDigestAlgorithms[i]);
+ rtl_digest_destroy( handle );
+ }
+
+ }
+
+ void testQueryLength()
+ {
+ rtlDigest handle;
+ sal_uInt32 nAlgoLength;
+
+ for (size_t i = 0; i < SAL_N_ELEMENTS(constDigestAlgorithms); i++)
+ {
+ handle = rtl_digest_create(constDigestAlgorithms[i]);
+ nAlgoLength = rtl_digest_queryLength(handle);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("query Length", nAlgoLength, constDigestAlgorithmLengths[i]);
+ rtl_digest_destroy( handle );
+ }
+
+ handle = rtl_digest_create( rtl_Digest_AlgorithmInvalid );
+ nAlgoLength = rtl_digest_queryLength(handle);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("query length", static_cast<sal_uInt32>(0), nAlgoLength);
+ rtl_digest_destroy( handle );
+ }
+
+ void testInit()
+ {
+ rtlDigestError aError;
+ rtlDigest handle;
+
+ handle = nullptr;
+ aError = rtl_digest_init(handle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("init(NULL, 0, 0)", rtl_Digest_E_Argument, aError);
+
+ handle = rtl_digest_create( rtl_Digest_AlgorithmMD5 );
+ aError = rtl_digest_init(handle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("init(handle, 0, 0)", rtl_Digest_E_None, aError);
+ rtl_digest_destroy( handle );
+
+ for (size_t i = 0; i < SAL_N_ELEMENTS(constDigestAlgorithms); i++)
+ {
+ handle = rtl_digest_create(constDigestAlgorithms[i]);
+
+ OString aMessage = sSampleString;
+ const sal_uInt8* pData = reinterpret_cast<const sal_uInt8*>(aMessage.getStr());
+ sal_uInt32 nSize = aMessage.getLength();
+
+ aError = rtl_digest_init(handle, pData, nSize);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("init(handle, pData, nSize)", rtl_Digest_E_None, aError);
+
+ rtl_digest_update(handle, pData, nSize);
+
+ sal_uInt32 nKeyLen = rtl_digest_queryLength( handle );
+ std::unique_ptr<sal_uInt8[]> pKeyBuffer(new sal_uInt8[nKeyLen]);
+
+ rtl_digest_get( handle, pKeyBuffer.get(), nKeyLen );
+ createHex(pKeyBuffer.get(), nKeyLen);
+
+ rtl_digest_destroy( handle );
+ }
+ }
+
+ void testEqual()
+ {
+ {
+ OString aMsg1 = sSampleString;
+ OString aMsg2 = sSampleString;
+
+ OString aSum1 = getDigest(aMsg1, rtl_Digest_AlgorithmMD5);
+ OString aSum2 = getDigest(aMsg2, rtl_Digest_AlgorithmMD5);
+
+ CPPUNIT_ASSERT_MESSAGE("md5sum must have a length", aSum1.getLength() == 32 && aSum2.getLength() == 32 );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("source is the same, dest must be also the same", aSum1, aSum2);
+ }
+
+ {
+ OString aMsg1 = sSampleString;
+ OString aMsg2 = sSampleString_only_one_diff;
+
+ OString aSum1 = getDigest(aMsg1, rtl_Digest_AlgorithmMD5);
+ OString aSum2 = getDigest(aMsg2, rtl_Digest_AlgorithmMD5);
+
+ CPPUNIT_ASSERT_MESSAGE("md5sum must have a length", aSum1.getLength() == 32 && aSum2.getLength() == 32 );
+ CPPUNIT_ASSERT_MESSAGE("differ only in one char", aSum1 != aSum2);
+ }
+ }
+
+ void testCheckSum()
+ {
+ for (size_t i = 0; i < SAL_N_ELEMENTS(constDigestAlgorithms); i++)
+ {
+ OString aSum = getDigest(sSampleString, constDigestAlgorithms[i]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Checksum of sample string is wrong.", constSampleStringSums[i], aSum);
+ }
+ }
+
+ OString runCheckPBKDF2(OString& sPassword, bool bClearSalt, sal_uInt32 nCount)
+ {
+ sal_uInt32 nKeyLen = RTL_DIGEST_LENGTH_HMAC_SHA1;
+ std::unique_ptr<sal_uInt8[]> pKeyBuffer(new sal_uInt8[nKeyLen]);
+
+ memset(pKeyBuffer.get(), 0, nKeyLen);
+
+ sal_uInt8 const * pPassword = reinterpret_cast<sal_uInt8 const *>(sPassword.getStr());
+ sal_Int32 nPasswordLen = sPassword.getLength();
+
+ sal_uInt32 nSaltDataLen = RTL_DIGEST_LENGTH_HMAC_SHA1;
+ std::unique_ptr<sal_uInt8[]> pSaltData(new sal_uInt8[nSaltDataLen]);
+ memset(pSaltData.get(), 0, nSaltDataLen);
+
+ if (!bClearSalt)
+ {
+ // wilful contamination
+ pSaltData[0] = 1;
+ }
+
+ rtlDigestError aError = rtl_digest_PBKDF2(pKeyBuffer.get(), nKeyLen, pPassword, nPasswordLen, pSaltData.get(), nSaltDataLen, nCount);
+
+ CPPUNIT_ASSERT_EQUAL(rtl_Digest_E_None, aError);
+
+ OString aKey = createHex(pKeyBuffer.get(), nKeyLen);
+
+ // OString sSalt = createHex(pSaltData, nSaltDataLen);
+ // printf("Salt: %s\n", sSalt.getStr());
+
+ // CPPUNIT_ASSERT_MESSAGE("md5sum of sample string is wrong. Code changes or sample problems, please check.", aStr.equals(sSampleString_PBKDF2) );
+ return aKey;
+ }
+
+ void testPBKDF2()
+ {
+ OString aPassword = "Password";
+
+ // all permutations
+ runCheckPBKDF2(aPassword, false, 1);
+ runCheckPBKDF2(aPassword, false, 2);
+ runCheckPBKDF2(aPassword, true, 1);
+ runCheckPBKDF2(aPassword, true, 2);
+ runCheckPBKDF2(aPassword, false, 3);
+ runCheckPBKDF2(aPassword, false, 4);
+ runCheckPBKDF2(aPassword, true, 3);
+ runCheckPBKDF2(aPassword, true, 4);
+ }
+
+ void testUpdate()
+ {
+ rtlDigestError aError;
+ rtlDigest aHandle;
+
+ aHandle = nullptr;
+ aError = rtl_digest_update(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("does not handle wrong parameter", rtl_Digest_E_Argument, aError);
+
+ aHandle = nullptr;
+ aError = rtl_digest_updateMD2(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("does not handle wrong parameter", rtl_Digest_E_Argument, aError);
+
+ aError = rtl_digest_updateMD5(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("does not handle wrong parameter", rtl_Digest_E_Argument, aError);
+
+ aHandle = rtl_digest_create( rtl_Digest_AlgorithmMD2 );
+ CPPUNIT_ASSERT_MESSAGE("create with rtl_Digest_AlgorithmMD2", aHandle != nullptr);
+
+ const sal_uInt8* pData = reinterpret_cast<const sal_uInt8*>(sSampleString.getStr());
+ sal_uInt32 nSize = sSampleString.getLength();
+
+ aError = rtl_digest_updateMD2(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'pData' wrong", rtl_Digest_E_Argument, aError);
+
+ aError = rtl_digest_updateMD2(aHandle, pData, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'nSize' wrong", rtl_Digest_E_None, aError);
+
+ rtl_digest_destroyMD2(aHandle);
+
+ // use wrong Algorithm!!! This is volitional!
+ aHandle = rtl_digest_create(rtl_Digest_AlgorithmMD2);
+ CPPUNIT_ASSERT_MESSAGE("create with rtl_Digest_AlgorithmMD2", aHandle != nullptr);
+
+ aError = rtl_digest_updateMD5(aHandle, pData, nSize);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'handle' wrong", rtl_Digest_E_Algorithm, aError);
+
+ rtl_digest_destroyMD5(aHandle);
+
+ aHandle = rtl_digest_create( rtl_Digest_AlgorithmMD5 );
+ CPPUNIT_ASSERT_MESSAGE("create with rtl_Digest_AlgorithmMD5", aHandle != nullptr);
+
+ aError = rtl_digest_updateMD5(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'pData' wrong", rtl_Digest_E_Argument, aError);
+
+ aError = rtl_digest_updateMD5(aHandle, pData, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'nSize' wrong", rtl_Digest_E_None, aError);
+
+ rtl_digest_destroyMD5(aHandle);
+ }
+
+ void testGet()
+ {
+ rtlDigest aHandle;
+ rtlDigestError aError;
+
+ aHandle = nullptr;
+ aError = rtl_digest_get(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("does not handle wrong parameter", rtl_Digest_E_Argument, aError);
+
+ aHandle = nullptr;
+ aError = rtl_digest_getMD5(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("does not handle wrong parameter", rtl_Digest_E_Argument, aError);
+
+ // test with wrong algorithm
+ aHandle = rtl_digest_create(rtl_Digest_AlgorithmMD2);
+ CPPUNIT_ASSERT_MESSAGE("create with rtl_Digest_AlgorithmMD2", aHandle != nullptr);
+
+ sal_uInt32 nKeyLen = rtl_digest_queryLength(aHandle);
+ std::unique_ptr<sal_uInt8[]> pKeyBuffer(new sal_uInt8[nKeyLen]);
+
+ aError = rtl_digest_getMD5(aHandle, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle 2. parameter wrong", rtl_Digest_E_Argument, aError);
+
+ aError = rtl_digest_getMD5(aHandle, pKeyBuffer.get(), 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'handle' wrong", rtl_Digest_E_Algorithm, aError);
+
+ rtl_digest_destroyMD2(aHandle);
+
+ aHandle = rtl_digest_create(rtl_Digest_AlgorithmMD5);
+ CPPUNIT_ASSERT_MESSAGE("create with rtl_Digest_AlgorithmMD5", aHandle != nullptr);
+
+ aError = rtl_digest_getMD5(aHandle, nullptr, nKeyLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'pData' wrong", rtl_Digest_E_Argument, aError);
+
+ aError = rtl_digest_getMD5(aHandle, pKeyBuffer.get(), 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'nSize' wrong", rtl_Digest_E_BufferSize, aError);
+
+ rtl_digest_destroyMD5(aHandle);
+ }
+
+ void testSHA1SumForBiggerInputData()
+ {
+ // The test data was extracted from oox encrypted document (salt + password).
+ // First case: 16 bytes salt + 34 bytes password (12345678901234567)
+ // Second case: 16 bytes salt + 36 bytes password (123456789012345678)
+ {
+ const unsigned char aData[] = {
+ 0x37, 0x5f, 0x47, 0x7a, 0xd2, 0x13, 0xbe, 0xd2, 0x3c, 0x23, 0x33, 0x39,
+ 0x68, 0x21, 0x03, 0x6d, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00,
+ 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x30, 0x00,
+ 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00,
+ 0x37, 0x00
+ };
+
+ std::unique_ptr<sal_uInt8[]> pResult(new sal_uInt8[RTL_DIGEST_LENGTH_SHA1]);
+
+ OString sExpected = "06f460d693aecdd3b5cbe8365408eccfc570f32a";
+
+ rtl_digest_SHA1(aData, sizeof(aData), pResult.get(), RTL_DIGEST_LENGTH_SHA1);
+
+ OString sKey = createHex(pResult.get(), RTL_DIGEST_LENGTH_SHA1);
+
+ CPPUNIT_ASSERT_EQUAL(sExpected, sKey);
+ }
+
+ // tdf#114939, verify that rtl_digest_SHA1 computes broken results for certain input (which
+ // is not fixed for compatibility reasons):
+ {
+ sal_uInt8 result[RTL_DIGEST_LENGTH_SHA1];
+ rtl_digest_SHA1(
+ RTL_CONSTASCII_STRINGPARAM("1012345678901234567890123456789012345678901234567890"),
+ result, RTL_DIGEST_LENGTH_SHA1);
+ // Rather than correct "9cb1dab34448c1ea460da1f8736869c8852f212f":
+ CPPUNIT_ASSERT_EQUAL(
+ OString("90a461ee9cc69cedaeb25c2dc5cc62544ebd5241"),
+ createHex(result, RTL_DIGEST_LENGTH_SHA1));
+ }
+ }
+
+ void testMD5()
+ {
+ unsigned char const data[] = {
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ };
+ OString const expected[] = {
+ "d41d8cd98f00b204e9800998ecf8427e",
+ "cfcd208495d565ef66e7dff9f98764da",
+ "b4b147bc522828731f1a016bfa72c073",
+ "c6f057b86584942e415435ffb1fa93d4",
+ "4a7d1ed414474e4033ac29ccb8653d9b",
+ "dcddb75469b4b4875094e14561e573d8",
+ "670b14728ad9902aecba32e22fa4f6bd",
+ "29c3eea3f305d6b823f562ac4be35217",
+ "dd4b21e9ef71e1291183a46b913ae6f2",
+ "4c93008615c2d041e33ebac605d14b5b",
+ "f1b708bba17f1ce948dc979f4d7092bc",
+ "645a8aca5a5b84527c57ee2f153f1946",
+ "35b9ab5a36f3234dd26db357fd4a0dc1",
+ "4aad0d9ff11812ebdd5e376fdbef6222",
+ "c47532bbb1e2883c902071591ae1ec9b",
+ "5284047f4ffb4e04824a2fd1d1f0cd62",
+ "1e4a1b03d1b6cd8a174a826f76e009f4",
+ "0e7b9f29a828b6f953b482fc299e536b",
+ "3ea032bf79e8c116b05f4698d5a8e044",
+ "15f47c8a3e5e9685307dd65a653b8dc0",
+ "cc545187d0745132de1e9941db0ef6ce",
+ "0585e303e79acd837c3a3e2a2bec8b18",
+ "b28ccfdee4b9f39ba18b58a4f61a03d1",
+ "d018229b1183c926c10ea688350afec8",
+ "660719b4a7591769583a7c8d20c6dfa4",
+ "1e2432adacf481836265fcc62ee8f3e3",
+ "6e88e2af74c1d9d7d7d652b90d03751e",
+ "780ca685003cec1d617beaa6f346e1be",
+ "7f2e1dcfd6e2a3f5c38f31e640136ff6",
+ "1a3dee46117aeb8010cf365b8653faa8",
+ "1d0064395af3c745f6c3194e92373d7a",
+ "b52582043219f2deb2d3c9cb05d6448a",
+ "cd9e459ea708a948d5c2f5a6ca8838cf",
+ "00de800ecd7a4fb2813986c987e46d51",
+ "15336d4b38561a82bd24c9398b781aed",
+ "5fe699d3c461ab5a795505f59d5adf15",
+ "c5e0eb03cbb4bea95ce3f8f48fca77d5",
+ "355c1410373ef02fff2b03844d72c7d4",
+ "02df97da8207de2b3afa69c151ca8958",
+ "82c66dbf3e73f87ffc9564b2098d6a4f",
+ "b373e3ddc3438d7c10c76f3ad9d4c401",
+ "fac901a4a3dbc4461541731a33a31d15",
+ "f573e011b414bf3f9dd284f7dad29592",
+ "11694570cc5dda099669f2ba3660a70d",
+ "60997cc8aef7fedd9995e6b3ca89ce26",
+ "63c5fcf83c2275fe64e880dd8dfc5cd6",
+ "c7a0a100057ebbfc63ee169562026aea",
+ "42c2dec247919384edece38033458627",
+ "b505acf9fc996902b0c547a2abfc62b2",
+ "2fa7a1321d6b5fa0e04ad46785f574f3",
+ "86d2bfc0bab44eecf21e1432be7b3efc",
+ "7ca318f12a0955a3e637dc5645a2f96e",
+ "3eda02765b8fb8bb9b20c735f4537827",
+ "26dead12262c9a5c115b01e0a3c805b6",
+ "978b0444e93c5f7d714575f28a77dca1",
+ "d7fe636bd28e2ee2ba4d6c5898318699",
+ "ce992c2ad906967c63c3f9ab0c2294a9",
+ "1f3b814e9d417e9fd8750299982feb1f",
+ "1a2f42174eaa78ce6a67d75e98a59cb6",
+ "17c772c45c9a09f6e56b7228ddd161a7",
+ "5b19445b70b493c78f3bc06eb7962315",
+ "e590c24cc612bdedd522dfe23bb29b42",
+ "4d78c699a0167bc0cfce8a5c5a715c0e",
+ "5703db92acb9d45e3975822c9206453f",
+ "10eab6008d5642cf42abd2aa41f847cb",
+ };
+ rtlDigest digest = rtl_digest_createMD5();
+ for (size_t i = 0; i < sizeof(data); ++i)
+ {
+ rtl_digest_updateMD5(digest, &data, i);
+ sal_uInt8 buf[RTL_DIGEST_LENGTH_MD5];
+ rtl_digest_getMD5(digest, &buf[0], sizeof(buf));
+ OString const sResult = createHex(&buf[0], sizeof(buf));
+ CPPUNIT_ASSERT_EQUAL(expected[i], sResult);
+ }
+ rtl_digest_destroyMD5(digest);
+ }
+
+ CPPUNIT_TEST_SUITE(DigestTest);
+ CPPUNIT_TEST(testCreate);
+ CPPUNIT_TEST(testQuery);
+ CPPUNIT_TEST(testQueryLength);
+ CPPUNIT_TEST(testInit);
+ CPPUNIT_TEST(testEqual);
+ CPPUNIT_TEST(testCheckSum);
+ CPPUNIT_TEST(testPBKDF2);
+ CPPUNIT_TEST(testUpdate);
+ CPPUNIT_TEST(testGet);
+ CPPUNIT_TEST(testSHA1SumForBiggerInputData);
+ CPPUNIT_TEST(testMD5);
+
+ CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(DigestTest);
+
+} // namespace rtl_digest
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/doublelock/rtl_doublelocking.cxx b/sal/qa/rtl/doublelock/rtl_doublelocking.cxx
new file mode 100644
index 000000000..ef639423d
--- /dev/null
+++ b/sal/qa/rtl/doublelock/rtl_doublelocking.cxx
@@ -0,0 +1,182 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <iostream>
+
+#include <sal/types.h>
+
+#include <osl/thread.hxx>
+
+#include <rtl/instance.hxx>
+#include <rtl/ustring.hxx>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#ifdef _WIN32
+#if !defined WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#else
+#include <unistd.h>
+#include <time.h>
+#endif
+
+#define CONST_TEST_STRING "gregorian"
+
+namespace {
+struct Gregorian : public rtl::StaticWithInit<OUString, Gregorian> {
+ OUString operator () () {
+ return CONST_TEST_STRING;
+ }
+};
+
+/** Simple thread for testing Thread-create.
+ * Just add 1 of value 0, and after running, result is 1.
+ */
+class OGetThread : public osl::Thread
+{
+ osl::Mutex m_mutex;
+ sal_Int32 m_nOK;
+ sal_Int32 m_nFails;
+
+ OUString m_sConstStr;
+public:
+ OGetThread()
+ :m_nOK(0),
+ m_nFails(0),
+ m_sConstStr(CONST_TEST_STRING)
+ {
+ }
+
+ sal_Int32 getOK() { osl::MutexGuard g(m_mutex); return m_nOK; }
+ sal_Int32 getFails() {osl::MutexGuard g(m_mutex); return m_nFails;}
+
+protected:
+
+ /** guarded value which initialized 0
+
+ @see ThreadSafeValue
+ */
+ void SAL_CALL run() override
+ {
+ for (int i = 0; i != 5; ++i)
+ {
+ OUString aStr = Gregorian::get();
+ if (aStr == m_sConstStr)
+ {
+ osl::MutexGuard g(m_mutex);
+ m_nOK++;
+ }
+ else
+ {
+ osl::MutexGuard g(m_mutex);
+ m_nFails++;
+ }
+ }
+ }
+
+public:
+
+ virtual ~OGetThread() override
+ {
+ if (isRunning())
+ {
+ printf("error: not terminated.\n");
+ }
+ }
+};
+
+}
+
+namespace rtl_DoubleLocking
+{
+
+/** Test of the osl::Thread::create method
+ */
+
+ class getValue : public CppUnit::TestFixture
+ {
+ public:
+
+ void getValue_001()
+ {
+ OUString aStr = Gregorian::get();
+
+ CPPUNIT_ASSERT_MESSAGE(
+ "Gregorian::get() failed, wrong value expected.",
+ !aStr.isEmpty()
+ );
+ }
+
+ /** check 2 threads.
+
+ ALGORITHM:
+ Here the function should show, that 2 different threads,
+ which only increase a value, should run at the same time with same prio.
+ The test fails, if the difference between the two values is more than 5%
+ but IMHO this isn't a failure, it's only a feature of the OS.
+ */
+
+ void getValue_002()
+ {
+ // initial 5 threads with different priorities
+ OGetThread* pThread = new OGetThread();
+ OGetThread* p2Thread = new OGetThread();
+
+ //Create them and start running at the same time
+ pThread->create();
+ p2Thread->create();
+
+ pThread->join();
+ p2Thread->join();
+
+ sal_Int32 nValueOK = pThread->getOK();
+
+ sal_Int32 nValueOK2 = p2Thread->getOK();
+
+ std::cout << "Value in Thread #1 is " << nValueOK << "\n";
+ std::cout << "Value in Thread #2 is " << nValueOK2 << "\n";
+ sal_Int32 nValueFails = pThread->getFails();
+
+ sal_Int32 nValueFails2 = p2Thread->getFails();
+
+ delete pThread;
+ delete p2Thread;
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), nValueOK);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), nValueOK2);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nValueFails);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nValueFails2);
+ }
+
+ CPPUNIT_TEST_SUITE(getValue);
+ CPPUNIT_TEST(getValue_001);
+ CPPUNIT_TEST(getValue_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class create
+
+ CPPUNIT_TEST_SUITE_REGISTRATION(rtl_DoubleLocking::getValue);
+} // namespace rtl_DoubleLocking
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/locale/rtl_locale.cxx b/sal/qa/rtl/locale/rtl_locale.cxx
new file mode 100644
index 000000000..27e30db9f
--- /dev/null
+++ b/sal/qa/rtl/locale/rtl_locale.cxx
@@ -0,0 +1,280 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <rtl/locale.h>
+#include <rtl/ustring.hxx>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+namespace rtl_locale
+{
+ // default locale for test purpose
+ static void setDefaultLocale()
+ {
+ rtl_locale_setDefault(OUString("de").getStr(), OUString("DE").getStr(), /* OUString() */ OUString("hochdeutsch").getStr() );
+ }
+
+class getDefault : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp() override
+ {
+ // start message
+ rtl_locale::setDefaultLocale();
+ }
+
+ void getDefault_001()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ CPPUNIT_ASSERT_MESSAGE("locale must not null", pData != nullptr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(getDefault);
+ CPPUNIT_TEST(getDefault_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getDefault
+
+class setDefault : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp() override
+ {
+ // start message
+ rtl_locale::setDefaultLocale();
+ }
+
+ void tearDown() override
+ {
+ setDefaultLocale();
+ }
+
+ // insert your test code here.
+ void setDefault_001()
+ {
+ rtl_locale_setDefault(OUString("en").getStr(), OUString("US").getStr(), OUString().getStr());
+ rtl_Locale* pData = rtl_locale_getDefault();
+ CPPUNIT_ASSERT_MESSAGE("locale must not null", pData != nullptr);
+
+ // be sure to not GPF
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(setDefault);
+ CPPUNIT_TEST(setDefault_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class setDefault
+
+class getLanguage : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp() override
+ {
+ // start message
+ rtl_locale::setDefaultLocale();
+ }
+
+ // insert your test code here.
+ void getLanguage_001()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ OUString suLanguage = pData->Language;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale language must be 'de'", OUString("de"), suLanguage );
+ }
+ void getLanguage_002()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ OUString suLanguage(rtl_locale_getLanguage(pData), SAL_NO_ACQUIRE);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale language must be 'de'", OUString("de"), suLanguage );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(getLanguage);
+ CPPUNIT_TEST(getLanguage_001);
+ CPPUNIT_TEST(getLanguage_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getLanguage
+
+class getCountry : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp() override
+ {
+ // start message
+ rtl_locale::setDefaultLocale();
+ }
+
+ // insert your test code here.
+ void getCountry_001()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ OUString suCountry = pData->Country;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale country must be 'DE'", OUString("DE"), suCountry );
+ }
+ void getCountry_002()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ OUString suCountry(rtl_locale_getCountry(pData), SAL_NO_ACQUIRE);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale country must be 'DE'", OUString("DE"), suCountry );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(getCountry);
+ CPPUNIT_TEST(getCountry_001);
+ CPPUNIT_TEST(getCountry_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getCountry
+
+class getVariant : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp() override
+ {
+ // start message
+ rtl_locale::setDefaultLocale();
+ }
+
+ // insert your test code here.
+ void getVariant_001()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ OUString suVariant = pData->Variant;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale variant must be 'hochdeutsch'", OUString("hochdeutsch"), suVariant );
+ }
+ void getVariant_002()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ OUString suVariant(rtl_locale_getVariant(pData), SAL_NO_ACQUIRE);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale variant must be 'hochdeutsch'", OUString("hochdeutsch"), suVariant );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(getVariant);
+ CPPUNIT_TEST(getVariant_001);
+ CPPUNIT_TEST(getVariant_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getVariant
+
+class hashCode : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp() override
+ {
+ // start message
+ rtl_locale::setDefaultLocale();
+ }
+
+ // insert your test code here.
+ void hashCode_001()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ sal_Int32 nHashCode = pData->HashCode;
+ CPPUNIT_ASSERT_MESSAGE("locale hashcode must be 3831", nHashCode != 0);
+ }
+ void hashCode_002()
+ {
+ rtl_Locale* pData = rtl_locale_getDefault();
+ sal_Int32 nHashCode = rtl_locale_hashCode(pData);
+ CPPUNIT_ASSERT_MESSAGE("locale hashcode must be 3831", nHashCode != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(hashCode);
+ CPPUNIT_TEST(hashCode_001);
+ CPPUNIT_TEST(hashCode_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class hashCode
+
+class equals : public CppUnit::TestFixture
+{
+public:
+ // initialise your test code values here.
+ void setUp() override
+ {
+ // start message
+ rtl_locale::setDefaultLocale();
+ }
+
+ // insert your test code here.
+ void equals_001()
+ {
+ rtl_Locale* pData1 = rtl_locale_register(OUString("en").getStr(), OUString("US").getStr(), OUString().getStr());
+ rtl_Locale* pData2 = rtl_locale_register(OUString("en").getStr(), OUString("US").getStr(), OUString().getStr());
+
+ bool bLocaleAreEqual = (pData1 == pData2);
+
+ CPPUNIT_ASSERT_MESSAGE("check operator ==()", bLocaleAreEqual);
+ }
+
+ void equals_002()
+ {
+ rtl_Locale* pData1 = rtl_locale_register(OUString("en").getStr(), OUString("US").getStr(), OUString().getStr());
+ rtl_Locale* pData2 = rtl_locale_register(OUString("en").getStr(), OUString("US").getStr(), OUString().getStr());
+
+ sal_Int32 nEqual = rtl_locale_equals(pData1, pData2);
+ CPPUNIT_ASSERT(nEqual != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(equals);
+ CPPUNIT_TEST(equals_001);
+ CPPUNIT_TEST(equals_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class equals
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::getDefault);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::setDefault);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::getLanguage);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::getCountry);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::getVariant);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::hashCode);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::equals);
+} // namespace rtl_locale
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/math/test-rtl-math.cxx b/sal/qa/rtl/math/test-rtl-math.cxx
new file mode 100644
index 000000000..4843d66c2
--- /dev/null
+++ b/sal/qa/rtl/math/test-rtl-math.cxx
@@ -0,0 +1,527 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <rtl/math.hxx>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+#include <limits>
+
+CPPUNIT_NS_BEGIN
+
+template<> struct assertion_traits<rtl_math_ConversionStatus>
+{
+ static bool equal( const rtl_math_ConversionStatus& x, const rtl_math_ConversionStatus& y )
+ {
+ return x == y;
+ }
+
+ static std::string toString( const rtl_math_ConversionStatus& x )
+ {
+ OStringStream ost;
+ ost << static_cast<unsigned int>(x);
+ return ost.str();
+ }
+};
+
+CPPUNIT_NS_END
+
+namespace {
+
+class Test: public CppUnit::TestFixture {
+public:
+ void test_stringToDouble_good() {
+ rtl_math_ConversionStatus status;
+ sal_Int32 end;
+ double res = rtl::math::stringToDouble(
+ OUString(" +1.E01foo"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(RTL_CONSTASCII_LENGTH(" +1.E01"), end);
+ CPPUNIT_ASSERT_EQUAL(10.0, res);
+
+ res = rtl::math::stringToDouble(
+ OUString("NaN"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), end);
+ CPPUNIT_ASSERT(std::isnan(res));
+
+ res = rtl::math::stringToDouble(
+ OUString("NaN1.23"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), end);
+ CPPUNIT_ASSERT(std::isnan(res));
+
+ res = rtl::math::stringToDouble(
+ OUString("INF"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_OutOfRange, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), end);
+ CPPUNIT_ASSERT(std::isinf(res));
+
+ res = rtl::math::stringToDouble(
+ OUString("INF1.23"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_OutOfRange, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), end);
+ CPPUNIT_ASSERT(std::isinf(res));
+
+ res = rtl::math::stringToDouble(
+ OUString(".5"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), end);
+ CPPUNIT_ASSERT_EQUAL(0.5, res);
+
+ res = rtl::math::stringToDouble(
+ OUString("5."),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), end);
+ CPPUNIT_ASSERT_EQUAL(5.0, res);
+
+ // Leading 0 and group separator.
+ res = rtl::math::stringToDouble(
+ OUString("0,123"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), end);
+ CPPUNIT_ASSERT_EQUAL(123.0, res);
+
+ // Leading 0 and two consecutive group separators are none.
+ res = rtl::math::stringToDouble(
+ OUString("0,,1"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ // Leading 0 and group separator at end is none.
+ res = rtl::math::stringToDouble(
+ OUString("0,"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ // Leading 0 and group separator before non-digit is none.
+ res = rtl::math::stringToDouble(
+ OUString("0,x"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ // Trailing group separator is none.
+ res = rtl::math::stringToDouble(
+ OUString("1,234,"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), end);
+ CPPUNIT_ASSERT_EQUAL(1234.0, res);
+
+ // Group separator followed by non-digit is none.
+ res = rtl::math::stringToDouble(
+ OUString("1,234,x"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), end);
+ CPPUNIT_ASSERT_EQUAL(1234.0, res);
+
+ // Check that the value is the nearest double-precision representation of the decimal 0.0042
+ // (it was 0.0042000000000000006 instead of 0.0041999999999999997)
+ res = rtl::math::stringToDouble(OUString("0,0042"), ',', ' ', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(0.0042, res);
+
+ // "- 1" is nothing
+ res = rtl::math::stringToDouble(OUString("- 1"), '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ // "-1E+E" : no exponent
+ res = rtl::math::stringToDouble(OUString("-1E+E"), '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), end);
+ CPPUNIT_ASSERT_EQUAL(-1.0, res);
+
+ // "-0" is negative zero
+ res = rtl::math::stringToDouble(OUString("-0"), '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+ CPPUNIT_ASSERT(std::signbit(res));
+
+ // Compensating: "0.001E311" is 1E308, not overflow/inf
+ res = rtl::math::stringToDouble(OUString("0.001E311"), '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(9), end);
+ CPPUNIT_ASSERT_EQUAL(1E308, res);
+
+ res = rtl::math::stringToDouble(OUString("1E8589934590"), '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_OutOfRange, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(12), end);
+ CPPUNIT_ASSERT_EQUAL(std::numeric_limits<double>::infinity(), res);
+ }
+
+ void test_stringToDouble_bad() {
+ rtl_math_ConversionStatus status;
+ sal_Int32 end;
+ double res = rtl::math::stringToDouble(
+ OUString(" +Efoo"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ res = rtl::math::stringToDouble(
+ OUString("."),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ res = rtl::math::stringToDouble(
+ OUString(" +.Efoo"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ res = rtl::math::stringToDouble(
+ OUString(" +,.Efoo"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+
+ // Leading group separator is none.
+ res = rtl::math::stringToDouble(
+ OUString(",1234"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+ }
+
+ void test_stringToDouble_exponent_without_digit() {
+ rtl_math_ConversionStatus status;
+ sal_Int32 end;
+ double res = rtl::math::stringToDouble(
+ OUString("1e"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(RTL_CONSTASCII_LENGTH("1"), end);
+ CPPUNIT_ASSERT_EQUAL(1.0, res);
+ res = rtl::math::stringToDouble(
+ OUString("0e"),
+ '.', ',', &status, &end);
+ CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status);
+ CPPUNIT_ASSERT_EQUAL(RTL_CONSTASCII_LENGTH("1"), end);
+ CPPUNIT_ASSERT_EQUAL(0.0, res);
+ }
+
+ void test_doubleToString() {
+ double fVal = 999999999999999.0;
+ sal_Int32 aGroups[3] = { 3, 2, 0 };
+ OUString aRes( rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ rtl_math_DecimalPlaces_Max,
+ '.', aGroups, ',', true));
+ CPPUNIT_ASSERT_EQUAL( OUString("99,99,99,99,99,99,999"), aRes);
+
+ fVal = 949.0;
+ aRes = rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ -2, // round before decimals
+ '.', aGroups, ',', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("900"), aRes);
+
+ fVal = 950.0;
+ aRes = rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ -2, // round before decimals
+ '.', aGroups, ',', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1,000"), aRes);
+
+ fVal = 4503599627370495.0;
+ aRes = rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ rtl_math_DecimalPlaces_Max, '.');
+ CPPUNIT_ASSERT_EQUAL( OUString("4503599627370495"), aRes);
+
+ fVal = 4503599627370496.0;
+ aRes = rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ 2, '.');
+ CPPUNIT_ASSERT_EQUAL( OUString("4503599627370496.00"), aRes);
+
+ fVal = 9007199254740991.0; // (2^53)-1
+ aRes = rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ rtl_math_DecimalPlaces_Max, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("9007199254740991"), aRes);
+
+ fVal = 9007199254740992.0; // (2^53), algorithm switch
+ aRes = rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ rtl_math_DecimalPlaces_Max, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("9.00719925474099E+015"), aRes);
+
+ fVal = 9007199254740993.0; // (2^53)+1 would be but is 9007199254740992
+ aRes = rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic,
+ rtl_math_DecimalPlaces_Max, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("9.00719925474099E+015"), aRes);
+
+ // Test rtl_math_StringFormat_G
+
+ fVal = 0.001234567;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 3, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("0.00123"), aRes);
+
+ fVal = 123.4567;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 3, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("123"), aRes);
+
+ fVal = 123.4567;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 4, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("123.5"), aRes);
+
+ fVal = 99.6;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 3, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("99.6"), aRes);
+
+ // Expected could be 1E+03 (as 999.6 rounded to 3 significant digits
+ // results in 1000 with an exponent equal to significant digits).
+ // Currently we don't and output 1000 instead, negligible.
+ fVal = 999.6;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 3, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1000"), aRes);
+
+ fVal = 9999.6;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 3, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1E+004"), aRes);
+
+ fVal = 12345.6789;
+ aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, -3, '.', true);
+ CPPUNIT_ASSERT_EQUAL( OUString("1.2E+004"), aRes);
+ }
+
+ void test_approx() {
+ // (2^53)-1 , (2^53)-3
+ CPPUNIT_ASSERT_EQUAL( false, rtl::math::approxEqual( 9007199254740991.0, 9007199254740989.0));
+ // (2^53)-1 , (2^53)-2
+ CPPUNIT_ASSERT_EQUAL( false, rtl::math::approxEqual( 9007199254740991.0, 9007199254740990.0));
+ // Note: the following are internally represented as 900719925474099.12
+ // and 900719925474098.88 and the difference is 0.25 ...
+ CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 900719925474099.1, 900719925474098.9));
+ CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 72.944444444444443, 72.9444444444444));
+ CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 359650.27322404372, 359650.27322404401));
+ CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 5.3590326375710063e+238, 5.3590326375710109e+238));
+ CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 7.4124095894894475e+158, 7.4124095894894514e+158));
+ CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 1.2905754687023132e+79, 1.2905754687023098e+79));
+ CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 3.5612905090455637e+38, 3.5612905090455599e+38));
+ // 0.3 - 0.2 - 0.1 == 0.0
+ CPPUNIT_ASSERT_EQUAL( 0.0, rtl::math::approxSub( rtl::math::approxSub( 0.3, 0.2), 0.1));
+ // ((2^53)-1) - ((2^53)-2) == 1.0
+ CPPUNIT_ASSERT_EQUAL( 1.0, rtl::math::approxSub( 9007199254740991.0, 9007199254740990.0));
+ // (3^31) - ((3^31)-1) == 1.0
+ CPPUNIT_ASSERT_EQUAL( 1.0, rtl::math::approxSub( 617673396283947.0, 617673396283946.0));
+ }
+
+ void test_erf() {
+ double x, res;
+ x = 0.0;
+ res = rtl::math::erf(x);
+ CPPUNIT_ASSERT_EQUAL(0.0,res);
+ rtl::math::setInf( &x, false);
+ res = rtl::math::erf(x);
+ CPPUNIT_ASSERT_EQUAL(1.0,res);
+ rtl::math::setInf( &x, true);
+ res = rtl::math::erf(x);
+ CPPUNIT_ASSERT_EQUAL(-1.0,res);
+ rtl::math::setNan( &x);
+ res = rtl::math::erf(x);
+ CPPUNIT_ASSERT(std::isnan(res));
+ x = 3.0;
+ res = rtl::math::erf(-x);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL( -rtl::math::erf(x), res, 1E-12);
+ }
+
+ void test_erfc() {
+ double x, res;
+ x = 0.0;
+ res = rtl::math::erfc(x);
+ CPPUNIT_ASSERT_EQUAL(1.0,res);
+ rtl::math::setInf( &x, false);
+ res = rtl::math::erfc(x);
+ CPPUNIT_ASSERT_EQUAL(0.0,res);
+ rtl::math::setInf( &x, true);
+ res = rtl::math::erfc(x);
+ CPPUNIT_ASSERT_EQUAL(2.0,res);
+ rtl::math::setNan( &x);
+ res = rtl::math::erfc(x);
+ CPPUNIT_ASSERT(std::isnan(res));
+ x = 3.0;
+ res = rtl::math::erfc(-x);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL( 2.0 - rtl::math::erfc(x), res, 1E-12);
+ }
+
+ void test_expm1() {
+ double x, res;
+ x = 0.0;
+ res = rtl::math::expm1(x);
+ CPPUNIT_ASSERT_EQUAL(0.0,res);
+ x = -0.0;
+ res = rtl::math::expm1(x);
+ CPPUNIT_ASSERT_EQUAL(-0.0,res);
+ CPPUNIT_ASSERT(std::signbit(res));
+ rtl::math::setInf( &x, false);
+ res = rtl::math::expm1(x);
+ CPPUNIT_ASSERT_EQUAL(true, std::isinf(res) && !std::signbit(res));
+ rtl::math::setInf( &x, true);
+ res = rtl::math::expm1(x);
+ CPPUNIT_ASSERT_EQUAL(-1.0,res);
+ rtl::math::setNan( &x);
+ res = rtl::math::expm1(x);
+ CPPUNIT_ASSERT(std::isnan(res));
+ }
+
+ void test_log1p() {
+ double x, res;
+ x = 0.0;
+ res = rtl::math::log1p(x);
+ CPPUNIT_ASSERT_EQUAL(0.0,res);
+ x = -0.0;
+ res = rtl::math::log1p(x);
+ CPPUNIT_ASSERT_EQUAL(-0.0,res);
+ CPPUNIT_ASSERT(std::signbit(res));
+ rtl::math::setInf( &x, false);
+ res = rtl::math::log1p(x);
+ CPPUNIT_ASSERT_EQUAL(true, std::isinf(res) && !std::signbit(res));
+ x = -1.0;
+ res = rtl::math::log1p(x);
+ CPPUNIT_ASSERT_EQUAL(true, std::isinf(res) && std::signbit(res));
+ x = -1.1;
+ res = rtl::math::log1p(x);
+ CPPUNIT_ASSERT(std::isnan(res));
+ rtl::math::setInf( &x, true);
+ res = rtl::math::log1p(x);
+ CPPUNIT_ASSERT(std::isnan(res));
+ rtl::math::setNan( &x);
+ res = rtl::math::log1p(x);
+ CPPUNIT_ASSERT(std::isnan(res));
+ }
+
+ void test_acosh() {
+ double res;
+
+ res = rtl::math::acosh(-1.0); // NaN
+ CPPUNIT_ASSERT(std::isnan(res));
+
+ res = rtl::math::acosh(0.0); // NaN
+ CPPUNIT_ASSERT(std::isnan(res));
+
+ res = rtl::math::acosh(0.5); // NaN
+ CPPUNIT_ASSERT(std::isnan(res));
+
+ CPPUNIT_ASSERT_EQUAL(0.0, rtl::math::acosh(1.0));
+
+ res = rtl::math::acosh(std::numeric_limits<double>::infinity()); // +Inf
+ CPPUNIT_ASSERT(!std::signbit(res));
+ CPPUNIT_ASSERT(std::isinf(res));
+
+ // #i97605
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(692.56728736744176, rtl::math::acosh(3e+300), 1e-15);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(0.014142017775252324, rtl::math::acosh(1.0001), 1e-15);
+ }
+
+ void test_asinh() {
+ double res;
+
+ res = rtl::math::asinh(-std::numeric_limits<double>::infinity()); // -Inf
+ CPPUNIT_ASSERT(std::signbit(res));
+ CPPUNIT_ASSERT(std::isinf(res));
+
+ CPPUNIT_ASSERT_EQUAL(0.0, rtl::math::asinh(0.0));
+
+ res = rtl::math::asinh(std::numeric_limits<double>::infinity()); // +Inf
+ CPPUNIT_ASSERT(!std::signbit(res));
+ CPPUNIT_ASSERT(std::isinf(res));
+
+ // #i97605
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(691.67568924815798, rtl::math::asinh(1.23e+300), 1e-15);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0350378961923076, rtl::math::asinh(1.23), 1e-16);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.23e-300, rtl::math::asinh(1.23e-300), 1e-303);
+
+ // asinh is an odd function
+ CPPUNIT_ASSERT_EQUAL(-rtl::math::asinh(1.23e+300), rtl::math::asinh(-1.23e+300));
+ CPPUNIT_ASSERT_EQUAL(-rtl::math::asinh(1.23), rtl::math::asinh(-1.23));
+ CPPUNIT_ASSERT_EQUAL(-rtl::math::asinh(1.23e-300), rtl::math::asinh(-1.23e-300));
+ }
+
+ void test_atanh() {
+ double res;
+
+ res = rtl::math::atanh(-2.0); // NaN
+ CPPUNIT_ASSERT(std::isnan(res));
+
+ res = rtl::math::atanh(-1.0); // -Inf
+ CPPUNIT_ASSERT(std::signbit(res));
+ CPPUNIT_ASSERT(std::isinf(res));
+
+ CPPUNIT_ASSERT_EQUAL(0.0, rtl::math::atanh(0.0));
+
+ res = rtl::math::atanh(1.0); // +Inf
+ CPPUNIT_ASSERT(!std::signbit(res));
+ CPPUNIT_ASSERT(std::isinf(res));
+
+ res = rtl::math::atanh(2.0); // NaN
+ CPPUNIT_ASSERT(std::isnan(res));
+ }
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(test_stringToDouble_good);
+ CPPUNIT_TEST(test_stringToDouble_bad);
+ CPPUNIT_TEST(test_stringToDouble_exponent_without_digit);
+ CPPUNIT_TEST(test_doubleToString);
+ CPPUNIT_TEST(test_erf);
+ CPPUNIT_TEST(test_erfc);
+ CPPUNIT_TEST(test_expm1);
+ CPPUNIT_TEST(test_log1p);
+ CPPUNIT_TEST(test_approx);
+ CPPUNIT_TEST(test_acosh);
+ CPPUNIT_TEST(test_asinh);
+ CPPUNIT_TEST(test_atanh);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/ostring/rtl_OString2.cxx b/sal/qa/rtl/ostring/rtl_OString2.cxx
new file mode 100644
index 000000000..204475084
--- /dev/null
+++ b/sal/qa/rtl/ostring/rtl_OString2.cxx
@@ -0,0 +1,508 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <rtl/string.hxx>
+
+#include "valueequal.hxx"
+
+namespace rtl_OString
+{
+
+class valueOf : public CppUnit::TestFixture
+{
+ void valueOf_float_test_impl(float _nValue)
+ {
+ OString sValue;
+ sValue = OString::valueOf( _nValue );
+ printf("nFloat := %.9f sValue := %s\n", _nValue, sValue.getStr());
+
+ float nValueATOF = static_cast<float>(atof( sValue.getStr() ));
+
+ bool bEqualResult = is_float_equal(_nValue, nValueATOF);
+ CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult == true);
+ }
+
+ void valueOf_float_test(float _nValue)
+ {
+ valueOf_float_test_impl(_nValue);
+
+ // test also the negative part.
+ float nNegativeValue = -_nValue;
+ valueOf_float_test_impl(nNegativeValue);
+ }
+
+public:
+ // insert your test code here.
+ void valueOf_float_test_001()
+ {
+ // this is demonstration code
+ // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1);
+ float nValue = 3.0f;
+ valueOf_float_test(nValue);
+ }
+
+ void valueOf_float_test_002()
+ {
+ float nValue = 3.5f;
+ valueOf_float_test(nValue);
+ }
+
+ void valueOf_float_test_003()
+ {
+ float nValue = 3.0625f;
+ valueOf_float_test(nValue);
+ }
+
+ void valueOf_float_test_004()
+ {
+ float nValue = 3.502525f;
+ valueOf_float_test(nValue);
+ }
+
+ void valueOf_float_test_005()
+ {
+ float nValue = 3.141592f;
+ valueOf_float_test(nValue);
+ }
+
+ void valueOf_float_test_006()
+ {
+ float nValue = 3.5025255f;
+ valueOf_float_test(nValue);
+ }
+
+ void valueOf_float_test_007()
+ {
+ float nValue = 3.0039062f;
+ valueOf_float_test(nValue);
+ }
+
+private:
+
+ void valueOf_double_test_impl(double _nValue)
+ {
+ OString sValue;
+ sValue = OString::valueOf( _nValue );
+ printf("nDouble := %.20f sValue := %s\n", _nValue, sValue.getStr());
+
+ double nValueATOF = atof( sValue.getStr() );
+
+ bool bEqualResult = is_double_equal(_nValue, nValueATOF);
+ CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult == true);
+ }
+
+ void valueOf_double_test(double _nValue)
+ {
+ valueOf_double_test_impl(_nValue);
+
+ // test also the negative part.
+ double nNegativeValue = -_nValue;
+ valueOf_double_test_impl(nNegativeValue);
+ }
+public:
+
+ // valueOf double
+ void valueOf_double_test_001()
+ {
+ double nValue = 3.0;
+ valueOf_double_test(nValue);
+ }
+ void valueOf_double_test_002()
+ {
+ double nValue = 3.5;
+ valueOf_double_test(nValue);
+ }
+ void valueOf_double_test_003()
+ {
+ double nValue = 3.0625;
+ valueOf_double_test(nValue);
+ }
+ void valueOf_double_test_004()
+ {
+ double nValue = 3.1415926535;
+ valueOf_double_test(nValue);
+ }
+ void valueOf_double_test_005()
+ {
+ double nValue = 3.141592653589793;
+ valueOf_double_test(nValue);
+ }
+ void valueOf_double_test_006()
+ {
+ double nValue = 3.1415926535897932;
+ valueOf_double_test(nValue);
+ }
+ void valueOf_double_test_007()
+ {
+ double nValue = 3.14159265358979323;
+ valueOf_double_test(nValue);
+ }
+ void valueOf_double_test_008()
+ {
+ double nValue = 3.141592653589793238462643;
+ valueOf_double_test(nValue);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(valueOf);
+ CPPUNIT_TEST(valueOf_float_test_001);
+ CPPUNIT_TEST(valueOf_float_test_002);
+ CPPUNIT_TEST(valueOf_float_test_003);
+ CPPUNIT_TEST(valueOf_float_test_004);
+ CPPUNIT_TEST(valueOf_float_test_005);
+ CPPUNIT_TEST(valueOf_float_test_006);
+ CPPUNIT_TEST(valueOf_float_test_007);
+
+ CPPUNIT_TEST(valueOf_double_test_001);
+ CPPUNIT_TEST(valueOf_double_test_002);
+ CPPUNIT_TEST(valueOf_double_test_003);
+ CPPUNIT_TEST(valueOf_double_test_004);
+ CPPUNIT_TEST(valueOf_double_test_005);
+ CPPUNIT_TEST(valueOf_double_test_006);
+ CPPUNIT_TEST(valueOf_double_test_007);
+ CPPUNIT_TEST(valueOf_double_test_008);
+ CPPUNIT_TEST_SUITE_END();
+}; // class valueOf
+
+// - toDouble (tests)
+
+class toDouble : public CppUnit::TestFixture
+{
+
+public:
+
+ toDouble()
+ {
+ // testPrecision a;
+ }
+
+ void toDouble_test_impl(OString const& _sValue)
+ {
+ double nValueATOF = atof( _sValue.getStr() );
+
+ // OUString suValue = OUString::createFromAscii( _sValue.getStr() );
+ double nValueToDouble = _sValue.toDouble();
+
+ bool bEqualResult = is_double_equal(nValueToDouble, nValueATOF);
+ CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult == true);
+ }
+
+ void toDouble_test(OString const& _sValue)
+ {
+ toDouble_test_impl(_sValue);
+
+ // test also the negative part.
+ OString sNegativValue("-");
+ sNegativValue += _sValue;
+ toDouble_test_impl(sNegativValue);
+ }
+
+ // insert your test code here.
+ void toDouble_selftest()
+ {
+ printf("Start selftest:\n");
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.01) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.0001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.00001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.000001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.0000001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.00000001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.000000001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.0000000001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.00000000001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.000000000001) == false);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.0000000000001) == false);
+ // we check til 14 values after comma
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.00000000000001) == true);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.000000000000001) == true);
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.0000000000000001) == true);
+ printf("Selftest done.\n");
+ }
+
+ void toDouble_test_3()
+ {
+ OString sValue("3");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_3_5()
+ {
+ OString sValue("3.5");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_3_0625()
+ {
+ OString sValue("3.0625");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_pi()
+ {
+ // value from http://www.angio.net/pi/digits/50.txt
+ OString sValue("3.141592653589793238462643383279502884197169399375");
+ toDouble_test(sValue);
+ }
+
+ void toDouble_test_1()
+ {
+ OString sValue("1");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_10()
+ {
+ OString sValue("10");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_100()
+ {
+ OString sValue("100");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_1000()
+ {
+ OString sValue("1000");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_10000()
+ {
+ OString sValue("10000");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_1e99()
+ {
+ OString sValue("1e99");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_1e_n99()
+ {
+ OString sValue("1e-99");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_1e308()
+ {
+ OString sValue("1e308");
+ toDouble_test(sValue);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toDouble);
+ CPPUNIT_TEST(toDouble_selftest);
+
+ CPPUNIT_TEST(toDouble_test_3);
+ CPPUNIT_TEST(toDouble_test_3_5);
+ CPPUNIT_TEST(toDouble_test_3_0625);
+ CPPUNIT_TEST(toDouble_test_pi);
+ CPPUNIT_TEST(toDouble_test_1);
+ CPPUNIT_TEST(toDouble_test_10);
+ CPPUNIT_TEST(toDouble_test_100);
+ CPPUNIT_TEST(toDouble_test_1000);
+ CPPUNIT_TEST(toDouble_test_10000);
+ CPPUNIT_TEST(toDouble_test_1e99);
+ CPPUNIT_TEST(toDouble_test_1e_n99);
+ CPPUNIT_TEST(toDouble_test_1e308);
+ CPPUNIT_TEST_SUITE_END();
+}; // class toDouble
+
+// - getToken (tests)
+
+class getToken : public CppUnit::TestFixture
+{
+
+public:
+ void getToken_000()
+ {
+ OString sTokenStr;
+
+ sal_Int32 nIndex = 0;
+ do
+ {
+ OString sToken = sTokenStr.getToken( 0, ';', nIndex );
+ }
+ while ( nIndex >= 0 );
+ // printf("Index %d\n", nIndex);
+ // should not GPF
+ }
+
+ void getToken_001()
+ {
+ OString sTokenStr = "a;b";
+
+ sal_Int32 nIndex = 0;
+
+ OString sToken = sTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be a 'a'", sToken.equals("a") == sal_True);
+
+ /* OString */ sToken = sTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be a 'b'", sToken.equals("b") == sal_True);
+ CPPUNIT_ASSERT_MESSAGE("index should be negative", nIndex == -1);
+ }
+
+ void getToken_002()
+ {
+ OString sTokenStr = "a;b.c";
+
+ sal_Int32 nIndex = 0;
+
+ OString sToken = sTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be a 'a'", sToken.equals("a") == sal_True);
+
+ /* OString */ sToken = sTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be a 'b'", sToken.equals("b") == sal_True);
+
+ /* OString */ sToken = sTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be a 'c'", sToken.equals("c") == sal_True);
+ CPPUNIT_ASSERT_MESSAGE("index should be negative", nIndex == -1);
+ }
+
+ void getToken_003()
+ {
+ OString sTokenStr = "a;;b";
+
+ sal_Int32 nIndex = 0;
+
+ OString sToken = sTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be a 'a'", sToken.equals("a") == sal_True);
+
+ /* OString */ sToken = sTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be empty", sToken.isEmpty());
+
+ /* OString */ sToken = sTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be a 'b'", sToken.equals("b") == sal_True);
+ CPPUNIT_ASSERT_MESSAGE("index should be negative", nIndex == -1);
+ }
+
+ void getToken_004()
+ {
+ OString sTokenStr = "longer.then.ever.";
+
+ sal_Int32 nIndex = 0;
+
+ OString sToken = sTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be 'longer'", sToken.equals("longer") == sal_True);
+
+ /* OString */ sToken = sTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be 'then'", sToken.equals("then") == sal_True);
+
+ /* OString */ sToken = sTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be 'ever'", sToken.equals("ever") == sal_True);
+
+ /* OString */ sToken = sTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be empty", sToken.isEmpty());
+
+ CPPUNIT_ASSERT_MESSAGE("index should be negative", nIndex == -1);
+ }
+
+ CPPUNIT_TEST_SUITE(getToken);
+ CPPUNIT_TEST(getToken_000);
+ CPPUNIT_TEST(getToken_001);
+ CPPUNIT_TEST(getToken_002);
+ CPPUNIT_TEST(getToken_003);
+ CPPUNIT_TEST(getToken_004);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getToken
+
+// testing the method replaceAt( sal_Int32 index, sal_Int32 count,
+// const OString& newStr )
+
+// Developer note: Mindy Liu, 2004-04-23
+// stolen from sal/qa/rtl_strings/rtl_OString.cxx
+
+class replaceAt : public CppUnit::TestFixture
+{
+
+public:
+ sal_Bool check_replaceAt( const OString* expVal, const OString* input,
+ const OString* newStr, sal_Int32 index, sal_Int32 count)
+ {
+ OString aStr1;
+ aStr1= input->replaceAt( index, count, *newStr );
+
+ printf("the result OString is %s#\n", aStr1.getStr() );
+
+ sal_Bool bRes = ( expVal->compareTo(aStr1) == 0 );
+ return bRes;
+ }
+
+ void replaceAt_001()
+ {
+ sal_Bool bRes = check_replaceAt(new OString("Java@Sun"),
+ new OString("Sun java"), new OString("Java@Sun"), 0, 8 );
+ CPPUNIT_ASSERT_MESSAGE("string differs, replace whole string", bRes == sal_True);
+ }
+
+ void replaceAt_002()
+ {
+ sal_Bool bRes = check_replaceAt(new OString("Sun Java desktop system"),
+ new OString("Sun "), new OString("Java desktop system"), 10, 8 );
+ CPPUNIT_ASSERT_MESSAGE("index > length of input string", bRes == sal_True);
+ }
+
+ void replaceAt_003()
+ {
+ sal_Bool bRes = check_replaceAt(new OString("SuJava desktop system"),
+ new OString("Sun "), new OString("Java desktop system"), 2, 64 );
+ CPPUNIT_ASSERT_MESSAGE("larger count", bRes == sal_True);
+ }
+
+ void replaceAt_004()
+ {
+
+ sal_Bool bRes = check_replaceAt(new OString("Java desktop system"),
+ new OString("Sun "), new OString("Java desktop system"), -4, 8 );
+ CPPUNIT_ASSERT_MESSAGE("navigate index", bRes == sal_True);
+ }
+ void replaceAt_005()
+ {
+
+ sal_Bool bRes = check_replaceAt(new OString("Sun Jesktop System"),
+ new OString("Sun Java Desktop System"), new OString(""), 5, 5 );
+ CPPUNIT_ASSERT_MESSAGE("replace with null string", bRes == sal_True);
+ }
+
+ CPPUNIT_TEST_SUITE(replaceAt);
+ CPPUNIT_TEST(replaceAt_001);
+ CPPUNIT_TEST(replaceAt_002);
+ CPPUNIT_TEST(replaceAt_003);
+ CPPUNIT_TEST(replaceAt_004);
+ CPPUNIT_TEST(replaceAt_005);
+ CPPUNIT_TEST_SUITE_END();
+}; // class replaceAt
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OString::valueOf);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OString::toDouble);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OString::getToken);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OString::replaceAt);
+
+} // namespace rtl_OString
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/ostring/rtl_str.cxx b/sal/qa/rtl/ostring/rtl_str.cxx
new file mode 100644
index 000000000..7cfabcab7
--- /dev/null
+++ b/sal/qa/rtl/ostring/rtl_str.cxx
@@ -0,0 +1,849 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <rtl/string.hxx>
+#include <cstring>
+
+namespace rtl_str
+{
+
+ class compare : public CppUnit::TestFixture
+ {
+ public:
+
+ void compare_000()
+ {
+ rtl_str_compare( NULL, NULL);
+ }
+
+ void compare_000_1()
+ {
+ OString aStr1 = "Line must be equal.";
+ rtl_str_compare( aStr1.getStr(), NULL);
+ }
+ void compare_001()
+ {
+ OString aStr1 = "";
+ OString aStr2 = "";
+
+ sal_Int32 nValue = rtl_str_compare( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void compare_002()
+ {
+ OString aStr1 = "Line must be equal.";
+ OString aStr2 = "Line must be equal.";
+
+ sal_Int32 nValue = rtl_str_compare( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void compare_003()
+ {
+ OString aStr1 = "Line must differ.";
+ OString aStr2 = "Line foo bar, ok, differ.";
+
+ sal_Int32 nValue = rtl_str_compare( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(compare);
+ CPPUNIT_TEST(compare_000);
+ CPPUNIT_TEST(compare_000_1);
+ CPPUNIT_TEST(compare_001);
+ CPPUNIT_TEST(compare_002);
+ CPPUNIT_TEST(compare_003);
+ CPPUNIT_TEST_SUITE_END();
+}; // class compare
+
+ class compareIgnoreAsciiCase : public CppUnit::TestFixture
+ {
+ public:
+
+ void compare_000()
+ {
+ rtl_str_compareIgnoreAsciiCase( NULL, NULL);
+ }
+
+ void compare_000_1()
+ {
+ OString aStr1 = "Line must be equal.";
+ rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), NULL);
+ }
+ void compare_001()
+ {
+ OString aStr1 = "";
+ OString aStr2 = "";
+
+ sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void compare_002()
+ {
+ OString aStr1 = "Line must be equal.";
+ OString aStr2 = "Line must be equal.";
+
+ sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void compare_002_1()
+ {
+ OString aStr1 = "Line must be equal.";
+ OString aStr2 = "LINE MUST BE EQUAL.";
+
+ sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal (if case insensitive).", nValue == 0);
+ }
+
+ void compare_003()
+ {
+ OString aStr1 = "Line must differ.";
+ OString aStr2 = "Line foo bar, ok, differ.";
+
+ sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(compareIgnoreAsciiCase);
+ CPPUNIT_TEST(compare_000);
+ CPPUNIT_TEST(compare_000_1);
+ CPPUNIT_TEST(compare_001);
+ CPPUNIT_TEST(compare_002);
+ CPPUNIT_TEST(compare_002_1);
+ CPPUNIT_TEST(compare_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class compareIgnoreAsciiCase
+
+ class shortenedCompareIgnoreAsciiCase_WithLength : public CppUnit::TestFixture
+ {
+ public:
+
+ void compare_000()
+ {
+ rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( NULL, 0, NULL, 0, 0);
+ }
+
+ void compare_000_1()
+ {
+ OString aStr1 = "Line must be equal.";
+ rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), NULL, 0, 1);
+ }
+ void compare_001()
+ {
+ OString aStr1 = "";
+ OString aStr2 = "";
+
+ sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), aStr2.getStr(), aStr2.getLength(), aStr1.getLength());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void compare_002()
+ {
+ OString aStr1 = "Line must be equal.";
+ OString aStr2 = "Line must be equal.";
+
+ sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ aStr1.getLength());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void compare_002_1()
+ {
+ OString aStr1 = "Line must be equal.";
+ OString aStr2 = "LINE MUST BE EQUAL.";
+
+ sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ aStr1.getLength());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal (if case insensitive).", nValue == 0);
+ }
+
+ void compare_003()
+ {
+ OString aStr1 = "Line must differ.";
+ OString aStr2 = "Line foo bar, ok, differ.";
+
+ sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ 5);
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal first 5 characters.", nValue == 0);
+ }
+
+ void compare_004()
+ {
+ OString aStr1 = "Line must differ.";
+ OString aStr2 = "Line foo bar, ok, differ.";
+
+ sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ aStr1.getLength());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(shortenedCompareIgnoreAsciiCase_WithLength);
+ CPPUNIT_TEST(compare_000);
+ CPPUNIT_TEST(compare_000_1);
+ CPPUNIT_TEST(compare_001);
+ CPPUNIT_TEST(compare_002);
+ CPPUNIT_TEST(compare_002_1);
+ CPPUNIT_TEST(compare_003);
+ CPPUNIT_TEST(compare_004);
+ CPPUNIT_TEST_SUITE_END();
+}; // class compare
+
+ class hashCode : public CppUnit::TestFixture
+ {
+ public:
+
+ void hashCode_000()
+ {
+ rtl_str_hashCode( NULL );
+ }
+
+ void hashCode_001()
+ {
+ OString aStr1 = "Line for a hashCode.";
+ sal_Int32 nHashCode = rtl_str_hashCode( aStr1.getStr() );
+ printf("hashcode: %d\n", nHashCode);
+ // CPPUNIT_ASSERT_MESSAGE("failed.", nValue == 0);
+ }
+
+ void hashCode_002()
+ {
+ OString aStr1 = "Line for a hashCode.";
+ sal_Int32 nHashCode1 = rtl_str_hashCode( aStr1.getStr() );
+
+ OString aStr2 = "Line for a hashCode.";
+ sal_Int32 nHashCode2 = rtl_str_hashCode( aStr2.getStr() );
+
+ CPPUNIT_ASSERT_MESSAGE("hashcodes must be equal.", nHashCode1 == nHashCode2 );
+ }
+
+ void hashCode_003()
+ {
+ OString aStr1 = "Line for a hashCode.";
+ sal_Int32 nHashCode1 = rtl_str_hashCode( aStr1.getStr() );
+
+ OString aStr2 = "Line for another hashcode.";
+ sal_Int32 nHashCode2 = rtl_str_hashCode( aStr2.getStr() );
+
+ CPPUNIT_ASSERT_MESSAGE("hashcodes must differ.", nHashCode1 != nHashCode2 );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(hashCode);
+ CPPUNIT_TEST(hashCode_000);
+ CPPUNIT_TEST(hashCode_001);
+ CPPUNIT_TEST(hashCode_002);
+ CPPUNIT_TEST(hashCode_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class compare
+
+ class indexOfChar : public CppUnit::TestFixture
+ {
+ public:
+
+ void indexOfChar_000()
+ {
+ rtl_str_indexOfChar( NULL, 0 );
+ }
+
+ void indexOfChar_001()
+ {
+ OString aStr1 = "Line for an indexOfChar.";
+
+ sal_Int32 nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'L' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 0);
+
+ /* sal_Int32 */ nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'i' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 1);
+
+ /* sal_Int32 */ nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'n' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 2);
+
+ /* sal_Int32 */ nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'e' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 3);
+ }
+
+ void indexOfChar_002()
+ {
+ OString aStr1 = "Line for an indexOfChar.";
+ sal_Int32 nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'y' );
+
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == -1 );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(indexOfChar);
+ CPPUNIT_TEST(indexOfChar_000);
+ CPPUNIT_TEST(indexOfChar_001);
+ CPPUNIT_TEST(indexOfChar_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class compare
+
+ class lastIndexOfChar : public CppUnit::TestFixture
+ {
+ public:
+
+ void lastIndexOfChar_000()
+ {
+ rtl_str_lastIndexOfChar( NULL, 0 );
+ }
+
+ void lastIndexOfChar_001()
+ {
+ OString aStr1 = "Line for a lastIndexOfChar.";
+
+ sal_Int32 nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'C' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 22);
+
+ /* sal_Int32 */ nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'h' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 23);
+
+ /* sal_Int32 */ nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'a' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 24);
+
+ /* sal_Int32 */ nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'r' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 25);
+ }
+
+ void lastIndexOfChar_002()
+ {
+ OString aStr1 = "Line for a lastIndexOfChar.";
+ sal_Int32 nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'y' );
+
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == -1 );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(lastIndexOfChar);
+ CPPUNIT_TEST(lastIndexOfChar_000);
+ CPPUNIT_TEST(lastIndexOfChar_001);
+ CPPUNIT_TEST(lastIndexOfChar_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class lastIndexOfChar
+
+ class indexOfStr : public CppUnit::TestFixture
+ {
+ public:
+
+ void indexOfStr_000()
+ {
+ rtl_str_indexOfStr( NULL, 0 );
+ }
+
+ void indexOfStr_000_1()
+ {
+ OString aStr1 = "Line for an indexOfStr.";
+ rtl_str_indexOfStr( aStr1.getStr(), 0 );
+ }
+
+ void indexOfStr_001()
+ {
+ OString aStr1 = "Line for an indexOfStr.";
+
+ sal_Int32 nIndex = rtl_str_indexOfStr( aStr1.getStr(), "Line" );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 0);
+
+ /* sal_Int32 */ nIndex = rtl_str_indexOfStr( aStr1.getStr(), "for" );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 5);
+
+ /* sal_Int32 */ nIndex = rtl_str_indexOfStr( aStr1.getStr(), "a" );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 9);
+
+ /* sal_Int32 */ nIndex = rtl_str_indexOfStr( aStr1.getStr(), "an index" );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex ==9);
+ }
+
+ void indexOfStr_002()
+ {
+ OString aStr1 = "Line for an indexOfStr.";
+ sal_Int32 nIndex = rtl_str_indexOfStr( aStr1.getStr(), "not exist" );
+
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == -1 );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(indexOfStr);
+ CPPUNIT_TEST(indexOfStr_000);
+ CPPUNIT_TEST(indexOfStr_001);
+ CPPUNIT_TEST(indexOfStr_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class compare
+
+ class lastIndexOfStr : public CppUnit::TestFixture
+ {
+ public:
+
+ void lastIndexOfStr_000()
+ {
+ rtl_str_lastIndexOfStr( NULL, NULL );
+ }
+
+ void lastIndexOfStr_000_1()
+ {
+ OString aStr1 = "Line for a lastIndexOfStr.";
+ rtl_str_lastIndexOfStr( aStr1.getStr(), NULL );
+ }
+
+ void lastIndexOfStr_001()
+ {
+ OString aStr1 = "Line for a lastIndexOfStr.";
+ OString aSearchStr = "Index";
+
+ sal_Int32 nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 15);
+
+ /* OString */ aSearchStr = "Line";
+ /* sal_Int32 */ nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 0);
+
+ /* OString */ aSearchStr = "";
+ /* sal_Int32 */ nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == -1);
+ }
+
+ void lastIndexOfStr_002()
+ {
+ OString aStr1 = "Line for a lastIndexOfStr.";
+ OString aSearchStr = "foo";
+ sal_Int32 nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == -1 );
+ }
+
+ void lastIndexOfStr_003()
+ {
+ OString aStr1 = "Line for a lastIndexOfStr.";
+ OString aSearchStr = "O";
+ sal_Int32 nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 20 );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(lastIndexOfStr);
+ CPPUNIT_TEST(lastIndexOfStr_000);
+ CPPUNIT_TEST(lastIndexOfStr_001);
+ CPPUNIT_TEST(lastIndexOfStr_002);
+ CPPUNIT_TEST(lastIndexOfStr_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class lastIndexOfStr
+
+ class replaceChar : public CppUnit::TestFixture
+ {
+ public:
+
+ void replaceChar_000()
+ {
+ rtl_str_replaceChar( NULL, 0, 0 );
+ }
+
+ void replaceChar_001()
+ {
+ OString aStr1 = "replace char.";
+ OString aShouldStr1 = "ruplacu char.";
+
+ char* pStr = (char*) malloc(aStr1.getLength() + 1);
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != NULL);
+ strcpy(pStr, aStr1.getStr());
+
+ rtl_str_replaceChar( pStr, 'e', 'u' );
+
+ CPPUNIT_ASSERT_MESSAGE("replace failed", aShouldStr1.equals(OString(pStr)) == sal_True);
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(replaceChar);
+ CPPUNIT_TEST(replaceChar_000);
+ CPPUNIT_TEST(replaceChar_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class replaceChar_WithLength : public CppUnit::TestFixture
+ {
+ public:
+
+ void replaceChar_WithLength_000()
+ {
+ rtl_str_replaceChar_WithLength( NULL, 0, 0, 0 );
+ }
+
+ void replaceChar_WithLength_000_1()
+ {
+ rtl_str_replaceChar_WithLength( NULL, 1, 0, 0 );
+ }
+ void replaceChar_WithLength_001()
+ {
+ OString aStr1 = "replace char.";
+ OString aShouldStr1 = "ruplace char.";
+
+ char* pStr = (char*) malloc(aStr1.getLength() + 1);
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != NULL);
+ strcpy(pStr, aStr1.getStr());
+
+ rtl_str_replaceChar_WithLength( pStr, 6, 'e', 'u' );
+
+ CPPUNIT_ASSERT_MESSAGE("replace failed", aShouldStr1.equals(OString(pStr)) == sal_True);
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(replaceChar_WithLength);
+ CPPUNIT_TEST(replaceChar_WithLength_000);
+ CPPUNIT_TEST(replaceChar_WithLength_000_1);
+ CPPUNIT_TEST(replaceChar_WithLength_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiLowerCase : public CppUnit::TestFixture
+ {
+ public:
+
+ void toAsciiLowerCase_000()
+ {
+ rtl_str_toAsciiLowerCase( NULL );
+ }
+
+ void toAsciiLowerCase_001()
+ {
+ OString aStr1 = "CHANGE THIS TO ASCII LOWER CASE.";
+ OString aShouldStr1 = "change this to ascii lower case.";
+
+ char* pStr = (char*) malloc(aStr1.getLength() + 1);
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != NULL);
+ strcpy(pStr, aStr1.getStr());
+
+ rtl_str_toAsciiLowerCase( pStr );
+
+ CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(OString(pStr)) == sal_True);
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiLowerCase);
+ CPPUNIT_TEST(toAsciiLowerCase_000);
+ CPPUNIT_TEST(toAsciiLowerCase_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiLowerCase_WithLength : public CppUnit::TestFixture
+ {
+ public:
+
+ void toAsciiLowerCase_WithLength_000()
+ {
+ rtl_str_toAsciiLowerCase_WithLength( NULL, 0 );
+ }
+
+ void toAsciiLowerCase_WithLength_001()
+ {
+ OString aStr1 = "CHANGE THIS TO ASCII LOWER CASE.";
+ OString aShouldStr1 = "change thiS TO ASCII LOWER CASE.";
+
+ char* pStr = (char*) malloc(aStr1.getLength() + 1);
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != NULL);
+ strcpy(pStr, aStr1.getStr());
+
+ rtl_str_toAsciiLowerCase_WithLength( pStr, 10 );
+
+ printf("Lowercase with length: '%s'\n", pStr);
+ CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(OString(pStr)) == sal_True);
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiLowerCase_WithLength);
+ CPPUNIT_TEST(toAsciiLowerCase_WithLength_000);
+ CPPUNIT_TEST(toAsciiLowerCase_WithLength_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiUpperCase : public CppUnit::TestFixture
+ {
+ public:
+
+ void toAsciiUpperCase_000()
+ {
+ rtl_str_toAsciiUpperCase( NULL );
+ }
+
+ void toAsciiUpperCase_001()
+ {
+ OString aStr1 = "change this to ascii upper case.";
+ OString aShouldStr1 = "CHANGE THIS TO ASCII UPPER CASE.";
+
+ char* pStr = (char*) malloc(aStr1.getLength() + 1);
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != NULL);
+ strcpy(pStr, aStr1.getStr());
+
+ rtl_str_toAsciiUpperCase( pStr );
+
+ CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(OString(pStr)) == sal_True);
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiUpperCase);
+ CPPUNIT_TEST(toAsciiUpperCase_000);
+ CPPUNIT_TEST(toAsciiUpperCase_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiUpperCase_WithLength : public CppUnit::TestFixture
+ {
+ public:
+
+ void toAsciiUpperCase_WithLength_000()
+ {
+ rtl_str_toAsciiUpperCase_WithLength( NULL, 0 );
+ }
+
+ void toAsciiUpperCase_WithLength_001()
+ {
+ OString aStr1 = "change this to ascii lower case.";
+ OString aShouldStr1 = "CHANGE THIs to ascii lower case.";
+
+ char* pStr = (char*) malloc(aStr1.getLength() + 1);
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != NULL);
+
+ strcpy(pStr, aStr1.getStr());
+ rtl_str_toAsciiUpperCase_WithLength( pStr, 10 );
+
+ printf("Uppercase with length: '%s'\n", aStr1.getStr());
+ CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(OString(pStr)) == sal_True);
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiUpperCase_WithLength);
+ CPPUNIT_TEST(toAsciiUpperCase_WithLength_000);
+ CPPUNIT_TEST(toAsciiUpperCase_WithLength_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class trim_WithLength : public CppUnit::TestFixture
+ {
+ public:
+ void trim_WithLength_000()
+ {
+ rtl_str_trim_WithLength(NULL, 0);
+ // should not GPF
+ }
+
+ void trim_WithLength_000_1()
+ {
+ char pStr[] = { " trim this" };
+ rtl_str_trim_WithLength( pStr, 0 );
+ }
+
+ void trim_WithLength_001()
+ {
+ char const *pStr = " trim this";
+ char *pStr2 = strdup(pStr);
+ if (pStr2)
+ {
+ rtl_str_trim_WithLength( pStr2, 2 );
+
+ CPPUNIT_ASSERT_MESSAGE("string should be empty", strlen(pStr2) == 0);
+ free(pStr2);
+ }
+ }
+
+ void trim_WithLength_002()
+ {
+ char const *pStr = "trim this";
+ char *pStr2 = strdup(pStr);
+ if (pStr2)
+ {
+ rtl_str_trim_WithLength( pStr2, 5 );
+
+ CPPUNIT_ASSERT_MESSAGE("string should contain 'trim'", strlen(pStr2) == 4);
+ free(pStr2);
+ }
+ }
+
+ void trim_WithLength_003()
+ {
+ char const *pStr = " trim this";
+ char *pStr2 = strdup(pStr);
+ if (pStr2)
+ {
+ strcpy(pStr2, pStr);
+ rtl_str_trim_WithLength( pStr2, 11 );
+
+ CPPUNIT_ASSERT_MESSAGE("string should contain 'trim'", strlen(pStr2) == 4);
+ free(pStr2);
+ }
+ }
+
+ void trim_WithLength_004()
+ {
+ char const *pStr = "\r\n\t \n\r trim \n this";
+ char *pStr2 = strdup(pStr);
+ if (pStr2)
+ {
+ rtl_str_trim_WithLength( pStr2, 17 );
+
+ CPPUNIT_ASSERT_MESSAGE("string should contain 'trim'", strlen(pStr2) == 4);
+ free(pStr2);
+ }
+ }
+
+ void trim_WithLength_005()
+ {
+ char const *pStr = "\r\n\t \n\r trim \t this \n\r\t\t ";
+ char *pStr2 = strdup(pStr);
+ if (pStr2)
+ {
+ rtl_str_trim_WithLength( pStr2, strlen(pStr2) );
+
+ CPPUNIT_ASSERT_MESSAGE("string should contain 'trim'", strlen(pStr2) == 11);
+ free(pStr2);
+ }
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(trim_WithLength);
+ CPPUNIT_TEST(trim_WithLength_000);
+ CPPUNIT_TEST(trim_WithLength_000_1);
+ CPPUNIT_TEST(trim_WithLength_001);
+ CPPUNIT_TEST(trim_WithLength_002);
+ CPPUNIT_TEST(trim_WithLength_003);
+ CPPUNIT_TEST(trim_WithLength_004);
+ CPPUNIT_TEST(trim_WithLength_005);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class valueOfChar : public CppUnit::TestFixture
+ {
+ public:
+ void valueOfChar_000()
+ {
+ rtl_str_valueOfChar(NULL, 0);
+ // should not GPF
+ }
+ void valueOfChar_001()
+ {
+ char *pStr = (char*)malloc(RTL_STR_MAX_VALUEOFCHAR);
+ if (pStr)
+ {
+ rtl_str_valueOfChar(pStr, 'A');
+
+ CPPUNIT_ASSERT_MESSAGE("string should contain 'A'", pStr[0] == 'A');
+ free(pStr);
+ }
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(valueOfChar);
+ CPPUNIT_TEST(valueOfChar_000);
+ CPPUNIT_TEST(valueOfChar_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::compare);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::compareIgnoreAsciiCase);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::shortenedCompareIgnoreAsciiCase_WithLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::hashCode);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::indexOfChar);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::lastIndexOfChar);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::indexOfStr);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::lastIndexOfStr);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::replaceChar);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::replaceChar_WithLength);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::toAsciiLowerCase);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::toAsciiLowerCase_WithLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::toAsciiUpperCase);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::toAsciiUpperCase_WithLength);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::trim_WithLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::valueOfChar);
+
+} // namespace rtl_str
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/ostring/rtl_str.xsce b/sal/qa/rtl/ostring/rtl_str.xsce
new file mode 100644
index 000000000..cd12e72f7
--- /dev/null
+++ b/sal/qa/rtl/ostring/rtl_str.xsce
@@ -0,0 +1,43 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+# signaled with SIGNAL 11
+rtl_str.compare.compare_000
+rtl_str.compare.compare_000_1
+
+rtl_str.compareIgnoreAsciiCase.compare_000
+rtl_str.compareIgnoreAsciiCase.compare_000_1
+
+rtl_str.hashCode.hashCode_000
+
+rtl_str.indexOfChar.indexOfChar_000
+
+rtl_str.lastIndexOfChar.lastIndexOfChar_000
+
+rtl_str.indexOfStr.indexOfStr_000
+
+rtl_str.lastIndexOfStr.lastIndexOfStr_000
+
+rtl_str.replaceChar.replaceChar_000
+
+rtl_str.replaceChar_WithLength.replaceChar_WithLength_000_1
+
+rtl_str.toAsciiLowerCase.toAsciiLowerCase_000
+
+rtl_str.toAsciiUpperCase.toAsciiUpperCase_000
+
+rtl_str.valueOfChar.valueOfChar_000
diff --git a/sal/qa/rtl/ostring/rtl_string.cxx b/sal/qa/rtl/ostring/rtl_string.cxx
new file mode 100644
index 000000000..71c709519
--- /dev/null
+++ b/sal/qa/rtl/ostring/rtl_string.cxx
@@ -0,0 +1,169 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <rtl/ustring.hxx>
+#include <cstring>
+
+namespace rtl_string
+{
+
+ class getLength : public CppUnit::TestFixture
+ {
+ public:
+
+ void getLength_000()
+ {
+ rtl_string_getLength( NULL );
+ // should not GPF
+ }
+
+ void getLength_001()
+ {
+ OString aStr("Test Length.");
+ sal_Int32 nValue = rtl_string_getLength( aStr.pData );
+
+ CPPUNIT_ASSERT_MESSAGE("Length must equal getLength()", aStr.getLength() == nValue);
+ CPPUNIT_ASSERT_MESSAGE(
+ "Length must equal strlen()",
+ nValue >= 0
+ && (strlen(aStr.getStr())
+ == sal::static_int_cast< sal_uInt32 >(nValue)));
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(getLength);
+ CPPUNIT_TEST(getLength_000);
+ CPPUNIT_TEST(getLength_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class getLength
+
+ class newFromString : public CppUnit::TestFixture
+ {
+ public:
+
+ // void newFromString_000()
+ // {
+ // sal_Int32 nValue = rtl_string_newFromString( NULL, NULL );
+ // // should not GPF
+ // }
+
+ void newFromString_001()
+ {
+ OString aStr("Test Length.");
+ rtl_String *pStr = NULL;
+
+ rtl_string_newFromString( &pStr, aStr.pData );
+
+ OString aNewStr(pStr);
+ CPPUNIT_ASSERT_MESSAGE("Strings must be equal", aStr.equals(aNewStr) == sal_True);
+
+ rtl_string_release(pStr);
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(newFromString);
+ // CPPUNIT_TEST(newFromString_000);
+ CPPUNIT_TEST(newFromString_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class newFromString
+
+ class convertUStringToString : public CppUnit::TestFixture
+ {
+ public:
+
+ // void newFromString_000()
+ // {
+ // sal_Int32 nValue = rtl_string_newFromString( NULL, NULL );
+ // // should not GPF
+ // }
+
+ void convertUStringToString_001()
+ {
+ OUString suString("Hello");
+ OString sString;
+ sal_Bool bRet = rtl_convertUStringToString(&sString.pData, suString.getStr(), suString.getLength(), RTL_TEXTENCODING_ASCII_US, OUSTRING_TO_OSTRING_CVTFLAGS);
+
+ CPPUNIT_ASSERT_MESSAGE("Strings must be equal", bRet == sal_True && sString.equals(OString("Hello")) == sal_True);
+ }
+
+ void convertUStringToString_002()
+ {
+ OString sStr("H\xE4llo");
+ OUString suString = OStringToOUString(sStr, RTL_TEXTENCODING_ISO_8859_15);
+
+ OString sString;
+ sal_Bool bRet = rtl_convertUStringToString(&sString.pData, suString.getStr(), suString.getLength(), RTL_TEXTENCODING_ISO_8859_15, OUSTRING_TO_OSTRING_CVTFLAGS);
+
+ CPPUNIT_ASSERT_MESSAGE("Strings must be equal", bRet == sal_True && sString.equals(OString("H\xE4llo")) == sal_True);
+ }
+
+ void convertUStringToString_003()
+ {
+ OString sStr("H\xC3\xA4llo");
+ OUString suString = OStringToOUString(sStr, RTL_TEXTENCODING_UTF8);
+
+ OString sString;
+ sal_Bool bRet = rtl_convertUStringToString(&sString.pData, suString.getStr(), suString.getLength(), RTL_TEXTENCODING_ISO_8859_15, OUSTRING_TO_OSTRING_CVTFLAGS);
+
+ CPPUNIT_ASSERT_MESSAGE("Strings must be equal", bRet == sal_True && sString.equals(OString("H\xE4llo")) == sal_True);
+ }
+
+ void convertUStringToString_004()
+ {
+ OString sStr("Tsch\xFC\xDF");
+ OUString suString = OStringToOUString(sStr, RTL_TEXTENCODING_ISO_8859_15);
+ OString sString;
+
+ sal_Bool bRet = rtl_convertUStringToString(&sString.pData, suString.getStr(), suString.getLength(), RTL_TEXTENCODING_UTF8, OUSTRING_TO_OSTRING_CVTFLAGS);
+ /* sal_Bool */ bRet = rtl_convertUStringToString(&sString.pData, suString.getStr(), suString.getLength(), RTL_TEXTENCODING_ISO_8859_15, OUSTRING_TO_OSTRING_CVTFLAGS);
+ CPPUNIT_ASSERT_MESSAGE("Strings must be equal", bRet == sal_True && sString.equals(OString("Tsch\xFC\xDF")) == sal_True);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(convertUStringToString);
+ CPPUNIT_TEST(convertUStringToString_001);
+ CPPUNIT_TEST(convertUStringToString_002);
+ CPPUNIT_TEST(convertUStringToString_003);
+ CPPUNIT_TEST(convertUStringToString_004);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class convertUStringToString
+
+} // namespace rtl_string
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_string::getLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_string::newFromString);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_string::convertUStringToString);
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/ostring/rtl_string.xsce b/sal/qa/rtl/ostring/rtl_string.xsce
new file mode 100644
index 000000000..7c8227e49
--- /dev/null
+++ b/sal/qa/rtl/ostring/rtl_string.xsce
@@ -0,0 +1,18 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+rtl_string.getLength.getLength_000
diff --git a/sal/qa/rtl/oustring/joblist.txt b/sal/qa/rtl/oustring/joblist.txt
new file mode 100644
index 000000000..c309c670d
--- /dev/null
+++ b/sal/qa/rtl/oustring/joblist.txt
@@ -0,0 +1,27 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+# JobFile for rtl_OUString
+# header source sal/inc/rtl/ustring.hxx
+
+rtl_OUString.valueOf.valueOf_double_001
+rtl_OUString.valueOf.valueOf_double_002
+rtl_OUString.valueOf.valueOf_double_003
+rtl_OUString.valueOf.valueOf_double_004
+rtl_OUString.valueOf.valueOf_double_005
+rtl_OUString.valueOf.valueOf_double_006
+rtl_OUString.valueOf.valueOf_double_007
diff --git a/sal/qa/rtl/oustring/rtl_OUString2.cxx b/sal/qa/rtl/oustring/rtl_OUString2.cxx
new file mode 100644
index 000000000..4a3a405d8
--- /dev/null
+++ b/sal/qa/rtl/oustring/rtl_OUString2.cxx
@@ -0,0 +1,1099 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+// autogenerated file with codegen.pl
+
+#include <memory>
+#include <math.h>
+#include <stdio.h>
+
+#include <algorithm>
+#include <limits>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <o3tl/cppunittraitshelper.hxx>
+
+#include <stringhelper.hxx>
+#include <valueequal.hxx>
+
+namespace rtl_OUString
+{
+
+namespace {
+
+// Avoid -fsanitize=undefined warning e.g. "runtime error: value 1e+99 is
+// outside the range of representable values of type 'float'":
+float doubleToFloat(double x) {
+ return
+ x < -std::numeric_limits<float>::max()
+ ? -std::numeric_limits<float>::infinity()
+ : x > std::numeric_limits<float>::max()
+ ? std::numeric_limits<float>::infinity()
+ : static_cast<float>(x);
+}
+
+}
+
+class number : public CppUnit::TestFixture
+{
+ void number_float_test_impl(float _nValue)
+ {
+ OUString suValue(OUString::number(_nValue));
+ OString sValue;
+ sValue <<= suValue;
+ printf("nFloat := %.9f sValue := %s\n", _nValue, sValue.getStr());
+
+ double nValueATOF = doubleToFloat(atof( sValue.getStr() ));
+
+ bool bEqualResult = is_float_equal(_nValue, nValueATOF);
+ CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult);
+ }
+
+ void number_float_test(float _nValue)
+ {
+ number_float_test_impl(_nValue);
+
+ // test also the negative part.
+ float nNegativeValue = -_nValue;
+ number_float_test_impl(nNegativeValue);
+ }
+
+public:
+ // insert your test code here.
+ void number_float_test_001()
+ {
+ // this is demonstration code
+ // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1);
+ float nValue = 3.0f;
+ number_float_test(nValue);
+ }
+
+ void number_float_test_002()
+ {
+ float nValue = 3.5f;
+ number_float_test(nValue);
+ }
+
+ void number_float_test_003()
+ {
+ float nValue = 3.0625f;
+ number_float_test(nValue);
+ }
+
+ void number_float_test_004()
+ {
+ float nValue = 3.502525f;
+ number_float_test(nValue);
+ }
+
+ void number_float_test_005()
+ {
+ float nValue = 3.141592f;
+ number_float_test(nValue);
+ }
+
+ void number_float_test_006()
+ {
+ float nValue = 3.5025255f;
+ number_float_test(nValue);
+ }
+
+ void number_float_test_007()
+ {
+ float nValue = 3.0039062f;
+ number_float_test(nValue);
+ }
+
+private:
+
+ void number_double_test_impl(double _nValue)
+ {
+ OUString suValue = OUString::number( _nValue );
+ OString sValue;
+ sValue <<= suValue;
+ printf("nDouble := %.20f sValue := %s\n", _nValue, sValue.getStr());
+
+ double nValueATOF = atof( sValue.getStr() );
+
+ bool bEqualResult = is_double_equal(_nValue, nValueATOF);
+ CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult);
+ }
+
+ void number_double_test(double _nValue)
+ {
+ number_double_test_impl(_nValue);
+
+ // test also the negative part.
+ double nNegativeValue = -_nValue;
+ number_double_test_impl(nNegativeValue);
+ }
+public:
+
+ // number double
+ void number_double_test_001()
+ {
+ double nValue = 3.0;
+ number_double_test(nValue);
+ }
+ void number_double_test_002()
+ {
+ double nValue = 3.5;
+ number_double_test(nValue);
+ }
+ void number_double_test_003()
+ {
+ double nValue = 3.0625;
+ number_double_test(nValue);
+ }
+ void number_double_test_004()
+ {
+ double nValue = 3.1415926535;
+ number_double_test(nValue);
+ }
+ void number_double_test_005()
+ {
+ double nValue = 3.141592653589793;
+ number_double_test(nValue);
+ }
+ void number_double_test_006()
+ {
+ double nValue = 3.1415926535897932;
+ number_double_test(nValue);
+ }
+ void number_double_test_007()
+ {
+ double nValue = 3.14159265358979323;
+ number_double_test(nValue);
+ }
+ void number_double_test_008()
+ {
+ double nValue = 3.141592653589793238462643;
+ number_double_test(nValue);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(number);
+ CPPUNIT_TEST(number_float_test_001);
+ CPPUNIT_TEST(number_float_test_002);
+ CPPUNIT_TEST(number_float_test_003);
+ CPPUNIT_TEST(number_float_test_004);
+ CPPUNIT_TEST(number_float_test_005);
+ CPPUNIT_TEST(number_float_test_006);
+ CPPUNIT_TEST(number_float_test_007);
+
+ CPPUNIT_TEST(number_double_test_001);
+ CPPUNIT_TEST(number_double_test_002);
+ CPPUNIT_TEST(number_double_test_003);
+ CPPUNIT_TEST(number_double_test_004);
+ CPPUNIT_TEST(number_double_test_005);
+ CPPUNIT_TEST(number_double_test_006);
+ CPPUNIT_TEST(number_double_test_007);
+ CPPUNIT_TEST(number_double_test_008);
+ CPPUNIT_TEST_SUITE_END();
+}; // class number
+
+ class toInt: public CppUnit::TestFixture {
+ public:
+ void test() {
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast< sal_Int32 >(-0x76543210),
+ (OUString("-76543210").
+ toInt32(16)));
+ // @return 0 if this string represents no number or one of too large magnitude
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast< sal_Int32 >(0),
+ (OUString("+FEDCBA98").
+ toInt32(16)));
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast< sal_Int64 >(-SAL_CONST_INT64(0x76543210FEDCBA98)),
+ (OUString(
+ "-76543210FEDCBA98").
+ toInt64(16)));
+ // @return 0 if this string represents no number or one of too large magnitude
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast< sal_Int64 >(SAL_CONST_INT64(0)),
+ (OUString(
+ "+FEDCBA9876543210").
+ toInt64(16)));
+ }
+
+ CPPUNIT_TEST_SUITE(toInt);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ // - toDouble (tests)
+ class toDouble : public CppUnit::TestFixture
+ {
+ public:
+ void toDouble_test_impl(OString const& _sValue)
+ {
+ //printf("the original str is %s\n", _sValue.getStr());
+ double nValueATOF = atof( _sValue.getStr() );
+ //printf("original data is %e\n", nValueATOF);
+ OUString suValue = OUString::createFromAscii( _sValue.getStr() );
+ double nValueToDouble = suValue.toDouble();
+ //printf("result data is %e\n", nValueToDouble);
+
+ bool bEqualResult = is_double_equal(nValueToDouble, nValueATOF);
+ CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult);
+ }
+
+ void toDouble_test(OString const& _sValue)
+ {
+ toDouble_test_impl(_sValue);
+
+ // test also the negative part.
+ OString sNegativValue("-");
+ sNegativValue += _sValue;
+ toDouble_test_impl(sNegativValue);
+ }
+
+ // insert your test code here.
+ void toDouble_selftest()
+ {
+ printf("Start selftest:\n");
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.01));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.0001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.00001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.000001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.0000001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.00000001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.000000001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.0000000001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.00000000001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.000000000001));
+ CPPUNIT_ASSERT (!is_double_equal(1.0, 1.0000000000001));
+ // we check til 15 values after comma
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.00000000000001));
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.000000000000001));
+ CPPUNIT_ASSERT (is_double_equal(1.0, 1.0000000000000001));
+ printf("Selftest done.\n");
+ }
+
+ void toDouble_test_3()
+ {
+ OString sValue("3");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_3_5()
+ {
+ OString sValue("3.5");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_3_0625()
+ {
+ OString sValue("3.0625");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_pi()
+ {
+ // value from http://www.angio.net/pi/digits/50.txt
+ OString sValue("3.141592653589793238462643383279502884197169399375");
+ toDouble_test(sValue);
+ }
+
+ void toDouble_test_1()
+ {
+ OString sValue("1");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_10()
+ {
+ OString sValue("10");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_100()
+ {
+ OString sValue("100");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_1000()
+ {
+ OString sValue("1000");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_10000()
+ {
+ OString sValue("10000");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_1e99()
+ {
+ OString sValue("1e99");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_1e_n99()
+ {
+ OString sValue("1e-99");
+ toDouble_test(sValue);
+ }
+ void toDouble_test_1e308()
+ {
+ OString sValue("1e308");
+ toDouble_test(sValue);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toDouble);
+ CPPUNIT_TEST(toDouble_selftest);
+
+ CPPUNIT_TEST(toDouble_test_3);
+ CPPUNIT_TEST(toDouble_test_3_5);
+ CPPUNIT_TEST(toDouble_test_3_0625);
+ CPPUNIT_TEST(toDouble_test_pi);
+ CPPUNIT_TEST(toDouble_test_1);
+ CPPUNIT_TEST(toDouble_test_10);
+ CPPUNIT_TEST(toDouble_test_100);
+ CPPUNIT_TEST(toDouble_test_1000);
+ CPPUNIT_TEST(toDouble_test_10000);
+ CPPUNIT_TEST(toDouble_test_1e99);
+ CPPUNIT_TEST(toDouble_test_1e_n99);
+ CPPUNIT_TEST(toDouble_test_1e308);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class toDouble
+
+ // - toFloat (tests)
+ class toFloat : public CppUnit::TestFixture
+ {
+ public:
+ void toFloat_test_impl(OString const& _sValue)
+ {
+ //printf("the original str is %s\n", _sValue.getStr());
+ float nValueATOF = doubleToFloat(atof( _sValue.getStr() ));
+ //printf("the original str is %.10f\n", nValueATOF);
+ OUString suValue = OUString::createFromAscii( _sValue.getStr() );
+ float nValueToFloat = suValue.toFloat();
+ //printf("the result str is %.10f\n", nValueToFloat);
+
+ bool bEqualResult = is_float_equal(nValueToFloat, nValueATOF);
+ CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult);
+ }
+
+ void toFloat_test(OString const& _sValue)
+ {
+ toFloat_test_impl(_sValue);
+
+ // test also the negative part.
+ OString sNegativValue("-");
+ sNegativValue += _sValue;
+ toFloat_test_impl(sNegativValue);
+ }
+
+ // insert your test code here.
+ void toFloat_selftest()
+ {
+ printf("Start selftest:\n");
+ CPPUNIT_ASSERT (!is_float_equal(1.0f, 1.01f));
+ CPPUNIT_ASSERT (!is_float_equal(1.0f, 1.001f));
+ CPPUNIT_ASSERT (!is_float_equal(1.0f, 1.0001f));
+ CPPUNIT_ASSERT (!is_float_equal(1.0f, 1.00001f));
+ CPPUNIT_ASSERT (!is_float_equal(1.0f, 1.000002f));
+ CPPUNIT_ASSERT (is_float_equal(1.0f, 1.0000001f));
+ CPPUNIT_ASSERT (is_float_equal(1.0f, 1.00000001f));
+ CPPUNIT_ASSERT (is_float_equal(1.0f, 1.000000001f));
+
+ printf("Selftest done.\n");
+ }
+
+ void toFloat_test_3()
+ {
+ OString sValue("3");
+ toFloat_test(sValue);
+ }
+ void toFloat_test_3_5()
+ {
+ OString sValue("3.5");
+ toFloat_test(sValue);
+ }
+ void toFloat_test_3_0625()
+ {
+ OString sValue("3.0625");
+ toFloat_test(sValue);
+ }
+ void toFloat_test_3_0625_e()
+ {
+ OString sValue("3.0625e-4");
+ toFloat_test(sValue);
+ }
+ void toFloat_test_pi()
+ {
+ // value from http://www.angio.net/pi/digits/50.txt
+ OString sValue("3.141592653589793238462643383279502884197169399375");
+ toFloat_test(sValue);
+ }
+
+ void toFloat_test_1()
+ {
+ OString sValue("1");
+ toFloat_test(sValue);
+ }
+ void toFloat_test_10()
+ {
+ OString sValue("10");
+ toFloat_test(sValue);
+ }
+ void toFloat_test_100()
+ {
+ OString sValue("100");
+ toFloat_test(sValue);
+ }
+ void toFloat_test_1000()
+ {
+ OString sValue("1000");
+ toFloat_test(sValue);
+ }
+ void toFloat_test_10000()
+ {
+ OString sValue("10000");
+ toFloat_test(sValue);
+ }
+ void toFloat_test_mix()
+ {
+ OString sValue("456789321455.123456789012");
+ toFloat_test(sValue);
+ }
+ void toFloat_test_1e99()
+ {
+ OString sValue("1e99");
+ toFloat_test(sValue);
+ }
+ void toFloat_test_1e_n99()
+ {
+ OString sValue("1e-9");
+ toFloat_test(sValue);
+ }
+ void toFloat_test_1e308()
+ {
+ OString sValue("1e308");
+ toFloat_test(sValue);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toFloat);
+ CPPUNIT_TEST(toFloat_selftest);
+
+ CPPUNIT_TEST(toFloat_test_3);
+ CPPUNIT_TEST(toFloat_test_3_5);
+ CPPUNIT_TEST(toFloat_test_3_0625);
+ CPPUNIT_TEST(toFloat_test_3_0625_e);
+ CPPUNIT_TEST(toFloat_test_pi);
+ CPPUNIT_TEST(toFloat_test_1);
+ CPPUNIT_TEST(toFloat_test_10);
+ CPPUNIT_TEST(toFloat_test_100);
+ CPPUNIT_TEST(toFloat_test_1000);
+ CPPUNIT_TEST(toFloat_test_10000);
+ CPPUNIT_TEST(toFloat_test_mix);
+ CPPUNIT_TEST(toFloat_test_1e99);
+ CPPUNIT_TEST(toFloat_test_1e_n99);
+ CPPUNIT_TEST(toFloat_test_1e308);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class toFloat
+
+// - lastIndexOf (tests)
+class lastIndexOf : public CppUnit::TestFixture
+{
+
+public:
+ void lastIndexOf_oustring(OUString const& _suStr, OUString const& _suSearchStr, sal_Int32 _nExpectedResultPos)
+ {
+ // Algorithm
+ // search the string _suSearchStr (OUString) in the string _suStr.
+ // check if the _nExpectedResultPos occurs.
+
+ sal_Int32 nPos = _suStr.lastIndexOf(_suSearchStr);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("expected position is wrong", _nExpectedResultPos, nPos);
+ }
+
+ void lastIndexOf_salunicode(OUString const& _suStr, sal_Unicode _cuSearchChar, sal_Int32 _nExpectedResultPos)
+ {
+ // Algorithm
+ // search the unicode char _suSearchChar (sal_Unicode) in the string _suStr.
+ // check if the _nExpectedResultPos occurs.
+
+ sal_Int32 nPos = _suStr.lastIndexOf(_cuSearchChar);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("expected position is wrong", _nExpectedResultPos, nPos);
+ }
+
+ void lastIndexOf_oustring_offset(OUString const& _suStr, OUString const& _suSearchStr, sal_Int32 _nExpectedResultPos, sal_Int32 _nStartOffset)
+ {
+ sal_Int32 nPos = _suStr.lastIndexOf(_suSearchStr, _nStartOffset);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("expected position is wrong", _nExpectedResultPos, nPos);
+ }
+
+ void lastIndexOf_salunicode_offset(OUString const& _suStr, sal_Unicode _cuSearchChar, sal_Int32 _nExpectedResultPos, sal_Int32 _nStartOffset)
+ {
+ sal_Int32 nPos = _suStr.lastIndexOf(_cuSearchChar, _nStartOffset);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("expected position is wrong", _nExpectedResultPos, nPos);
+ }
+
+ void lastIndexOf_test_oustring_offset_001()
+ {
+ // search for sun, start at the end, found (pos==0)
+ OUString aStr("sun java system");
+ OUString aSearchStr("sun");
+ lastIndexOf_oustring_offset(aStr, aSearchStr, 0, aStr.getLength());
+ }
+
+ void lastIndexOf_test_oustring_offset_002()
+ {
+ // search for sun, start at pos = 3, found (pos==0)
+ OUString aStr("sun java system");
+ OUString aSearchStr("sun");
+ lastIndexOf_oustring_offset(aStr, aSearchStr, 0, 3);
+ }
+
+ void lastIndexOf_test_oustring_offset_003()
+ {
+ // search for sun, start at pos = 2, found (pos==-1)
+ OUString aStr("sun java system");
+ OUString aSearchStr("sun");
+ lastIndexOf_oustring_offset(aStr, aSearchStr, -1, 2);
+ }
+
+ void lastIndexOf_test_oustring_offset_004()
+ {
+ // search for sun, start at the end, found (pos==0)
+ OUString aStr("sun java system");
+ OUString aSearchStr("sun");
+ lastIndexOf_oustring_offset(aStr, aSearchStr, -1, 1);
+ }
+
+ void lastIndexOf_test_oustring_001()
+ {
+ // search for sun, found (pos==0)
+ OUString aStr("sun java system");
+ OUString aSearchStr("sun");
+ lastIndexOf_oustring(aStr, aSearchStr, 0);
+ }
+
+ void lastIndexOf_test_oustring_002()
+ {
+ // search for sun, found (pos==4)
+ OUString aStr("the sun java system");
+ OUString aSearchStr("sun");
+ lastIndexOf_oustring(aStr, aSearchStr, 4);
+ }
+
+ void lastIndexOf_test_oustring_003()
+ {
+ // search for sun, found (pos==8)
+ OUString aStr("the sun sun java system");
+ OUString aSearchStr("sun");
+ lastIndexOf_oustring(aStr, aSearchStr, 8);
+ }
+
+ void lastIndexOf_test_oustring_004()
+ {
+ // search for sun, found (pos==8)
+ OUString aStr("the sun sun");
+ OUString aSearchStr("sun");
+ lastIndexOf_oustring(aStr, aSearchStr, 8);
+ }
+
+ void lastIndexOf_test_oustring_005()
+ {
+ // search for sun, found (pos==4)
+ OUString aStr("the sun su");
+ OUString aSearchStr("sun");
+ lastIndexOf_oustring(aStr, aSearchStr, 4);
+ }
+
+ void lastIndexOf_test_oustring_006()
+ {
+ // search for sun, found (pos==-1)
+ OUString aStr("the su su");
+ OUString aSearchStr("sun");
+ lastIndexOf_oustring(aStr, aSearchStr, -1);
+ }
+
+ void lastIndexOf_test_oustring_007()
+ {
+ // search for earth, not found (-1)
+ OUString aStr("the su su");
+ OUString aSearchStr("earth");
+ lastIndexOf_oustring(aStr, aSearchStr, -1);
+ }
+
+ void lastIndexOf_test_oustring_008()
+ {
+ // search for earth, not found (-1)
+ OUString aStr;
+ OUString aSearchStr("earth");
+ lastIndexOf_oustring(aStr, aSearchStr, -1);
+ }
+
+ void lastIndexOf_test_oustring_009()
+ {
+ // search for earth, not found (-1)
+ OUString aStr;
+ OUString aSearchStr;
+ lastIndexOf_oustring(aStr, aSearchStr, -1);
+
+ }
+
+ void lastIndexOf_test_salunicode_001()
+ {
+ // search for 's', found (19)
+ OUString aStr("the sun sun java system");
+ sal_Unicode suChar = L's';
+ lastIndexOf_salunicode(aStr, suChar, 19);
+ }
+
+ void lastIndexOf_test_salunicode_002()
+ {
+ // search for 'x', not found (-1)
+ OUString aStr("the sun sun java system");
+ sal_Unicode suChar = L'x';
+ lastIndexOf_salunicode(aStr, suChar, -1);
+ }
+
+ void lastIndexOf_test_salunicode_offset_001()
+ {
+ // search for 's', start from pos last char, found (19)
+ OUString aStr("the sun sun java system");
+ sal_Unicode cuChar = L's';
+ lastIndexOf_salunicode_offset(aStr, cuChar, 19, aStr.getLength());
+ }
+ void lastIndexOf_test_salunicode_offset_002()
+ {
+ // search for 's', start pos is last occur from search behind, found (17)
+ OUString aStr("the sun sun java system");
+ sal_Unicode cuChar = L's';
+ lastIndexOf_salunicode_offset(aStr, cuChar, 17, 19);
+ }
+ void lastIndexOf_test_salunicode_offset_003()
+ {
+ // search for 't', start pos is 1, found (0)
+ OUString aStr("the sun sun java system");
+ sal_Unicode cuChar = L't';
+ lastIndexOf_salunicode_offset(aStr, cuChar, 0, 1);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(lastIndexOf);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_001);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_002);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_003);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_004);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_005);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_006);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_007);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_008);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_009);
+
+ CPPUNIT_TEST(lastIndexOf_test_oustring_offset_001);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_offset_002);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_offset_003);
+ CPPUNIT_TEST(lastIndexOf_test_oustring_offset_004);
+
+ CPPUNIT_TEST(lastIndexOf_test_salunicode_001);
+ CPPUNIT_TEST(lastIndexOf_test_salunicode_002);
+
+ CPPUNIT_TEST(lastIndexOf_test_salunicode_offset_001);
+ CPPUNIT_TEST(lastIndexOf_test_salunicode_offset_002);
+ CPPUNIT_TEST(lastIndexOf_test_salunicode_offset_003);
+
+ CPPUNIT_TEST_SUITE_END();
+}; // class lastIndexOf
+
+// - getToken (tests)
+class getToken : public CppUnit::TestFixture
+{
+
+public:
+ void getToken_000()
+ {
+ OUString suTokenStr;
+
+ sal_Int32 nIndex = 0;
+ do
+ {
+ suTokenStr.getToken( 0, ';', nIndex );
+ }
+ while ( nIndex >= 0 );
+ printf("Index %" SAL_PRIdINT32 "\n", nIndex);
+ // should not GPF
+ }
+
+ void getToken_001()
+ {
+ OUString suTokenStr("a;b");
+
+ sal_Int32 nIndex = 0;
+
+ OUString suToken = suTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'a'", OUString("a"), suToken);
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'b'", OUString("b"), suToken);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index should be negative", static_cast<sal_Int32>(-1), nIndex);
+ }
+
+ void getToken_002()
+ {
+ OUString suTokenStr("a;b.c");
+
+ sal_Int32 nIndex = 0;
+
+ OUString suToken = suTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'a'", OUString("a"), suToken );
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'b'", OUString("b"), suToken );
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'c'", OUString("c"), suToken );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index should be negative", static_cast<sal_Int32>(-1), nIndex);
+ }
+
+ void getToken_003()
+ {
+ OUString suTokenStr("a;;b");
+
+ sal_Int32 nIndex = 0;
+
+ OUString suToken = suTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'a'", OUString("a"), suToken );
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be empty", suToken.isEmpty());
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, ';', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'b'", OUString("b"), suToken );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index should be negative", static_cast<sal_Int32>(-1), nIndex);
+ }
+
+ void getToken_004()
+ {
+ OUString suTokenStr("longer.then.ever.");
+
+ sal_Int32 nIndex = 0;
+
+ OUString suToken = suTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be 'longer'", OUString("longer"), suToken );
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be 'then'", OUString("then"), suToken );
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be 'ever'", OUString("ever"), suToken );
+
+ /* OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex );
+ CPPUNIT_ASSERT_MESSAGE("Token should be empty", suToken.isEmpty());
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("index should be negative", static_cast<sal_Int32>(-1), nIndex);
+ }
+
+ void getToken_005() {
+ OUString ab("ab");
+ sal_Int32 n = 0;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "token should be 'ab'", ab, ab.getToken(0, '-', n));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("n should be -1", static_cast<sal_Int32>(-1), n);
+ CPPUNIT_ASSERT_MESSAGE(
+ "token should be empty", ab.getToken(0, '-', n).isEmpty());
+ }
+
+ CPPUNIT_TEST_SUITE(getToken);
+ CPPUNIT_TEST(getToken_000);
+ CPPUNIT_TEST(getToken_001);
+ CPPUNIT_TEST(getToken_002);
+ CPPUNIT_TEST(getToken_003);
+ CPPUNIT_TEST(getToken_004);
+ CPPUNIT_TEST(getToken_005);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getToken
+
+class convertToString: public CppUnit::TestFixture {
+public:
+ void test();
+
+ CPPUNIT_TEST_SUITE(convertToString);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void convertToString::test() {
+ static sal_Unicode const utf16[] = { 0x0041, 0x00E4, 0x0061 };
+ OString s;
+ CPPUNIT_ASSERT(
+ OUString(utf16, SAL_N_ELEMENTS(utf16)).convertToString(
+ &s, RTL_TEXTENCODING_UTF7,
+ (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR |
+ RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR)));
+ CPPUNIT_ASSERT_EQUAL(
+ OString(RTL_CONSTASCII_STRINGPARAM("A+AOQ-a")), s);
+}
+
+// - string construction & interning (tests)
+
+class construction : public CppUnit::TestFixture
+{
+public:
+ void construct()
+ {
+#ifdef RTL_INLINE_STRINGS
+ OUString aFoo( "foo" );
+ CPPUNIT_ASSERT_MESSAGE("string contents", aFoo[0] == 'f');
+ CPPUNIT_ASSERT_MESSAGE("string contents", aFoo[1] == 'o');
+ CPPUNIT_ASSERT_MESSAGE("string contents", aFoo[2] == 'o');
+ CPPUNIT_ASSERT_MESSAGE("string length", aFoo.getLength() == 3);
+
+ OUString aBaa( "this is a very long string with a lot of long things inside it and it goes on and on and on forever etc." );
+ CPPUNIT_ASSERT_MESSAGE("string length", aBaa.getLength() == 104);
+ // Dig at the internals ... FIXME: should we have the bit-flag defines public ?
+ CPPUNIT_ASSERT_MESSAGE("string static flags", (aBaa.pData->refCount & 1<<30) != 0);
+#endif
+ }
+
+ void intern()
+ {
+ // The empty string is 'static' a special case ...
+ OUString().intern();
+ OUString::intern( "",strlen(""),RTL_TEXTENCODING_ASCII_US );
+
+ OUString aFoo( "foo" );
+ OUString aFooIntern = aFoo.intern();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "string contents", OUString("foo"), aFooIntern);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("string length", static_cast<sal_Int32>(3), aFooIntern.getLength());
+ // We have to dup due to no atomic 'intern' bit-set operation
+ CPPUNIT_ASSERT_MESSAGE("intern dups", aFoo.pData != aFooIntern.pData);
+
+ // Test interning lots of things
+ int i;
+ static const int nSequence = 4096;
+ std::unique_ptr<OUString[]> pStrs(new OUString[nSequence]);
+ for (i = 0; i < nSequence; i++)
+ {
+ pStrs[i] = OUString( OUString::number( sqrt( static_cast<double>(i) ) ) ).intern();
+ }
+ for (i = 0; i < nSequence; i++)
+ {
+ OUString aNew = OUString( OUString::number( sqrt( static_cast<double>(i) ) ) ).intern();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("double intern failed",
+ pStrs[i].pData, aNew.pData);
+ }
+ }
+
+ CPPUNIT_TEST_SUITE(construction);
+ CPPUNIT_TEST(construct);
+ CPPUNIT_TEST(intern);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+class indexOfAscii: public CppUnit::TestFixture {
+public:
+ void test();
+
+ CPPUNIT_TEST_SUITE(indexOfAscii);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void indexOfAscii::test() {
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), OUString().indexOf(""));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), OUString().lastIndexOf(""));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), OUString("foo").indexOf("foo"));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), OUString("foo").lastIndexOf("foo"));
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(2), OUString("fofoobar").indexOf("foo"));
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(3), OUString("foofoofob").lastIndexOf("foo"));
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(3), OUString("foofoobar").indexOf("foo", 1));
+}
+
+class endsWith: public CppUnit::TestFixture {
+public:
+ void test();
+
+ CPPUNIT_TEST_SUITE(endsWith);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void endsWith::test() {
+ CPPUNIT_ASSERT_EQUAL(true, OUString().endsWith(""));
+ CPPUNIT_ASSERT_EQUAL(false, OUString().endsWith("foo"));
+ CPPUNIT_ASSERT_EQUAL(true, OUString("bar").endsWith("bar"));
+ CPPUNIT_ASSERT_EQUAL(true, OUString("foobar").endsWith("bar"));
+ CPPUNIT_ASSERT_EQUAL(false, OUString("FOOBAR").endsWith("bar"));
+}
+
+class isEmpty: public CppUnit::TestFixture {
+public:
+ void test();
+
+ CPPUNIT_TEST_SUITE(isEmpty);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void isEmpty::test() {
+ OUString aString;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Newly constructed string should be empty", true, aString.isEmpty() );
+
+ aString = "Not empty any more";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "String should not be empty", false, aString.isEmpty() );
+
+ aString.clear();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "aString.clear(), so should now be empty", true, aString.isEmpty() );
+}
+
+
+class createFromCodePoints: public CppUnit::TestFixture {
+public:
+ void test();
+
+ CPPUNIT_TEST_SUITE(createFromCodePoints);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void createFromCodePoints::test() {
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(0),
+ OUString(static_cast< sal_uInt32 const * >(nullptr), 0).getLength());
+ static sal_uInt32 const cp[] = { 0, 0xD800, 0xFFFF, 0x10000, 0x10FFFF };
+ OUString s(cp, SAL_N_ELEMENTS(cp));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7), s.getLength());
+ CPPUNIT_ASSERT_EQUAL(u'\0', s[0]);
+ CPPUNIT_ASSERT_EQUAL(u'\xD800', s[1]);
+ CPPUNIT_ASSERT_EQUAL(u'\xFFFF', s[2]);
+ CPPUNIT_ASSERT_EQUAL(u'\xD800', s[3]);
+ CPPUNIT_ASSERT_EQUAL(u'\xDC00', s[4]);
+ CPPUNIT_ASSERT_EQUAL(u'\xDBFF', s[5]);
+ CPPUNIT_ASSERT_EQUAL(u'\xDFFF', s[6]);
+}
+
+class iterateCodePoints: public CppUnit::TestFixture {
+public:
+ void testNotWellFormed();
+
+ CPPUNIT_TEST_SUITE(iterateCodePoints);
+ CPPUNIT_TEST(testNotWellFormed);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void iterateCodePoints::testNotWellFormed() {
+ static sal_Unicode const utf16[] =
+ { 0xD800, 0xDC00, 0x0041, 0xDBFF, 0xDFFF, 0xDDEF, 0xD9AB };
+ OUString s(utf16, SAL_N_ELEMENTS(utf16));
+ sal_Int32 i = 0;
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x10000), s.iterateCodePoints(&i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x0041), s.iterateCodePoints(&i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x10FFFF), s.iterateCodePoints(&i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xDDEF), s.iterateCodePoints(&i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xD9AB), s.iterateCodePoints(&i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xD9AB), s.iterateCodePoints(&i, -1));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xDDEF), s.iterateCodePoints(&i, -1));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x10FFFF), s.iterateCodePoints(&i, -1));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x0041), s.iterateCodePoints(&i, -1));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), i);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x10000), s.iterateCodePoints(&i, -1));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ i = 1;
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xDC00), s.iterateCodePoints(&i, 2));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), i);
+ i = 4;
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x10000), s.iterateCodePoints(&i, -3));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+}
+
+class convertFromString: public CppUnit::TestFixture {
+public:
+ void test();
+
+ CPPUNIT_TEST_SUITE(convertFromString);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void convertFromString::test() {
+ OUString t;
+ CPPUNIT_ASSERT(
+ !rtl_convertStringToUString(
+ &t.pData, RTL_CONSTASCII_STRINGPARAM("\x80"), RTL_TEXTENCODING_UTF8,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)));
+ CPPUNIT_ASSERT(
+ !rtl_convertStringToUString(
+ &t.pData, RTL_CONSTASCII_STRINGPARAM("\xC0"), RTL_TEXTENCODING_UTF8,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)));
+ CPPUNIT_ASSERT(
+ !rtl_convertStringToUString(
+ &t.pData, RTL_CONSTASCII_STRINGPARAM("\xFF"), RTL_TEXTENCODING_UTF8,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)));
+ CPPUNIT_ASSERT(
+ rtl_convertStringToUString(
+ &t.pData, RTL_CONSTASCII_STRINGPARAM("abc"), RTL_TEXTENCODING_UTF8,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)));
+ CPPUNIT_ASSERT_EQUAL( OUString("abc"), t );
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::number);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::toInt);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::toDouble);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::toFloat);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::lastIndexOf);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::getToken);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::convertToString);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::construction);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::indexOfAscii);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::endsWith);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::isEmpty);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::createFromCodePoints);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::iterateCodePoints);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::convertFromString);
+
+} // namespace rtl_OUString
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/oustring/rtl_ustr.cxx b/sal/qa/rtl/oustring/rtl_ustr.cxx
new file mode 100644
index 000000000..e73ab9124
--- /dev/null
+++ b/sal/qa/rtl/oustring/rtl_ustr.cxx
@@ -0,0 +1,1368 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+/** print a UNI_CODE file name.
+*/
+/*
+inline void printOUString( OUString const & _suStr )
+{
+ OString aString;
+
+ printf( "OUString: " );
+ aString = OUStringToOString( _suStr, RTL_TEXTENCODING_ASCII_US );
+ printf( "%s\n", aString.getStr( ) );
+}
+*/
+
+namespace rtl_ustr
+{
+
+ class compare : public CppUnit::TestFixture
+ {
+ public:
+
+ void compare_000()
+ {
+ rtl_ustr_compare( NULL, NULL);
+ // should not GPF
+ }
+
+ void compare_000_1()
+ {
+ OUString aStr1("Line must be equal.");
+ rtl_ustr_compare( aStr1.getStr(), NULL);
+ // should not GPF
+ }
+ void compare_001()
+ {
+ OUString aStr1;
+ OUString aStr2;
+
+ sal_Int32 nValue = rtl_ustr_compare( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void compare_002()
+ {
+ OUString aStr1("Line must be equal.");
+ OUString aStr2("Line must be equal.");
+
+ sal_Int32 nValue = rtl_ustr_compare( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void compare_003()
+ {
+ OUString aStr1("Line must differ.");
+ OUString aStr2("Line foo bar, ok, differ.");
+
+ sal_Int32 nValue = rtl_ustr_compare( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(compare);
+ CPPUNIT_TEST(compare_000);
+ CPPUNIT_TEST(compare_000_1);
+ CPPUNIT_TEST(compare_001);
+ CPPUNIT_TEST(compare_002);
+ CPPUNIT_TEST(compare_003);
+ CPPUNIT_TEST_SUITE_END();
+}; // class compare
+
+ class compareIgnoreAsciiCase : public CppUnit::TestFixture
+ {
+ public:
+
+ void compare_000()
+ {
+ rtl_ustr_compareIgnoreAsciiCase( NULL, NULL);
+ }
+
+ void compare_000_1()
+ {
+ OUString aStr1("Line must be equal.");
+ rtl_ustr_compareIgnoreAsciiCase( aStr1.getStr(), NULL);
+ }
+ void compare_001()
+ {
+ OUString aStr1;
+ OUString aStr2;
+
+ sal_Int32 nValue = rtl_ustr_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void compare_002()
+ {
+ OUString aStr1("Line must be equal.");
+ OUString aStr2("Line must be equal.");
+
+ sal_Int32 nValue = rtl_ustr_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void compare_002_1()
+ {
+ OUString aStr1("Line must be equal.");
+ OUString aStr2("LINE MUST BE EQUAL.");
+
+ sal_Int32 nValue = rtl_ustr_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal (if case insensitive).", nValue == 0);
+ }
+
+ void compare_003()
+ {
+ OUString aStr1("Line must differ.");
+ OUString aStr2("Line foo bar, ok, differ.");
+
+ sal_Int32 nValue = rtl_ustr_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(compareIgnoreAsciiCase);
+ CPPUNIT_TEST(compare_000);
+ CPPUNIT_TEST(compare_000_1);
+ CPPUNIT_TEST(compare_001);
+ CPPUNIT_TEST(compare_002);
+ CPPUNIT_TEST(compare_002_1);
+ CPPUNIT_TEST(compare_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class compareIgnoreAsciiCase
+
+ class shortenedCompareIgnoreAsciiCase_WithLength : public CppUnit::TestFixture
+ {
+ public:
+
+ void compare_000()
+ {
+ rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( NULL, 0, NULL, 0, 0);
+ }
+
+ void compare_000_1()
+ {
+ OUString aStr1("Line must be equal.");
+ rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), NULL, 0, 1);
+ }
+ void compare_001()
+ {
+ OUString aStr1;
+ OUString aStr2;
+
+ sal_Int32 nValue = rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), aStr2.getStr(), aStr2.getLength(), aStr1.getLength());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void compare_002()
+ {
+ OUString aStr1("Line must be equal.");
+ OUString aStr2("Line must be equal.");
+
+ sal_Int32 nValue = rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ aStr1.getLength());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void compare_002_1()
+ {
+ OUString aStr1("Line must be equal.");
+ OUString aStr2("LINE MUST BE EQUAL.");
+
+ sal_Int32 nValue = rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ aStr1.getLength());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal (if case insensitive).", nValue == 0);
+ }
+
+ void compare_003()
+ {
+ OUString aStr1("Line must differ.");
+ OUString aStr2("Line foo bar, ok, differ.");
+
+ sal_Int32 nValue = rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ 5);
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal first 5 characters.", nValue == 0);
+ }
+
+ void compare_004()
+ {
+ OUString aStr1("Line must differ.");
+ OUString aStr2("Line foo bar, ok, differ.");
+
+ sal_Int32 nValue = rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
+ aStr2.getStr(), aStr2.getLength(),
+ aStr1.getLength());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(shortenedCompareIgnoreAsciiCase_WithLength);
+ CPPUNIT_TEST(compare_000);
+ CPPUNIT_TEST(compare_000_1);
+ CPPUNIT_TEST(compare_001);
+ CPPUNIT_TEST(compare_002);
+ CPPUNIT_TEST(compare_002_1);
+ CPPUNIT_TEST(compare_003);
+ CPPUNIT_TEST(compare_004);
+ CPPUNIT_TEST_SUITE_END();
+}; // class compare
+
+//
+//
+// class hashCode : public CppUnit::TestFixture
+// {
+// public:
+//
+// void hashCode_000()
+// {
+// sal_Int32 nHashCode = rtl_ustr_hashCode( NULL );
+// volatile int dummy = 0;
+// }
+//
+// void hashCode_001()
+// {
+// OString aStr1 = "Line for a hashCode.";
+// sal_Int32 nHashCode = rtl_ustr_hashCode( aStr1.getStr() );
+// printf("hashcode: %d\n", nHashCode);
+// // CPPUNIT_ASSERT_MESSAGE("failed.", nValue == 0);
+// }
+//
+// void hashCode_002()
+// {
+// OString aStr1 = "Line for a hashCode.";
+// sal_Int32 nHashCode1 = rtl_ustr_hashCode( aStr1.getStr() );
+//
+// OString aStr2 = "Line for a hashCode.";
+// sal_Int32 nHashCode2 = rtl_ustr_hashCode( aStr2.getStr() );
+//
+// CPPUNIT_ASSERT_MESSAGE("hashcodes must be equal.", nHashCode1 == nHashCode2 );
+// }
+//
+// void hashCode_003()
+// {
+// OString aStr1 = "Line for a hashCode.";
+// sal_Int32 nHashCode1 = rtl_ustr_hashCode( aStr1.getStr() );
+//
+// OString aStr2 = "Line for another hashcode.";
+// sal_Int32 nHashCode2 = rtl_ustr_hashCode( aStr2.getStr() );
+//
+// CPPUNIT_ASSERT_MESSAGE("hashcodes must differ.", nHashCode1 != nHashCode2 );
+// }
+//
+// // Change the following lines only, if you add, remove or rename
+// // member functions of the current class,
+// // because these macros are need by auto register mechanism.
+//
+// CPPUNIT_TEST_SUITE(hashCode);
+// CPPUNIT_TEST(hashCode_000);
+// CPPUNIT_TEST(hashCode_001);
+// CPPUNIT_TEST(hashCode_002);
+// CPPUNIT_TEST(hashCode_003);
+// CPPUNIT_TEST_SUITE_END();
+// }; // class compare
+
+ class indexOfChar : public CppUnit::TestFixture
+ {
+ public:
+
+ void indexOfChar_000()
+ {
+ rtl_ustr_indexOfChar( NULL, 0 );
+ }
+
+ void indexOfChar_001()
+ {
+ OUString aStr1("Line for an indexOfChar.");
+
+ sal_Int32 nIndex = rtl_ustr_indexOfChar( aStr1.getStr(), 'L' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 0);
+
+ /* sal_Int32 */ nIndex = rtl_ustr_indexOfChar( aStr1.getStr(), 'i' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 1);
+
+ /* sal_Int32 */ nIndex = rtl_ustr_indexOfChar( aStr1.getStr(), 'n' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 2);
+
+ /* sal_Int32 */ nIndex = rtl_ustr_indexOfChar( aStr1.getStr(), 'e' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 3);
+ }
+
+ void indexOfChar_002()
+ {
+ OUString aStr1("Line for an indexOfChar.");
+ sal_Int32 nIndex = rtl_ustr_indexOfChar( aStr1.getStr(), 'y' );
+
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == -1 );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(indexOfChar);
+ CPPUNIT_TEST(indexOfChar_000);
+ CPPUNIT_TEST(indexOfChar_001);
+ CPPUNIT_TEST(indexOfChar_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class indexOfChar
+
+ class lastIndexOfChar : public CppUnit::TestFixture
+ {
+ public:
+
+ void lastIndexOfChar_000()
+ {
+ rtl_ustr_lastIndexOfChar( NULL, 0 );
+ }
+
+ void lastIndexOfChar_001()
+ {
+ OUString aStr1("Line for a lastIndexOfChar.");
+
+ sal_Int32 nIndex = rtl_ustr_lastIndexOfChar( aStr1.getStr(), 'C' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 22);
+
+ /* sal_Int32 */ nIndex = rtl_ustr_lastIndexOfChar( aStr1.getStr(), 'h' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 23);
+
+ /* sal_Int32 */ nIndex = rtl_ustr_lastIndexOfChar( aStr1.getStr(), 'a' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 24);
+
+ /* sal_Int32 */ nIndex = rtl_ustr_lastIndexOfChar( aStr1.getStr(), 'r' );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 25);
+ }
+
+ void lastIndexOfChar_002()
+ {
+ OUString aStr1("Line for a lastIndexOfChar.");
+ sal_Int32 nIndex = rtl_ustr_lastIndexOfChar( aStr1.getStr(), 'y' );
+
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == -1 );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(lastIndexOfChar);
+ CPPUNIT_TEST(lastIndexOfChar_000);
+ CPPUNIT_TEST(lastIndexOfChar_001);
+ CPPUNIT_TEST(lastIndexOfChar_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class lastIndexOfChar
+
+ class indexOfStr : public CppUnit::TestFixture
+ {
+ public:
+
+ void indexOfStr_000()
+ {
+ rtl_ustr_indexOfStr( NULL, 0 );
+ }
+
+ void indexOfStr_000_1()
+ {
+ OUString aStr1("Line for an indexOfStr.");
+ rtl_ustr_indexOfStr( aStr1.getStr(), 0 );
+ }
+
+ void indexOfStr_001()
+ {
+ OUString aStr1("Line for an indexOfStr.");
+
+ OUString suSearch("Line");
+ sal_Int32 nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), suSearch );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 0);
+
+ /* OUString */ suSearch("for");
+ /* sal_Int32 */ nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), suSearch );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 5);
+
+ /* OUString */ suSearch("a");
+ /* sal_Int32 */ nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), suSearch );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 9);
+
+ /* OUString */ suSearch("an index");
+ /* sal_Int32 */ nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), suSearch );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex ==9);
+ }
+
+ void indexOfStr_002()
+ {
+ OUString aStr1("Line for an indexOfStr.");
+ OUString suSearch("not exist");
+ sal_Int32 nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), suSearch );
+
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == -1 );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(indexOfStr);
+ CPPUNIT_TEST(indexOfStr_000);
+ CPPUNIT_TEST(indexOfStr_001);
+ CPPUNIT_TEST(indexOfStr_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class compare
+
+ class lastIndexOfStr : public CppUnit::TestFixture
+ {
+ public:
+
+ void lastIndexOfStr_000()
+ {
+ rtl_ustr_lastIndexOfStr( NULL, NULL );
+ }
+
+ void lastIndexOfStr_000_1()
+ {
+ OUString aStr1("Line for a lastIndexOfStr.");
+ rtl_ustr_lastIndexOfStr( aStr1.getStr(), NULL );
+ }
+
+ void lastIndexOfStr_001()
+ {
+ OUString aStr1("Line for a lastIndexOfStr.");
+ OUString aSearchStr("Index");
+
+ sal_Int32 nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 15);
+
+ /* OString */ aSearchStr = OUString("Line");
+ /* sal_Int32 */ nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 0);
+
+ /* OString */ aSearchStr = OUString();
+ /* sal_Int32 */ nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == -1);
+ }
+
+ void lastIndexOfStr_002()
+ {
+ OUString aStr1("Line for a lastIndexOfStr.");
+ OUString aSearchStr("foo");
+ sal_Int32 nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == -1 );
+ }
+
+ void lastIndexOfStr_003()
+ {
+ OUString aStr1("Line for a lastIndexOfStr.");
+ OUString aSearchStr("O");
+ sal_Int32 nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
+
+ CPPUNIT_ASSERT_MESSAGE("index is wrong.", nIndex == 20 );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(lastIndexOfStr);
+ CPPUNIT_TEST(lastIndexOfStr_000);
+ CPPUNIT_TEST(lastIndexOfStr_001);
+ CPPUNIT_TEST(lastIndexOfStr_002);
+ CPPUNIT_TEST(lastIndexOfStr_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class lastIndexOfStr
+
+ class replaceChar : public CppUnit::TestFixture
+ {
+ public:
+
+ void replaceChar_000()
+ {
+ rtl_ustr_replaceChar( NULL, 0, 0 );
+ }
+
+ void replaceChar_001()
+ {
+ OUString aStr1("replace char.");
+ OUString aShouldStr1("ruplacu char.");
+
+ sal_uInt32 nLength = aStr1.getLength() * sizeof(sal_Unicode);
+ sal_Unicode* pStr = (sal_Unicode*) malloc( nLength + sizeof(sal_Unicode)); // length + 1 (null terminator)
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != NULL);
+ memcpy(pStr, aStr1.getStr(), nLength);
+ pStr[aStr1.getLength()] = 0;
+
+ rtl_ustr_replaceChar( pStr, 'e', 'u' );
+ OUString suStr(pStr, aStr1.getLength());
+
+ CPPUNIT_ASSERT_MESSAGE("replace failed", aShouldStr1.equals(suStr) == sal_True);
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(replaceChar);
+ CPPUNIT_TEST(replaceChar_000);
+ CPPUNIT_TEST(replaceChar_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class replaceChar_WithLength : public CppUnit::TestFixture
+ {
+ public:
+
+ void replaceChar_WithLength_000()
+ {
+ rtl_ustr_replaceChar_WithLength( NULL, 0, 0, 0 );
+ }
+
+ void replaceChar_WithLength_000_1()
+ {
+ rtl_ustr_replaceChar_WithLength( NULL, 1, 0, 0 );
+ }
+ void replaceChar_WithLength_001()
+ {
+ OUString aStr1("replace char.");
+ OUString aShouldStr1("ruplace char.");
+
+ sal_uInt32 nLength = aStr1.getLength() * sizeof(sal_Unicode);
+ sal_Unicode* pStr = (sal_Unicode*) malloc(nLength);
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != NULL);
+ memcpy(pStr, aStr1.getStr(), nLength);
+
+ rtl_ustr_replaceChar_WithLength( pStr, 6, 'e', 'u' );
+ OUString suStr(pStr, aStr1.getLength());
+
+ CPPUNIT_ASSERT_MESSAGE("replace failed", aShouldStr1.equals(suStr) == sal_True);
+ free(pStr);
+ }
+
+ void replaceChar_WithLength_002()
+ {
+ OUString aStr1 ("eeeeeeeeeeeee");
+ OUString aShouldStr1("uuuuuueeeeeee");
+
+ sal_uInt32 nLength = aStr1.getLength() * sizeof(sal_Unicode);
+ sal_Unicode* pStr = (sal_Unicode*) malloc(nLength); // no null terminator is need
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != NULL);
+ memcpy(pStr, aStr1.getStr(), nLength);
+
+ rtl_ustr_replaceChar_WithLength( pStr, 6, 'e', 'u' );
+ OUString suStr(pStr, aStr1.getLength());
+
+ CPPUNIT_ASSERT_MESSAGE("replace failed", aShouldStr1.equals(suStr) == sal_True);
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(replaceChar_WithLength);
+ CPPUNIT_TEST(replaceChar_WithLength_000);
+ CPPUNIT_TEST(replaceChar_WithLength_000_1);
+ CPPUNIT_TEST(replaceChar_WithLength_001);
+ CPPUNIT_TEST(replaceChar_WithLength_002);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiLowerCase : public CppUnit::TestFixture
+ {
+ public:
+
+ void toAsciiLowerCase_000()
+ {
+ rtl_ustr_toAsciiLowerCase( NULL );
+ }
+
+ void toAsciiLowerCase_001()
+ {
+ OUString aStr1("CHANGE THIS TO ASCII LOWER CASE.");
+ OUString aShouldStr1("change this to ascii lower case.");
+
+ sal_uInt32 nLength = aStr1.getLength() * sizeof(sal_Unicode);
+ sal_Unicode* pStr = (sal_Unicode*) malloc(nLength + sizeof(sal_Unicode) ); // we need to add '\0' so one more
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != NULL);
+ memcpy(pStr, aStr1.getStr(), nLength);
+ pStr[aStr1.getLength()] = 0;
+
+ rtl_ustr_toAsciiLowerCase( pStr );
+ OUString suStr(pStr, aStr1.getLength());
+
+ CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(suStr) == sal_True);
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiLowerCase);
+ CPPUNIT_TEST(toAsciiLowerCase_000);
+ CPPUNIT_TEST(toAsciiLowerCase_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiLowerCase_WithLength : public CppUnit::TestFixture
+ {
+ public:
+
+ void toAsciiLowerCase_WithLength_000()
+ {
+ rtl_ustr_toAsciiLowerCase_WithLength( NULL, 0 );
+ }
+
+ void toAsciiLowerCase_WithLength_001()
+ {
+ OUString aStr1("CHANGE THIS TO ASCII LOWER CASE.");
+ OUString aShouldStr1("change thiS TO ASCII LOWER CASE.");
+
+ sal_uInt32 nLength = aStr1.getLength() * sizeof(sal_Unicode);
+ sal_Unicode* pStr = (sal_Unicode*) malloc(nLength);
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != NULL);
+ memcpy(pStr, aStr1.getStr(), nLength);
+
+ rtl_ustr_toAsciiLowerCase_WithLength( pStr, 10 );
+
+ OUString suStr(pStr, aStr1.getLength());
+ sal_Bool bResult = aShouldStr1.equals(suStr);
+
+ printOUString(suStr);
+ printf("Result length: %d\n", suStr.getLength() );
+ printf("Result: %d\n", bResult);
+
+ CPPUNIT_ASSERT_MESSAGE("failed", bResult == sal_True);
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiLowerCase_WithLength);
+ CPPUNIT_TEST(toAsciiLowerCase_WithLength_000);
+ CPPUNIT_TEST(toAsciiLowerCase_WithLength_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiUpperCase : public CppUnit::TestFixture
+ {
+ public:
+
+ void toAsciiUpperCase_000()
+ {
+ rtl_ustr_toAsciiUpperCase( NULL );
+ }
+
+ void toAsciiUpperCase_001()
+ {
+ OUString aStr1("change this to ascii upper case.");
+ OUString aShouldStr1("CHANGE THIS TO ASCII UPPER CASE.");
+
+ sal_uInt32 nLength = aStr1.getLength() * sizeof(sal_Unicode);
+ sal_Unicode* pStr = (sal_Unicode*) malloc(nLength + sizeof(sal_Unicode)); // length + null terminator
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != NULL);
+ memcpy(pStr, aStr1.getStr(), nLength);
+ pStr[aStr1.getLength()] = 0;
+
+ rtl_ustr_toAsciiUpperCase( pStr );
+ OUString suStr(pStr, aStr1.getLength());
+
+ CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(suStr) == sal_True);
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiUpperCase);
+ CPPUNIT_TEST(toAsciiUpperCase_000);
+ CPPUNIT_TEST(toAsciiUpperCase_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class toAsciiUpperCase_WithLength : public CppUnit::TestFixture
+ {
+ public:
+
+ void toAsciiUpperCase_WithLength_000()
+ {
+ rtl_ustr_toAsciiUpperCase_WithLength( NULL, 0 );
+ }
+
+ void toAsciiUpperCase_WithLength_001()
+ {
+ OUString aStr1("change this to ascii lower case.");
+ OUString aShouldStr1("CHANGE THIs to ascii lower case.");
+
+ sal_uInt32 nLength = aStr1.getLength() * sizeof(sal_Unicode);
+ sal_Unicode* pStr = (sal_Unicode*) malloc(nLength);
+ CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != NULL);
+
+ memcpy(pStr, aStr1.getStr(), nLength);
+ rtl_ustr_toAsciiUpperCase_WithLength( pStr, 10 );
+ OUString suStr(pStr, aStr1.getLength());
+
+ // printf("Uppercase with length: '%s'\n", aStr1.getStr());
+ CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(suStr) == sal_True);
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(toAsciiUpperCase_WithLength);
+ CPPUNIT_TEST(toAsciiUpperCase_WithLength_000);
+ CPPUNIT_TEST(toAsciiUpperCase_WithLength_001);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class replaceChar
+
+ class trim_WithLength : public CppUnit::TestFixture
+ {
+ public:
+ void trim_WithLength_000()
+ {
+ rtl_ustr_trim_WithLength(NULL, 0);
+ // should not GPF
+ }
+
+ void trim_WithLength_000_1()
+ {
+ OUString suStr(" trim this");
+
+ sal_uInt32 nLength = suStr.getLength() * sizeof(sal_Unicode);
+ sal_Unicode *pStr = (sal_Unicode*)malloc(nLength);
+ memcpy(pStr, suStr.getStr(), nLength);
+
+ rtl_ustr_trim_WithLength( pStr, 0 );
+ free(pStr);
+ }
+
+ void trim_WithLength_001()
+ {
+ OUString suStr(" trim this");
+ sal_uInt32 nLength = suStr.getLength() * sizeof(sal_Unicode);
+ sal_Unicode *pStr = (sal_Unicode*)malloc(nLength);
+ memcpy(pStr, suStr.getStr(), nLength);
+
+ rtl_ustr_trim_WithLength( pStr, 2 );
+
+ CPPUNIT_ASSERT_MESSAGE("string should be empty", OUString(pStr).getLength() == 0);
+ free(pStr);
+ }
+
+ void trim_WithLength_002()
+ {
+ OUString suStr("trim this");
+
+ sal_uInt32 nLength = suStr.getLength() * sizeof(sal_Unicode);
+ sal_Unicode *pStr = (sal_Unicode*)malloc(nLength);
+ memcpy(pStr, suStr.getStr(), nLength);
+
+ rtl_ustr_trim_WithLength( pStr, 5 );
+
+ CPPUNIT_ASSERT_MESSAGE("string should contain 'trim'", OUString(pStr).getLength() == 4);
+ free(pStr);
+ }
+
+ void trim_WithLength_003()
+ {
+ OUString suStr(" trim this");
+
+ sal_uInt32 nLength = suStr.getLength() * sizeof(sal_Unicode);
+ sal_Unicode *pStr = (sal_Unicode*)malloc(nLength);
+ memcpy(pStr, suStr.getStr(), nLength);
+
+ rtl_ustr_trim_WithLength( pStr, 11 );
+
+ CPPUNIT_ASSERT_MESSAGE("string should contain 'trim'", OUString(pStr).getLength() == 4);
+ free(pStr);
+ }
+
+ void trim_WithLength_004()
+ {
+ OUString suStr("\r\n\t \n\r trim \n this");
+
+ sal_uInt32 nLength = suStr.getLength() * sizeof(sal_Unicode);
+ sal_Unicode *pStr = (sal_Unicode*)malloc(nLength);
+ memcpy(pStr, suStr.getStr(), nLength);
+
+ rtl_ustr_trim_WithLength( pStr, 17 );
+
+ CPPUNIT_ASSERT_MESSAGE("string should contain 'trim'", OUString(pStr).getLength() == 4);
+ free(pStr);
+ }
+
+ void trim_WithLength_005()
+ {
+ OUString suStr("\r\n\t \n\r trim \t this \n\r\t\t ");
+
+ sal_uInt32 nLength = suStr.getLength() * sizeof(sal_Unicode);
+ sal_Unicode *pStr = (sal_Unicode*)malloc(nLength);
+ memcpy(pStr, suStr.getStr(), nLength);
+
+ rtl_ustr_trim_WithLength( pStr, suStr.getLength() );
+
+ CPPUNIT_ASSERT_MESSAGE("string should contain 'trim \\t this'", OUString(pStr).getLength() == 11);
+ free(pStr);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(trim_WithLength);
+ CPPUNIT_TEST(trim_WithLength_000);
+ CPPUNIT_TEST(trim_WithLength_000_1);
+ CPPUNIT_TEST(trim_WithLength_001);
+ CPPUNIT_TEST(trim_WithLength_002);
+ CPPUNIT_TEST(trim_WithLength_003);
+ CPPUNIT_TEST(trim_WithLength_004);
+ CPPUNIT_TEST(trim_WithLength_005);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class valueOfChar : public CppUnit::TestFixture
+ {
+ public:
+ void valueOfChar_000()
+ {
+ rtl_ustr_valueOfChar(NULL, 0);
+ // should not GPF
+ }
+ void valueOfChar_001()
+ {
+ sal_Unicode *pStr = (sal_Unicode*)malloc(RTL_USTR_MAX_VALUEOFCHAR);
+ if (pStr)
+ {
+ rtl_ustr_valueOfChar(pStr, 'A');
+
+ CPPUNIT_ASSERT_MESSAGE("string should contain 'A'", pStr[0] == L'A');
+ free(pStr);
+ }
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(valueOfChar);
+ CPPUNIT_TEST(valueOfChar_000);
+ CPPUNIT_TEST(valueOfChar_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class ascii_compare_WithLength : public CppUnit::TestFixture
+ {
+ public:
+ void zero_length()
+ {
+ sal_Unicode pUnicode[] = {0xffff, 0xffff};
+ char const * pAscii = "reference";
+
+ sal_Int32 value = rtl_ustr_ascii_compare_WithLength(pUnicode, 0, pAscii);
+ CPPUNIT_ASSERT_MESSAGE("ref string is empty, compare failed, needs to be <0.", value < 0);
+ }
+
+ void equal_ascii_shorter()
+ {
+ OUString refStr("referenceString");
+ char const * pAscii = "reference";
+
+ sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, refStr.pData->length, pAscii);
+ CPPUNIT_ASSERT_MESSAGE("ref string is bigger, compare failed, needs to be >0.", value > 0);
+ }
+
+ void equal_ascii_shorter_asciiLength()
+ {
+ OUString refStr("referenceString");
+ char const * pAscii = "reference";
+
+ sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, rtl_str_getLength(pAscii), pAscii);
+ CPPUNIT_ASSERT_MESSAGE("ref string is bigger despite ascii length, compare failed, needs to be == 0.", value == 0);
+ }
+
+ void equal_ref_shorter()
+ {
+ OUString refStr("reference");
+ char const * pAscii = "referenceString";
+
+ sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, refStr.pData->length, pAscii);
+ CPPUNIT_ASSERT_MESSAGE("ascii string is bigger, but only compared to ref length, needs to be 0.", value < 0);
+ }
+
+ void equal()
+ {
+ OUString refStr("reference");
+ char const * pAscii = "reference";
+
+ sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, refStr.pData->length, pAscii);
+ CPPUNIT_ASSERT_MESSAGE("strings are equal, compare failed, needs to be 0.", value == 0);
+ }
+
+ void unequal_reference_bigger()
+ {
+ OUString refStr("defghi");
+ char const * pAscii = "abc";
+
+ sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, refStr.pData->length, pAscii);
+ CPPUNIT_ASSERT_MESSAGE("strings are unequal and ref is bigger, needs to be >0.", value > 0);
+ }
+
+ void unequal_ascii_bigger()
+ {
+ OUString refStr("abc");
+ char const * pAscii = "defghi";
+
+ sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, refStr.pData->length, pAscii);
+
+ CPPUNIT_ASSERT_MESSAGE("strings are unequal and ascii is bigger, needs to be <0.", value < 0);
+ }
+
+ CPPUNIT_TEST_SUITE(ascii_compare_WithLength);
+ CPPUNIT_TEST(zero_length);
+ CPPUNIT_TEST(equal_ascii_shorter);
+ CPPUNIT_TEST(equal_ascii_shorter_asciiLength);
+ CPPUNIT_TEST(equal_ref_shorter);
+ CPPUNIT_TEST(equal);
+ CPPUNIT_TEST(unequal_reference_bigger);
+ CPPUNIT_TEST(unequal_ascii_bigger);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class ascii_shortenedCompareIgnoreAsciiCase_WithLength : public CppUnit::TestFixture
+ {
+ public:
+
+ void ascii_shortenedCompareIgnoreAsciiCase_WithLength_000()
+ {
+ rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( NULL, 0, NULL, 0);
+ // should not GPF
+ }
+
+ void ascii_shortenedCompareIgnoreAsciiCase_WithLength_000_1()
+ {
+ OUString aStr1("Line must be equal.");
+ rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), NULL, 0);
+ // should not GPF
+ }
+ void ascii_shortenedCompareIgnoreAsciiCase_WithLength_000_2()
+ {
+ OUString aStr1("Line must be equal.");
+ OString sStr2 = "Line is shorter.";
+ rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), sStr2.getLength(), sStr2.getStr(), 0);
+ // should not GPF
+ }
+ void ascii_shortenedCompareIgnoreAsciiCase_WithLength_001()
+ {
+ OUString suStr1;
+ OString sStr2;
+
+ sal_Int32 nValue = rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( suStr1, 0, sStr2.getStr(), 0);
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void ascii_shortenedCompareIgnoreAsciiCase_WithLength_002()
+ {
+ OUString suStr1("Line must be equal.");
+ OString sStr2 = "Line must be equal.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( suStr1.getStr(), suStr1.getLength(), sStr2.getStr(), sStr2.getLength());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void ascii_shortenedCompareIgnoreAsciiCase_WithLength_003()
+ {
+ OUString suStr1("Line must differ.");
+ OString sStr2 = "Line must be differ and longer.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( suStr1.getStr(), suStr1.getLength(), sStr2.getStr(), sStr2.getLength());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(ascii_shortenedCompareIgnoreAsciiCase_WithLength);
+ CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_000);
+ CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_000_1);
+ CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_000_2);
+ CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_001);
+ CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_002);
+ CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ascii_shortenedCompareIgnoreAsciiCase_WithLength
+
+ class ascii_compareIgnoreAsciiCase_WithLength : public CppUnit::TestFixture
+ {
+ public:
+
+ void ascii_compareIgnoreAsciiCase_WithLength_000()
+ {
+ rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( NULL, 0, NULL);
+ // should not GPF
+ }
+
+ void ascii_compareIgnoreAsciiCase_WithLength_000_1()
+ {
+ OUString aStr1("Line must be equal.");
+ rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( aStr1.getStr(), 0, NULL);
+ // should not GPF
+ }
+ void ascii_compareIgnoreAsciiCase_WithLength_000_2()
+ {
+ OUString aStr1("Line must be equal.");
+ OString sStr2 = "Line is shorter.";
+ rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( aStr1.getStr(), sStr2.getLength(), sStr2.getStr());
+ // should not GPF
+ }
+ void ascii_compareIgnoreAsciiCase_WithLength_001()
+ {
+ OUString suStr1;
+ OString sStr2;
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( suStr1, 0, sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compareIgnoreAsciiCase_WithLength failed, strings are equal.", nValue == 0);
+ }
+
+ void ascii_compareIgnoreAsciiCase_WithLength_002()
+ {
+ OUString suStr1("Line must be equal.");
+ OString sStr2 = "Line must be equal.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( suStr1.getStr(), suStr1.getLength(), sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void ascii_compareIgnoreAsciiCase_WithLength_003()
+ {
+ OUString suStr1("Line must differ.");
+ OString sStr2 = "Line must be differ and longer.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( suStr1.getStr(), suStr1.getLength(), sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(ascii_compareIgnoreAsciiCase_WithLength);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_000);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_000_1);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_000_2);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_001);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_002);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ascii_compareIgnoreAsciiCase_WithLength
+
+ class ascii_compare : public CppUnit::TestFixture
+ {
+ public:
+
+ void ascii_compare_000()
+ {
+ rtl_ustr_ascii_compare( NULL, NULL);
+ // should not GPF
+ }
+
+ void ascii_compare_000_1()
+ {
+ OUString aStr1("Line must be equal.");
+ rtl_ustr_ascii_compare( aStr1.getStr(), NULL);
+ // should not GPF
+ }
+ void ascii_compare_001()
+ {
+ OUString suStr1;
+ OString sStr2;
+
+ sal_Int32 nValue = rtl_ustr_ascii_compare( suStr1, sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void ascii_compare_002()
+ {
+ OUString suStr1("Line must be equal.");
+ OString sStr2 = "Line must be equal.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compare( suStr1.getStr(), sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void ascii_compare_003()
+ {
+ OUString suStr1("Line must differ.");
+ OString sStr2 = "Line foo bar, ok, differ.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compare( suStr1.getStr(), sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(ascii_compare);
+ CPPUNIT_TEST(ascii_compare_000);
+ CPPUNIT_TEST(ascii_compare_000_1);
+ CPPUNIT_TEST(ascii_compare_001);
+ CPPUNIT_TEST(ascii_compare_002);
+ CPPUNIT_TEST(ascii_compare_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ascii_compare
+
+ class ascii_compareIgnoreAsciiCase : public CppUnit::TestFixture
+ {
+ public:
+
+ void ascii_compareIgnoreAsciiCase_000()
+ {
+ rtl_ustr_ascii_compareIgnoreAsciiCase( NULL, NULL);
+ // should not GPF
+ }
+
+ void ascii_compareIgnoreAsciiCase_000_1()
+ {
+ OUString aStr1("Line must be equal.");
+ rtl_ustr_ascii_compareIgnoreAsciiCase( aStr1.getStr(), NULL);
+ // should not GPF
+ }
+ void ascii_compareIgnoreAsciiCase_001()
+ {
+ OUString suStr1;
+ OString sStr2;
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1, sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void ascii_compareIgnoreAsciiCase_002()
+ {
+ OUString suStr1("Line must be equal.");
+ OString sStr2 = "Line must be equal.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1.getStr(), sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void ascii_compareIgnoreAsciiCase_002_1()
+ {
+ OUString suStr1("Line must be equal, when ignore case.");
+ OString sStr2 = "LINE MUST BE EQUAL, WHEN IGNORE CASE.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1.getStr(), sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal (if case insensitive).", nValue == 0);
+ }
+
+ void ascii_compareIgnoreAsciiCase_003()
+ {
+ OUString suStr1("Line must differ.");
+ OString sStr2 = "Line foo bar, ok, differ.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1.getStr(), sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ //! LLA: some more tests with some high level strings
+
+ // void ascii_compareIgnoreAsciiCase_001()
+ // {
+ // OUString suStr1("change this to ascii upper case.");
+ // OUString aShouldStr1("CHANGE THIS TO ASCII UPPER CASE.");
+ //
+ // sal_uInt32 nLength = suStr1.getLength() * sizeof(sal_Unicode);
+ // sal_Unicode* pStr = (sal_Unicode*) malloc(nLength + sizeof(sal_Unicode)); // length + null terminator
+ // CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != NULL);
+ // memset(pStr, 0, nLength + sizeof(sal_Unicode));
+ // memcpy(pStr, suStr1.getStr(), nLength);
+ //
+ // rtl_ustr_ascii_compareIgnoreAsciiCase( pStr );
+ // OUString suStr(pStr, suStr1.getLength());
+ //
+ // CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(suStr) == sal_True);
+ // free(pStr);
+ // }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(ascii_compareIgnoreAsciiCase);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_000);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_000_1);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_001);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_002);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_002_1);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ascii_compareIgnoreAsciiCase
+
+ // sample out of inc/rtl/ustring.hxx
+ // rtl_uString * pToken = NULL;
+ // sal_Int32 nIndex = 0;
+ // do
+ // {
+ // ...
+ // nIndex = rtl_uString_getToken(&pToken, pStr, 0, ';', nIndex);
+ // ...
+ // }
+ // while (nIndex >= 0);
+
+ class getToken : public CppUnit::TestFixture
+ {
+ public:
+
+ void getToken_000()
+ {
+ rtl_ustr_ascii_compareIgnoreAsciiCase( NULL, NULL);
+ // should not GPF
+ }
+
+ void ascii_compareIgnoreAsciiCase_000_1()
+ {
+ OUString aStr1("Line must be equal.");
+ rtl_ustr_ascii_compareIgnoreAsciiCase( aStr1.getStr(), NULL);
+ // should not GPF
+ }
+ void ascii_compareIgnoreAsciiCase_001()
+ {
+ OUString suStr1;
+ OString sStr2;
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1, sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void ascii_compareIgnoreAsciiCase_002()
+ {
+ OUString suStr1("Line must be equal.");
+ OString sStr2 = "Line must be equal.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1.getStr(), sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal.", nValue == 0);
+ }
+
+ void ascii_compareIgnoreAsciiCase_002_1()
+ {
+ OUString suStr1("Line must be equal, when ignore case.");
+ OString sStr2 = "LINE MUST BE EQUAL, WHEN IGNORE CASE.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1.getStr(), sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings are equal (if case insensitive).", nValue == 0);
+ }
+
+ void ascii_compareIgnoreAsciiCase_003()
+ {
+ OUString suStr1("Line must differ.");
+ OString sStr2 = "Line foo bar, ok, differ.";
+
+ sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1.getStr(), sStr2.getStr());
+ CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0);
+ }
+
+ //! LLA: some more tests with some high level strings
+
+ // void ascii_compareIgnoreAsciiCase_001()
+ // {
+ // OUString suStr1("change this to ascii upper case.");
+ // OUString aShouldStr1("CHANGE THIS TO ASCII UPPER CASE.");
+ //
+ // sal_uInt32 nLength = suStr1.getLength() * sizeof(sal_Unicode);
+ // sal_Unicode* pStr = (sal_Unicode*) malloc(nLength + sizeof(sal_Unicode)); // length + null terminator
+ // CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != NULL);
+ // memset(pStr, 0, nLength + sizeof(sal_Unicode));
+ // memcpy(pStr, suStr1.getStr(), nLength);
+ //
+ // rtl_ustr_ascii_compareIgnoreAsciiCase( pStr );
+ // OUString suStr(pStr, suStr1.getLength());
+ //
+ // CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(suStr) == sal_True);
+ // free(pStr);
+ // }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(ascii_compareIgnoreAsciiCase);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_000);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_000_1);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_001);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_002);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_002_1);
+ CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_003);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class ascii_compareIgnoreAsciiCase
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::compare);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::compareIgnoreAsciiCase);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::ascii_compare_WithLength);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::shortenedCompareIgnoreAsciiCase_WithLength);
+// CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::hashCode);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::indexOfChar);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::lastIndexOfChar);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::indexOfStr);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::lastIndexOfStr);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::replaceChar);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::replaceChar_WithLength);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::toAsciiLowerCase);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::toAsciiLowerCase_WithLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::toAsciiUpperCase);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::toAsciiUpperCase_WithLength);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::trim_WithLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::valueOfChar);
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::ascii_compare);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::ascii_compareIgnoreAsciiCase);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::ascii_compareIgnoreAsciiCase_WithLength);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::ascii_shortenedCompareIgnoreAsciiCase_WithLength);
+
+} // namespace rtl_ustr
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions("")
+// to let the user the possibility to also register some functions by hand.
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/oustring/rtl_ustr.xsce b/sal/qa/rtl/oustring/rtl_ustr.xsce
new file mode 100644
index 000000000..c7b5c99f3
--- /dev/null
+++ b/sal/qa/rtl/oustring/rtl_ustr.xsce
@@ -0,0 +1,50 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+# functions which are gpf
+
+rtl_ustr.compare.compare_000
+rtl_ustr.compare.compare_000_1
+
+rtl_ustr.compareIgnoreAsciiCase.compare_000
+rtl_ustr.compareIgnoreAsciiCase.compare_000_1
+
+rtl_ustr.indexOfChar.indexOfChar_000
+
+rtl_ustr.lastIndexOfChar.lastIndexOfChar_000
+
+rtl_ustr.indexOfStr.indexOfStr_000
+
+rtl_ustr.lastIndexOfStr.lastIndexOfStr_000
+
+rtl_ustr.replaceChar.replaceChar_000
+
+rtl_ustr.replaceChar_WithLength.replaceChar_WithLength_000_1
+
+rtl_ustr.toAsciiLowerCase.toAsciiLowerCase_000
+
+rtl_ustr.toAsciiUpperCase.toAsciiUpperCase_000
+
+rtl_ustr.valueOfChar.valueOfChar_000
+
+rtl_ustr.ascii_compare.ascii_compare_000
+rtl_ustr.ascii_compare.ascii_compare_000_1
+rtl_ustr.ascii_compareIgnoreAsciiCase.ascii_compareIgnoreAsciiCase_000
+rtl_ustr.ascii_compareIgnoreAsciiCase.ascii_compareIgnoreAsciiCase_000_1
+rtl_ustr.ascii_compareIgnoreAsciiCase_WithLength.ascii_compareIgnoreAsciiCase_WithLength_000
+rtl_ustr.ascii_compareIgnoreAsciiCase_WithLength.ascii_compareIgnoreAsciiCase_WithLength_000_1
+
diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx
new file mode 100644
index 000000000..f5168b60d
--- /dev/null
+++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx
@@ -0,0 +1,43 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <o3tl/cppunittraitshelper.hxx>
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/ustrbuf.hxx>
+
+namespace test::oustringbuffer {
+
+class AppendChar: public CppUnit::TestFixture {
+private:
+ void testAppendChar();
+
+ CPPUNIT_TEST_SUITE(AppendChar);
+ CPPUNIT_TEST(testAppendChar);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void AppendChar::testAppendChar() {
+ // Check that append('a') does not unexpectedly pick
+ // append(sal_Int32 i, sal_Int16 radix = 10):
+ OUStringBuffer s;
+ s.append('a');
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s.getLength());
+ CPPUNIT_ASSERT_EQUAL(u'a', s[0]);
+}
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustringbuffer::AppendChar);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appenduninitialized.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appenduninitialized.cxx
new file mode 100644
index 000000000..7530d6a32
--- /dev/null
+++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appenduninitialized.cxx
@@ -0,0 +1,66 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/ustrbuf.hxx>
+#include <sal/types.h>
+
+namespace {
+
+class Test: public CppUnit::TestFixture {
+private:
+ void testEmpty();
+
+ void testNonEmpty();
+
+ void testZero();
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testEmpty);
+ CPPUNIT_TEST(testNonEmpty);
+ CPPUNIT_TEST(testZero);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void Test::testEmpty() {
+ OUStringBuffer s;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+ sal_Unicode * p = s.appendUninitialized(5);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast<void const *>(s.getStr()), static_cast<void const *>(p));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength());
+}
+
+void Test::testNonEmpty() {
+ OUStringBuffer s("ab");
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), s.getLength());
+ sal_Unicode * p = s.appendUninitialized(5);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast<void const *>(s.getStr() + 2),
+ static_cast<void const *>(p));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7), s.getLength());
+}
+
+void Test::testZero() {
+ OUStringBuffer s;
+ sal_Unicode * p = s.appendUninitialized(0);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast<void const *>(s.getStr()), static_cast<void const *>(p));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength());
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_assign.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_assign.cxx
new file mode 100644
index 000000000..0d9cd2b82
--- /dev/null
+++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_assign.cxx
@@ -0,0 +1,78 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <rtl/ustrbuf.hxx>
+#include <rtl/ustring.hxx>
+
+namespace {
+
+class Test: public CppUnit::TestFixture {
+private:
+ void test() {
+ OUStringBuffer b1;
+ OUString s1("123456789012345");
+ b1 = s1;
+ CPPUNIT_ASSERT_EQUAL(s1, b1.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b1.getCapacity());
+ OUString s2("abc");
+ b1 = s2;
+ CPPUNIT_ASSERT_EQUAL(s2, b1.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b1.getCapacity());
+ OUString s3("1234567890123456");
+ b1 = s3;
+ CPPUNIT_ASSERT_EQUAL(s3, b1.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(32), b1.getCapacity());
+ OUStringBuffer b2;
+ b2 = "123456789012345";
+ CPPUNIT_ASSERT_EQUAL(s1, b2.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b2.getCapacity());
+ b2 = "abc";
+ CPPUNIT_ASSERT_EQUAL(s2, b2.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b2.getCapacity());
+ b2 = "1234567890123456";
+ CPPUNIT_ASSERT_EQUAL(s3, b2.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(32), b2.getCapacity());
+ OUStringBuffer b3;
+ b3 = u"123456789012345";
+ CPPUNIT_ASSERT_EQUAL(s1, b3.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b3.getCapacity());
+ b3 = u"abc";
+ CPPUNIT_ASSERT_EQUAL(s2, b3.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b3.getCapacity());
+ b3 = u"1234567890123456";
+ CPPUNIT_ASSERT_EQUAL(s3, b3.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(32), b3.getCapacity());
+ OUStringBuffer b4;
+ b4 = OUStringLiteral("1") + "23456789012345";
+ CPPUNIT_ASSERT_EQUAL(s1, b4.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b4.getCapacity());
+ b4 = OUStringLiteral("a") + "bc";
+ CPPUNIT_ASSERT_EQUAL(s2, b4.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b4.getCapacity());
+ b4 = OUStringLiteral("1") + "234567890123456";
+ CPPUNIT_ASSERT_EQUAL(s3, b4.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(32), b4.getCapacity());
+ }
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_tostring.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_tostring.cxx
new file mode 100644
index 000000000..66231d8b8
--- /dev/null
+++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_tostring.cxx
@@ -0,0 +1,53 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/ustring.hxx>
+
+namespace test::oustringbuffer {
+
+class ToString: public CppUnit::TestFixture {
+private:
+ void testToString();
+
+ CPPUNIT_TEST_SUITE(ToString);
+ CPPUNIT_TEST(testToString);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustringbuffer::ToString);
+
+void test::oustringbuffer::ToString::testToString() {
+ OUStringBuffer sb("test string");
+ OUString str = sb.toString();
+ CPPUNIT_ASSERT_EQUAL( OUString("test string"), str );
+ // returned OUString must be independent from sb
+ sb.append( 'a' );
+ CPPUNIT_ASSERT_EQUAL( OUString("test string"), str );
+ sb.setLength(0);
+ CPPUNIT_ASSERT_EQUAL( OUString("test string"), str );
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_utf32.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_utf32.cxx
new file mode 100644
index 000000000..80643df2e
--- /dev/null
+++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_utf32.cxx
@@ -0,0 +1,125 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+
+namespace test::oustringbuffer {
+
+class Utf32: public CppUnit::TestFixture {
+private:
+ void appendUtf32();
+
+ void insertUtf32();
+
+ CPPUNIT_TEST_SUITE(Utf32);
+ CPPUNIT_TEST(appendUtf32);
+ CPPUNIT_TEST(insertUtf32);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustringbuffer::Utf32);
+
+namespace {
+
+void appendString(OStringBuffer & buffer, OUString const & string) {
+ buffer.append('"');
+ for (int i = 0; i < string.getLength(); ++i) {
+ buffer.append("\\u");
+ sal_Unicode c = string[i];
+ if (c < 0x1000) {
+ buffer.append('0');
+ if (c < 0x100) {
+ buffer.append('0');
+ if (c < 0x10) {
+ buffer.append('0');
+ }
+ }
+ }
+ buffer.append(
+ static_cast< sal_Int32 >(c), static_cast< sal_Int16 >(16));
+ }
+ buffer.append('"');
+}
+
+void createMessage(
+ OStringBuffer & message, OUString const & string1,
+ OUString const & string2)
+{
+ message.setLength(0);
+ appendString(message, string1);
+ message.append(" vs. ");
+ appendString(message, string2);
+}
+
+}
+
+void test::oustringbuffer::Utf32::appendUtf32() {
+ int const str1Len = 3;
+ sal_Unicode const str1[str1Len] = { 'a', 'b', 'c' };
+ int const str2Len = 4;
+ sal_Unicode const str2[str2Len] = { 'a', 'b', 'c', 'd' };
+ int const str3Len = 6;
+ sal_Unicode const str3[str3Len] = { 'a', 'b', 'c', 'd', 0xD800, 0xDC00 };
+ OStringBuffer message;
+ OUStringBuffer buf1(OUString(str1, str1Len));
+ buf1.appendUtf32('d');
+ OUString res1(buf1.makeStringAndClear());
+ createMessage(message, res1, OUString(str2, str2Len));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ message.getStr(), OUString(str2, str2Len), res1);
+ OUStringBuffer buf2(OUString(str2, str2Len));
+ buf2.appendUtf32(0x10000);
+ OUString res2(buf2.makeStringAndClear());
+ createMessage(message, res2, OUString(str3, str3Len));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ message.getStr(), OUString(str3, str3Len), res2);
+}
+
+void test::oustringbuffer::Utf32::insertUtf32() {
+ int const str1Len = 3;
+ sal_Unicode const str1[str1Len] = { 'a', 'b', 'c' };
+ int const str2Len = 4;
+ sal_Unicode const str2[str2Len] = { 'a', 'b', 'd', 'c' };
+ int const str3Len = 6;
+ sal_Unicode const str3[str3Len] = { 'a', 'b', 0xDBFF, 0xDFFF, 'd', 'c' };
+ OStringBuffer message;
+ OUStringBuffer buf1(OUString(str1, str1Len));
+ buf1.insertUtf32(2, 'd');
+ OUString res1(buf1.makeStringAndClear());
+ createMessage(message, res1, OUString(str2, str2Len));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ message.getStr(), OUString(str2, str2Len), res1);
+ OUStringBuffer buf2(OUString(str2, str2Len));
+ buf2.insertUtf32(2, 0x10FFFF);
+ OUString res2(buf2.makeStringAndClear());
+ createMessage(message, res2, OUString(str3, str3Len));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ message.getStr(), OUString(str3, str3Len), res2);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/process/child_process.cxx b/sal/qa/rtl/process/child_process.cxx
new file mode 100644
index 000000000..d5039b059
--- /dev/null
+++ b/sal/qa/rtl/process/child_process.cxx
@@ -0,0 +1,60 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <stdio.h>
+#include "sal/main.h"
+#include <rtl/process.h>
+#include <rtl_Process_Const.h>
+
+// ----------------------------------- Main -----------------------------------
+SAL_IMPLEMENT_MAIN_WITH_ARGS(, argv)
+{
+ printf("# %s is called.\n", argv[0]);
+
+ sal_Int32 nCount = rtl_getAppCommandArgCount();
+ if ( nCount != 4 )
+ {
+ printf(
+ "# not enough arguments found, need 4 found %ld.\n",
+ sal::static_int_cast< long >(nCount));
+ return 0;
+ }
+
+ OUString suArg[4];
+ for( sal_Int32 i = 0 ; i < nCount ; i ++ )
+ {
+ rtl_getAppCommandArg( i , &(suArg[i].pData) );
+ OString aString;
+ aString = OUStringToOString( suArg[i], RTL_TEXTENCODING_ASCII_US );
+ printf(
+ "# Parameter[%ld] is %s\n", sal::static_int_cast< long >(i),
+ aString.getStr());
+ }
+
+ if ( suArg[0] != suParam0 ||
+ suArg[1] != suParam1 ||
+ suArg[2] != suParam2 ||
+ suArg[3] != suParam3 )
+ {
+ return 0;
+ }
+ return 2;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/process/child_process_id.cxx b/sal/qa/rtl/process/child_process_id.cxx
new file mode 100644
index 000000000..17f330fa7
--- /dev/null
+++ b/sal/qa/rtl/process/child_process_id.cxx
@@ -0,0 +1,54 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <stdio.h>
+#include "sal/main.h"
+#include <rtl/process.h>
+#include <rtl_Process_Const.h>
+
+void printUuid( sal_uInt8 *pNode )
+{
+ for( sal_Int32 i1 = 0 ; i1 < 4 ; i1++ )
+ {
+ for( sal_Int32 i2 = 0 ; i2 < 4 ; i2++ )
+ {
+ sal_uInt8 nValue = pNode[i1*4 +i2];
+ if (nValue < 16)
+ {
+ printf( "0");
+ }
+ printf( "%02x" ,nValue );
+ }
+ if( i1 == 3 )
+ break;
+ //printf( "-" );
+ }
+}
+
+// ----------------------------------- Main -----------------------------------
+
+SAL_IMPLEMENT_MAIN()
+{
+ sal_uInt8 pTargetUUID[16];
+ rtl_getGlobalProcessId( pTargetUUID );
+ printUuid( pTargetUUID );
+ return 1;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/process/rtl_Process.cxx b/sal/qa/rtl/process/rtl_Process.cxx
new file mode 100644
index 000000000..eae3cd5c3
--- /dev/null
+++ b/sal/qa/rtl/process/rtl_Process.cxx
@@ -0,0 +1,254 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <memory>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sal/types.h>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <rtl/ustring.hxx>
+#include <rtl/string.hxx>
+#include <rtl/process.h>
+#include <osl/process.h>
+#include <osl/module.hxx>
+
+#include "rtl_Process_Const.h"
+
+using namespace osl;
+
+/** print a UNI_CODE String. And also print some comments of the string.
+*/
+static void printUString( const OUString & str, const char * msg )
+{
+ if ( msg != nullptr )
+ {
+ printf("#%s #printUString_u# ", msg );
+ }
+ OString aString = OUStringToOString( str, RTL_TEXTENCODING_ASCII_US );
+ printf("%s\n", aString.getStr( ) );
+}
+
+static OUString getModulePath()
+{
+ OUString suDirPath;
+ ::osl::Module::getUrlFromAddress(
+ reinterpret_cast< oslGenericFunction >(getModulePath), suDirPath );
+
+ printUString(suDirPath, "modulePath:");
+ suDirPath = suDirPath.copy( 0, suDirPath.lastIndexOf('/') );
+ suDirPath = suDirPath.copy( 0, suDirPath.lastIndexOf('/') + 1) + "bin";
+ return suDirPath;
+}
+
+namespace rtl_Process
+{
+class getAppCommandArg : public CppUnit::TestFixture
+{
+public:
+ void getAppCommandArg_001()
+ {
+#if defined(_WIN32)
+ const OUString EXECUTABLE_NAME("child_process.exe");
+#else
+ const OUString EXECUTABLE_NAME("child_process");
+#endif
+ OUString suCWD = getModulePath();
+ // OUString suCWD2 = getExecutableDirectory();
+
+ printUString(suCWD, "path to the current module");
+ // printUString(suCWD2, "suCWD2");
+
+ oslProcess hProcess = nullptr;
+
+ const int nParameterCount = 4;
+ rtl_uString* pParameters[ nParameterCount ];
+
+ pParameters[0] = suParam0.pData;
+ pParameters[1] = suParam1.pData;
+ pParameters[2] = suParam2.pData;
+ pParameters[3] = suParam3.pData;
+
+ OUString suFileURL = suCWD + "/" + EXECUTABLE_NAME;
+
+ oslProcessError osl_error = osl_executeProcess(
+ suFileURL.pData,
+ pParameters,
+ nParameterCount,
+ osl_Process_WAIT,
+ nullptr, /* osl_getCurrentSecurity() */
+ suCWD.pData,
+ nullptr,
+ 0,
+ &hProcess );
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createProcess failed",
+ osl_Process_E_None, osl_error
+ );
+ //we could get return value only after the process terminated
+ osl_joinProcess(hProcess);
+ // CPPUNIT_ASSERT_MESSAGE
+ // (
+ // "osl_joinProcess returned with failure",
+ // osl_Process_E_None == osl_error
+ // );
+ std::unique_ptr<oslProcessInfo> pInfo( new oslProcessInfo );
+ //please pay attention to initial the Size to sizeof(oslProcessInfo), or else
+ //you will get unknown error when call osl_getProcessInfo
+ pInfo->Size = sizeof(oslProcessInfo);
+ osl_error = osl_getProcessInfo( hProcess, osl_Process_EXITCODE, pInfo.get() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_getProcessInfo returned with failure",
+ osl_Process_E_None, osl_error
+ );
+
+ printf("the exit code is %" SAL_PRIuUINT32 ".\n", pInfo->Code );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("rtl_getAppCommandArg or rtl_getAppCommandArgCount error.", static_cast<oslProcessExitCode>(2), pInfo->Code);
+ }
+
+ CPPUNIT_TEST_SUITE(getAppCommandArg);
+ CPPUNIT_TEST(getAppCommandArg_001);
+ // CPPUNIT_TEST(getAppCommandArg_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getAppCommandArg
+
+/************************************************************************
+ * For diagnostics( from sal/test/testuuid.cxx )
+ ************************************************************************/
+static void printUuid( const sal_uInt8 *pNode )
+{
+ printf("# UUID is: ");
+ for( sal_Int32 i1 = 0 ; i1 < 4 ; i1++ )
+ {
+ for( sal_Int32 i2 = 0 ; i2 < 4 ; i2++ )
+ {
+ sal_uInt8 nValue = pNode[i1*4 +i2];
+ if (nValue < 16)
+ {
+ printf( "0");
+ }
+ printf( "%02x" ,nValue );
+ }
+ if( i1 == 3 )
+ break;
+ printf( "-" );
+ }
+ printf("\n");
+}
+
+/**************************************************************************
+ * output UUID to a string
+ **************************************************************************/
+static void printUuidtoBuffer( const sal_uInt8 *pNode, char * pBuffer )
+{
+ sal_Int8 nPtr = 0;
+ for( sal_Int32 i1 = 0 ; i1 < 16 ; i1++ )
+ {
+ sal_uInt8 nValue = pNode[i1];
+ if (nValue < 16)
+ {
+ sprintf( pBuffer + nPtr, "0");
+ nPtr++;
+ }
+ sprintf( pBuffer + nPtr, "%02x", nValue );
+ nPtr += 2 ;
+ }
+}
+
+class getGlobalProcessId : public CppUnit::TestFixture
+{
+public:
+ //gets a 16-byte fixed size identifier which is guaranteed not to change during the current process.
+ void getGlobalProcessId_001()
+ {
+ sal_uInt8 pTargetUUID1[16];
+ sal_uInt8 pTargetUUID2[16];
+ rtl_getGlobalProcessId( pTargetUUID1 );
+ rtl_getGlobalProcessId( pTargetUUID2 );
+ CPPUNIT_ASSERT_MESSAGE("getGlobalProcessId: got two same ProcessIds.", !memcmp( pTargetUUID1 , pTargetUUID2 , 16 ) );
+ }
+ //different processes different pids
+ void getGlobalProcessId_002()
+ {
+#if defined(_WIN32)
+ const OUString EXEC_NAME("child_process_id.exe");
+#else
+ const OUString EXEC_NAME("child_process_id");
+#endif
+ sal_uInt8 pTargetUUID1[16];
+ rtl_getGlobalProcessId( pTargetUUID1 );
+ printUuid( pTargetUUID1 );
+ char pUUID1[32];
+ printUuidtoBuffer( pTargetUUID1, pUUID1 );
+ printf("# UUID to String is %s\n", pUUID1);
+
+ OUString suCWD = getModulePath();
+ oslProcess hProcess = nullptr;
+ OUString suFileURL = suCWD + "/" + EXEC_NAME;
+ oslFileHandle* pChildOutputRead = new oslFileHandle();
+ oslProcessError osl_error = osl_executeProcess_WithRedirectedIO(
+ suFileURL.pData,
+ nullptr,
+ 0,
+ osl_Process_WAIT,
+ nullptr,
+ suCWD.pData,
+ nullptr,
+ 0,
+ &hProcess,
+ nullptr,
+ pChildOutputRead,
+ nullptr);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "osl_createProcess failed",
+ osl_Process_E_None, osl_error
+ );
+ //we could get return value only after the process terminated
+ osl_joinProcess(hProcess);
+
+ char pUUID2[33] {};
+ sal_uInt64 nRead = 0;
+ osl_readFile( *pChildOutputRead, pUUID2, 32, &nRead );
+ printf("read buffer is %s, nRead is %" SAL_PRIdINT64 "\n", pUUID2, nRead );
+ OUString suUUID2 = OUString::createFromAscii( pUUID2 );
+ CPPUNIT_ASSERT_MESSAGE("getGlobalProcessId: got two same ProcessIds.", !suUUID2.equalsAsciiL( pUUID1, 32) );
+ }
+
+ CPPUNIT_TEST_SUITE(getGlobalProcessId);
+ CPPUNIT_TEST(getGlobalProcessId_001);
+ CPPUNIT_TEST(getGlobalProcessId_002);
+ CPPUNIT_TEST_SUITE_END();
+
+}; // class getGlobalProcessId
+
+} // namespace rtl_Process
+
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_Process::getAppCommandArg, "rtl_Process");
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_Process::getGlobalProcessId, "rtl_Process");
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/process/rtl_Process_Const.h b/sal/qa/rtl/process/rtl_Process_Const.h
new file mode 100644
index 000000000..50c38eb97
--- /dev/null
+++ b/sal/qa/rtl/process/rtl_Process_Const.h
@@ -0,0 +1,41 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SAL_QA_RTL_PROCESS_RTL_PROCESS_CONST_H
+#define INCLUDED_SAL_QA_RTL_PROCESS_RTL_PROCESS_CONST_H
+
+#include <rtl/ustring.hxx>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+OUString suParam0("-join");
+OUString suParam1("-with");
+OUString suParam2("-child");
+OUString suParam3("-process");
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* RTL_PROCESS_CONST_H*/
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/random/random.txt b/sal/qa/rtl/random/random.txt
new file mode 100644
index 000000000..c5546df9b
--- /dev/null
+++ b/sal/qa/rtl/random/random.txt
@@ -0,0 +1,22 @@
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+rtl_random.createPool.createPool_001
+rtl_random.destroyPool.destroyPool_001
+rtl_random.addBytes.addBytes_001
+rtl_random.getBytes.getBytes_001
+
diff --git a/sal/qa/rtl/random/rtl_random.cxx b/sal/qa/rtl/random/rtl_random.cxx
new file mode 100644
index 000000000..c43638277
--- /dev/null
+++ b/sal/qa/rtl/random/rtl_random.cxx
@@ -0,0 +1,357 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <memory>
+#include <algorithm>
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <rtl/random.h>
+
+#include <string.h>
+
+namespace rtl_random
+{
+
+class createPool : public CppUnit::TestFixture
+{
+public:
+ // insert your test code here.
+ // this is only demonstration code
+ void createPool_001()
+ {
+ // this is demonstration code
+
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ // LLA: seems to be that another test is not possible for createPool()
+ CPPUNIT_ASSERT_MESSAGE("create failed", aPool != nullptr);
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(createPool);
+ CPPUNIT_TEST(createPool_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class createPool
+
+class destroyPool : public CppUnit::TestFixture
+{
+public:
+ // insert your test code here.
+ void destroyPool_000()
+ {
+ // GPF, if failed
+ rtl_random_destroyPool(nullptr);
+ }
+
+ void destroyPool_001()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ // LLA: seems to be that another test is not possible for createPool()
+ CPPUNIT_ASSERT_MESSAGE("create failed", aPool != nullptr);
+
+ rtl_random_destroyPool(aPool);
+ }
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(destroyPool);
+ CPPUNIT_TEST(destroyPool_000);
+ CPPUNIT_TEST(destroyPool_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class destroyPool
+
+class addBytes : public CppUnit::TestFixture
+{
+public:
+ // insert your test code here.
+ // this is only demonstration code
+ void addBytes_000()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ sal_uInt32 nBufLen = 4;
+ std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[ nBufLen ] );
+ memset(pBuffer.get(), 0, nBufLen);
+
+ rtlRandomError aError = rtl_random_addBytes(nullptr, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_Argument, aError);
+
+ /* rtlRandomError */ aError = rtl_random_addBytes(aPool, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_Argument, aError);
+
+ /* rtlRandomError */ aError = rtl_random_addBytes(aPool, pBuffer.get(), nBufLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_None, aError);
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ void addBytes_001()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ sal_uInt32 nBufLen = 4;
+ std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[ nBufLen ] );
+
+ memset(pBuffer.get(), 0, nBufLen);
+
+ rtl_random_addBytes(aPool, pBuffer.get(), nBufLen);
+
+ printf("%2x %2x %2x %2x\n", pBuffer[0], pBuffer[1], pBuffer[2], pBuffer[3]);
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(addBytes);
+ CPPUNIT_TEST(addBytes_000);
+ CPPUNIT_TEST(addBytes_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class addBytes
+
+namespace {
+
+class Statistics
+{
+ int m_nDispensation[256];
+
+ int m_nMin;
+ int m_nMax;
+ int m_nAverage;
+ int m_nMinDeviation;
+ int m_nMaxDeviation;
+
+public:
+ void clearDispensation()
+ {
+ for (int i = 0;i < 256;++i) // clear array
+ {
+ m_nDispensation[i] = 0;
+ }
+ }
+ Statistics()
+ : m_nMin(0)
+ , m_nMax(0)
+ , m_nAverage(0)
+ , m_nMinDeviation(0)
+ , m_nMaxDeviation(0)
+ {
+ clearDispensation();
+ }
+
+ void addValue(sal_uInt8 _nIndex, sal_Int32 _nValue)
+ {
+ m_nDispensation[_nIndex] += _nValue;
+ }
+
+ void build(sal_Int32 _nCountMax)
+ {
+ m_nMin = _nCountMax;
+ m_nMax = 0;
+
+ m_nAverage = _nCountMax / 256;
+
+ m_nMinDeviation = _nCountMax;
+ m_nMaxDeviation = 0;
+
+ for (int i = 0;i < 256;++i) // show dispensation
+ {
+ m_nMin = std::min(m_nMin, m_nDispensation[i]);
+ m_nMax = std::max(m_nMax, m_nDispensation[i]);
+
+ m_nMinDeviation = std::min(m_nMinDeviation, abs(m_nAverage - m_nDispensation[i]));
+ m_nMaxDeviation = std::max(m_nMaxDeviation, abs(m_nAverage - m_nDispensation[i]));
+ }
+ }
+
+ void print()
+ {
+ // LLA: these are only info values
+ printf("\nSome statistics\n");
+ printf("Min: %d\n", m_nMin);
+ printf("Max: %d\n", m_nMax);
+ printf("Average: %d\n", m_nAverage);
+ printf("Min abs deviation: %d\n", m_nMinDeviation);
+ printf("Max abs deviation: %d\n", m_nMaxDeviation);
+ }
+
+ sal_Int32 getAverage() const {return m_nAverage;}
+ sal_Int32 getMaxDeviation() const {return m_nMaxDeviation;}
+
+};
+
+}
+
+class getBytes : public CppUnit::TestFixture
+{
+public:
+ // insert your test code here.
+ void getBytes_000()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ sal_uInt32 nBufLen = 4;
+ std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[ nBufLen ] );
+ memset(pBuffer.get(), 0, nBufLen);
+
+ rtlRandomError aError = rtl_random_getBytes(nullptr, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_Argument, aError);
+
+ /* rtlRandomError */ aError = rtl_random_getBytes(aPool, nullptr, 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_Argument, aError);
+
+ /* rtlRandomError */ aError = rtl_random_getBytes(aPool, pBuffer.get(), nBufLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_None, aError);
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ void getBytes_001()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ sal_uInt32 nBufLen = 4;
+ std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[ nBufLen ] );
+ memset(pBuffer.get(), 0, nBufLen);
+
+ rtlRandomError aError = rtl_random_getBytes(aPool, pBuffer.get(), nBufLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_None, aError);
+
+ printf("%2x %2x %2x %2x\n", pBuffer[0], pBuffer[1], pBuffer[2], pBuffer[3]);
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ void getBytes_002()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ sal_uInt32 nBufLen = 4;
+ std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[ nBufLen << 1 ] );
+ memset(pBuffer.get(), 0, nBufLen << 1);
+
+ CPPUNIT_ASSERT_MESSAGE("memset failed", pBuffer[4] == 0 && pBuffer[5] == 0 && pBuffer[6] == 0 && pBuffer[7] == 0);
+
+ rtlRandomError aError = rtl_random_getBytes(aPool, pBuffer.get(), nBufLen);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_None, aError);
+
+ printf("%2x %2x %2x %2x %2x %2x %2x %2x\n", pBuffer[0], pBuffer[1], pBuffer[2], pBuffer[3], pBuffer[4], pBuffer[5], pBuffer[6], pBuffer[7]);
+
+ CPPUNIT_ASSERT_MESSAGE("internal memory overwrite", pBuffer[4] == 0 && pBuffer[5] == 0 && pBuffer[6] == 0 && pBuffer[7] == 0);
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ void getBytes_003()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ sal_uInt32 nBufLen = 1;
+ std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[ nBufLen ] );
+ memset(pBuffer.get(), 0, nBufLen);
+
+ Statistics aStat;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("memset failed", static_cast<sal_uInt8>(0), pBuffer[0]);
+
+ int nCount = 0;
+
+ int nCountMax = 1000000;
+ for(nCount = 0;nCount < nCountMax; ++nCount) // run 100000000 through getBytes(...)
+ {
+ /* rtlRandomError aError = */ rtl_random_getBytes(aPool, pBuffer.get(), nBufLen);
+ /* CPPUNIT_ASSERT_MESSAGE("wrong parameter", aError == rtl_Random_E_None); */
+
+ aStat.addValue(pBuffer[0], 1);
+ }
+
+ aStat.build(nCountMax);
+ aStat.print();
+
+ CPPUNIT_ASSERT_MESSAGE("deviation should be less average", aStat.getMaxDeviation() < aStat.getAverage());
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ void getBytes_003_1()
+ {
+ rtlRandomPool aPool = rtl_random_createPool();
+
+ sal_uInt32 nBufLen = 256;
+ std::unique_ptr<sal_uInt8[]> pBuffer( new sal_uInt8[ nBufLen ] );
+ memset(pBuffer.get(), 0, nBufLen);
+
+ Statistics aStat;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("memset failed", static_cast<sal_uInt8>(0), pBuffer[0]);
+
+ int nCount = 0;
+
+ int nCountMax = 10000;
+ for(nCount = 0;nCount < nCountMax; ++nCount) // run 100000000 through getBytes(...)
+ {
+ /* rtlRandomError aError = */ rtl_random_getBytes(aPool, pBuffer.get(), nBufLen);
+ // CPPUNIT_ASSERT_MESSAGE("wrong parameter", aError == rtl_Random_E_None);
+
+ for (sal_uInt32 i=0;i<nBufLen;++i)
+ aStat.addValue(pBuffer[i], 1);
+ }
+
+ aStat.build(nCountMax * nBufLen);
+ aStat.print();
+
+ CPPUNIT_ASSERT_MESSAGE("deviation should be less average", aStat.getMaxDeviation() < aStat.getAverage());
+
+ rtl_random_destroyPool(aPool);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(getBytes);
+ CPPUNIT_TEST(getBytes_000);
+ CPPUNIT_TEST(getBytes_001);
+ CPPUNIT_TEST(getBytes_002);
+ CPPUNIT_TEST(getBytes_003);
+ CPPUNIT_TEST(getBytes_003_1);
+ CPPUNIT_TEST_SUITE_END();
+}; // class getBytes
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_random::createPool);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_random::destroyPool);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_random::addBytes);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_random::getBytes);
+} // namespace rtl_random
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/ref/rtl_ref.cxx b/sal/qa/rtl/ref/rtl_ref.cxx
new file mode 100644
index 000000000..2bf7c9803
--- /dev/null
+++ b/sal/qa/rtl/ref/rtl_ref.cxx
@@ -0,0 +1,115 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <rtl/ref.hxx>
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+namespace rtl_ref
+{
+
+namespace {
+
+class MoveTestClass
+{
+private:
+ bool m_bIncFlag;
+ long m_nRef;
+public:
+ MoveTestClass(): m_bIncFlag(false), m_nRef(0) { }
+
+ // There should never be more than two references to this class as it
+ // is used as a test class for move functions. One reference being the
+ // original reference and the second being the test reference
+ void acquire()
+ {
+ if(m_bIncFlag)
+ {
+ ++m_nRef;
+ m_bIncFlag = false;
+ }
+ else
+ CPPUNIT_FAIL("RC was incremented when in should not have been");
+ }
+
+ void release() { --m_nRef; }
+
+ long use_count() { return m_nRef; }
+
+ void set_inc_flag() { m_bIncFlag = true; }
+};
+
+}
+
+static rtl::Reference< MoveTestClass > get_reference( MoveTestClass* pcTestClass )
+{
+ // constructor will increment the reference count
+ pcTestClass->set_inc_flag();
+ rtl::Reference< MoveTestClass > tmp(pcTestClass);
+ return tmp;
+}
+
+class TestReferenceRefCounting : public CppUnit::TestFixture
+{
+ void testMove()
+ {
+ MoveTestClass cTestClass;
+
+ // constructor will increment the reference count
+ cTestClass.set_inc_flag();
+ rtl::Reference< MoveTestClass > test1( &cTestClass );
+
+ // move should not increment the reference count
+ rtl::Reference< MoveTestClass > test2( std::move(test1) );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test2.use_count() == 1",
+ static_cast<long>(1), test2->use_count());
+
+ // test1 now contains a null pointer
+ CPPUNIT_ASSERT_MESSAGE("!test1.is()",
+ !test1.is()); // NOLINT(bugprone-use-after-move)
+
+ // function return should move the reference
+ test2 = get_reference( &cTestClass );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test2.use_count() == 1",
+ static_cast<long>(1), test2->use_count());
+
+ // normal copy
+ test2->set_inc_flag();
+ test1 = test2;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test2.use_count() == 2",
+ static_cast<long>(2), test2->use_count());
+
+ // use count should decrement
+ test2 = rtl::Reference< MoveTestClass >();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("test1.use_count() == 1",
+ static_cast<long>(1), test1->use_count());
+
+ // move of a null pointer should not cause an error
+ test1 = std::move(test2);
+
+ CPPUNIT_ASSERT_MESSAGE("!test1.is()",
+ !test1.is());
+ CPPUNIT_ASSERT_MESSAGE("!test2.is()",
+ !test2.is()); // NOLINT(bugprone-use-after-move)
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("cTestClass.use_count() == 0",
+ static_cast<long>(0), cTestClass.use_count());
+ }
+
+ CPPUNIT_TEST_SUITE(TestReferenceRefCounting);
+ CPPUNIT_TEST(testMove);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+} // namespace rtl_ref
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ref::TestReferenceRefCounting);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_ostring.cxx b/sal/qa/rtl/strings/test_ostring.cxx
new file mode 100644
index 000000000..0d0d07be7
--- /dev/null
+++ b/sal/qa/rtl/strings/test_ostring.cxx
@@ -0,0 +1,123 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/string.hxx>
+
+namespace {
+
+class Test: public CppUnit::TestFixture {
+private:
+ void testStartsWithIgnoreAsciiCase();
+ void testCompareTo();
+ void testUtf8StringLiterals();
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testStartsWithIgnoreAsciiCase);
+ CPPUNIT_TEST(testCompareTo);
+ CPPUNIT_TEST(testUtf8StringLiterals);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void Test::testStartsWithIgnoreAsciiCase() {
+ {
+ OString r;
+ CPPUNIT_ASSERT(OString().startsWithIgnoreAsciiCase(OString(), &r));
+ CPPUNIT_ASSERT(r.isEmpty());
+ }
+ {
+ OString r;
+ CPPUNIT_ASSERT(OString("foo").startsWithIgnoreAsciiCase(OString(), &r));
+ CPPUNIT_ASSERT_EQUAL(OString("foo"), r);
+ }
+ {
+ OString r;
+ CPPUNIT_ASSERT(
+ OString("foo").startsWithIgnoreAsciiCase("F", &r));
+ CPPUNIT_ASSERT_EQUAL(OString("oo"), r);
+ }
+ {
+ OString r("other");
+ CPPUNIT_ASSERT(
+ !OString("foo").startsWithIgnoreAsciiCase("bar", &r));
+ CPPUNIT_ASSERT_EQUAL(OString("other"), r);
+ }
+ {
+ OString r("other");
+ CPPUNIT_ASSERT(
+ !OString("foo").startsWithIgnoreAsciiCase("foobar", &r));
+ CPPUNIT_ASSERT_EQUAL(OString("other"), r);
+ }
+
+ {
+ OString r;
+ CPPUNIT_ASSERT(OString().startsWithIgnoreAsciiCase("", &r));
+ CPPUNIT_ASSERT(r.isEmpty());
+ }
+ {
+ OString r;
+ CPPUNIT_ASSERT(OString("foo").startsWithIgnoreAsciiCase("", &r));
+ CPPUNIT_ASSERT_EQUAL(OString("foo"), r);
+ }
+ {
+ OString r;
+ CPPUNIT_ASSERT(
+ OString("foo").startsWithIgnoreAsciiCase("F", &r));
+ CPPUNIT_ASSERT_EQUAL(OString("oo"), r);
+ }
+ {
+ OString r("other");
+ CPPUNIT_ASSERT(
+ !OString("foo").startsWithIgnoreAsciiCase("bar", &r));
+ CPPUNIT_ASSERT_EQUAL(OString("other"), r);
+ }
+ {
+ OString r("other");
+ CPPUNIT_ASSERT(
+ !OString("foo").startsWithIgnoreAsciiCase("foobar", &r));
+ CPPUNIT_ASSERT_EQUAL(OString("other"), r);
+ }
+}
+
+void Test::testCompareTo()
+{
+ // test that embedded NUL does not stop the compare
+ char str1[2] = { '\0', 'x' };
+ char str2[2] = { '\0', 'y' };
+
+ OString s1(str1, 2);
+ OString s2(str2, 2);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), s1.compareTo(s1));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), s2.compareTo(s2));
+ CPPUNIT_ASSERT(s1.compareTo(s2) < 0);
+ CPPUNIT_ASSERT(s2.compareTo(s1) > 0);
+ CPPUNIT_ASSERT(s1.compareTo(OString(s2 + "y")) < 0);
+ CPPUNIT_ASSERT(s2.compareTo(OString(s1 + "x")) > 0);
+ CPPUNIT_ASSERT(OString(s1 + "x").compareTo(s2) < 0);
+ CPPUNIT_ASSERT(OString(s2 + "y").compareTo(s1) > 0);
+}
+
+void Test::testUtf8StringLiterals()
+{
+ const OString sIn(u8"ßa");
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), sIn.getLength());
+ CPPUNIT_ASSERT_EQUAL(195, int(static_cast<unsigned char>(sIn[0])));
+ CPPUNIT_ASSERT_EQUAL(159, int(static_cast<unsigned char>(sIn[1])));
+ CPPUNIT_ASSERT_EQUAL(97, int(static_cast<unsigned char>(sIn[2])));
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_ostring_concat.cxx b/sal/qa/rtl/strings/test_ostring_concat.cxx
new file mode 100644
index 000000000..bcb4a3e3b
--- /dev/null
+++ b/sal/qa/rtl/strings/test_ostring_concat.cxx
@@ -0,0 +1,183 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+// activate support for detecting errors instead of getting compile errors
+#define RTL_STRING_UNITTEST_CONCAT
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <rtl/string.hxx>
+#include <rtl/strbuf.hxx>
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+
+#include <string>
+#include <typeinfo>
+
+bool rtl_string_unittest_invalid_concat = false;
+
+using namespace rtl;
+
+namespace CppUnit
+{
+template<> struct assertion_traits<std::type_info>
+{
+ static bool equal(std::type_info const & x, std::type_info const & y) { return x == y; }
+
+ static std::string toString(std::type_info const & x) { return x.name(); }
+};
+} // namespace
+
+namespace test::ostring {
+
+class StringConcat : public CppUnit::TestFixture
+{
+private:
+ void checkConcat();
+ void checkEnsureCapacity();
+ void checkAppend();
+ void checkInvalid();
+
+CPPUNIT_TEST_SUITE(StringConcat);
+CPPUNIT_TEST(checkConcat);
+CPPUNIT_TEST(checkEnsureCapacity);
+CPPUNIT_TEST(checkAppend);
+CPPUNIT_TEST(checkInvalid);
+CPPUNIT_TEST_SUITE_END();
+};
+
+void test::ostring::StringConcat::checkConcat()
+{
+// All the extra () are to protect commas against being treated as separators of macro arguments.
+ CPPUNIT_ASSERT_EQUAL( OString(), OString(OString() + OString()));
+ CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OString( "foo" ) + OString( "bar" )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OString > )), typeid( OString( "foo" ) + OString( "bar" )));
+ CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OString( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, const char[ 4 ] > )), typeid( OString( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL( OString( "foobarbaz" ), OString( OString( "foo" ) + "bar" + "baz" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringConcat< OString, const char[ 4 ] >, const char[ 4 ] > )), typeid( OString( "foo" ) + "bar" + "baz" ));
+ CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OStringLiteral( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringLiteral, const char[ 4 ] > )), typeid( OStringLiteral( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OStringLiteral( "foo" ) + static_cast<const char*>("bar") ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringLiteral, const char* > )), typeid( OStringLiteral( "foo" ) + static_cast<const char*>("bar") ));
+ const char d1[] = "xyz";
+ char d2[] = "abc";
+ const char* d3 = d1;
+ char* d4 = d2;
+ CPPUNIT_ASSERT_EQUAL( OString( "fooxyz" ), OString( OString( "foo" ) + d1 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, const char[ 4 ] > )), typeid( OString( "foo" ) + d1 ));
+ CPPUNIT_ASSERT_EQUAL( OString( "fooabc" ), OString( OString( "foo" ) + d2 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, char[ 4 ] > )), typeid( OString( "foo" ) + d2 ));
+ CPPUNIT_ASSERT_EQUAL( OString( "fooxyz" ), OString( OString( "foo" ) + d3 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, const char* > )), typeid( OString( "foo" ) + d3 ));
+ CPPUNIT_ASSERT_EQUAL( OString( "fooabc" ), OString( OString( "foo" ) + d4 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, char* > )), typeid( OString( "foo" ) + d4 ));
+ CPPUNIT_ASSERT_EQUAL( OString( "fooabc" ), OString( OString( "foo" ) + d4 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, char* > )), typeid( OString( "foo" ) + d4 ));
+ CPPUNIT_ASSERT_EQUAL( OString( "fooabc" ), OString( rtl::OStringView( "foo" ) + d4 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< rtl::OStringView, char* > )), typeid( rtl::OStringView( "foo" ) + d4 ));
+
+ CPPUNIT_ASSERT_EQUAL( OString( "num10" ), OString( OString( "num" ) + OString::number( 10 )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< int > > )), typeid( OString( "num" ) + OString::number( 10 )));
+ CPPUNIT_ASSERT_EQUAL( OString( "num10" ), OString( OString( "num" ) + OString::number( 10L )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< long long > > )), typeid( OString( "num" ) + OString::number( 10L )));
+ CPPUNIT_ASSERT_EQUAL( OString( "num10" ), OString( OString( "num" ) + OString::number( 10ULL )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< unsigned long long > > )), typeid( OString( "num" ) + OString::number( 10ULL )));
+ CPPUNIT_ASSERT_EQUAL( OString( "num10.5" ), OString( OString( "num" ) + OString::number( 10.5f )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< float > > )), typeid( OString( "num" ) + OString::number( 10.5f )));
+ CPPUNIT_ASSERT_EQUAL( OString( "num10.5" ), OString( OString( "num" ) + OString::number( 10.5 )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< double > > )), typeid( OString( "num" ) + OString::number( 10.5 )));
+}
+
+void test::ostring::StringConcat::checkEnsureCapacity()
+{
+ rtl_String* str = nullptr;
+ rtl_string_newFromLiteral( &str, "test", strlen( "test" ), 0 );
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length );
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+
+ rtl_String* oldStr = str;
+ rtl_string_ensureCapacity( &str, 4 ); // should be no-op
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length );
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+ CPPUNIT_ASSERT_EQUAL( str, oldStr );
+
+ rtl_string_acquire( oldStr );
+ CPPUNIT_ASSERT_EQUAL( 2, int( str->refCount ));
+ rtl_string_ensureCapacity( &str, 4 );
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length );
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+ // a copy was forced because of refcount
+ CPPUNIT_ASSERT( oldStr != str );
+ CPPUNIT_ASSERT_EQUAL( 0, strcmp( oldStr->buffer, str->buffer ) );
+ CPPUNIT_ASSERT_EQUAL( 1, int( oldStr->refCount ));
+ rtl_string_release( str );
+ str = oldStr;
+
+ rtl_string_acquire( oldStr );
+ rtl_string_ensureCapacity( &str, 1024 );
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length ); // size is still 4
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+ CPPUNIT_ASSERT( oldStr != str );
+ CPPUNIT_ASSERT_EQUAL( 0, strcmp( oldStr->buffer, str->buffer ) );
+ CPPUNIT_ASSERT_EQUAL( 1, int( oldStr->refCount ));
+ strcpy( str->buffer, "01234567890123456789" ); // but there should be extra capacity
+ str->length += 20;
+ rtl_string_release( str );
+ rtl_string_release( oldStr );
+}
+
+void test::ostring::StringConcat::checkAppend()
+{
+ OString str( "foo" );
+ str += OStringLiteral( "bar" ) + "baz";
+ CPPUNIT_ASSERT_EQUAL( OString( "foobarbaz" ), str );
+ OStringBuffer buf( "foo" );
+ buf.append( OStringLiteral( "bar" ) + "baz" );
+ CPPUNIT_ASSERT_EQUAL( OString( "foobarbaz" ), buf.makeStringAndClear());
+}
+
+#define INVALID_CONCAT( expression ) \
+ ( \
+ rtl_string_unittest_invalid_concat = false, \
+ ( void ) OString( expression ), \
+ rtl_string_unittest_invalid_concat )
+
+void test::ostring::StringConcat::checkInvalid()
+{
+ CPPUNIT_ASSERT( !INVALID_CONCAT( OString() + OString()));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OStringBuffer( "b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OUString( "b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OUStringBuffer( "b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OUStringLiteral( "b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + rtl::OUStringView( u"b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + 1 ));
+ rtl_String* rs = nullptr;
+ rtl_uString* rus = nullptr;
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rs ));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rus ));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OUString::number( 10 )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OString::number( 0 ) + OUString::number( 10 )));
+
+#if 0
+ // Should fail to compile, to avoid use of OStringConcat lvalues that
+ // contain dangling references to temporaries:
+ auto const conc = OStringLiteral("foo") + "bar";
+ (void) OString(conc);
+#endif
+}
+
+} // namespace
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::ostring::StringConcat);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_ostring_stringliterals.cxx b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
new file mode 100644
index 000000000..e513d56a5
--- /dev/null
+++ b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
@@ -0,0 +1,263 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+// activate the extra needed ctor
+#define RTL_STRING_UNITTEST
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/string.h>
+#include <rtl/string.hxx>
+#include <rtl/strbuf.hxx>
+
+bool rtl_string_unittest_const_literal;
+bool rtl_string_unittest_const_literal_function;
+static bool rtl_string_unittest_non_const_literal_function;
+
+namespace test::ostring {
+
+class StringLiterals: public CppUnit::TestFixture
+{
+private:
+ void checkCtors();
+ void checkUsage();
+ void checkNonConstUsage();
+ void checkBuffer();
+
+ void testcall( const char str[] );
+
+ static const char bad5[];
+ static char bad6[];
+
+CPPUNIT_TEST_SUITE(StringLiterals);
+CPPUNIT_TEST(checkCtors);
+CPPUNIT_TEST(checkUsage);
+CPPUNIT_TEST(checkNonConstUsage);
+CPPUNIT_TEST(checkBuffer);
+CPPUNIT_TEST_SUITE_END();
+};
+
+// reset the flag, call OString ctor with the given argument and return
+// whether the string literal ctor was used
+#define CONST_CTOR_USED( argument ) \
+ ( \
+ rtl_string_unittest_const_literal = false, \
+ ( void ) rtl::OString( argument ), \
+ result_tmp = rtl_string_unittest_const_literal, \
+ rtl_string_unittest_const_literal = false, \
+ ( void ) rtl::OStringBuffer( argument ), \
+ rtl_string_unittest_const_literal && result_tmp )
+
+void test::ostring::StringLiterals::checkCtors()
+{
+ bool result_tmp;
+ CPPUNIT_ASSERT( CONST_CTOR_USED( "test" ));
+ const char good1[] = "test";
+ CPPUNIT_ASSERT( CONST_CTOR_USED( good1 ));
+
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( static_cast<const char*>("test") ));
+ const char* bad1 = good1;
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( bad1 ));
+ char bad2[] = "test";
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( bad2 ));
+ char* bad3 = bad2;
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( bad3 ));
+ const char* bad4[] = { "test1" };
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( bad4[ 0 ] ));
+ testcall( good1 );
+#ifndef _MSC_VER
+ // this is actually not supposed to work (see discussion in stringutils.hxx),
+ // but gcc and clang somehow manage, so keep it used, just in case some other problem
+ // shows up somewhen in the future
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( bad5 )); // size is not known here
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( bad6 ));
+#endif
+
+// This one is technically broken, since the first element is 6 characters test\0\0,
+// but there does not appear a way to detect this by compile time (runtime will assert()).
+// RTL_CONSTASCII_USTRINGPARAM() has the same flaw.
+ const char bad7[][ 6 ] = { "test", "test2" };
+// CPPUNIT_ASSERT( CONST_CTOR_USED( bad7[ 0 ] ));
+ CPPUNIT_ASSERT( CONST_CTOR_USED( bad7[ 1 ] ));
+
+// Check that contents are correct and equal to the case when const char* ctor is used.
+ CPPUNIT_ASSERT_EQUAL( rtl::OString( "" ), rtl::OString( static_cast<const char*>("") ) );
+ CPPUNIT_ASSERT_EQUAL( rtl::OString( "ab" ), rtl::OString( static_cast<const char*>("ab") ) );
+
+// Check that contents are correct and equal to the case when RTL_CONSTASCII_STRINGPARAM is used.
+ CPPUNIT_ASSERT_EQUAL( rtl::OString( "" ), rtl::OString( RTL_CONSTASCII_STRINGPARAM( "" )) );
+ CPPUNIT_ASSERT_EQUAL( rtl::OString( "ab" ), rtl::OString( RTL_CONSTASCII_STRINGPARAM( "ab" )) );
+}
+
+const char test::ostring::StringLiterals::bad5[] = "test";
+char test::ostring::StringLiterals::bad6[] = "test";
+
+void test::ostring::StringLiterals::testcall( const char str[] )
+{
+#ifndef _MSC_VER
+ bool result_tmp;
+ CPPUNIT_ASSERT( !CONST_CTOR_USED( str ));
+#else
+ // MSVC just errors out on this for some reason, which is fine as well
+ (void)str;
+#endif
+}
+
+void test::ostring::StringLiterals::checkUsage()
+{
+// simply check that all string literal based calls work as expected
+// also check that they really use string literal overload and do not convert to OString
+ rtl::OString foo( "foo" );
+ rtl::OString FoO( "FoO" );
+ rtl::OString foobarfoo( "foobarfoo" );
+ rtl::OString foobar( "foobar" );
+ rtl::OString FooBaRfoo( "FooBaRfoo" );
+ rtl::OString FooBaR( "FooBaR" );
+ rtl::OString bar( "bar" );
+
+ rtl_string_unittest_const_literal = false; // start checking for OString conversions
+ rtl_string_unittest_non_const_literal_function = false; // and check for non-const variants
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT_EQUAL( foo, rtl::OString() = "foo" );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( FoO.equalsIgnoreAsciiCase( "fOo" ));
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( foobarfoo.match( "bar", 3 ));
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( foobar.match( "foo" ));
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( FooBaRfoo.matchIgnoreAsciiCase( "bAr", 3 ));
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( FooBaR.matchIgnoreAsciiCase( "fOo" ));
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( foobar.startsWith( "foo" ));
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( foobar.endsWith( "bar" ));
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+// rtl_string_unittest_const_literal_function = false;
+// CPPUNIT_ASSERT( FooBaR.endsWithIgnoreAsciiCase( "bar" ));
+// CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( bool(foo == "foo") );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( bool("foo" == foo) );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( foo != "bar" );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT( "foo" != bar );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ rtl_string_unittest_const_literal_function = false;
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(6), foobarfoo.indexOf( "foo", 1 ) );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+// rtl_string_unittest_const_literal_function = false;
+// CPPUNIT_ASSERT( foobarfoo.lastIndexOf( "foo" ) == 6 );
+// CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true );
+ // if this is not true, some of the calls above converted to OString
+ CPPUNIT_ASSERT( !rtl_string_unittest_const_literal );
+ // if this is not true, some of the calls above used non-const variants
+ CPPUNIT_ASSERT( !rtl_string_unittest_non_const_literal_function );
+}
+
+void test::ostring::StringLiterals::checkNonConstUsage()
+{
+// check that (non-const) char[] overloads work and do not use const char[] overloads
+ rtl::OString foo( "foo" );
+ rtl::OString FoO( "FoO" );
+ rtl::OString foobarfoo( "foobarfoo" );
+ rtl::OString foobar( "foobar" );
+ rtl::OString FooBaRfoo( "FooBaRfoo" );
+ rtl::OString FooBaR( "FooBaR" );
+ rtl::OString bar( "bar" );
+ char foo_c[] = "foo";
+ char bar_c[] = "bar";
+ char fOo_c[] = "fOo";
+ char bAr_c[] = "bAr";
+
+ rtl_string_unittest_const_literal = false; // start checking for OString conversions
+ rtl_string_unittest_const_literal_function = false; // and check for const variants
+ CPPUNIT_ASSERT_EQUAL( foo, rtl::OString() = static_cast<const char*>(foo_c) );
+ CPPUNIT_ASSERT_EQUAL( foo, rtl::OString() = foo_c );
+ CPPUNIT_ASSERT( FoO.equalsIgnoreAsciiCase( static_cast<const char*>(fOo_c) ));
+ CPPUNIT_ASSERT( FoO.equalsIgnoreAsciiCase( fOo_c ));
+ CPPUNIT_ASSERT( foobarfoo.match( static_cast<const char*>(bar_c), 3 ));
+ CPPUNIT_ASSERT( foobarfoo.match( bar_c, 3 ));
+ CPPUNIT_ASSERT( foobar.match( static_cast<const char*>(foo_c) ));
+ CPPUNIT_ASSERT( foobar.match( foo_c ));
+ CPPUNIT_ASSERT( FooBaRfoo.matchIgnoreAsciiCase( static_cast<const char*>(bAr_c), 3 ));
+ CPPUNIT_ASSERT( FooBaRfoo.matchIgnoreAsciiCase( bAr_c, 3 ));
+ CPPUNIT_ASSERT( FooBaR.matchIgnoreAsciiCase( static_cast<const char*>(fOo_c) ));
+ CPPUNIT_ASSERT( FooBaR.matchIgnoreAsciiCase( fOo_c ));
+ CPPUNIT_ASSERT( foobar.startsWith( static_cast<const char*>(foo_c) ));
+ CPPUNIT_ASSERT( foobar.startsWith( foo_c ));
+ CPPUNIT_ASSERT( foobar.endsWith( static_cast<const char*>(bar_c) ));
+ CPPUNIT_ASSERT( foobar.endsWith( bar_c ));
+// CPPUNIT_ASSERT( FooBaR.endsWithIgnoreAsciiCase( (const char*)bar_c ));
+// CPPUNIT_ASSERT( FooBaR.endsWithIgnoreAsciiCase( bar_c ));
+ CPPUNIT_ASSERT( bool(foo == static_cast<const char*>(foo_c)) );
+ CPPUNIT_ASSERT( bool(foo == foo_c) );
+ CPPUNIT_ASSERT( bool(static_cast<const char*>(foo_c) == foo) );
+ CPPUNIT_ASSERT( bool(foo_c == foo) );
+ CPPUNIT_ASSERT( foo != static_cast<const char*>(bar_c) );
+ CPPUNIT_ASSERT( foo != bar_c );
+ CPPUNIT_ASSERT( static_cast<const char*>(foo_c) != bar );
+ CPPUNIT_ASSERT( foo_c != bar );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(6), foobarfoo.indexOf( static_cast<const char*>(foo_c), 1 ) );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(6), foobarfoo.indexOf( foo_c, 1 ) );
+// CPPUNIT_ASSERT( foobarfoo.lastIndexOf( (const char*)foo_c ) == 6 );
+// CPPUNIT_ASSERT( foobarfoo.lastIndexOf( foo_c ) == 6 );
+ // if this is not true, some of the calls above used const variants
+ CPPUNIT_ASSERT( !rtl_string_unittest_const_literal );
+ CPPUNIT_ASSERT( !rtl_string_unittest_const_literal_function );
+}
+
+void test::ostring::StringLiterals::checkBuffer()
+{
+ rtl::OStringBuffer buf;
+ rtl_string_unittest_const_literal_function = false;
+ buf.append( "foo" );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ CPPUNIT_ASSERT_EQUAL( rtl::OString( "foo" ), buf.toString());
+ rtl_string_unittest_const_literal_function = false;
+ buf.append( "bar" );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ CPPUNIT_ASSERT_EQUAL( rtl::OString( "foobar" ), buf.toString());
+ rtl_string_unittest_const_literal_function = false;
+ buf.insert( 3, "baz" );
+ CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function );
+ CPPUNIT_ASSERT_EQUAL( rtl::OString( "foobazbar" ), buf.toString());
+
+ rtl::OString foobazbard( "foobazbard" );
+ rtl::OString foodbazbard( "foodbazbard" );
+ rtl_string_unittest_const_literal = false; // start checking for OString conversions
+ rtl_string_unittest_const_literal_function = false; // and check for const variants
+ char d[] = "d";
+ CPPUNIT_ASSERT_EQUAL( foobazbard, buf.append( d ).toString());
+ CPPUNIT_ASSERT_EQUAL( foodbazbard, buf.insert( 3, d ).toString() );
+ CPPUNIT_ASSERT( !rtl_string_unittest_const_literal );
+ CPPUNIT_ASSERT( !rtl_string_unittest_const_literal_function );
+}
+
+#undef CONST_CTOR_USED
+
+} // namespace
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::ostring::StringLiterals);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_oustring_compare.cxx b/sal/qa/rtl/strings/test_oustring_compare.cxx
new file mode 100644
index 000000000..c06d40c4d
--- /dev/null
+++ b/sal/qa/rtl/strings/test_oustring_compare.cxx
@@ -0,0 +1,97 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/string.h>
+#include <rtl/ustring.hxx>
+
+namespace test::oustring {
+
+class Compare: public CppUnit::TestFixture
+{
+private:
+ void equalsIgnoreAsciiCaseAscii();
+ void compareToIgnoreAsciiCase();
+ void compareTo();
+
+CPPUNIT_TEST_SUITE(Compare);
+CPPUNIT_TEST(equalsIgnoreAsciiCaseAscii);
+CPPUNIT_TEST(compareToIgnoreAsciiCase);
+CPPUNIT_TEST(compareTo);
+CPPUNIT_TEST_SUITE_END();
+};
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::Compare);
+
+void test::oustring::Compare::equalsIgnoreAsciiCaseAscii()
+{
+ const char* const abc = "abc";
+ const char* const abcd = "abcd";
+ const char* const empty = "";
+ CPPUNIT_ASSERT(!OUString().equalsIgnoreAsciiCaseAscii(abc));
+ CPPUNIT_ASSERT(!OUString().equalsIgnoreAsciiCaseAsciiL(abc,3));
+ CPPUNIT_ASSERT(!OUString("abc").
+ equalsIgnoreAsciiCaseAscii(empty));
+ CPPUNIT_ASSERT(!OUString("abc").
+ equalsIgnoreAsciiCaseAsciiL(empty,0));
+
+ CPPUNIT_ASSERT(OUString("abc").
+ equalsIgnoreAsciiCaseAscii(abc));
+ CPPUNIT_ASSERT(!OUString("abcd").
+ equalsIgnoreAsciiCaseAscii(abc));
+ CPPUNIT_ASSERT(!OUString("abc").
+ equalsIgnoreAsciiCaseAscii(abcd));
+}
+
+void test::oustring::Compare::compareToIgnoreAsciiCase()
+{
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(0),
+ OUString("abc").compareToIgnoreAsciiCase("ABC"));
+ CPPUNIT_ASSERT(
+ OUString("ABC").compareToIgnoreAsciiCase("abcdef")
+ < 0);
+ CPPUNIT_ASSERT(
+ OUString("A").compareToIgnoreAsciiCase("_") > 0);
+}
+
+void test::oustring::Compare::compareTo()
+{
+ // test that embedded NUL does not stop the compare
+ // this sort of thing is how we assign shape ids in oox
+ sal_Unicode str1[2] = { '\0', 'x' };
+ sal_Unicode str2[2] = { '\0', 'y' };
+
+ OUString s1(str1, 2);
+ OUString s2(str2, 2);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), s1.compareTo(s1));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), s2.compareTo(s2));
+ CPPUNIT_ASSERT(s1.compareTo(s2) < 0);
+ CPPUNIT_ASSERT(s2.compareTo(s1) > 0);
+ CPPUNIT_ASSERT(s1.compareTo(OUString(s2 + "y")) < 0);
+ CPPUNIT_ASSERT(s2.compareTo(OUString(s1 + "x")) > 0);
+ CPPUNIT_ASSERT(OUString(s1 + "x").compareTo(s2) < 0);
+ CPPUNIT_ASSERT(OUString(s2 + "y").compareTo(s1) > 0);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_oustring_concat.cxx b/sal/qa/rtl/strings/test_oustring_concat.cxx
new file mode 100644
index 000000000..bae7b65be
--- /dev/null
+++ b/sal/qa/rtl/strings/test_oustring_concat.cxx
@@ -0,0 +1,194 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+// activate support for detecting errors instead of getting compile errors
+#define RTL_STRING_UNITTEST_CONCAT
+extern bool rtl_string_unittest_invalid_concat;
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/string.hxx>
+#include <rtl/strbuf.hxx>
+
+#include <string>
+#include <typeinfo>
+
+using namespace rtl;
+
+namespace CppUnit
+{
+template<> struct assertion_traits<std::type_info>
+{
+ static bool equal(std::type_info const & x, std::type_info const & y) { return x == y; }
+
+ static std::string toString(std::type_info const & x) { return x.name(); }
+};
+} // namespace
+
+namespace test::oustring {
+
+class StringConcat : public CppUnit::TestFixture
+{
+private:
+ void checkConcat();
+ void checkConcatAsciiL();
+ void checkEnsureCapacity();
+ void checkAppend();
+ void checkInvalid();
+
+CPPUNIT_TEST_SUITE(StringConcat);
+CPPUNIT_TEST(checkConcat);
+CPPUNIT_TEST(checkConcatAsciiL);
+CPPUNIT_TEST(checkEnsureCapacity);
+CPPUNIT_TEST(checkAppend);
+CPPUNIT_TEST(checkInvalid);
+CPPUNIT_TEST_SUITE_END();
+};
+
+void test::oustring::StringConcat::checkConcat()
+{
+// All the extra () are to protect commas against being treated as separators of macro arguments.
+ CPPUNIT_ASSERT_EQUAL( OUString(), OUString(OUString() + OUString()));
+ CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUString( "foo" ) + OUString( "bar" )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUString > )), typeid( OUString( "foo" ) + OUString( "bar" )));
+ CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUString( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, const char[ 4 ] > )), typeid( OUString( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL( OUString( "foobarbaz" ), OUString( OUString( "foo" ) + "bar" + "baz" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< OUString, const char[ 4 ] >, const char[ 4 ] > )), typeid( OUString( "foo" ) + "bar" + "baz" ));
+ CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUStringLiteral( "foo" ) + "bar" ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringLiteral, const char[ 4 ] > )), typeid( OUStringLiteral( "foo" ) + "bar" ));
+ const char d1[] = "xyz";
+ CPPUNIT_ASSERT_EQUAL( OUString( "fooxyz" ), OUString( OUString( "foo" ) + d1 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, const char[ 4 ] > )), typeid( OUString( "foo" ) + d1 ));
+ const sal_Unicode* d2 = u"xyz";
+ CPPUNIT_ASSERT_EQUAL( OUString( "fooxyz" ), OUString( OUString( "foo" ) + d2 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, const sal_Unicode* > )), typeid( OUString( "foo" ) + d2 ));
+ CPPUNIT_ASSERT_EQUAL( OUString( "fooxyz" ), OUString( rtl::OUStringView( u"foo" ) + d2 ));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< rtl::OUStringView, const sal_Unicode* > )), typeid( rtl::OUStringView( u"foo" ) + d2 ));
+
+ CPPUNIT_ASSERT_EQUAL( OUString( "num10" ), OUString( OUString( "num" ) + OUString::number( 10 )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< int > > )), typeid( OUString( "num" ) + OUString::number( 10 )));
+ CPPUNIT_ASSERT_EQUAL( OUString( "num10" ), OUString( OUString( "num" ) + OUString::number( 10L )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< long long > > )), typeid( OUString( "num" ) + OUString::number( 10L )));
+ CPPUNIT_ASSERT_EQUAL( OUString( "num10" ), OUString( OUString( "num" ) + OUString::number( 10ULL )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< unsigned long long > > )), typeid( OUString( "num" ) + OUString::number( 10ULL )));
+ CPPUNIT_ASSERT_EQUAL( OUString( "num10.5" ), OUString( OUString( "num" ) + OUString::number( 10.5f )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< float > > )), typeid( OUString( "num" ) + OUString::number( 10.5f )));
+ CPPUNIT_ASSERT_EQUAL( OUString( "num10.5" ), OUString( OUString( "num" ) + OUString::number( 10.5 )));
+ CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< double > > )), typeid( OUString( "num" ) + OUString::number( 10.5 )));
+}
+
+void test::oustring::StringConcat::checkConcatAsciiL()
+{
+ {
+ OUString s("foo");
+ CPPUNIT_ASSERT_EQUAL(OUString("foo"), s += "");
+ }
+ {
+ OUString s("foo");
+ CPPUNIT_ASSERT_EQUAL(OUString("foobar"), s += "bar");
+ }
+}
+
+void test::oustring::StringConcat::checkEnsureCapacity()
+{
+ rtl_uString* str = nullptr;
+ rtl_uString_newFromLiteral( &str, "test", strlen( "test" ), 0 );
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length );
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+
+ rtl_uString* oldStr = str;
+ rtl_uString_ensureCapacity( &str, 4 ); // should be no-op
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length );
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+ CPPUNIT_ASSERT_EQUAL( str, oldStr );
+
+ rtl_uString_acquire( oldStr );
+ CPPUNIT_ASSERT_EQUAL( 2, int( str->refCount ));
+ rtl_uString_ensureCapacity( &str, 4 );
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length );
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+ // a copy was forced because of refcount
+ CPPUNIT_ASSERT( oldStr != str );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(0), rtl_ustr_compare( oldStr->buffer, str->buffer ) );
+ CPPUNIT_ASSERT_EQUAL( 1, int( oldStr->refCount ));
+ rtl_uString_release( str );
+ str = oldStr;
+
+ rtl_uString_acquire( oldStr );
+ rtl_uString_ensureCapacity( &str, 1024 );
+ CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length ); // size is still 4
+ CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount ));
+ CPPUNIT_ASSERT( oldStr != str );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(0), rtl_ustr_compare( oldStr->buffer, str->buffer ) );
+ CPPUNIT_ASSERT_EQUAL( 1, int( oldStr->refCount ));
+ // but there should be extra capacity
+ for( int i = 0;
+ i < 20;
+ ++i )
+ str->buffer[ str->length + i ] = '0';
+ str->length += 20;
+ rtl_uString_release( str );
+ rtl_uString_release( oldStr );
+}
+
+void test::oustring::StringConcat::checkAppend()
+{
+ OUString str( "foo" );
+ str += OUStringLiteral( "bar" ) + "baz";
+ CPPUNIT_ASSERT_EQUAL( OUString( "foobarbaz" ), str );
+ OUStringBuffer buf( "foo" );
+ buf.append( OUStringLiteral( "bar" ) + "baz" );
+ CPPUNIT_ASSERT_EQUAL( OUString( "foobarbaz" ), buf.makeStringAndClear());
+}
+
+#define INVALID_CONCAT( expression ) \
+ ( \
+ rtl_string_unittest_invalid_concat = false, \
+ ( void ) OUString( expression ), \
+ rtl_string_unittest_invalid_concat )
+
+void test::oustring::StringConcat::checkInvalid()
+{
+ CPPUNIT_ASSERT( !INVALID_CONCAT( OUString() + OUString()));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OUStringBuffer( "b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OString( "b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OStringBuffer( "b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + static_cast<const char*>("b") ));
+ char d[] = "b";
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + d ));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + static_cast<char*>(d) ));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OStringLiteral( "b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + rtl::OStringView( "b" )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + 1 ));
+ rtl_String* rs = nullptr;
+ rtl_uString* rus = nullptr;
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rs ));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rus ));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OString::number( 10 )));
+ CPPUNIT_ASSERT( INVALID_CONCAT( OUString::number( 0 ) + OString::number( 10 )));
+
+#if 0
+ // Should fail to compile, to avoid use of OUStringConcat lvalues that
+ // contain dangling references to temporaries:
+ auto const conc = OUStringLiteral("foo") + "bar";
+ (void) OUString(conc);
+#endif
+}
+
+} // namespace
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::StringConcat);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_oustring_convert.cxx b/sal/qa/rtl/strings/test_oustring_convert.cxx
new file mode 100644
index 000000000..bfd1a2aac
--- /dev/null
+++ b/sal/qa/rtl/strings/test_oustring_convert.cxx
@@ -0,0 +1,177 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/strbuf.hxx>
+#include <rtl/string.hxx>
+#include <rtl/ustring.hxx>
+#include <sal/macros.h>
+
+namespace test::oustring {
+
+class Convert: public CppUnit::TestFixture
+{
+private:
+ void convertToString();
+
+ CPPUNIT_TEST_SUITE(Convert);
+ CPPUNIT_TEST(convertToString);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::Convert);
+
+namespace {
+
+struct TestConvertToString
+{
+ sal_Unicode aSource[100];
+ sal_Int32 nLength;
+ rtl_TextEncoding nEncoding;
+ sal_uInt32 nFlags;
+ char const * pStrict;
+ char const * pRelaxed;
+};
+
+void testConvertToString(TestConvertToString const & rTest)
+{
+ const OUString aSource(rTest.aSource, rTest.nLength);
+ OString aStrict(RTL_CONSTASCII_STRINGPARAM("12345"));
+ bool bSuccess = aSource.convertToString(&aStrict, rTest.nEncoding,
+ rTest.nFlags);
+ OString aRelaxed(OUStringToOString(aSource, rTest.nEncoding,
+ rTest.nFlags));
+
+ OStringBuffer aPrefix;
+ aPrefix.append("{");
+ for (sal_Int32 i = 0; i < rTest.nLength; ++i)
+ {
+ aPrefix.append("U+");
+ aPrefix.append(static_cast< sal_Int32 >(rTest.aSource[i]), 16);
+ if (i + 1 < rTest.nLength)
+ aPrefix.append(",");
+ }
+ aPrefix.append("}, ");
+ aPrefix.append(static_cast< sal_Int32 >(rTest.nEncoding));
+ aPrefix.append(", 0x");
+ aPrefix.append(static_cast< sal_Int32 >(rTest.nFlags), 16);
+ aPrefix.append(" -> ");
+
+ if (bSuccess)
+ {
+ if (rTest.pStrict == nullptr || aStrict != rTest.pStrict)
+ {
+ OStringBuffer aMessage(aPrefix);
+ aMessage.append("strict = \"");
+ aMessage.append(aStrict);
+ aMessage.append("\"");
+ CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), false);
+ }
+ }
+ else
+ {
+ if (aStrict != OString(RTL_CONSTASCII_STRINGPARAM("12345")))
+ {
+ OStringBuffer aMessage(aPrefix);
+ aMessage.append("modified output");
+ CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), false);
+ }
+ if (rTest.pStrict != nullptr)
+ {
+ OStringBuffer aMessage(aPrefix);
+ aMessage.append("failed");
+ CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), false);
+ }
+ }
+ if (aRelaxed != rTest.pRelaxed)
+ {
+ OStringBuffer aMessage(aPrefix);
+ aMessage.append("relaxed = \"");
+ aMessage.append(aRelaxed);
+ aMessage.append("\"");
+ CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), false);
+ }
+}
+
+}
+
+void test::oustring::Convert::convertToString()
+{
+ TestConvertToString const aTests[]
+ = { { { 0 },
+ 0,
+ RTL_TEXTENCODING_ASCII_US,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR,
+ "",
+ "" },
+ { { 0 },
+ 0,
+ RTL_TEXTENCODING_ASCII_US,
+ OUSTRING_TO_OSTRING_CVTFLAGS,
+ "",
+ "" },
+ { { 0x0041,0x0042,0x0043 },
+ 3,
+ RTL_TEXTENCODING_ASCII_US,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR,
+ "ABC",
+ "ABC" },
+ { { 0x0041,0x0042,0x0043 },
+ 3,
+ RTL_TEXTENCODING_ASCII_US,
+ OUSTRING_TO_OSTRING_CVTFLAGS,
+ "ABC",
+ "ABC" },
+ { { 0xB800 },
+ 1,
+ RTL_TEXTENCODING_ISO_2022_JP,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR,
+ nullptr,
+ "" },
+ { { 0x3001, 0xB800 },
+ 2,
+ RTL_TEXTENCODING_ISO_2022_JP,
+ OUSTRING_TO_OSTRING_CVTFLAGS,
+ "\x1b\x24\x42\x21\x22\x1b\x28\x42\x3f",
+ "\x1b\x24\x42\x21\x22\x1b\x28\x42\x3f" },
+ { { 0x0041,0x0100,0x0042 },
+ 3,
+ RTL_TEXTENCODING_ISO_8859_1,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR,
+ nullptr,
+ "A" },
+ { { 0x0041,0x0100,0x0042 },
+ 3,
+ RTL_TEXTENCODING_ISO_8859_1,
+ OUSTRING_TO_OSTRING_CVTFLAGS,
+ "A?B",
+ "A?B" } };
+ for (size_t i = 0; i < SAL_N_ELEMENTS(aTests); ++i)
+ testConvertToString(aTests[i]);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_oustring_endswith.cxx b/sal/qa/rtl/strings/test_oustring_endswith.cxx
new file mode 100644
index 000000000..bf01577e2
--- /dev/null
+++ b/sal/qa/rtl/strings/test_oustring_endswith.cxx
@@ -0,0 +1,113 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/strbuf.hxx>
+#include <rtl/string.h>
+#include <rtl/string.hxx>
+#include <rtl/textenc.h>
+#include <rtl/ustring.hxx>
+#include <sal/macros.h>
+
+namespace test::oustring {
+
+class EndsWith: public CppUnit::TestFixture
+{
+private:
+ void endsWith();
+
+ CPPUNIT_TEST_SUITE(EndsWith);
+ CPPUNIT_TEST(endsWith);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::EndsWith);
+
+namespace {
+
+void appendString(OStringBuffer & buffer, OString const & string)
+{
+ buffer.append('"');
+ for (int i = 0; i < string.getLength(); ++i) {
+ char c = string[i];
+ if (c < ' ' || c == '"' || c == '\\' || c > '~') {
+ buffer.append('\\');
+ sal_Int32 n = static_cast< sal_Int32 >(
+ static_cast< unsigned char >(c));
+ if (n < 16) {
+ buffer.append('0');
+ }
+ buffer.append(n, 16);
+ } else {
+ buffer.append(c);
+ }
+ }
+ buffer.append('"');
+}
+
+}
+
+void test::oustring::EndsWith::endsWith()
+{
+ struct Data {
+ char const * str1;
+ sal_Int32 str1Len;
+ char const * str2;
+ sal_Int32 str2Len;
+ bool endsWith;
+ };
+ Data const data[] = {
+ { RTL_CONSTASCII_STRINGPARAM(""), RTL_CONSTASCII_STRINGPARAM(""),
+ true },
+ { RTL_CONSTASCII_STRINGPARAM("abc"), RTL_CONSTASCII_STRINGPARAM(""),
+ true },
+ { RTL_CONSTASCII_STRINGPARAM(""), RTL_CONSTASCII_STRINGPARAM("abc"),
+ false },
+ { RTL_CONSTASCII_STRINGPARAM("ABC"), RTL_CONSTASCII_STRINGPARAM("abc"),
+ true },
+ { RTL_CONSTASCII_STRINGPARAM("abcd"), RTL_CONSTASCII_STRINGPARAM("bcd"),
+ true },
+ { RTL_CONSTASCII_STRINGPARAM("bcd"), RTL_CONSTASCII_STRINGPARAM("abcd"),
+ false },
+ { RTL_CONSTASCII_STRINGPARAM("a\0b\0c"),
+ RTL_CONSTASCII_STRINGPARAM("b\0c"), true },
+ { RTL_CONSTASCII_STRINGPARAM("a\0b\0c"),
+ RTL_CONSTASCII_STRINGPARAM("b"), false } };
+ for (size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
+ OStringBuffer msg;
+ appendString(msg, OString(data[i].str1, data[i].str1Len));
+ msg.append(".endsWithIgnoreAsciiCaseAsciiL(");
+ appendString(msg, OString(data[i].str2, data[i].str2Len));
+ msg.append(") == ");
+ msg.append(data[i].endsWith);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ msg.getStr(),
+ data[i].endsWith,
+ OUString(
+ data[i].str1, data[i].str1Len,
+ RTL_TEXTENCODING_ASCII_US).endsWithIgnoreAsciiCaseAsciiL(
+ data[i].str2, data[i].str2Len));
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_oustring_startswith.cxx b/sal/qa/rtl/strings/test_oustring_startswith.cxx
new file mode 100644
index 000000000..a74671e6e
--- /dev/null
+++ b/sal/qa/rtl/strings/test_oustring_startswith.cxx
@@ -0,0 +1,38 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/ustring.hxx>
+
+namespace test::oustring {
+
+class StartsWith: public CppUnit::TestFixture
+{
+private:
+ void startsWith();
+
+ CPPUNIT_TEST_SUITE(StartsWith);
+ CPPUNIT_TEST(startsWith);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::StartsWith);
+
+void test::oustring::StartsWith::startsWith()
+{
+ CPPUNIT_ASSERT( OUString( "foobar" ).startsWith( "foo" ));
+ CPPUNIT_ASSERT( !OUString( "foo" ).startsWith( "foobar" ));
+ CPPUNIT_ASSERT( !OUString( "foobar" ).startsWith( "oo" ));
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_oustring_stringliterals.cxx b/sal/qa/rtl/strings/test_oustring_stringliterals.cxx
new file mode 100644
index 000000000..9a014557f
--- /dev/null
+++ b/sal/qa/rtl/strings/test_oustring_stringliterals.cxx
@@ -0,0 +1,431 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+// activate the extra needed ctor
+#define RTL_STRING_UNITTEST
+
+#include <sal/config.h>
+
+#include <utility>
+
+#include <o3tl/cppunittraitshelper.hxx>
+#include <sal/types.h>
+#include <config_global.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/string.h>
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+
+extern bool rtl_string_unittest_const_literal;
+bool rtl_string_unittest_invalid_conversion;
+
+namespace test::oustring {
+
+class StringLiterals: public CppUnit::TestFixture
+{
+private:
+ void checkCtors();
+ void checkUsage();
+ void checkExtraIntArgument();
+ void checkNonconstChar();
+ void checkBuffer();
+ void checkOUStringLiteral();
+ void checkOUStringChar();
+ void checkUtf16();
+
+ void testcall( const char str[] );
+
+ // Check that OUStringLiteral ctor is actually constexpr:
+ static constexpr rtlunittest::OUStringLiteral dummy{"dummy"};
+
+CPPUNIT_TEST_SUITE(StringLiterals);
+CPPUNIT_TEST(checkCtors);
+CPPUNIT_TEST(checkUsage);
+CPPUNIT_TEST(checkExtraIntArgument);
+CPPUNIT_TEST(checkNonconstChar);
+CPPUNIT_TEST(checkBuffer);
+CPPUNIT_TEST(checkOUStringLiteral);
+CPPUNIT_TEST(checkOUStringChar);
+CPPUNIT_TEST(checkUtf16);
+CPPUNIT_TEST_SUITE_END();
+};
+
+// reset the flag, evaluate the expression and return
+// whether the string literal ctor was used (i.e. whether the conversion was valid)
+template<typename T> static bool VALID_CONVERSION( T && expression )
+{
+ rtl_string_unittest_invalid_conversion = false;
+ // OK to std::forward expression twice; what is relevant in both ctor calls
+ // is not the content of the passed argument (which is ignored anyway by the
+ // special RTL_STRING_UNITTEST ctors) but only its type:
+ ( void ) rtl::OUString( std::forward<T>(expression) );
+ ( void ) rtl::OUStringBuffer( std::forward<T>(expression) );
+ return !rtl_string_unittest_invalid_conversion;
+}
+template<typename T> static bool VALID_CONVERSION_CALL( T f )
+{
+ rtl_string_unittest_invalid_conversion = false;
+ ( void ) rtl::OUString( f() );
+ ( void ) rtl::OUStringBuffer( f() );
+ return !rtl_string_unittest_invalid_conversion;
+}
+
+void test::oustring::StringLiterals::checkCtors()
+{
+ CPPUNIT_ASSERT( VALID_CONVERSION( "test" ));
+ const char good1[] = "test";
+ CPPUNIT_ASSERT( VALID_CONVERSION( good1 ));
+
+ CPPUNIT_ASSERT( !VALID_CONVERSION( static_cast<const char*>("test") ));
+ const char* bad1 = good1;
+ CPPUNIT_ASSERT( !VALID_CONVERSION( bad1 ));
+ char bad2[] = "test";
+ CPPUNIT_ASSERT( !VALID_CONVERSION( bad2 ));
+ char* bad3 = bad2;
+ CPPUNIT_ASSERT( !VALID_CONVERSION( bad3 ));
+ const char* bad4[] = { "test1" };
+ CPPUNIT_ASSERT( !VALID_CONVERSION( bad4[ 0 ] ));
+ testcall( good1 );
+
+// This one is technically broken, since the first element is 6 characters test\0\0,
+// but there does not appear a way to detect this by compile time (runtime will assert()).
+// RTL_CONSTASCII_USTRINGPARAM() has the same flaw.
+ const char bad5[][ 6 ] = { "test", "test2" };
+// CPPUNIT_ASSERT( VALID_CONVERSION( bad5[ 0 ] ));
+ CPPUNIT_ASSERT( VALID_CONVERSION( bad5[ 1 ] ));
+
+// Check that contents are correct and equal to the case when RTL_CONSTASCII_USTRINGPARAM is used.
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "" ), rtl::OUString( "" ));
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "ab" ), rtl::OUString( "ab" ));
+#if 0
+// Also check that embedded \0 is included.
+// In fact, allowing this is probably just trouble, so this now asserts.
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "\0" ), rtl::OUString( "\0" ));
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "a\0b" ), rtl::OUString( "a\0b" ));
+#endif
+}
+
+void test::oustring::StringLiterals::testcall( const char str[] )
+{
+ CPPUNIT_ASSERT(
+ !VALID_CONVERSION_CALL([&str]() { return rtl::OUString(str); }));
+}
+
+void test::oustring::StringLiterals::checkUsage()
+{
+// simply check that all string literal based calls work as expected
+// also check that they really use string literal overload and do not convert to OUString
+ rtl::OUString foo( "foo" );
+ rtl::OUString FoO( "FoO" );
+ rtl::OUString foobarfoo( "foobarfoo" );
+ rtl::OUString foobar( "foobar" );
+ rtl::OUString FooBaRfoo( "FooBaRfoo" );
+ rtl::OUString FooBaR( "FooBaR" );
+ rtl::OUString bar( "bar" );
+ rtl::OUString test( "test" );
+
+ rtl_string_unittest_const_literal = false; // start checking for OUString conversions
+ CPPUNIT_ASSERT_EQUAL( foo, rtl::OUString() = "foo" );
+ CPPUNIT_ASSERT( FoO.equalsIgnoreAsciiCase( "fOo" ));
+ CPPUNIT_ASSERT( foobarfoo.match( "bar", 3 ));
+ CPPUNIT_ASSERT( foobar.match( "foo" ));
+ CPPUNIT_ASSERT( FooBaRfoo.matchIgnoreAsciiCase( "bAr", 3 ));
+ CPPUNIT_ASSERT( FooBaR.matchIgnoreAsciiCase( "fOo" ));
+ CPPUNIT_ASSERT( foobar.startsWith( "foo" ));
+ CPPUNIT_ASSERT( FooBaR.startsWithIgnoreAsciiCase( "foo" ));
+ CPPUNIT_ASSERT( foobar.endsWith( "bar" ));
+ CPPUNIT_ASSERT( FooBaR.endsWithIgnoreAsciiCase( "bar" ));
+ CPPUNIT_ASSERT( bool(foo == "foo") );
+ CPPUNIT_ASSERT( bool("foo" == foo) );
+ CPPUNIT_ASSERT( foo != "bar" );
+ CPPUNIT_ASSERT( "foo" != bar );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(6), foobarfoo.indexOf( "foo", 1 ) );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(6), foobarfoo.lastIndexOf( "foo" ) );
+ CPPUNIT_ASSERT( bool(foobarfoo.replaceFirst( "foo", test ) == "testbarfoo") );
+ CPPUNIT_ASSERT( bool(foobarfoo.replaceFirst( "foo", "test" ) == "testbarfoo") );
+ CPPUNIT_ASSERT( bool(foobarfoo.replaceAll( "foo", test ) == "testbartest") );
+ CPPUNIT_ASSERT( bool(foobarfoo.replaceAll( "foo", "test" ) == "testbartest") );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(0), foo.reverseCompareTo( "foo" ) );
+ // if this is not true, some of the calls above converted to OUString
+ CPPUNIT_ASSERT( !rtl_string_unittest_const_literal );
+}
+
+void test::oustring::StringLiterals::checkExtraIntArgument()
+{
+ // This makes sure that using by mistake RTL_CONSTASCII_STRINGPARAM does not trigger a different
+ // overload, i.e. the second argument to match() in this case is the indexFrom argument,
+ // but with the macro it would contain the length of the string. Therefore
+ // match( RTL_CONSTASCII_STRINGPARAM( "bar" )) would be match( "bar", 3 ), which would be
+ // true when called for OUString( "foobar" ). But this should not happen because of the
+ // &foo[0] trick in the RTL_CONSTASCII_STRINGPARAM macro.
+ CPPUNIT_ASSERT( !rtl::OUString("foobar").match( "bar" ));
+ CPPUNIT_ASSERT( !rtl::OUString("foobar").match( RTL_CONSTASCII_STRINGPARAM( "bar" )));
+}
+
+void test::oustring::StringLiterals::checkNonconstChar()
+{ // check that non-const char[] data do not trigger string literal overloads
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "foobar" ), rtl::OUString( "footest" ).replaceAll( "test", "bar" ));
+ char test[] = "test";
+ char bar[] = "bar";
+ const char consttest[] = "test";
+ const char constbar[] = "bar";
+ CPPUNIT_ASSERT(
+ !VALID_CONVERSION_CALL(
+ [&test, &bar]() {
+ return rtl::OUString("footest").replaceAll(test, bar); }));
+ CPPUNIT_ASSERT(
+ !VALID_CONVERSION_CALL(
+ [&consttest, &bar]() {
+ return rtl::OUString("footest").replaceAll(consttest, bar); }));
+ CPPUNIT_ASSERT(
+ !VALID_CONVERSION(
+ [&test, &constbar]() {
+ return rtl::OUString("footest").replaceAll(test, constbar); }));
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "foobar" ), rtl::OUString( "footest" ).replaceAll( consttest, constbar ));
+}
+
+void test::oustring::StringLiterals::checkBuffer()
+{
+ rtl::OUStringBuffer buf;
+ buf.append( "foo" );
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "foo" ), buf.toString());
+ buf.append( "bar" );
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "foobar" ), buf.toString());
+ buf.insert( 3, "baz" );
+ CPPUNIT_ASSERT_EQUAL( rtl::OUString( "foobazbar" ), buf.toString());
+ char d[] = "d";
+ CPPUNIT_ASSERT( !VALID_CONVERSION( buf.append( rtl::OUString( d ))));
+ CPPUNIT_ASSERT( !VALID_CONVERSION( buf.append( rtl::OUStringBuffer( d ))));
+}
+
+namespace {
+
+rtl::OUString conditional(bool flag) {
+ return flag
+ ? rtlunittest::OUStringLiteral("a")
+ : rtlunittest::OUStringLiteral("bb");
+}
+
+}
+
+void test::oustring::StringLiterals::checkOUStringLiteral()
+{
+ CPPUNIT_ASSERT(bool(conditional(true) == "a"));
+ CPPUNIT_ASSERT(bool(conditional(false) == "bb"));
+
+ rtl::OUString s1(rtlunittest::OUStringLiteral("abc"));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abc"), s1);
+ s1 = rtlunittest::OUStringLiteral("de");
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("de"), s1);
+ s1 += rtlunittest::OUStringLiteral("fde");
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("defde"), s1);
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(0),
+ s1.reverseCompareTo(rtlunittest::OUStringLiteral("defde")));
+ CPPUNIT_ASSERT(
+ s1.equalsIgnoreAsciiCase(rtlunittest::OUStringLiteral("DEFDE")));
+ CPPUNIT_ASSERT(s1.match(rtlunittest::OUStringLiteral("fde"), 2));
+ CPPUNIT_ASSERT(
+ s1.matchIgnoreAsciiCase(rtlunittest::OUStringLiteral("FDE"), 2));
+ rtl::OUString s2;
+ CPPUNIT_ASSERT(s1.startsWith(rtlunittest::OUStringLiteral("de"), &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("fde"), s2);
+ CPPUNIT_ASSERT(
+ s1.startsWithIgnoreAsciiCase(
+ rtlunittest::OUStringLiteral("DEFD"), &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("e"), s2);
+ CPPUNIT_ASSERT(s1.endsWith(rtlunittest::OUStringLiteral("de"), &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("def"), s2);
+ CPPUNIT_ASSERT(
+ s1.endsWithIgnoreAsciiCase(rtlunittest::OUStringLiteral("EFDE"), &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("d"), s2);
+ CPPUNIT_ASSERT(bool(s1 == rtlunittest::OUStringLiteral("defde")));
+ CPPUNIT_ASSERT(bool(rtlunittest::OUStringLiteral("defde") == s1));
+ CPPUNIT_ASSERT(s1 != rtlunittest::OUStringLiteral("abc"));
+ CPPUNIT_ASSERT(rtlunittest::OUStringLiteral("abc") != s1);
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(3), s1.indexOf(rtlunittest::OUStringLiteral("de"), 1));
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(3), s1.lastIndexOf(rtlunittest::OUStringLiteral("de")));
+ sal_Int32 i = 0;
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfde"),
+ s1.replaceFirst(
+ rtlunittest::OUStringLiteral("de"), rtl::OUString("abc"), &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfde"),
+ s1.replaceFirst(
+ rtl::OUString("de"), rtlunittest::OUStringLiteral("abc"), &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfde"),
+ s1.replaceFirst(
+ rtlunittest::OUStringLiteral("de"),
+ rtlunittest::OUStringLiteral("abc"), &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfde"),
+ s1.replaceFirst(rtlunittest::OUStringLiteral("de"), "abc", &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfde"),
+ s1.replaceFirst("de", rtlunittest::OUStringLiteral("abc"), &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfabc"),
+ s1.replaceAll(
+ rtlunittest::OUStringLiteral("de"), rtl::OUString("abc")));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfabc"),
+ s1.replaceAll(
+ rtl::OUString("de"), rtlunittest::OUStringLiteral("abc")));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfabc"),
+ s1.replaceAll(
+ rtlunittest::OUStringLiteral("de"),
+ rtlunittest::OUStringLiteral("abc")));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfabc"),
+ s1.replaceAll(rtlunittest::OUStringLiteral("de"), "abc"));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcfabc"),
+ s1.replaceAll("de", rtlunittest::OUStringLiteral("abc")));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcdef"),
+ rtl::OUString(
+ rtl::OUString("abc") + rtlunittest::OUStringLiteral("def")));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcdef"),
+ rtl::OUString(
+ rtlunittest::OUStringLiteral("abc") + rtl::OUString("def")));
+ rtl::OUStringBuffer b(rtlunittest::OUStringLiteral("abc"));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abc"), b.toString());
+ b.append(rtlunittest::OUStringLiteral("def"));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abcdef"), b.toString());
+ b.insert(2, rtlunittest::OUStringLiteral("gabab"));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abgababcdef"), b.toString());
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(3), b.indexOf(rtlunittest::OUStringLiteral("ab"), 1));
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Int32(5), b.lastIndexOf(rtlunittest::OUStringLiteral("ab")));
+}
+
+void test::oustring::StringLiterals::checkOUStringChar()
+{
+ auto l1 = rtlunittest::OUStringChar('A');
+ CPPUNIT_ASSERT_EQUAL(u'A', l1.c);
+
+ char const c2 = 'A';
+ auto l2 = rtlunittest::OUStringChar(c2);
+ CPPUNIT_ASSERT_EQUAL(u'A', l2.c);
+
+ char c3 = 'A'; auto l3 = rtlunittest::OUStringChar(c3);
+ CPPUNIT_ASSERT_EQUAL(u'A', l3.c);
+
+ auto l4 = rtlunittest::OUStringChar(u'A');
+ CPPUNIT_ASSERT_EQUAL(u'A', l4.c);
+
+ sal_Unicode const c5 = 0x100;
+ auto l5 = rtlunittest::OUStringChar(c5);
+ CPPUNIT_ASSERT_EQUAL(c5, l5.c);
+
+ rtl::OUString s1{rtlunittest::OUStringChar('A')};
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s1.getLength());
+ CPPUNIT_ASSERT_EQUAL(u'A', s1[0]);
+
+ CPPUNIT_ASSERT_EQUAL(
+ true, rtl::OUString("A") == rtlunittest::OUStringChar('A'));
+ CPPUNIT_ASSERT_EQUAL(
+ false, rtl::OUString("AB") == rtlunittest::OUStringChar('A'));
+ CPPUNIT_ASSERT_EQUAL(
+ false, rtl::OUString("A") != rtlunittest::OUStringChar('A'));
+ CPPUNIT_ASSERT_EQUAL(
+ true, rtl::OUString("AB") != rtlunittest::OUStringChar('A'));
+
+ rtl::OUString s2("A" + rtlunittest::OUStringChar('b'));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), s2.getLength());
+ CPPUNIT_ASSERT_EQUAL(u'A', s2[0]);
+ CPPUNIT_ASSERT_EQUAL(u'b', s2[1]);
+}
+
+void test::oustring::StringLiterals::checkUtf16() {
+ rtl::OUString s1(u"abc");
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abc"), s1);
+ s1 = u"de";
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("de"), s1);
+ s1 += u"fde";
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("defde"), s1);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s1.reverseCompareTo(u"defde"));
+ CPPUNIT_ASSERT(s1.equalsIgnoreAsciiCase(u"DEFDE"));
+ CPPUNIT_ASSERT(s1.match(u"fde", 2));
+ CPPUNIT_ASSERT(s1.matchIgnoreAsciiCase(u"FDE", 2));
+ rtl::OUString s2;
+ CPPUNIT_ASSERT(s1.startsWith(u"de", &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString(u"fde"), s2);
+ CPPUNIT_ASSERT(s1.startsWithIgnoreAsciiCase(u"DEFD", &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString(u"e"), s2);
+ CPPUNIT_ASSERT(s1.endsWith(u"de", &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString(u"def"), s2);
+ CPPUNIT_ASSERT(s1.endsWithIgnoreAsciiCase(u"EFDE", &s2));
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString(u"d"), s2);
+ CPPUNIT_ASSERT(bool(s1 == u"defde"));
+ CPPUNIT_ASSERT(bool(u"defde" == s1));
+ CPPUNIT_ASSERT(s1 != u"abc");
+ CPPUNIT_ASSERT(u"abc" != s1);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), s1.indexOf(u"de", 1));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), s1.lastIndexOf(u"de"));
+ sal_Int32 i = 0;
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfde"),
+ s1.replaceFirst(u"de", rtl::OUString("abc"), &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfde"),
+ s1.replaceFirst(rtl::OUString("de"), u"abc", &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfde"), s1.replaceFirst(u"de", u"abc", &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfde"), s1.replaceFirst(u"de", "abc", &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfde"), s1.replaceFirst("de", u"abc", &i));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i);
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfabc"), s1.replaceAll(u"de", rtl::OUString("abc")));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfabc"), s1.replaceAll(rtl::OUString("de"), u"abc"));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfabc"), s1.replaceAll(u"de", u"abc"));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfabc"), s1.replaceAll(u"de", "abc"));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString(u"abcfabc"), s1.replaceAll("de", u"abc"));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcdef"), rtl::OUString(rtl::OUString("abc") + u"def"));
+ CPPUNIT_ASSERT_EQUAL(
+ rtl::OUString("abcdef"), rtl::OUString(u"abc" + rtl::OUString("def")));
+ rtl::OUStringBuffer b(u"abc");
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abc"), b.toString());
+ b.append(u"def");
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abcdef"), b.toString());
+ b.insert(2, u"gabab");
+ CPPUNIT_ASSERT_EQUAL(rtl::OUString("abgababcdef"), b.toString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), b.indexOf(u"ab", 1));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), b.lastIndexOf(u"ab"));
+}
+
+} // namespace
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::StringLiterals);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_strings_replace.cxx b/sal/qa/rtl/strings/test_strings_replace.cxx
new file mode 100644
index 000000000..a27f5f142
--- /dev/null
+++ b/sal/qa/rtl/strings/test_strings_replace.cxx
@@ -0,0 +1,336 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <sal/types.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/string.h>
+#include <rtl/string.hxx>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+
+namespace {
+
+OUString s_empty;
+OUString s_bar("bar");
+OUString s_bars("bars");
+OUString s_foo("foo");
+OUString s_other("other");
+OUString s_xa("xa");
+OUString s_xx("xx");
+
+class Test: public CppUnit::TestFixture {
+private:
+ void stringReplaceFirst();
+
+ void stringReplaceAll();
+
+ void ustringReplaceFirst();
+
+ void ustringReplaceFirstAsciiL();
+
+ void ustringReplaceFirstToAsciiL();
+
+ void ustringReplaceFirstAsciiLAsciiL();
+
+ void ustringReplaceAll();
+
+ void ustringReplaceAllAsciiL();
+
+ void ustringReplaceAllToAsciiL();
+
+ void ustringReplaceAllAsciiLAsciiL();
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(stringReplaceFirst);
+ CPPUNIT_TEST(stringReplaceAll);
+ CPPUNIT_TEST(ustringReplaceFirst);
+ CPPUNIT_TEST(ustringReplaceFirstAsciiL);
+ CPPUNIT_TEST(ustringReplaceFirstToAsciiL);
+ CPPUNIT_TEST(ustringReplaceFirstAsciiLAsciiL);
+ CPPUNIT_TEST(ustringReplaceAll);
+ CPPUNIT_TEST(ustringReplaceAllAsciiL);
+ CPPUNIT_TEST(ustringReplaceAllToAsciiL);
+ CPPUNIT_TEST(ustringReplaceAllAsciiLAsciiL);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void Test::stringReplaceFirst() {
+ CPPUNIT_ASSERT_EQUAL(
+ OString("otherbarfoo"),
+ OString("foobarfoo").replaceFirst("foo", "other"));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OString("foobarfoo"),
+ OString("foobarfoo").replaceFirst("bars", "other"));
+
+ {
+ sal_Int32 n = 0;
+ CPPUNIT_ASSERT_EQUAL(
+ OString("otherbarfoo"),
+ OString("foobarfoo").replaceFirst("foo", "other", &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), n);
+ }
+
+ {
+ sal_Int32 n = 1;
+ CPPUNIT_ASSERT_EQUAL(
+ OString("foobarother"),
+ OString("foobarfoo").replaceFirst("foo", "other", &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), n);
+ }
+
+ {
+ sal_Int32 n = 4;
+ CPPUNIT_ASSERT_EQUAL(
+ OString("foobarfoo"),
+ OString("foobarfoo").replaceFirst("bar", "other", &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n);
+ }
+}
+
+void Test::stringReplaceAll() {
+ CPPUNIT_ASSERT_EQUAL(
+ OString("otherbarother"),
+ OString("foobarfoo").replaceAll("foo", "other"));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OString("foobarfoo"),
+ OString("foobarfoo").replaceAll("bars", "other"));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OString("xxa"), OString("xaa").replaceAll("xa", "xx"));
+}
+
+void Test::ustringReplaceFirst() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ OUString("foobarfoo").replaceFirst(s_foo, s_other));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceFirst(s_bars, s_other));
+
+ {
+ sal_Int32 n = 0;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ OUString("foobarfoo").replaceFirst(s_foo, s_other, &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), n);
+ }
+
+ {
+ sal_Int32 n = 1;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarother"),
+ OUString("foobarfoo").replaceFirst(s_foo, s_other, &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), n);
+ }
+
+ {
+ sal_Int32 n = 4;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceFirst(s_bar, s_other, &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n);
+ }
+}
+
+void Test::ustringReplaceFirstAsciiL() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ OUString("foobarfoo").replaceFirst("foo", s_other));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceFirst("bars", s_other));
+
+ {
+ sal_Int32 n = 0;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ OUString("foobarfoo").replaceFirst("foo", s_other, &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), n);
+ }
+
+ {
+ sal_Int32 n = 1;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarother"),
+ OUString("foobarfoo").replaceFirst("foo", s_other, &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), n);
+ }
+
+ {
+ sal_Int32 n = 4;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceFirst("bar", s_other, &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n);
+ }
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(), OUString("xa").replaceFirst("xa", s_empty));
+}
+
+void Test::ustringReplaceFirstToAsciiL() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ OUString("foobarfoo").replaceFirst(s_foo, "other"));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceFirst(s_bars, "other"));
+
+ {
+ sal_Int32 n = 0;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ OUString("foobarfoo").replaceFirst(s_foo, "other", &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), n);
+ }
+
+ {
+ sal_Int32 n = 1;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarother"),
+ OUString("foobarfoo").replaceFirst(s_foo, "other", &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), n);
+ }
+
+ {
+ sal_Int32 n = 4;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceFirst(s_bar, "other", &n));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n);
+ }
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(), OUString("xa").replaceFirst(s_xa, ""));
+}
+
+void Test::ustringReplaceFirstAsciiLAsciiL() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ (OUString("foobarfoo").
+ replaceFirst("foo", "other")));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ (OUString("foobarfoo").
+ replaceFirst("bars", "other")));
+
+ {
+ sal_Int32 n = 0;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarfoo"),
+ (OUString("foobarfoo").
+ replaceFirst("foo", "other", &n)));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), n);
+ }
+
+ {
+ sal_Int32 n = 1;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarother"),
+ (OUString("foobarfoo").
+ replaceFirst("foo", "other", &n)));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), n);
+ }
+
+ {
+ sal_Int32 n = 4;
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ (OUString("foobarfoo").
+ replaceFirst("bar", "other", &n)));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n);
+ }
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(), OUString("xa").replaceFirst("xa", ""));
+}
+
+void Test::ustringReplaceAll() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarother"),
+ OUString("foobarfoo").replaceAll(s_foo, s_other));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceAll(s_bars, s_other));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("xxa"),
+ OUString("xaa").replaceAll(s_xa, s_xx));
+}
+
+void Test::ustringReplaceAllAsciiL() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarother"),
+ OUString("foobarfoo").replaceAll("foo", s_other));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceAll("bars", s_other));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("xxa"),
+ OUString("xaa").replaceAll("xa", s_xx));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(), OUString("xa").replaceAll("xa", s_empty));
+}
+
+void Test::ustringReplaceAllToAsciiL() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarother"),
+ OUString("foobarfoo").replaceAll(s_foo, "other"));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ OUString("foobarfoo").replaceAll(s_bars, "other"));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("xxa"),
+ OUString("xaa").replaceAll(s_xa, "xx"));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(), OUString("xa").replaceAll(s_xa, ""));
+}
+
+void Test::ustringReplaceAllAsciiLAsciiL() {
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("otherbarother"),
+ (OUString("foobarfoo").
+ replaceAll("foo", "other")));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("foobarfoo"),
+ (OUString("foobarfoo").
+ replaceAll("bars", "other")));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("xxa"),
+ (OUString("xaa").
+ replaceAll("xa", "xx")));
+
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(), OUString("xa").replaceAll("xa", ""));
+}
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_strings_toint.cxx b/sal/qa/rtl/strings/test_strings_toint.cxx
new file mode 100644
index 000000000..d81525b94
--- /dev/null
+++ b/sal/qa/rtl/strings/test_strings_toint.cxx
@@ -0,0 +1,72 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/string.hxx>
+#include <rtl/ustring.hxx>
+#include <sal/types.h>
+
+namespace {
+
+template< typename T > class Test: public CppUnit::TestFixture {
+private:
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testToInt32Overflow);
+ CPPUNIT_TEST(testToUInt32Overflow);
+ CPPUNIT_TEST(testToInt64Overflow);
+ CPPUNIT_TEST(testToUInt64Overflow);
+ CPPUNIT_TEST_SUITE_END();
+
+ void testToInt32Overflow() {
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), T("-2147483649").toInt32());
+ CPPUNIT_ASSERT_EQUAL(SAL_MIN_INT32, T("-2147483648").toInt32());
+ CPPUNIT_ASSERT_EQUAL(SAL_MIN_INT32 + 1, T("-2147483647").toInt32());
+ CPPUNIT_ASSERT_EQUAL(SAL_MAX_INT32 - 1, T("2147483646").toInt32());
+ CPPUNIT_ASSERT_EQUAL(SAL_MAX_INT32, T("2147483647").toInt32());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), T("2147483648").toInt32());
+ }
+
+ void testToUInt32Overflow() {
+ CPPUNIT_ASSERT_EQUAL(SAL_MAX_UINT32 - 1, T("4294967294").toUInt32());
+ CPPUNIT_ASSERT_EQUAL(SAL_MAX_UINT32, T("4294967295").toUInt32());
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), T("4294967296").toUInt32());
+ }
+
+ void testToInt64Overflow() {
+ CPPUNIT_ASSERT_EQUAL(sal_Int64(0), T("-9223372036854775809").toInt64());
+ CPPUNIT_ASSERT_EQUAL(
+ SAL_MIN_INT64, T("-9223372036854775808").toInt64());
+ CPPUNIT_ASSERT_EQUAL(
+ SAL_MIN_INT64 + 1, T("-9223372036854775807").toInt64());
+ CPPUNIT_ASSERT_EQUAL(
+ SAL_MAX_INT64 - 1, T("9223372036854775806").toInt64());
+ CPPUNIT_ASSERT_EQUAL(SAL_MAX_INT64, T("9223372036854775807").toInt64());
+ CPPUNIT_ASSERT_EQUAL(sal_Int64(0), T("9223372036854775808").toInt64());
+ }
+
+ void testToUInt64Overflow() {
+ CPPUNIT_ASSERT_EQUAL(
+ SAL_MAX_UINT64 - 1, T("18446744073709551614").toUInt64());
+ CPPUNIT_ASSERT_EQUAL(
+ SAL_MAX_UINT64, T("18446744073709551615").toUInt64());
+ CPPUNIT_ASSERT_EQUAL(
+ sal_uInt64(0), T("18446744073709551616").toUInt64());
+ }
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test< OString >);
+CPPUNIT_TEST_SUITE_REGISTRATION(Test< OUString >);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/strings/test_strings_valuex.cxx b/sal/qa/rtl/strings/test_strings_valuex.cxx
new file mode 100644
index 000000000..6c9c83644
--- /dev/null
+++ b/sal/qa/rtl/strings/test_strings_valuex.cxx
@@ -0,0 +1,115 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/ustring.hxx>
+#include <iostream>
+
+namespace test::strings {
+
+class valueX : public CppUnit::TestFixture {
+public:
+ void testOBoolean();
+ void testOUBoolean();
+ void testOUInt();
+ void testOInt();
+ void testOUFloat();
+ void testOFloat();
+
+ CPPUNIT_TEST_SUITE(valueX);
+ CPPUNIT_TEST(testOBoolean);
+ CPPUNIT_TEST(testOUBoolean);
+ CPPUNIT_TEST(testOUInt);
+ CPPUNIT_TEST(testOInt);
+ CPPUNIT_TEST(testOUFloat);
+ CPPUNIT_TEST(testOFloat);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test::strings::valueX);
+
+namespace {
+
+template< typename T >
+void testBoolean() {
+ CPPUNIT_ASSERT_EQUAL( T( "false" ), T::boolean( false ) );
+ CPPUNIT_ASSERT_EQUAL( T( "true" ), T::boolean( true ) );
+}
+
+}
+
+void test::strings::valueX::testOBoolean() {
+ testBoolean<OString>();
+}
+
+void test::strings::valueX::testOUBoolean() {
+ testBoolean<OUString>();
+}
+
+template< typename T >
+static void testInt() {
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( 30039062 )));
+
+ // test the overloading resolution
+
+ CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< signed char >( 30 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< unsigned char >( 30 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< short >( 30039 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< unsigned short >( 30039 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< int >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< unsigned int >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< long >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< unsigned long >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< long long >( 30039062 ))));
+ // The highest bit set in unsigned long long may not actually work.
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< unsigned long long >( 30039062 ))));
+
+ CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< sal_Int8 >( 30 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< sal_uInt8 >( 30 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< sal_Int16 >( 30039 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< sal_uInt16 >( 30039 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_Int32 >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_uInt32 >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_Int64 >( 30039062 ))));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_uInt64 >( 30039062 ))));
+
+ // The implementation internally uses sal_Int64 etc. types, so check ranges.
+ assert( sizeof( int ) <= sizeof( sal_Int32 ));
+ assert( sizeof( long ) <= sizeof( sal_Int64 ));
+ assert( sizeof( long long ) <= sizeof( sal_Int64 ));
+ assert( sizeof( unsigned int ) < sizeof( sal_Int64 ));
+}
+
+void test::strings::valueX::testOUInt() {
+ testInt<OUString>();
+}
+
+void test::strings::valueX::testOInt() {
+ testInt<OString>();
+}
+
+template< typename T >
+static void testFloat() {
+ CPPUNIT_ASSERT_EQUAL( T( "39062.2" ), T( T::number( 39062.2f )));
+ CPPUNIT_ASSERT_EQUAL( T( "30039062.2" ), T( T::number( 30039062.2 )));
+ // long double not supported
+}
+
+void test::strings::valueX::testOUFloat() {
+ testFloat<OUString>();
+}
+
+void test::strings::valueX::testOFloat() {
+ testFloat<OString>();
+}
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/textenc/rtl_tencinfo.cxx b/sal/qa/rtl/textenc/rtl_tencinfo.cxx
new file mode 100644
index 000000000..eaa16c6eb
--- /dev/null
+++ b/sal/qa/rtl/textenc/rtl_tencinfo.cxx
@@ -0,0 +1,1667 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <config_locales.h>
+
+#include <string.h>
+
+#include <rtl/tencinfo.h>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+namespace
+{
+ class testBestMime : public CppUnit::TestFixture
+ {
+ public:
+ void check(rtl_TextEncoding eIn, rtl_TextEncoding eOut)
+ {
+ const char *pCharSet = rtl_getBestMimeCharsetFromTextEncoding(eIn);
+ rtl_TextEncoding eTextEnc = rtl_getTextEncodingFromMimeCharset(pCharSet);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("rtl_getBestMimeCharsetFromTextEncoding && rtl_getTextEncodingFromMimeCharset differdiffer", eOut, eTextEnc );
+ }
+
+ // the defines for the follows test could be found in file inc/rtl/textenc.h
+
+ void MimeCharsetFromTextEncoding_MS_1252()
+ {
+ check( RTL_TEXTENCODING_MS_1252, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void MimeCharsetFromTextEncoding_APPLE_ROMAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_ROMAN, RTL_TEXTENCODING_APPLE_ROMAN);
+ }
+
+ void MimeCharsetFromTextEncoding_IBM_437()
+ {
+ check( RTL_TEXTENCODING_IBM_437, RTL_TEXTENCODING_IBM_437 );
+ }
+
+ void MimeCharsetFromTextEncoding_IBM_850()
+ {
+ check( RTL_TEXTENCODING_IBM_850, RTL_TEXTENCODING_IBM_850 );
+ }
+
+ void MimeCharsetFromTextEncoding_IBM_860()
+ {
+ check( RTL_TEXTENCODING_IBM_860, RTL_TEXTENCODING_IBM_860 );
+ }
+
+ void MimeCharsetFromTextEncoding_IBM_861()
+ {
+ check( RTL_TEXTENCODING_IBM_861, RTL_TEXTENCODING_IBM_861 );
+ }
+
+ void MimeCharsetFromTextEncoding_IBM_863()
+ {
+ check( RTL_TEXTENCODING_IBM_863, RTL_TEXTENCODING_IBM_863 );
+ }
+
+ void MimeCharsetFromTextEncoding_IBM_865()
+ {
+ check( RTL_TEXTENCODING_IBM_865, RTL_TEXTENCODING_IBM_865 );
+ }
+
+ void MimeCharsetFromTextEncoding_SYMBOL()
+ {
+ check( RTL_TEXTENCODING_SYMBOL, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void MimeCharsetFromTextEncoding_ASCII_US()
+ {
+ check( RTL_TEXTENCODING_ASCII_US, RTL_TEXTENCODING_ASCII_US );
+ }
+
+ void MimeCharsetFromTextEncoding_ISO_8859_1()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_1, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_2()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_2, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_3()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_3, RTL_TEXTENCODING_ISO_8859_3 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_4()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_4, RTL_TEXTENCODING_ISO_8859_4 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_5()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_5, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_6()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_6, RTL_TEXTENCODING_ISO_8859_6 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_7()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_7, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_8()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_8, RTL_TEXTENCODING_ISO_8859_8 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_9()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_9, RTL_TEXTENCODING_ISO_8859_9 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_14()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_14, RTL_TEXTENCODING_ISO_8859_14 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_15()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_15, RTL_TEXTENCODING_ISO_8859_15 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_737()
+ {
+ check( RTL_TEXTENCODING_IBM_737, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_775()
+ {
+ check( RTL_TEXTENCODING_IBM_775, RTL_TEXTENCODING_ISO_8859_4 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_852()
+ {
+ check( RTL_TEXTENCODING_IBM_852, RTL_TEXTENCODING_IBM_852 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_855()
+ {
+ check( RTL_TEXTENCODING_IBM_855, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_857()
+ {
+ check( RTL_TEXTENCODING_IBM_857, RTL_TEXTENCODING_ISO_8859_9 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_862()
+ {
+ check( RTL_TEXTENCODING_IBM_862, RTL_TEXTENCODING_IBM_862 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_864()
+ {
+ check( RTL_TEXTENCODING_IBM_864, RTL_TEXTENCODING_IBM_864 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_866()
+ {
+ check( RTL_TEXTENCODING_IBM_866, RTL_TEXTENCODING_IBM_866 );
+ }
+ void MimeCharsetFromTextEncoding_IBM_869()
+ {
+ check( RTL_TEXTENCODING_IBM_869, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+ void MimeCharsetFromTextEncoding_MS_874()
+ {
+ check( RTL_TEXTENCODING_MS_874, RTL_TEXTENCODING_MS_874 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1250()
+ {
+ check( RTL_TEXTENCODING_MS_1250, RTL_TEXTENCODING_MS_1250 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1251()
+ {
+ check( RTL_TEXTENCODING_MS_1251, RTL_TEXTENCODING_MS_1251 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1253()
+ {
+ check( RTL_TEXTENCODING_MS_1253, RTL_TEXTENCODING_MS_1253 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1254()
+ {
+ check( RTL_TEXTENCODING_MS_1254, RTL_TEXTENCODING_MS_1254 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1255()
+ {
+ check( RTL_TEXTENCODING_MS_1255, RTL_TEXTENCODING_MS_1255 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1256()
+ {
+ check( RTL_TEXTENCODING_MS_1256, RTL_TEXTENCODING_MS_1256 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1257()
+ {
+ check( RTL_TEXTENCODING_MS_1257, RTL_TEXTENCODING_MS_1257 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1258()
+ {
+ check( RTL_TEXTENCODING_MS_1258, RTL_TEXTENCODING_MS_1258 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_CENTEURO()
+ {
+ check( RTL_TEXTENCODING_APPLE_CENTEURO, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_CROATIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_CROATIAN, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_CYRILLIC()
+ {
+ check( RTL_TEXTENCODING_APPLE_CYRILLIC, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_GREEK()
+ {
+ check( RTL_TEXTENCODING_APPLE_GREEK, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_ICELAND()
+ {
+ check( RTL_TEXTENCODING_APPLE_ICELAND, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_ROMANIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_ROMANIAN, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_TURKISH()
+ {
+ check( RTL_TEXTENCODING_APPLE_TURKISH, RTL_TEXTENCODING_ISO_8859_9 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_UKRAINIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_UKRAINIAN, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+ void MimeCharsetFromTextEncoding_MS_932()
+ {
+ check( RTL_TEXTENCODING_MS_932, RTL_TEXTENCODING_SHIFT_JIS );
+ }
+ void MimeCharsetFromTextEncoding_MS_936()
+ {
+ check( RTL_TEXTENCODING_MS_936, RTL_TEXTENCODING_GB_2312 );
+ }
+ void MimeCharsetFromTextEncoding_MS_949()
+ {
+ check( RTL_TEXTENCODING_MS_949, RTL_TEXTENCODING_EUC_KR );
+ }
+ void MimeCharsetFromTextEncoding_MS_950()
+ {
+ check( RTL_TEXTENCODING_MS_950, RTL_TEXTENCODING_BIG5 );
+ }
+ void MimeCharsetFromTextEncoding_KOI8_R()
+ {
+ check( RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_KOI8_R );
+ }
+ void MimeCharsetFromTextEncoding_UTF7()
+ {
+ check( RTL_TEXTENCODING_UTF7, RTL_TEXTENCODING_UTF7 );
+ }
+ void MimeCharsetFromTextEncoding_UTF8()
+ {
+ check( RTL_TEXTENCODING_UTF8, RTL_TEXTENCODING_UTF8 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_10()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_10, RTL_TEXTENCODING_ISO_8859_10 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_8859_13()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_13, RTL_TEXTENCODING_ISO_8859_13 );
+ }
+ void MimeCharsetFromTextEncoding_MS_1361()
+ {
+ check( RTL_TEXTENCODING_MS_1361, RTL_TEXTENCODING_EUC_KR );
+ }
+ void MimeCharsetFromTextEncoding_TIS_620()
+ {
+ check( RTL_TEXTENCODING_TIS_620, RTL_TEXTENCODING_TIS_620 );
+ }
+ void MimeCharsetFromTextEncoding_KOI8_U()
+ {
+ check( RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_KOI8_U );
+ }
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ void MimeCharsetFromTextEncoding_APPLE_JAPANESE()
+ {
+ check( RTL_TEXTENCODING_APPLE_JAPANESE, RTL_TEXTENCODING_SHIFT_JIS );
+ }
+ void MimeCharsetFromTextEncoding_SHIFT_JIS()
+ {
+ check( RTL_TEXTENCODING_SHIFT_JIS, RTL_TEXTENCODING_SHIFT_JIS );
+ }
+ void MimeCharsetFromTextEncoding_EUC_JP()
+ {
+ check( RTL_TEXTENCODING_EUC_JP, RTL_TEXTENCODING_EUC_JP );
+ }
+ void MimeCharsetFromTextEncoding_ISO_2022_JP()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_ISO_2022_JP );
+ }
+ void MimeCharsetFromTextEncoding_JIS_X_0201()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0201, RTL_TEXTENCODING_EUC_JP );
+ }
+ void MimeCharsetFromTextEncoding_JIS_X_0208()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0208, RTL_TEXTENCODING_EUC_JP );
+ }
+ void MimeCharsetFromTextEncoding_JIS_X_0212()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0212, RTL_TEXTENCODING_EUC_JP );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ void MimeCharsetFromTextEncoding_APPLE_KOREAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_KOREAN, RTL_TEXTENCODING_EUC_KR );
+ }
+ void MimeCharsetFromTextEncoding_EUC_KR()
+ {
+ check( RTL_TEXTENCODING_EUC_KR, RTL_TEXTENCODING_EUC_KR );
+ }
+ void MimeCharsetFromTextEncoding_ISO_2022_KR()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_ISO_2022_KR );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ void MimeCharsetFromTextEncoding_APPLE_CHINSIMP()
+ {
+ check( RTL_TEXTENCODING_APPLE_CHINSIMP, RTL_TEXTENCODING_GB_2312 );
+ }
+ void MimeCharsetFromTextEncoding_APPLE_CHINTRAD()
+ {
+ check( RTL_TEXTENCODING_APPLE_CHINTRAD, RTL_TEXTENCODING_BIG5 );
+ }
+ void MimeCharsetFromTextEncoding_GB_2312()
+ {
+ check( RTL_TEXTENCODING_GB_2312, RTL_TEXTENCODING_GB_2312 );
+ }
+ void MimeCharsetFromTextEncoding_GBT_12345()
+ {
+ check( RTL_TEXTENCODING_GBT_12345, RTL_TEXTENCODING_GBT_12345 );
+ }
+ void MimeCharsetFromTextEncoding_GBK()
+ {
+ check( RTL_TEXTENCODING_GBK, RTL_TEXTENCODING_GBK );
+ }
+ void MimeCharsetFromTextEncoding_BIG5()
+ {
+ check( RTL_TEXTENCODING_BIG5, RTL_TEXTENCODING_BIG5 );
+ }
+ void MimeCharsetFromTextEncoding_EUC_CN()
+ {
+ check( RTL_TEXTENCODING_EUC_CN, RTL_TEXTENCODING_GB_2312 );
+ }
+ void MimeCharsetFromTextEncoding_EUC_TW()
+ {
+ check( RTL_TEXTENCODING_EUC_TW, RTL_TEXTENCODING_BIG5 );
+ }
+ void MimeCharsetFromTextEncoding_ISO_2022_CN()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_ISO_2022_CN );
+ }
+ void MimeCharsetFromTextEncoding_GB_18030()
+ {
+ check( RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_GB_18030 );
+ }
+ void MimeCharsetFromTextEncoding_BIG5_HKSCS()
+ {
+ check( RTL_TEXTENCODING_BIG5_HKSCS, RTL_TEXTENCODING_BIG5_HKSCS );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva
+ void MimeCharsetFromTextEncoding_ISCII_DEVANAGARI()
+ {
+ check( RTL_TEXTENCODING_ISCII_DEVANAGARI, RTL_TEXTENCODING_ISCII_DEVANAGARI );
+ }
+#endif
+ CPPUNIT_TEST_SUITE( testBestMime );
+
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1252 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_ROMAN );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_437 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_850 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_860 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_861 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_863 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_865 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_SYMBOL );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ASCII_US );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_1 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_2 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_3 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_4 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_5 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_6 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_7 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_8 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_9 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_14 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_15 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_737 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_775 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_852 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_855 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_857 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_862 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_864 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_866 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_869 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_874 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1250 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1251 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1253 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1254 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1255 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1256 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1257 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1258 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_CENTEURO );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_CROATIAN );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_CYRILLIC );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_GREEK );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_ICELAND );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_ROMANIAN );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_TURKISH );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_UKRAINIAN );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_932 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_936 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_949 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_950 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_KOI8_R );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_UTF7 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_UTF8 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_10 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_13 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1361 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_TIS_620 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_KOI8_U );
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_JAPANESE );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_SHIFT_JIS );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_EUC_JP );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_2022_JP );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_JIS_X_0201 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_JIS_X_0208 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_JIS_X_0212 );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_KOREAN );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_EUC_KR );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_2022_KR );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_CHINSIMP );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_CHINTRAD );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_GB_2312 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_GBT_12345 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_GBK );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_BIG5 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_EUC_CN );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_EUC_TW );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_2022_CN );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_GB_18030 );
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_BIG5_HKSCS );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva
+ CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISCII_DEVANAGARI );
+#endif
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ class testBestUnix : public CppUnit::TestFixture
+ {
+ public:
+ void check(rtl_TextEncoding eIn, rtl_TextEncoding eOut)
+ {
+ const char *pCharSet = rtl_getBestUnixCharsetFromTextEncoding(eIn);
+ rtl_TextEncoding eTextEnc = rtl_getTextEncodingFromUnixCharset(pCharSet);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("rtl_getBestUnixCharsetFromTextEncoding && rtl_getTextEncodingFromUnixCharset", eOut, eTextEnc );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1252()
+ {
+ check( RTL_TEXTENCODING_MS_1252, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_ROMAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_ROMAN, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_437()
+ {
+ check( RTL_TEXTENCODING_IBM_437, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_850()
+ {
+ check( RTL_TEXTENCODING_IBM_850, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_860()
+ {
+ check( RTL_TEXTENCODING_IBM_860, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_861()
+ {
+ check( RTL_TEXTENCODING_IBM_861, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_863()
+ {
+ check( RTL_TEXTENCODING_IBM_863, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_865()
+ {
+ check( RTL_TEXTENCODING_IBM_865, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_SYMBOL()
+ {
+ check( RTL_TEXTENCODING_SYMBOL, RTL_TEXTENCODING_SYMBOL );
+ }
+
+ void UnixCharsetFromTextEncoding_ASCII_US()
+ {
+ check( RTL_TEXTENCODING_ASCII_US, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_1()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_1, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_2()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_2, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_3()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_3, RTL_TEXTENCODING_ISO_8859_3 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_4()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_4, RTL_TEXTENCODING_ISO_8859_4 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_5()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_5, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_6()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_6, RTL_TEXTENCODING_ISO_8859_6 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_7()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_7, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_8()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_8, RTL_TEXTENCODING_ISO_8859_8 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_9()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_9, RTL_TEXTENCODING_ISO_8859_9 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_14()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_14, RTL_TEXTENCODING_ISO_8859_14 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_15()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_15, RTL_TEXTENCODING_ISO_8859_15 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_737()
+ {
+ check( RTL_TEXTENCODING_IBM_737, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_775()
+ {
+ check( RTL_TEXTENCODING_IBM_775, RTL_TEXTENCODING_ISO_8859_4 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_852()
+ {
+ check( RTL_TEXTENCODING_IBM_852, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_855()
+ {
+ check( RTL_TEXTENCODING_IBM_855, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_857()
+ {
+ check( RTL_TEXTENCODING_IBM_857, RTL_TEXTENCODING_ISO_8859_9 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_862()
+ {
+ check( RTL_TEXTENCODING_IBM_862, RTL_TEXTENCODING_ISO_8859_8 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_864()
+ {
+ check( RTL_TEXTENCODING_IBM_864, RTL_TEXTENCODING_ISO_8859_6 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_866()
+ {
+ check( RTL_TEXTENCODING_IBM_866, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+
+ void UnixCharsetFromTextEncoding_IBM_869()
+ {
+ check( RTL_TEXTENCODING_IBM_869, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_874()
+ {
+ check( RTL_TEXTENCODING_MS_874, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1250()
+ {
+ check( RTL_TEXTENCODING_MS_1250, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1251()
+ {
+ check( RTL_TEXTENCODING_MS_1251, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1253()
+ {
+ check( RTL_TEXTENCODING_MS_1253, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1254()
+ {
+ check( RTL_TEXTENCODING_MS_1254, RTL_TEXTENCODING_ISO_8859_9 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1255()
+ {
+ check( RTL_TEXTENCODING_MS_1255, RTL_TEXTENCODING_ISO_8859_8 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1256()
+ {
+ check( RTL_TEXTENCODING_MS_1256, RTL_TEXTENCODING_ISO_8859_6 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1257()
+ {
+ check( RTL_TEXTENCODING_MS_1257, RTL_TEXTENCODING_ISO_8859_4 );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_1258()
+ {
+ check( RTL_TEXTENCODING_MS_1258, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_CENTEURO()
+ {
+ check( RTL_TEXTENCODING_APPLE_CENTEURO, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_CROATIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_CROATIAN, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_CYRILLIC()
+ {
+ check( RTL_TEXTENCODING_APPLE_CYRILLIC, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_GREEK()
+ {
+ check( RTL_TEXTENCODING_APPLE_GREEK, RTL_TEXTENCODING_ISO_8859_7 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_ICELAND()
+ {
+ check( RTL_TEXTENCODING_APPLE_ICELAND, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_ROMANIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_ROMANIAN, RTL_TEXTENCODING_ISO_8859_2 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_TURKISH()
+ {
+ check( RTL_TEXTENCODING_APPLE_TURKISH, RTL_TEXTENCODING_ISO_8859_9 );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_UKRAINIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_UKRAINIAN, RTL_TEXTENCODING_ISO_8859_5 );
+ }
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ void UnixCharsetFromTextEncoding_APPLE_CHINSIMP()
+ {
+ check( RTL_TEXTENCODING_APPLE_CHINSIMP, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_APPLE_CHINTRAD()
+ {
+ check( RTL_TEXTENCODING_APPLE_CHINTRAD, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ void UnixCharsetFromTextEncoding_APPLE_JAPANESE()
+ {
+ check( RTL_TEXTENCODING_APPLE_JAPANESE, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ void UnixCharsetFromTextEncoding_APPLE_KOREAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_KOREAN, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+ void UnixCharsetFromTextEncoding_MS_932()
+ {
+ check( RTL_TEXTENCODING_MS_932, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_936()
+ {
+ check( RTL_TEXTENCODING_MS_936, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_949()
+ {
+ check( RTL_TEXTENCODING_MS_949, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_MS_950()
+ {
+ check( RTL_TEXTENCODING_MS_950, RTL_TEXTENCODING_DONTKNOW );
+ }
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ void UnixCharsetFromTextEncoding_SHIFT_JIS()
+ {
+ check( RTL_TEXTENCODING_SHIFT_JIS, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ void UnixCharsetFromTextEncoding_GB_2312()
+ {
+ check( RTL_TEXTENCODING_GB_2312, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_GBT_12345()
+ {
+ check( RTL_TEXTENCODING_GBT_12345, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_GBK()
+ {
+ check( RTL_TEXTENCODING_GBK, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_BIG5()
+ {
+ check( RTL_TEXTENCODING_BIG5, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ void UnixCharsetFromTextEncoding_EUC_JP()
+ {
+ check( RTL_TEXTENCODING_EUC_JP, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ void UnixCharsetFromTextEncoding_EUC_CN()
+ {
+ check( RTL_TEXTENCODING_EUC_CN, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_EUC_TW()
+ {
+ check( RTL_TEXTENCODING_EUC_TW, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ void UnixCharsetFromTextEncoding_ISO_2022_JP()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ void UnixCharsetFromTextEncoding_ISO_2022_CN()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+ void UnixCharsetFromTextEncoding_KOI8_R()
+ {
+ check( RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_KOI8_R );
+ }
+
+ void UnixCharsetFromTextEncoding_UTF7()
+ {
+ check( RTL_TEXTENCODING_UTF7, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_UTF8()
+ {
+ check( RTL_TEXTENCODING_UTF8, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_10()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_10, RTL_TEXTENCODING_ISO_8859_10 );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_8859_13()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_13, RTL_TEXTENCODING_ISO_8859_13 );
+ }
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ void UnixCharsetFromTextEncoding_EUC_KR()
+ {
+ check( RTL_TEXTENCODING_EUC_KR, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_ISO_2022_KR()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ void UnixCharsetFromTextEncoding_JIS_X_0201()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0201, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_JIS_X_0208()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0208, RTL_TEXTENCODING_DONTKNOW );
+ }
+
+ void UnixCharsetFromTextEncoding_JIS_X_0212()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0212, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+ void UnixCharsetFromTextEncoding_MS_1361()
+ {
+ check( RTL_TEXTENCODING_MS_1361, RTL_TEXTENCODING_DONTKNOW );
+ }
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ void UnixCharsetFromTextEncoding_GB_18030()
+ {
+ check( RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_GBK );
+ }
+
+ void UnixCharsetFromTextEncoding_BIG5_HKSCS()
+ {
+ check( RTL_TEXTENCODING_BIG5_HKSCS, RTL_TEXTENCODING_DONTKNOW );
+ }
+#endif
+ void UnixCharsetFromTextEncoding_TIS_620()
+ {
+ check( RTL_TEXTENCODING_TIS_620, RTL_TEXTENCODING_ISO_8859_1 );
+ }
+
+ void UnixCharsetFromTextEncoding_KOI8_U()
+ {
+ check( RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_KOI8_U );
+ }
+
+ CPPUNIT_TEST_SUITE( testBestUnix );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1252 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_ROMAN );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_437 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_850 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_860 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_861 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_863 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_865 );
+
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_SYMBOL );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ASCII_US );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_1 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_2 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_3 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_4 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_5 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_6 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_7 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_8 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_9 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_14 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_15 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_737 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_775 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_852 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_855 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_857 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_862 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_864 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_866 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_869 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_874 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1250 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1251 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1253 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1254 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1255 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1256 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1257 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1258 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_CENTEURO );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_CROATIAN );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_CYRILLIC );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_GREEK );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_ICELAND );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_ROMANIAN );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_TURKISH );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_UKRAINIAN );
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_CHINSIMP );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_CHINTRAD );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_JAPANESE );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_KOREAN );
+#endif
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_932 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_936 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_949 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_950 );
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_SHIFT_JIS );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_GB_2312 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_GBT_12345 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_GBK );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_BIG5 );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_EUC_JP );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_EUC_CN );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_EUC_TW );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_2022_JP );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_2022_CN );
+#endif
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_KOI8_R );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_UTF7 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_UTF8 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_10 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_13 );
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_EUC_KR );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_2022_KR );
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_JIS_X_0201 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_JIS_X_0208 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_JIS_X_0212 );
+#endif
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1361 );
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_GB_18030 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_BIG5_HKSCS );
+#endif
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_TIS_620 );
+ CPPUNIT_TEST( UnixCharsetFromTextEncoding_KOI8_U );
+
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ class testBestWindows : public CppUnit::TestFixture
+ {
+ public:
+ void check(rtl_TextEncoding nIn, rtl_TextEncoding nOut)
+ {
+ const sal_uInt8 nCharSet = rtl_getBestWindowsCharsetFromTextEncoding(nIn);
+ rtl_TextEncoding eTextEnc = rtl_getTextEncodingFromWindowsCharset(nCharSet);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("rtl_getBestWindowsCharsetFromTextEncoding && rtl_getTextEncodingFromWindowsCharset differ", nOut, eTextEnc );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1252()
+ {
+ check( RTL_TEXTENCODING_MS_1252, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_ROMAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_ROMAN, RTL_TEXTENCODING_APPLE_ROMAN );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_437()
+ {
+ check( RTL_TEXTENCODING_IBM_437, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_850()
+ {
+ check( RTL_TEXTENCODING_IBM_850, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_860()
+ {
+ check( RTL_TEXTENCODING_IBM_860, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_861()
+ {
+ check( RTL_TEXTENCODING_IBM_861, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_863()
+ {
+ check( RTL_TEXTENCODING_IBM_863, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_865()
+ {
+ check( RTL_TEXTENCODING_IBM_865, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_SYMBOL()
+ {
+ check( RTL_TEXTENCODING_SYMBOL, RTL_TEXTENCODING_SYMBOL );
+ }
+
+ void WindowsCharsetFromTextEncoding_ASCII_US()
+ {
+ check( RTL_TEXTENCODING_ASCII_US, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_1()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_1, RTL_TEXTENCODING_MS_1252 );
+ }
+#if 0
+ void WindowsCharsetFromTextEncoding_ISO_8859_2()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_2, RTL_TEXTENCODING_MS_1252 );
+ }
+#endif
+ void WindowsCharsetFromTextEncoding_ISO_8859_3()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_3, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_4()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_4, RTL_TEXTENCODING_MS_1257 );
+ }
+#if 0
+ void WindowsCharsetFromTextEncoding_ISO_8859_5()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_5, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_6()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_6, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_7()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_7, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_8()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_8, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_9()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_9, RTL_TEXTENCODING_MS_1252 );
+ }
+#endif
+ void WindowsCharsetFromTextEncoding_ISO_8859_14()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_14, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_15()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_15, RTL_TEXTENCODING_MS_1252 );
+ }
+#if 0
+ void WindowsCharsetFromTextEncoding_IBM_737()
+ {
+ check( RTL_TEXTENCODING_IBM_737, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_775()
+ {
+ check( RTL_TEXTENCODING_IBM_775, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_852()
+ {
+ check( RTL_TEXTENCODING_IBM_852, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_855()
+ {
+ check( RTL_TEXTENCODING_IBM_855, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_857()
+ {
+ check( RTL_TEXTENCODING_IBM_857, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_862()
+ {
+ check( RTL_TEXTENCODING_IBM_862, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_864()
+ {
+ check( RTL_TEXTENCODING_IBM_864, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_866()
+ {
+ check( RTL_TEXTENCODING_IBM_866, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_IBM_869()
+ {
+ check( RTL_TEXTENCODING_IBM_869, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_874()
+ {
+ check( RTL_TEXTENCODING_MS_874, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1250()
+ {
+ check( RTL_TEXTENCODING_MS_1250, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1251()
+ {
+ check( RTL_TEXTENCODING_MS_1251, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1253()
+ {
+ check( RTL_TEXTENCODING_MS_1253, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1254()
+ {
+ check( RTL_TEXTENCODING_MS_1254, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1255()
+ {
+ check( RTL_TEXTENCODING_MS_1255, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1256()
+ {
+ check( RTL_TEXTENCODING_MS_1256, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1257()
+ {
+ check( RTL_TEXTENCODING_MS_1257, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1258()
+ {
+ check( RTL_TEXTENCODING_MS_1258, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_ARABIC()
+ {
+ check( RTL_TEXTENCODING_APPLE_ARABIC, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_CENTEURO()
+ {
+ check( RTL_TEXTENCODING_APPLE_CENTEURO, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_CROATIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_CROATIAN, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_CYRILLIC()
+ {
+ check( RTL_TEXTENCODING_APPLE_CYRILLIC, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_DEVANAGARI()
+ {
+ check( RTL_TEXTENCODING_APPLE_DEVANAGARI, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_FARSI()
+ {
+ check( RTL_TEXTENCODING_APPLE_FARSI, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_GREEK()
+ {
+ check( RTL_TEXTENCODING_APPLE_GREEK, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_GUJARATI()
+ {
+ check( RTL_TEXTENCODING_APPLE_GUJARATI, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_GURMUKHI()
+ {
+ check( RTL_TEXTENCODING_APPLE_GURMUKHI, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_HEBREW()
+ {
+ check( RTL_TEXTENCODING_APPLE_HEBREW, RTL_TEXTENCODING_MS_1252 );
+ }
+#endif
+ void WindowsCharsetFromTextEncoding_APPLE_ICELAND()
+ {
+ check( RTL_TEXTENCODING_APPLE_ICELAND, RTL_TEXTENCODING_MS_1252 );
+ }
+#if 0
+ void WindowsCharsetFromTextEncoding_APPLE_ROMANIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_ROMANIAN, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_THAI()
+ {
+ check( RTL_TEXTENCODING_APPLE_THAI, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_TURKISH()
+ {
+ check( RTL_TEXTENCODING_APPLE_TURKISH, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_UKRAINIAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_UKRAINIAN, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_CHINSIMP()
+ {
+ check( RTL_TEXTENCODING_APPLE_CHINSIMP, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_CHINTRAD()
+ {
+ check( RTL_TEXTENCODING_APPLE_CHINTRAD, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_JAPANESE()
+ {
+ check( RTL_TEXTENCODING_APPLE_JAPANESE, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_APPLE_KOREAN()
+ {
+ check( RTL_TEXTENCODING_APPLE_KOREAN, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_932()
+ {
+ check( RTL_TEXTENCODING_MS_932, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_936()
+ {
+ check( RTL_TEXTENCODING_MS_936, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_949()
+ {
+ check( RTL_TEXTENCODING_MS_949, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_950()
+ {
+ check( RTL_TEXTENCODING_MS_950, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_SHIFT_JIS()
+ {
+ check( RTL_TEXTENCODING_SHIFT_JIS, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_GB_2312()
+ {
+ check( RTL_TEXTENCODING_GB_2312, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_GBT_12345()
+ {
+ check( RTL_TEXTENCODING_GBT_12345, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_GBK()
+ {
+ check( RTL_TEXTENCODING_GBK, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_BIG5()
+ {
+ check( RTL_TEXTENCODING_BIG5, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_EUC_JP()
+ {
+ check( RTL_TEXTENCODING_EUC_JP, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_EUC_CN()
+ {
+ check( RTL_TEXTENCODING_EUC_CN, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_EUC_TW()
+ {
+ check( RTL_TEXTENCODING_EUC_TW, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_2022_JP()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_2022_CN()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_KOI8_R()
+ {
+ check( RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_MS_1252 );
+ }
+#endif
+ void WindowsCharsetFromTextEncoding_UTF7()
+ {
+ check( RTL_TEXTENCODING_UTF7, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_UTF8()
+ {
+ check( RTL_TEXTENCODING_UTF8, RTL_TEXTENCODING_MS_1252 );
+ }
+#if 0
+ void WindowsCharsetFromTextEncoding_ISO_8859_10()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_10, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_8859_13()
+ {
+ check( RTL_TEXTENCODING_ISO_8859_13, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_EUC_KR()
+ {
+ check( RTL_TEXTENCODING_EUC_KR, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISO_2022_KR()
+ {
+ check( RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_JIS_X_0201()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0201, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_JIS_X_0208()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0208, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_JIS_X_0212()
+ {
+ check( RTL_TEXTENCODING_JIS_X_0212, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_MS_1361()
+ {
+ check( RTL_TEXTENCODING_MS_1361, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_GB_18030()
+ {
+ check( RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_BIG5_HKSCS()
+ {
+ check( RTL_TEXTENCODING_BIG5_HKSCS, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_TIS_620()
+ {
+ check( RTL_TEXTENCODING_TIS_620, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_KOI8_U()
+ {
+ check( RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ void WindowsCharsetFromTextEncoding_ISCII_DEVANAGARI()
+ {
+ check( RTL_TEXTENCODING_ISCII_DEVANAGARI, RTL_TEXTENCODING_MS_1252 );
+ }
+#endif
+ void WindowsCharsetFromTextEncoding_JAVA_UTF8()
+ {
+ check( RTL_TEXTENCODING_JAVA_UTF8, RTL_TEXTENCODING_MS_1252 );
+ }
+
+ CPPUNIT_TEST_SUITE( testBestWindows );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1252 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_ROMAN );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_437 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_850 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_860 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_861 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_863 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_865 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_SYMBOL );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ASCII_US );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_1 );
+#if 0
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_2 );
+#endif
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_3 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_4 );
+#if 0
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_5 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_6 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_7 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_8 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_9 );
+#endif
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_14 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_15 );
+#if 0
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_737 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_775 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_852 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_855 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_857 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_862 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_864 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_866 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_869 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_874 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1250 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1251 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1253 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1254 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1255 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1256 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1257 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1258 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_ARABIC );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_CENTEURO );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_CROATIAN );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_CYRILLIC );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_DEVANAGARI );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_FARSI );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_GREEK );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_GUJARATI );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_GURMUKHI );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_HEBREW );
+#endif
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_ICELAND );
+#if 0
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_ROMANIAN );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_THAI );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_TURKISH );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_UKRAINIAN );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_CHINSIMP );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_CHINTRAD );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_JAPANESE );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_KOREAN );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_932 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_936 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_949 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_950 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_SHIFT_JIS );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_GB_2312 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_GBT_12345 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_GBK );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_BIG5 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_EUC_JP );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_EUC_CN );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_EUC_TW );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_2022_JP );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_2022_CN );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_KOI8_R );
+#endif
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_UTF7 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_UTF8 );
+#if 0
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_10 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_13 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_EUC_KR );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_2022_KR );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_JIS_X_0201 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_JIS_X_0208 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_JIS_X_0212 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1361 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_GB_18030 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_BIG5_HKSCS );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_TIS_620 );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_KOI8_U );
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISCII_DEVANAGARI );
+#endif
+ CPPUNIT_TEST( WindowsCharsetFromTextEncoding_JAVA_UTF8 );
+
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+ class testTextEncodingInfo: public CppUnit::TestFixture
+ {
+ public:
+ // not implemented encoding test
+ void testTextEncodingInfo_001()
+ {
+ rtl_TextEncodingInfo aInfo1, aInfo2, aInfo3, aInfo4, aInfo5;
+ aInfo1.StructSize = 4;
+ // not implemented
+ bool bRes1 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_ARABIC, &aInfo1 );
+ // implemented
+ bool bRes11 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_CYRILLIC, &aInfo1 );
+ CPPUNIT_ASSERT_MESSAGE("should return sal_False.", !bRes1 && !bRes11);
+
+ aInfo2.StructSize = 5;
+ bool bRes2 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_ARABIC, &aInfo2 );
+ bool bRes21 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_CYRILLIC, &aInfo2 );
+ CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", bRes2 && bRes21 && aInfo2.MinimumCharSize >=1 );
+
+ aInfo3.StructSize = 6;
+ bool bRes3 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_ARABIC, &aInfo3 );
+ bool bRes31 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_CYRILLIC, &aInfo3 );
+ CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", bRes3 && bRes31);
+//&& aInfo2.MinimumCharSize >=1 );
+
+ aInfo4.StructSize = 8;
+ bool bRes4 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_ARABIC, &aInfo4 );
+ bool bRes41 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_CYRILLIC, &aInfo4);
+ CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", bRes4 && bRes41);
+// && aInfo2.MinimumCharSize >=1 );
+
+ aInfo5.StructSize = sizeof aInfo5;
+ bool bRes5 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_ARABIC, &aInfo5 );
+ CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", !bRes5 && aInfo5.Flags == 0);
+
+ }
+ CPPUNIT_TEST_SUITE(testTextEncodingInfo);
+ CPPUNIT_TEST(testTextEncodingInfo_001);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+ class testEncodingFromUnix: public CppUnit::TestFixture
+ {
+ public:
+ void testIso8859() {
+ check(RTL_TEXTENCODING_DONTKNOW, "ISO8859");
+ check(RTL_TEXTENCODING_DONTKNOW, "ISO8859-0");
+ check(RTL_TEXTENCODING_DONTKNOW, "ISO8859-01");
+ check(RTL_TEXTENCODING_DONTKNOW, "ISO8859_1");
+ check(RTL_TEXTENCODING_DONTKNOW, "ISO88591");
+ check(RTL_TEXTENCODING_ISO_8859_1, "ISO8859-1");
+ check(RTL_TEXTENCODING_ISO_8859_2, "ISO8859-2");
+ check(RTL_TEXTENCODING_ISO_8859_3, "ISO8859-3");
+ check(RTL_TEXTENCODING_ISO_8859_4, "ISO8859-4");
+ check(RTL_TEXTENCODING_ISO_8859_5, "ISO8859-5");
+ check(RTL_TEXTENCODING_ISO_8859_6, "ISO8859-6");
+ check(RTL_TEXTENCODING_ISO_8859_7, "ISO8859-7");
+ check(RTL_TEXTENCODING_ISO_8859_8, "ISO8859-8");
+ check(RTL_TEXTENCODING_ISO_8859_9, "ISO8859-9");
+ check(RTL_TEXTENCODING_ISO_8859_10, "ISO8859-10");
+ check(RTL_TEXTENCODING_TIS_620, "ISO8859-11");
+ check(RTL_TEXTENCODING_ISO_8859_13, "ISO8859-13");
+ check(RTL_TEXTENCODING_ISO_8859_14, "ISO8859-14");
+ check(RTL_TEXTENCODING_ISO_8859_15, "ISO8859-15");
+ }
+
+ void testTis620() {
+ check(RTL_TEXTENCODING_DONTKNOW, "TIS620");
+ check(RTL_TEXTENCODING_TIS_620, "TIS620-0");
+ check(RTL_TEXTENCODING_DONTKNOW, "TIS620-1");
+ check(RTL_TEXTENCODING_TIS_620, "TIS620-2529");
+ check(RTL_TEXTENCODING_TIS_620, "TIS620-2533");
+ check(RTL_TEXTENCODING_DONTKNOW, "TIS620.2529-0");
+ check(RTL_TEXTENCODING_TIS_620, "TIS620.2529-1");
+ check(RTL_TEXTENCODING_DONTKNOW, "TIS620.2529-2");
+ check(RTL_TEXTENCODING_TIS_620, "TIS620.2533-0");
+ check(RTL_TEXTENCODING_TIS_620, "TIS620.2533-1");
+ check(RTL_TEXTENCODING_DONTKNOW, "TIS620.2533-2");
+ }
+
+ CPPUNIT_TEST_SUITE(testEncodingFromUnix);
+ CPPUNIT_TEST(testIso8859);
+ CPPUNIT_TEST(testTis620);
+ CPPUNIT_TEST_SUITE_END();
+
+ private:
+ void check(rtl_TextEncoding expected, char const * input) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ input, expected, rtl_getTextEncodingFromUnixCharset(input));
+ }
+ };
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(testBestMime);
+CPPUNIT_TEST_SUITE_REGISTRATION(testBestUnix);
+CPPUNIT_TEST_SUITE_REGISTRATION(testBestWindows);
+CPPUNIT_TEST_SUITE_REGISTRATION(testTextEncodingInfo);
+CPPUNIT_TEST_SUITE_REGISTRATION(testEncodingFromUnix);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/textenc/rtl_textcvt.cxx b/sal/qa/rtl/textenc/rtl_textcvt.cxx
new file mode 100644
index 000000000..8e619a23e
--- /dev/null
+++ b/sal/qa/rtl/textenc/rtl_textcvt.cxx
@@ -0,0 +1,3313 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <config_locales.h>
+
+#include <sal/config.h>
+
+#include <cstddef>
+#include <cstring>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <o3tl/cppunittraitshelper.hxx>
+#include <rtl/string.hxx>
+#include <rtl/ustring.hxx>
+#include <rtl/tencinfo.h>
+#include <rtl/textcvt.h>
+#include <rtl/textenc.h>
+#include <sal/types.h>
+#include <sal/macros.h>
+#include <osl/diagnose.h>
+
+namespace {
+
+struct SingleByteCharSet {
+ rtl_TextEncoding m_nEncoding;
+ sal_Unicode m_aMap[256];
+};
+
+void testSingleByteCharSet(SingleByteCharSet const & rSet) {
+ char aText[256];
+ sal_Unicode aUnicode[256];
+ sal_Size nNumber = 0;
+ for (int i = 0; i < 256; ++i) {
+ if (rSet.m_aMap[i] != 0xFFFF) {
+ aText[nNumber++] = static_cast< char >(i);
+ }
+ }
+ {
+ rtl_TextToUnicodeConverter aConverter
+ = rtl_createTextToUnicodeConverter(rSet.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rSet.m_nEncoding)) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ rtl_TextToUnicodeContext aContext
+ = rtl_createTextToUnicodeContext(aConverter);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
+ sal_Size nSize;
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ nSize = rtl_convertTextToUnicode(
+ aConverter, aContext, aText, nNumber, aUnicode, nNumber,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
+ &nInfo, &nConverted);
+ CPPUNIT_ASSERT_EQUAL(nNumber, nSize);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), nInfo);
+ CPPUNIT_ASSERT_EQUAL(nNumber, nConverted);
+ rtl_destroyTextToUnicodeContext(aConverter, aContext);
+ rtl_destroyTextToUnicodeConverter(aConverter);
+ }
+ {
+ int j = 0;
+ for (int i = 0; i < 256; ++i) {
+ if (rSet.m_aMap[i] != 0xFFFF && aUnicode[j] != rSet.m_aMap[i]) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("rSet.m_aMap[" + OUString::number(i) + "] == " +
+ OUString::number(rSet.m_aMap[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ u'\xFFFF', rSet.m_aMap[i]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aUnicode[" + OUString::number(j) + "] == " +
+ OUString::number(aUnicode[j], 16) +
+ ", rSet.m_aMap[" + OUString::number(i) + "] == " +
+ OUString::number(rSet.m_aMap[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ rSet.m_aMap[i], aUnicode[j]);
+ }
+ if (rSet.m_aMap[i] != 0xFFFF)
+ j++;
+ }
+ }
+ if (rSet.m_nEncoding == RTL_TEXTENCODING_ASCII_US) {
+ nNumber = 128;
+ }
+ {
+ rtl_UnicodeToTextConverter aConverter
+ = rtl_createUnicodeToTextConverter(rSet.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rSet.m_nEncoding)) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ rtl_UnicodeToTextContext aContext
+ = rtl_createUnicodeToTextContext(aConverter);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
+ sal_Size nSize;
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ nSize = rtl_convertUnicodeToText(
+ aConverter, aContext, aUnicode, nNumber, aText, nNumber,
+ (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR),
+ &nInfo, &nConverted);
+ CPPUNIT_ASSERT_EQUAL(nNumber, nSize);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), nInfo);
+ CPPUNIT_ASSERT_EQUAL(nNumber, nConverted);
+ rtl_destroyUnicodeToTextContext(aConverter, aContext);
+ rtl_destroyUnicodeToTextConverter(aConverter);
+ }
+ {
+ int j = 0;
+ for (int i = 0; i < 256; ++i) {
+ if (rSet.m_aMap[i] != 0xFFFF
+ && aText[j] != static_cast< char >(i))
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("rSet.m_aMap[" + OUString::number(i) + "] == " +
+ OUString::number(rSet.m_aMap[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ u'\xFFFF', rSet.m_aMap[i]);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aText[" + OUString::number(j) + "] == " +
+ OUString::number(i, 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ static_cast< char >(i), aText[j]);
+ }
+ if (rSet.m_aMap[i] != 0xFFFF)
+ j++;
+ }
+ }
+ for (int i = 0; i < 256; ++i) {
+ if (rSet.m_aMap[i] == 0xFFFF) {
+ aText[0] = static_cast< char >(i);
+ rtl_TextToUnicodeConverter aConverter
+ = rtl_createTextToUnicodeConverter(rSet.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rSet.m_nEncoding)) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ rtl_TextToUnicodeContext aContext
+ = rtl_createTextToUnicodeContext(aConverter);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
+ sal_Size nSize;
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ nSize = rtl_convertTextToUnicode(
+ aConverter, aContext, aText, 1, aUnicode, 1,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
+ &nInfo, &nConverted);
+
+ sal_uInt32 nExpectedInfo = (RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_UNDEFINED);
+
+ CPPUNIT_ASSERT_EQUAL(sal_Size(0), nSize);
+ CPPUNIT_ASSERT_EQUAL(nExpectedInfo, nInfo);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), nConverted);
+
+ rtl_destroyTextToUnicodeContext(aConverter, aContext);
+ rtl_destroyTextToUnicodeConverter(aConverter);
+ }
+ }
+}
+
+int const TEST_STRING_SIZE = 1000;
+
+struct ComplexCharSetTest {
+ rtl_TextEncoding m_nEncoding;
+ char const * m_pText;
+ sal_Size m_nTextSize;
+ sal_Unicode m_aUnicode[TEST_STRING_SIZE];
+ sal_Size m_nUnicodeSize;
+ bool m_bNoContext;
+ bool m_bForward;
+ bool m_bReverse;
+ bool m_bGlobalSignature;
+ sal_uInt32 m_nReverseUndefined;
+};
+
+void doComplexCharSetTest(ComplexCharSetTest const & rTest) {
+ if (rTest.m_bForward) {
+ sal_Unicode aUnicode[TEST_STRING_SIZE];
+ rtl_TextToUnicodeConverter aConverter
+ = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ rtl_TextToUnicodeContext aContext
+ = rtl_createTextToUnicodeContext(aConverter);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
+ sal_Size nSize;
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ nSize = rtl_convertTextToUnicode(
+ aConverter, aContext,
+ reinterpret_cast< char const * >(rTest.m_pText),
+ rTest.m_nTextSize, aUnicode, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH
+ | (rTest.m_bGlobalSignature ?
+ RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0)),
+ &nInfo, &nConverted);
+ CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nSize);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), nInfo);
+ CPPUNIT_ASSERT_EQUAL(rTest.m_nTextSize, nConverted);
+
+ rtl_destroyTextToUnicodeContext(aConverter, aContext);
+ rtl_destroyTextToUnicodeConverter(aConverter);
+
+ for (sal_Size i = 0; i < rTest.m_nUnicodeSize; ++i) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(aUnicode[i], 16) +
+ ", rTest.m_aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(rTest.m_aUnicode[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ rTest.m_aUnicode[i], aUnicode[i]);
+ }
+ }
+ if (rTest.m_bForward) {
+ sal_Unicode aUnicode[TEST_STRING_SIZE];
+ rtl_TextToUnicodeConverter aConverter
+ = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ rtl_TextToUnicodeContext aContext
+ = rtl_createTextToUnicodeContext(aConverter);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
+ if (aContext != reinterpret_cast<rtl_TextToUnicodeContext>(1)) {
+ sal_Size nInput = 0;
+ sal_Size nOutput = 0;
+ for (bool bFlush = true; nInput < rTest.m_nTextSize || bFlush;) {
+ sal_Size nSrcBytes = 1;
+ sal_uInt32 nFlags
+ = (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR
+ | (rTest.m_bGlobalSignature ?
+ RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0));
+ if (nInput >= rTest.m_nTextSize) {
+ nSrcBytes = 0;
+ nFlags |= RTL_TEXTTOUNICODE_FLAGS_FLUSH;
+ bFlush = false;
+ }
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ sal_Size nSize = rtl_convertTextToUnicode(
+ aConverter, aContext,
+ reinterpret_cast< char const * >(rTest.m_pText + nInput),
+ nSrcBytes, aUnicode + nOutput, TEST_STRING_SIZE - nOutput,
+ nFlags, &nInfo, &nConverted);
+ nOutput += nSize;
+ nInput += nConverted;
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0),
+ (nInfo & ~RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL));
+ }
+ CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nOutput);
+ CPPUNIT_ASSERT_EQUAL(rTest.m_nTextSize, nInput);
+
+ for (sal_Size i = 0; i < rTest.m_nUnicodeSize; ++i) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(aUnicode[i], 16) +
+ ", rTest.m_aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(rTest.m_aUnicode[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ rTest.m_aUnicode[i], aUnicode[i]);
+ }
+ }
+ rtl_destroyTextToUnicodeContext(aConverter, aContext);
+ rtl_destroyTextToUnicodeConverter(aConverter);
+ }
+ if (rTest.m_bNoContext && rTest.m_bForward) {
+ sal_Unicode aUnicode[TEST_STRING_SIZE] = { 0, };
+ int nSize = 0;
+ rtl_TextToUnicodeConverter aConverter
+ = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ for (sal_Size i = 0;;) {
+ if (i == rTest.m_nTextSize) {
+ goto done;
+ }
+ char c1 = rTest.m_pText[i++];
+ sal_Unicode aUC[2];
+ sal_uInt32 nInfo = 0;
+ sal_Size nCvtBytes;
+ sal_Size nChars = rtl_convertTextToUnicode(
+ aConverter, nullptr, &c1, 1, aUC, 2,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR
+ | (rTest.m_bGlobalSignature ?
+ RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0)),
+ &nInfo, &nCvtBytes);
+ if ((nInfo & RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL) != 0) {
+ char sBuffer[10];
+ sBuffer[0] = c1;
+ sal_uInt16 nLen = 1;
+ while ((nInfo & RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL) != 0
+ && nLen < 10)
+ {
+ if (i == rTest.m_nTextSize) {
+ goto done;
+ }
+ c1 = rTest.m_pText[i++];
+ sBuffer[nLen++] = c1;
+ nChars = rtl_convertTextToUnicode(
+ aConverter, nullptr, sBuffer, nLen, aUC, 2,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR
+ | (rTest.m_bGlobalSignature ?
+ RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0)),
+ &nInfo, &nCvtBytes);
+ }
+ if (nChars == 1 && nInfo == 0) {
+ OSL_ASSERT(nCvtBytes == nLen);
+ aUnicode[nSize++] = aUC[0];
+ } else if (nChars == 2 && nInfo == 0) {
+ OSL_ASSERT(nCvtBytes == nLen);
+ aUnicode[nSize++] = aUC[0];
+ aUnicode[nSize++] = aUC[1];
+ } else {
+ OSL_ASSERT(
+ (nInfo & RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL) == 0
+ && nChars == 0 && nInfo != 0);
+ aUnicode[nSize++] = sBuffer[0];
+ i -= nLen - 1;
+ }
+ } else if (nChars == 1 && nInfo == 0) {
+ OSL_ASSERT(nCvtBytes == 1);
+ aUnicode[nSize++] = aUC[0];
+ } else if (nChars == 2 && nInfo == 0) {
+ OSL_ASSERT(nCvtBytes == 1);
+ aUnicode[nSize++] = aUC[0];
+ aUnicode[nSize++] = aUC[1];
+ } else {
+ OSL_ASSERT(nChars == 0 && nInfo != 0);
+ aUnicode[nSize++] = c1;
+ }
+ }
+ done:
+ rtl_destroyTextToUnicodeConverter(aConverter);
+ for (sal_Size i = 0; i < rTest.m_nUnicodeSize; ++i) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(aUnicode[i], 16) +
+ ", rTest.m_aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(rTest.m_aUnicode[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ rTest.m_aUnicode[i], aUnicode[i]);
+ }
+ }
+ if (rTest.m_bReverse) {
+ char aText[TEST_STRING_SIZE];
+ rtl_UnicodeToTextConverter aConverter
+ = rtl_createUnicodeToTextConverter(rTest.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ rtl_UnicodeToTextContext aContext
+ = rtl_createUnicodeToTextContext(aConverter);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
+ sal_Size nSize;
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ nSize = rtl_convertUnicodeToText(
+ aConverter, aContext, rTest.m_aUnicode, rTest.m_nUnicodeSize, aText,
+ TEST_STRING_SIZE,
+ (rTest.m_nReverseUndefined | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_FLUSH
+ | (rTest.m_bGlobalSignature ?
+ RTL_UNICODETOTEXT_FLAGS_GLOBAL_SIGNATURE : 0)),
+ &nInfo, &nConverted);
+ CPPUNIT_ASSERT_EQUAL(rTest.m_nTextSize, nSize);
+ if (nInfo != 0)
+ {
+ CPPUNIT_ASSERT_EQUAL(RTL_UNICODETOTEXT_INFO_UNDEFINED, nInfo);
+ CPPUNIT_ASSERT_MESSAGE("rTest.m_nReverseUndefined should not be RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR",
+ rTest.m_nReverseUndefined != RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR);
+ }
+ CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nConverted);
+ rtl_destroyUnicodeToTextContext(aConverter, aContext);
+ rtl_destroyUnicodeToTextConverter(aConverter);
+ for (sal_Size i = 0; i < rTest.m_nTextSize; ++i) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aText[" + OUString::number(i) + "] == " +
+ OUString::number(aText[i], 16) +
+ ", rTest.m_pText[" + OUString::number(i) + "] == " +
+ OUString::number(rTest.m_pText[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ rTest.m_pText[i], aText[i]);
+ }
+ }
+}
+
+void doComplexCharSetCutTest(ComplexCharSetTest const & rTest) {
+ if (rTest.m_bNoContext) {
+ sal_Unicode aUnicode[TEST_STRING_SIZE];
+ rtl_TextToUnicodeConverter aConverter
+ = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
+ CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ aConverter != nullptr);
+ sal_Size nSize;
+ sal_uInt32 nInfo;
+ sal_Size nConverted;
+ nSize = rtl_convertTextToUnicode(
+ aConverter, nullptr, reinterpret_cast< char const * >(rTest.m_pText),
+ rTest.m_nTextSize, aUnicode, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
+ &nInfo, &nConverted);
+
+ CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nSize);
+ if (nInfo != RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL)
+ {
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL,
+ nInfo);
+ }
+ CPPUNIT_ASSERT_MESSAGE("nConverted should be less than rTest.m_nTextSize", nConverted < rTest.m_nTextSize);
+
+ rtl_destroyTextToUnicodeConverter(aConverter);
+ for (sal_Size i = 0; i < nSize; ++i) {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(aUnicode[i], 16) +
+ ", rTest.m_aUnicode[" + OUString::number(i) + "] == " +
+ OUString::number(rTest.m_aUnicode[i], 16)),
+ RTL_TEXTENCODING_UTF8).getStr(),
+ rTest.m_aUnicode[i], aUnicode[i]);
+ }
+ }
+}
+
+class Test: public CppUnit::TestFixture {
+public:
+ void testSingleByte();
+
+ void testComplex();
+
+ void testComplexCut();
+
+ void testInvalidUtf7();
+
+ void testInvalidUtf8();
+
+ void testInvalidUnicode();
+
+ void testSRCBUFFERTOSMALL();
+
+ void testMime();
+
+ void testWindows();
+
+ void testInfo();
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testSingleByte);
+ CPPUNIT_TEST(testComplex);
+ CPPUNIT_TEST(testComplexCut);
+ CPPUNIT_TEST(testInvalidUtf7);
+ CPPUNIT_TEST(testInvalidUtf8);
+ CPPUNIT_TEST(testInvalidUnicode);
+ CPPUNIT_TEST(testSRCBUFFERTOSMALL);
+ CPPUNIT_TEST(testMime);
+ CPPUNIT_TEST(testWindows);
+ CPPUNIT_TEST(testInfo);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void Test::testSingleByte() {
+ static SingleByteCharSet const data[]
+ = { { RTL_TEXTENCODING_MS_1250,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x20AC,0xFFFF,0x201A,0xFFFF,0x201E,0x2026,0x2020,0x2021,
+ 0xFFFF,0x2030,0x0160,0x2039,0x015A,0x0164,0x017D,0x0179,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0xFFFF,0x2122,0x0161,0x203A,0x015B,0x0165,0x017E,0x017A,
+ 0x00A0,0x02C7,0x02D8,0x0141,0x00A4,0x0104,0x00A6,0x00A7,
+ 0x00A8,0x00A9,0x015E,0x00AB,0x00AC,0x00AD,0x00AE,0x017B,
+ 0x00B0,0x00B1,0x02DB,0x0142,0x00B4,0x00B5,0x00B6,0x00B7,
+ 0x00B8,0x0105,0x015F,0x00BB,0x013D,0x02DD,0x013E,0x017C,
+ 0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7,
+ 0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E,
+ 0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7,
+ 0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF,
+ 0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7,
+ 0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F,
+ 0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7,
+ 0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 } },
+ { RTL_TEXTENCODING_MS_1251,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x0402,0x0403,0x201A,0x0453,0x201E,0x2026,0x2020,0x2021,
+ 0x20AC,0x2030,0x0409,0x2039,0x040A,0x040C,0x040B,0x040F,
+ 0x0452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0xFFFF,0x2122,0x0459,0x203A,0x045A,0x045C,0x045B,0x045F,
+ 0x00A0,0x040E,0x045E,0x0408,0x00A4,0x0490,0x00A6,0x00A7,
+ 0x0401,0x00A9,0x0404,0x00AB,0x00AC,0x00AD,0x00AE,0x0407,
+ 0x00B0,0x00B1,0x0406,0x0456,0x0491,0x00B5,0x00B6,0x00B7,
+ 0x0451,0x2116,0x0454,0x00BB,0x0458,0x0405,0x0455,0x0457,
+ 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,
+ 0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F,
+ 0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,
+ 0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F,
+ 0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,
+ 0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F,
+ 0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,
+ 0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F } },
+ { RTL_TEXTENCODING_MS_1252,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
+ 0x02C6,0x2030,0x0160,0x2039,0x0152,0xFFFF,0x017D,0xFFFF,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0x02DC,0x2122,0x0161,0x203A,0x0153,0xFFFF,0x017E,0x0178,
+ 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
+ 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
+ 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
+ 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
+ 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
+ 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
+ 0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
+ 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,
+ 0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
+ 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
+ 0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,
+ 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF } },
+ { RTL_TEXTENCODING_MS_1253,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
+ 0xFFFF,0x2030,0xFFFF,0x2039,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0xFFFF,0x2122,0xFFFF,0x203A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x00A0,0x0385,0x0386,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
+ 0x00A8,0x00A9,0xFFFF,0x00AB,0x00AC,0x00AD,0x00AE,0x2015,
+ 0x00B0,0x00B1,0x00B2,0x00B3,0x0384,0x00B5,0x00B6,0x00B7,
+ 0x0388,0x0389,0x038A,0x00BB,0x038C,0x00BD,0x038E,0x038F,
+ 0x0390,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,
+ 0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F,
+ 0x03A0,0x03A1,0xFFFF,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,
+ 0x03A8,0x03A9,0x03AA,0x03AB,0x03AC,0x03AD,0x03AE,0x03AF,
+ 0x03B0,0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,
+ 0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,
+ 0x03C0,0x03C1,0x03C2,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,
+ 0x03C8,0x03C9,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,0xFFFF } },
+ { RTL_TEXTENCODING_MS_1254,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
+ 0x02C6,0x2030,0x0160,0x2039,0x0152,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0x02DC,0x2122,0x0161,0x203A,0x0153,0xFFFF,0xFFFF,0x0178,
+ 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
+ 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
+ 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
+ 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
+ 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
+ 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
+ 0x011E,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
+ 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x0130,0x015E,0x00DF,
+ 0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
+ 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
+ 0x011F,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,
+ 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x0131,0x015F,0x00FF } },
+ { RTL_TEXTENCODING_APPLE_ROMAN,
+ { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E, 0x7F,
+ 0x00C4,0x00C5,0x00C7,0x00C9,0x00D1,0x00D6,0x00DC,0x00E1,
+ 0x00E0,0x00E2,0x00E4,0x00E3,0x00E5,0x00E7,0x00E9,0x00E8,
+ 0x00EA,0x00EB,0x00ED,0x00EC,0x00EE,0x00EF,0x00F1,0x00F3,
+ 0x00F2,0x00F4,0x00F6,0x00F5,0x00FA,0x00F9,0x00FB,0x00FC,
+ 0x2020,0x00B0,0x00A2,0x00A3,0x00A7,0x2022,0x00B6,0x00DF,
+ 0x00AE,0x00A9,0x2122,0x00B4,0x00A8,0x2260,0x00C6,0x00D8,
+ 0x221E,0x00B1,0x2264,0x2265,0x00A5,0x00B5,0x2202,0x2211,
+ 0x220F,0x03C0,0x222B,0x00AA,0x00BA,0x03A9,0x00E6,0x00F8,
+ 0x00BF,0x00A1,0x00AC,0x221A,0x0192,0x2248,0x2206,0x00AB,
+ 0x00BB,0x2026,0x00A0,0x00C0,0x00C3,0x00D5,0x0152,0x0153,
+ 0x2013,0x2014,0x201C,0x201D,0x2018,0x2019,0x00F7,0x25CA,
+ 0x00FF,0x0178,0x2044,0x20AC,0x2039,0x203A,0xFB01,0xFB02,
+ 0x2021,0x00B7,0x201A,0x201E,0x2030,0x00C2,0x00CA,0x00C1,
+ 0x00CB,0x00C8,0x00CD,0x00CE,0x00CF,0x00CC,0x00D3,0x00D4,
+ 0xF8FF,0x00D2,0x00DA,0x00DB,0x00D9,0x0131,0x02C6,0x02DC,
+ 0x00AF,0x02D8,0x02D9,0x02DA,0x00B8,0x02DD,0x02DB,0x02C7 } },
+ { RTL_TEXTENCODING_IBM_437,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x00c7,0x00fc,0x00e9,0x00e2,0x00e4,0x00e0,0x00e5,0x00e7,
+ 0x00ea,0x00eb,0x00e8,0x00ef,0x00ee,0x00ec,0x00c4,0x00c5,
+ 0x00c9,0x00e6,0x00c6,0x00f4,0x00f6,0x00f2,0x00fb,0x00f9,
+ 0x00ff,0x00d6,0x00dc,0x00a2,0x00a3,0x00a5,0x20a7,0x0192,
+ 0x00e1,0x00ed,0x00f3,0x00fa,0x00f1,0x00d1,0x00aa,0x00ba,
+ 0x00bf,0x2310,0x00ac,0x00bd,0x00bc,0x00a1,0x00ab,0x00bb,
+ 0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556,
+ 0x2555,0x2563,0x2551,0x2557,0x255d,0x255c,0x255b,0x2510,
+ 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x255e,0x255f,
+ 0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x2567,
+ 0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256b,
+ 0x256a,0x2518,0x250c,0x2588,0x2584,0x258c,0x2590,0x2580,
+ 0x03b1,0x00df,0x0393,0x03c0,0x03a3,0x03c3,0x00b5,0x03c4,
+ 0x03a6,0x0398,0x03a9,0x03b4,0x221e,0x03c6,0x03b5,0x2229,
+ 0x2261,0x00b1,0x2265,0x2264,0x2320,0x2321,0x00f7,0x2248,
+ 0x00b0,0x2219,0x00b7,0x221a,0x207f,0x00b2,0x25a0,0x00a0 } },
+
+ { RTL_TEXTENCODING_ASCII_US,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, // !
+ 0x02C6,0x2030,0x0160,0x2039,0x0152,0xFFFF,0x017D,0xFFFF, // !
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, // !
+ 0x02DC,0x2122,0x0161,0x203A,0x0153,0xFFFF,0x017E,0x0178, // !
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
+ 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
+ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
+ 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
+ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
+ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
+ 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
+ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
+ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF } },
+ { RTL_TEXTENCODING_ISO_8859_1,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
+ 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
+ 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
+ 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
+ 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
+ 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
+ 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
+ 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
+ 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
+ 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
+ 0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
+ 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,
+ 0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
+ 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
+ 0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,
+ 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF } },
+ { RTL_TEXTENCODING_ISO_8859_2,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
+ 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
+ 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
+ 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
+ 0x00A0,0x0104,0x02D8,0x0141,0x00A4,0x013D,0x015A,0x00A7,
+ 0x00A8,0x0160,0x015E,0x0164,0x0179,0x00AD,0x017D,0x017B,
+ 0x00B0,0x0105,0x02DB,0x0142,0x00B4,0x013E,0x015B,0x02C7,
+ 0x00B8,0x0161,0x015F,0x0165,0x017A,0x02DD,0x017E,0x017C,
+ 0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7,
+ 0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E,
+ 0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7,
+ 0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF,
+ 0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7,
+ 0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F,
+ 0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7,
+ 0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 } },
+ { RTL_TEXTENCODING_ISO_8859_3,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
+ 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
+ 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
+ 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
+ 0x00A0,0x0126,0x02D8,0x00A3,0x00A4,0xFFFF,0x0124,0x00A7,
+ 0x00A8,0x0130,0x015E,0x011E,0x0134,0x00AD,0xFFFF,0x017B,
+ 0x00B0,0x0127,0x00B2,0x00B3,0x00B4,0x00B5,0x0125,0x00B7,
+ 0x00B8,0x0131,0x015F,0x011F,0x0135,0x00BD,0xFFFF,0x017C,
+ 0x00C0,0x00C1,0x00C2,0xFFFF,0x00C4,0x010A,0x0108,0x00C7,
+ 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
+ 0xFFFF,0x00D1,0x00D2,0x00D3,0x00D4,0x0120,0x00D6,0x00D7,
+ 0x011C,0x00D9,0x00DA,0x00DB,0x00DC,0x016C,0x015C,0x00DF,
+ 0x00E0,0x00E1,0x00E2,0xFFFF,0x00E4,0x010B,0x0109,0x00E7,
+ 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
+ 0xFFFF,0x00F1,0x00F2,0x00F3,0x00F4,0x0121,0x00F6,0x00F7,
+ 0x011D,0x00F9,0x00FA,0x00FB,0x00FC,0x016D,0x015D,0x02D9 } },
+
+ { RTL_TEXTENCODING_ISO_8859_6,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
+ 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
+ 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
+ 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
+ 0x00A0,0xFFFF,0xFFFF,0xFFFF,0x00A4,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x060C,0x00AD,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0x061B,0xFFFF,0xFFFF,0xFFFF,0x061F,
+ 0xFFFF,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627,
+ 0x0628,0x0629,0x062A,0x062B,0x062C,0x062D,0x062E,0x062F,
+ 0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x0637,
+ 0x0638,0x0639,0x063A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x0640,0x0641,0x0642,0x0643,0x0644,0x0645,0x0646,0x0647,
+ 0x0648,0x0649,0x064A,0x064B,0x064C,0x064D,0x064E,0x064F,
+ 0x0650,0x0651,0x0652,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF } },
+
+ { RTL_TEXTENCODING_ISO_8859_8,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
+ 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
+ 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
+ 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
+ 0x00A0,0xFFFF,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
+ 0x00A8,0x00A9,0x00D7,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
+ 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
+ 0x00B8,0x00B9,0x00F7,0x00BB,0x00BC,0x00BD,0x00BE,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x2017,
+ 0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7,
+ 0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF,
+ 0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7,
+ 0x05E8,0x05E9,0x05EA,0xFFFF,0xFFFF,0x200E,0x200F,0xFFFF } },
+
+ { RTL_TEXTENCODING_TIS_620,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
+ 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
+ 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
+ 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
+ 0x00A0,0x0E01,0x0E02,0x0E03,0x0E04,0x0E05,0x0E06,0x0E07, // !
+ 0x0E08,0x0E09,0x0E0A,0x0E0B,0x0E0C,0x0E0D,0x0E0E,0x0E0F,
+ 0x0E10,0x0E11,0x0E12,0x0E13,0x0E14,0x0E15,0x0E16,0x0E17,
+ 0x0E18,0x0E19,0x0E1A,0x0E1B,0x0E1C,0x0E1D,0x0E1E,0x0E1F,
+ 0x0E20,0x0E21,0x0E22,0x0E23,0x0E24,0x0E25,0x0E26,0x0E27,
+ 0x0E28,0x0E29,0x0E2A,0x0E2B,0x0E2C,0x0E2D,0x0E2E,0x0E2F,
+ 0x0E30,0x0E31,0x0E32,0x0E33,0x0E34,0x0E35,0x0E36,0x0E37,
+ 0x0E38,0x0E39,0x0E3A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x0E3F,
+ 0x0E40,0x0E41,0x0E42,0x0E43,0x0E44,0x0E45,0x0E46,0x0E47,
+ 0x0E48,0x0E49,0x0E4A,0x0E4B,0x0E4C,0x0E4D,0x0E4E,0x0E4F,
+ 0x0E50,0x0E51,0x0E52,0x0E53,0x0E54,0x0E55,0x0E56,0x0E57,
+ 0x0E58,0x0E59,0x0E5A,0x0E5B,0xFFFF,0xFFFF,0xFFFF,0xFFFF } },
+ { RTL_TEXTENCODING_MS_874,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x20AC,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x2026,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x00A0,0x0E01,0x0E02,0x0E03,0x0E04,0x0E05,0x0E06,0x0E07,
+ 0x0E08,0x0E09,0x0E0A,0x0E0B,0x0E0C,0x0E0D,0x0E0E,0x0E0F,
+ 0x0E10,0x0E11,0x0E12,0x0E13,0x0E14,0x0E15,0x0E16,0x0E17,
+ 0x0E18,0x0E19,0x0E1A,0x0E1B,0x0E1C,0x0E1D,0x0E1E,0x0E1F,
+ 0x0E20,0x0E21,0x0E22,0x0E23,0x0E24,0x0E25,0x0E26,0x0E27,
+ 0x0E28,0x0E29,0x0E2A,0x0E2B,0x0E2C,0x0E2D,0x0E2E,0x0E2F,
+ 0x0E30,0x0E31,0x0E32,0x0E33,0x0E34,0x0E35,0x0E36,0x0E37,
+ 0x0E38,0x0E39,0x0E3A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x0E3F,
+ 0x0E40,0x0E41,0x0E42,0x0E43,0x0E44,0x0E45,0x0E46,0x0E47,
+ 0x0E48,0x0E49,0x0E4A,0x0E4B,0x0E4C,0x0E4D,0x0E4E,0x0E4F,
+ 0x0E50,0x0E51,0x0E52,0x0E53,0x0E54,0x0E55,0x0E56,0x0E57,
+ 0x0E58,0x0E59,0x0E5A,0x0E5B,0xFFFF,0xFFFF,0xFFFF,0xFFFF } },
+ { RTL_TEXTENCODING_MS_1255,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
+ 0x02C6,0x2030,0xFFFF,0x2039,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0x02DC,0x2122,0xFFFF,0x203A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x00A0,0x00A1,0x00A2,0x00A3,0x20AA,0x00A5,0x00A6,0x00A7,
+ 0x00A8,0x00A9,0x00D7,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
+ 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
+ 0x00B8,0x00B9,0x00F7,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
+ 0x05B0,0x05B1,0x05B2,0x05B3,0x05B4,0x05B5,0x05B6,0x05B7,
+ 0x05B8,0x05B9,0xFFFF,0x05BB,0x05BC,0x05BD,0x05BE,0x05BF,
+ 0x05C0,0x05C1,0x05C2,0x05C3,0x05F0,0x05F1,0x05F2,0x05F3,
+ 0x05F4,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7,
+ 0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF,
+ 0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7,
+ 0x05E8,0x05E9,0x05EA,0xFFFF,0xFFFF,0x200E,0x200F,0xFFFF } },
+ { RTL_TEXTENCODING_MS_1256,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x20AC,0x067E,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
+ 0x02C6,0x2030,0x0679,0x2039,0x0152,0x0686,0x0698,0x0688,
+ 0x06AF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0x06A9,0x2122,0x0691,0x203A,0x0153,0x200C,0x200D,0x06BA,
+ 0x00A0,0x060C,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
+ 0x00A8,0x00A9,0x06BE,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
+ 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
+ 0x00B8,0x00B9,0x061B,0x00BB,0x00BC,0x00BD,0x00BE,0x061F,
+ 0x06C1,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627,
+ 0x0628,0x0629,0x062A,0x062B,0x062C,0x062D,0x062E,0x062F,
+ 0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x00D7,
+ 0x0637,0x0638,0x0639,0x063A,0x0640,0x0641,0x0642,0x0643,
+ 0x00E0,0x0644,0x00E2,0x0645,0x0646,0x0647,0x0648,0x00E7,
+ 0x00E8,0x00E9,0x00EA,0x00EB,0x0649,0x064A,0x00EE,0x00EF,
+ 0x064B,0x064C,0x064D,0x064E,0x00F4,0x064F,0x0650,0x00F7,
+ 0x0651,0x00F9,0x0652,0x00FB,0x00FC,0x200E,0x200F,0x06D2 } },
+ { RTL_TEXTENCODING_MS_1257,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x20AC,0xFFFF,0x201A,0xFFFF,0x201E,0x2026,0x2020,0x2021,
+ 0xFFFF,0x2030,0xFFFF,0x2039,0xFFFF,0x00A8,0x02C7,0x00B8,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0xFFFF,0x2122,0xFFFF,0x203A,0xFFFF,0x00AF,0x02DB,0xFFFF,
+ 0x00A0,0xFFFF,0x00A2,0x00A3,0x00A4,0xFFFF,0x00A6,0x00A7,
+ 0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6,
+ 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
+ 0x00F8,0x00B9,0x0157,0x00BB,0x00BC,0x00BD,0x00BE,0x00E6,
+ 0x0104,0x012E,0x0100,0x0106,0x00C4,0x00C5,0x0118,0x0112,
+ 0x010C,0x00C9,0x0179,0x0116,0x0122,0x0136,0x012A,0x013B,
+ 0x0160,0x0143,0x0145,0x00D3,0x014C,0x00D5,0x00D6,0x00D7,
+ 0x0172,0x0141,0x015A,0x016A,0x00DC,0x017B,0x017D,0x00DF,
+ 0x0105,0x012F,0x0101,0x0107,0x00E4,0x00E5,0x0119,0x0113,
+ 0x010D,0x00E9,0x017A,0x0117,0x0123,0x0137,0x012B,0x013C,
+ 0x0161,0x0144,0x0146,0x00F3,0x014D,0x00F5,0x00F6,0x00F7,
+ 0x0173,0x0142,0x015B,0x016B,0x00FC,0x017C,0x017E,0x02D9 } },
+ { RTL_TEXTENCODING_MS_1258,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
+ 0x02C6,0x2030,0xFFFF,0x2039,0x0152,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0x02DC,0x2122,0xFFFF,0x203A,0x0153,0xFFFF,0xFFFF,0x0178,
+ 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
+ 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
+ 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
+ 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
+ 0x00C0,0x00C1,0x00C2,0x0102,0x00C4,0x00C5,0x00C6,0x00C7,
+ 0x00C8,0x00C9,0x00CA,0x00CB,0x0300,0x00CD,0x00CE,0x00CF,
+ 0x0110,0x00D1,0x0309,0x00D3,0x00D4,0x01A0,0x00D6,0x00D7,
+ 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x01AF,0x0303,0x00DF,
+ 0x00E0,0x00E1,0x00E2,0x0103,0x00E4,0x00E5,0x00E6,0x00E7,
+ 0x00E8,0x00E9,0x00EA,0x00EB,0x0301,0x00ED,0x00EE,0x00EF,
+ 0x0111,0x00F1,0x0323,0x00F3,0x00F4,0x01A1,0x00F6,0x00F7,
+ 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x01B0,0x20AB,0x00FF } },
+ { RTL_TEXTENCODING_KOI8_U, // RFC 2319
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x2500,0x2502,0x250C,0x2510,0x2514,0x2518,0x251C,0x2524,
+ 0x252C,0x2534,0x253C,0x2580,0x2584,0x2588,0x258C,0x2590,
+ 0x2591,0x2592,0x2593,0x2320,0x25A0,0x2219,0x221A,0x2248,
+ 0x2264,0x2265,0x00A0,0x2321,0x00B0,0x00B2,0x00B7,0x00F7,
+ 0x2550,0x2551,0x2552,0x0451,0x0454,0x2554,0x0456,0x0457,
+ 0x2557,0x2558,0x2559,0x255A,0x255B,0x0491,0x255D,0x255E,
+ 0x255F,0x2560,0x2561,0x0401,0x0404,0x2563,0x0406,0x0407,
+ 0x2566,0x2567,0x2568,0x2569,0x256A,0x0490,0x256C,0x00A9,
+ 0x044E,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433,
+ 0x0445,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,
+ 0x043F,0x044F,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432,
+ 0x044C,0x044B,0x0437,0x0448,0x044D,0x0449,0x0447,0x044A,
+ 0x042E,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413,
+ 0x0425,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,
+ 0x041F,0x042F,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412,
+ 0x042C,0x042B,0x0417,0x0428,0x042D,0x0429,0x0427,0x042A } },
+ { RTL_TEXTENCODING_ADOBE_STANDARD,
+ { 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x2019,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x2018,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x00A1,0x00A2,0x00A3,0x2215,0x00A5,0x0192,0x00A7,
+ 0x00A4,0x0027,0x201C,0x00AB,0x2039,0x203A,0xFB01,0xFB02,
+ 0xFFFF,0x2013,0x2020,0x2021,0x00B7,0xFFFF,0x00B6,0x2022,
+ 0x201A,0x201E,0x201D,0x00BB,0x2026,0x2030,0xFFFF,0x00BF,
+ 0xFFFF,0x0060,0x00B4,0x02C6,0x02DC,0x00AF,0x02D8,0x02D9,
+ 0x00A8,0xFFFF,0x02DA,0x00B8,0xFFFF,0x02DD,0x02DB,0x02C7,
+ 0x2014,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x00C6,0xFFFF,0x00AA,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x0141,0x00D8,0x0152,0x00BA,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0x00E6,0xFFFF,0xFFFF,0xFFFF,0x0131,0xFFFF,0xFFFF,
+ 0x0142,0x00F8,0x0153,0x00DF,0xFFFF,0xFFFF,0xFFFF,0xFFFF } },
+ { RTL_TEXTENCODING_ADOBE_SYMBOL,
+ { 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x0020,0x0021,0x2200,0x0023,0x2203,0x0025,0x0026,0x220B,
+ 0x0028,0x0029,0x2217,0x002B,0x002C,0x2212,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x2245,0x0391,0x0392,0x03A7,0x0394,0x0395,0x03A6,0x0393,
+ 0x0397,0x0399,0x03D1,0x039A,0x039B,0x039C,0x039D,0x039F,
+ 0x03A0,0x0398,0x03A1,0x03A3,0x03A4,0x03A5,0x03C2,0x03A9,
+ 0x039E,0x03A8,0x0396,0x005B,0x2234,0x005D,0x22A5,0x005F,
+ 0xF8E5,0x03B1,0x03B2,0x03C7,0x03B4,0x03B5,0x03C6,0x03B3,
+ 0x03B7,0x03B9,0x03D5,0x03BA,0x03BB,0x03BC,0x03BD,0x03BF,
+ 0x03C0,0x03B8,0x03C1,0x03C3,0x03C4,0x03C5,0x03D6,0x03C9,
+ 0x03BE,0x03C8,0x03B6,0x007B,0x007C,0x007D,0x223C,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0x20AC,0x03D2,0x2032,0x2264,0x2215,0x221E,0x0192,0x2663,
+ 0x2666,0x2665,0x2660,0x2194,0x2190,0x2191,0x2192,0x2193,
+ 0x00B0,0x00B1,0x2033,0x2265,0x00D7,0x221D,0x2202,0x2022,
+ 0x00F7,0x2260,0x2261,0x2248,0x2026,0x23AF,0x23D0,0x21B5,
+ 0x2135,0x2111,0x211C,0x2118,0x2297,0x2295,0x2205,0x2229,
+ 0x222A,0x2283,0x2287,0x2284,0x2282,0x2286,0x2208,0x2209,
+ 0x2220,0x2207,0xF6DA,0xF6D9,0xF6DB,0x220F,0x221A,0x22C5,
+ 0x00AC,0x2227,0x2228,0x21D4,0x21D0,0x21D1,0x21D2,0x21D3,
+ 0x25CA,0x2329,0xF8E8,0xF8E9,0xF8EA,0x2211,0x239B,0x239C,
+ 0x239D,0x23A1,0x23A2,0x23A3,0x23A7,0x23A8,0x23A9,0x23AA,
+ 0xFFFF,0x232A,0x222B,0x2320,0x23AE,0x2321,0x239E,0x239F,
+ 0x23A0,0x23A4,0x23A5,0x23A6,0x23AB,0x23AC,0x23AD,0xFFFF } },
+ { RTL_TEXTENCODING_ADOBE_DINGBATS,
+ { 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+// 20
+ 0x0020,0x2701,0x2702,0x2703,0x2704,0x260E,0x2706,0x2707,
+ 0x2708,0x2709,0x261B,0x261E,0x270C,0x270D,0x270E,0x270F,
+ 0x2710,0x2711,0x2712,0x2713,0x2714,0x2715,0x2716,0x2717,
+ 0x2718,0x2719,0x271A,0x271B,0x271C,0x271D,0x271E,0x271F,
+// 40
+ 0x2720,0x2721,0x2722,0x2723,0x2724,0x2725,0x2726,0x2727,
+ 0x2605,0x2729,0x272A,0x272B,0x272C,0x272D,0x272E,0x272F,
+ 0x2730,0x2731,0x2732,0x2733,0x2734,0x2735,0x2736,0x2737,
+ 0x2738,0x2739,0x273A,0x273B,0x273C,0x273D,0x273E,0x273F,
+// 60
+ 0x2740,0x2741,0x2742,0x2743,0x2744,0x2745,0x2746,0x2747,
+ 0x2748,0x2749,0x274A,0x274B,0x25CF,0x274D,0x25A0,0x274F,
+ 0x2750,0x2751,0x2752,0x25B2,0x25BC,0x25C6,0x2756,0x25D7,
+ 0x2758,0x2759,0x275A,0x275B,0x275C,0x275D,0x275E,0xFFFF,
+// 80
+ 0xF8D7,0xF8D8,0xF8D9,0xF8DA,0xF8DB,0xF8DC,0xF8DD,0xF8DE,
+ 0xF8DF,0xF8E0,0xF8E1,0xF8E2,0xF8E3,0xF8E4,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
+// A0
+ 0xFFFF,0x2761,0x2762,0x2763,0x2764,0x2765,0x2766,0x2767,
+ 0x2663,0x2666,0x2665,0x2660,0x2460,0x2461,0x2462,0x2463,
+ 0x2464,0x2465,0x2466,0x2467,0x2468,0x2469,0x2776,0x2777,
+ 0x2778,0x2779,0x277A,0x277B,0x277C,0x277D,0x277E,0x277F,
+// C0
+ 0x2780,0x2781,0x2782,0x2783,0x2784,0x2785,0x2786,0x2787,
+ 0x2788,0x2789,0x278A,0x278B,0x278C,0x278D,0x278E,0x278F,
+ 0x2790,0x2791,0x2792,0x2793,0x2794,0x2795,0x2796,0x2797,
+ 0x2798,0x2799,0x279A,0x279B,0x279C,0x279D,0x279E,0x279F,
+// E0
+ 0x27A0,0x27A1,0x27A2,0x27A3,0x27A4,0x27A5,0x27A6,0x27A7,
+ 0x27A8,0x27A9,0x27AA,0x27AB,0x27AC,0x27AD,0x27AE,0x27AF,
+ 0xFFFF,0x27B1,0x27B2,0x27B3,0x27B4,0x27B5,0x27B6,0x27B7,
+ 0x27B8,0x27B9,0x27BA,0x27BB,0x27BC,0x27BD,0x27BE,0xFFFF } },
+ { RTL_TEXTENCODING_PT154,
+ { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
+ 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
+ 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
+ 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
+ 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
+ 0x0496,0x0492,0x04EE,0x0493,0x201E,0x2026,0x04B6,0x04AE,
+ 0x04B2,0x04AF,0x04A0,0x04E2,0x04A2,0x049A,0x04BA,0x04B8,
+ 0x0497,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
+ 0x04B3,0x04B7,0x04A1,0x04E3,0x04A3,0x049B,0x04BB,0x04B9,
+ 0x00A0,0x040E,0x045E,0x0408,0x04E8,0x0498,0x04B0,0x00A7,
+ 0x0401,0x00A9,0x04D8,0x00AB,0x00AC,0x04EF,0x00AE,0x049C,
+ 0x00B0,0x04B1,0x0406,0x0456,0x0499,0x04E9,0x00B6,0x00B7,
+ 0x0451,0x2116,0x04D9,0x00BB,0x0458,0x04AA,0x04AB,0x049D,
+ 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,
+ 0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F,
+ 0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,
+ 0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F,
+ 0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,
+ 0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F,
+ 0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,
+ 0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F } } };
+ for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
+ testSingleByteCharSet(data[i]);
+ }
+}
+
+void Test::testComplex() {
+ static ComplexCharSetTest const data[]
+ = { { RTL_TEXTENCODING_ASCII_US,
+ RTL_CONSTASCII_STRINGPARAM("\x01\"3De$~"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E },
+ 7,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ { RTL_TEXTENCODING_EUC_CN,
+ RTL_CONSTASCII_STRINGPARAM("\x01\"3De$~\xA1\xB9\xF0\xC5"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,
+ 0x300D,0x9E4B },
+ 9,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_TW,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x01\"3De$~\xC5\xF0\x8E\xA4\xDC\xD9"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,
+ 0x4ED9,0xD87E,0xDD68 },
+ 10,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_GB_18030,
+ RTL_CONSTASCII_STRINGPARAM("\x01\"3De$~"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E },
+ 7,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_GB_18030,
+ RTL_CONSTASCII_STRINGPARAM("\x81\x40\xFE\xFE"),
+ { 0x4E02,0xE4C5 },
+ 2,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_GB_18030,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x81\x30\xB1\x33\x81\x30\xD3\x30\x81\x36\xA5\x31"),
+ { 0x028A,0x0452,0x200F },
+ 3,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_GB_18030,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xFE\x50\xFE\x51\xFE\x52\xFE\x53\xFE\x54\xFE\x55\xFE\x56"
+ "\xFE\x57\xFE\x58\xFE\x59\xFE\x5A\xFE\x5B\xFE\x5C\xFE\x5D"
+ "\xFE\x5E\xFE\x5F\xFE\x60\xFE\x61\xFE\x62\xFE\x63\xFE\x64"
+ "\xFE\x65\xFE\x66\xFE\x67\xFE\x68\xFE\x69\xFE\x6A\xFE\x6B"
+ "\xFE\x6C\xFE\x6D\xFE\x6E\xFE\x6F\xFE\x70\xFE\x71\xFE\x72"
+ "\xFE\x73\xFE\x74\xFE\x75\xFE\x76\xFE\x77\xFE\x78\xFE\x79"
+ "\xFE\x7A\xFE\x7B\xFE\x7C\xFE\x7D\xFE\x7E\xFE\x80\xFE\x81"
+ "\xFE\x82\xFE\x83\xFE\x84\xFE\x85\xFE\x86\xFE\x87\xFE\x88"
+ "\xFE\x89\xFE\x8A\xFE\x8B\xFE\x8C\xFE\x8D\xFE\x8E\xFE\x8F"
+ "\xFE\x90\xFE\x91\xFE\x92\xFE\x93\xFE\x94\xFE\x95\xFE\x96"
+ "\xFE\x97\xFE\x98\xFE\x99\xFE\x9A\xFE\x9B\xFE\x9C\xFE\x9D"
+ "\xFE\x9E\xFE\x9F\xFE\xA0"),
+ { 0x2E81,0xE816,0xE817,0xE818,0x2E84,0x3473,0x3447,0x2E88,
+ 0x2E8B,0xE81E,0x359E,0x361A,0x360E,0x2E8C,0x2E97,0x396E,
+ 0x3918,0xE826,0x39CF,0x39DF,0x3A73,0x39D0,0xE82B,0xE82C,
+ 0x3B4E,0x3C6E,0x3CE0,0x2EA7,0xE831,0xE832,0x2EAA,0x4056,
+ 0x415F,0x2EAE,0x4337,0x2EB3,0x2EB6,0x2EB7,0xE83B,0x43B1,
+ 0x43AC,0x2EBB,0x43DD,0x44D6,0x4661,0x464C,0xE843,0x4723,
+ 0x4729,0x477C,0x478D,0x2ECA,0x4947,0x497A,0x497D,0x4982,
+ 0x4983,0x4985,0x4986,0x499F,0x499B,0x49B7,0x49B6,0xE854,
+ 0xE855,0x4CA3,0x4C9F,0x4CA0,0x4CA1,0x4C77,0x4CA2,0x4D13,
+ 0x4D14,0x4D15,0x4D16,0x4D17,0x4D18,0x4D19,0x4DAE,0xE864 },
+ 80,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ { RTL_TEXTENCODING_ISO_2022_JP,
+ RTL_CONSTASCII_STRINGPARAM("\x01\"3De$\\~"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E },
+ 8,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_2022_JP,
+ RTL_CONSTASCII_STRINGPARAM("\x1B(B\x01\"3De$\\~"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E },
+ 8,
+ false,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_2022_JP,
+ RTL_CONSTASCII_STRINGPARAM("\x1B(J\x01\"3De$\\~"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x00A5,0x00AF },
+ 8,
+ false,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_2022_JP,
+ RTL_CONSTASCII_STRINGPARAM("\x1B$B\x26\x21\x27\x71\x1B(B"),
+ { 0x0391,0x044F },
+ 2,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ { RTL_TEXTENCODING_ISO_2022_KR,
+ RTL_CONSTASCII_STRINGPARAM("\x1B$)C\x01\"3De$\\~"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E },
+ 8,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_2022_KR,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x1B$)C\x0E\x25\x21\x0F\x0D\x0Ax\x0E\x48\x7E\x0F"),
+ { 0x2170,0x000D,0x000A,0x0078,0xD79D },
+ 5,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ { RTL_TEXTENCODING_ISO_2022_CN,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x01\"3De$\\~\x1B$)G\x0E\x45\x70\x1B$*H\x1BN\x22\x22"
+ "\x45\x70\x0F\x1B$)A\x0E\x26\x21\x0F"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E,
+ 0x4ED9,0x531F,0x4ED9,0x0391 },
+ 12,
+ false,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_2022_CN,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x01\"3De$\\~\x1B$)A\x0E\x26\x21\x1B$*H\x1BN\x22\x22"
+ "\x26\x21\x0F\x0D\x0A\x1B$)A\x0E\x26\x21\x0F"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E,
+ 0x0391,0x531F,0x0391,0x000D,0x000A,0x0391 },
+ 14,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+ // The following does not work as long as Big5-HKSCS maps to
+ // Unicode PUA instead of Plane 2. Use the next two tests
+ // instead:
+// { RTL_TEXTENCODING_BIG5_HKSCS,
+// RTL_CONSTASCII_STRINGPARAM(
+// "\x01\"3De$~\x88\x56\xF9\xFE\xFA\x5E\xA1\x40\xF9\xD5"),
+// { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,0x0100,
+// 0xFFED,0xD849,0xDD13,0x3000,0x9F98 },
+// 13,
+// true,
+// true,
+// true,
+// false,
+// RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x01\"3De$~\x88\x56\xF9\xFE\xFA\x5E\xA1\x40\xF9\xD5"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,0x0100,
+ 0xFFED,0xE01E,0x3000,0x9F98 },
+ 12,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x01\"3De$~\x88\x56\xF9\xFE\xFA\x5E\xA1\x40\xF9\xD5"),
+ { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,0x0100,
+ 0xFFED,0xD849,0xDD13,0x3000,0x9F98 },
+ 13,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC6\xA1\xC6\xCF\xC6\xD3\xC6\xD5\xC6\xD7\xC6\xDE\xC6\xDF"
+ "\xC6\xFE\xC7\x40\xC7\x7E\xC7\xA1\xC7\xFE"),
+ { 0x2460,0xF6E0,0xF6E4,0xF6E6,0xF6E8,0xF6EF,0xF6F0,0x3058,
+ 0x3059,0x30A4,0x30A5,0x041A },
+ 12,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM("\x81\x40\x84\xFE"),
+ { 0xEEB8,0xF12B },
+ 2,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x81\x40\x8D\xFE\x8E\x40\xA0\xFE\xC6\xA1\xC8\xFE\xFA\x40"
+ "\xFE\xFE"),
+ { 0xEEB8,0xF6B0,0xE311,0xEEB7,0xF6B1,0xF848,0xE000,0xE310 },
+ 8,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM("\xAD\xC5\x94\x55"),
+ { 0x5029,0x7250 },
+ 2,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM("\xFA\x5F\xA0\xE4"),
+ { 0x5029,0x7250 },
+ 2,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM("\xA0\x40\xA0\x7E\xA0\xA1\xA0\xFE"),
+ { 0xEE1B,0xEE59,0xEE5A,0xEEB7 },
+ 4,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5,
+ RTL_CONSTASCII_STRINGPARAM("\xA1\x45"),
+ { 0x2027 },
+ 1,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC6\xCF\xC6\xD3\xC6\xD5\xC6\xD7\xC6\xDE\xC6\xDF"),
+ { 0x306B,0x306F,0x3071,0x3073,0x307A,0x307B },
+ 6,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC7\xFD\xC7\xFE\xC8\x40\xC8\x7E\xC8\xA1\xC8\xFE"),
+ { 0xF7AA,0xF7AB,0xF7AC,0xF7EA,0xF7EB,0xF848 },
+ 6,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5,
+ RTL_CONSTASCII_STRINGPARAM("\xA0\x40\xA0\x7E\xA0\xA1\xA0\xFE"),
+ { 0xEE1B,0xEE59,0xEE5A,0xEEB7 },
+ 4,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+ { RTL_TEXTENCODING_MS_950,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC6\xA1\xC6\xFE\xC7\x40\xC7\x7E\xC7\xA1\xC7\xFE\xC8\x40"
+ "\xC8\x7E\xC8\xA1\xC8\xFE"),
+ { 0xF6B1,0xF70E,0xF70F,0xF74D,0xF74E,0xF7AB,0xF7AC,0xF7EA,
+ 0xF7EB,0xF848 },
+ 10,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_MS_950,
+ RTL_CONSTASCII_STRINGPARAM("\xA0\x40\xA0\x7E\xA0\xA1\xA0\xFE"),
+ { 0xEE1B,0xEE59,0xEE5A,0xEEB7 },
+ 4,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+ // Test Unicode beyond BMP:
+
+ // FIXME The second m_bForward test (requiring a context) does not
+ // work for UTF7:
+// { RTL_TEXTENCODING_UTF7,
+// RTL_CONSTASCII_STRINGPARAM("+2EndEw-"),
+// { 0xD849,0xDD13 },
+// 2,
+// true,
+// true,
+// true,
+// false,
+// RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\xF0\xA2\x94\x93"),
+ { 0xD849,0xDD13 },
+ 2,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ { RTL_TEXTENCODING_GB_18030,
+ RTL_CONSTASCII_STRINGPARAM("\x95\x39\xC5\x37"),
+ { 0xD849,0xDD13 },
+ 2,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_BIG5_HKSCS,
+ RTL_CONSTASCII_STRINGPARAM("\xFA\x5E"),
+ { 0xD849,0xDD13 },
+ 2,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+ // Test GBK (aka CP936):
+
+ { RTL_TEXTENCODING_GBK,
+ RTL_CONSTASCII_STRINGPARAM("\xFD\x7C\xC1\xFA\xFD\x9B"),
+ { 0x9F76,0x9F99,0x9FA5 },
+ 3,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+ { RTL_TEXTENCODING_MS_936,
+ RTL_CONSTASCII_STRINGPARAM("\xFD\x7C\xC1\xFA\xFD\x9B"),
+ { 0x9F76,0x9F99,0x9FA5 },
+ 3,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ { RTL_TEXTENCODING_GBK,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xFE\x50\xFE\x54\xFE\x55\xFE\x56"
+ "\xFE\x57\xFE\x58\xFE\x5A\xFE\x5B\xFE\x5C\xFE\x5D"
+ "\xFE\x5E\xFE\x5F\xFE\x60\xFE\x62\xFE\x63\xFE\x64"
+ "\xFE\x65\xFE\x68\xFE\x69\xFE\x6A\xFE\x6B"
+ "\xFE\x6E\xFE\x6F\xFE\x70\xFE\x71\xFE\x72"
+ "\xFE\x73\xFE\x74\xFE\x75\xFE\x77\xFE\x78\xFE\x79"
+ "\xFE\x7A\xFE\x7B\xFE\x7C\xFE\x7D\xFE\x80\xFE\x81"
+ "\xFE\x82\xFE\x83\xFE\x84\xFE\x85\xFE\x86\xFE\x87\xFE\x88"
+ "\xFE\x89\xFE\x8A\xFE\x8B\xFE\x8C\xFE\x8D\xFE\x8E\xFE\x8F"
+ "\xFE\x92\xFE\x93\xFE\x94\xFE\x95\xFE\x96"
+ "\xFE\x97\xFE\x98\xFE\x99\xFE\x9A\xFE\x9B\xFE\x9C\xFE\x9D"
+ "\xFE\x9E\xFE\x9F"),
+ { 0x2E81,0x2E84,0x3473,0x3447,0x2E88,0x2E8B,0x359E,0x361A,
+ 0x360E,0x2E8C,0x2E97,0x396E,0x3918,0x39CF,0x39DF,0x3A73,
+ 0x39D0,0x3B4E,0x3C6E,0x3CE0,0x2EA7,0x2EAA,0x4056,0x415F,
+ 0x2EAE,0x4337,0x2EB3,0x2EB6,0x2EB7,0x43B1,0x43AC,0x2EBB,
+ 0x43DD,0x44D6,0x4661,0x464C,0x4723,0x4729,0x477C,0x478D,
+ 0x2ECA,0x4947,0x497A,0x497D,0x4982,0x4983,0x4985,0x4986,
+ 0x499F,0x499B,0x49B7,0x49B6,0x4CA3,0x4C9F,0x4CA0,0x4CA1,
+ 0x4C77,0x4CA2,0x4D13,0x4D14,0x4D15,0x4D16,0x4D17,0x4D18,
+ 0x4D19,0x4DAE },
+ 66,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM("?"),
+ { 0xFF0D },
+ 1,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_QUESTIONMARK },
+#endif
+ // Test of "JIS X 0208 row 13" (taken from CP932; added to
+ // ISO-2022-JP and EUC-JP; 74 of the 83 characters introduce
+ // mappings to new Unicode characters):
+ { RTL_TEXTENCODING_MS_932,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x87\x40\x87\x41\x87\x42\x87\x43\x87\x44\x87\x45\x87\x46"
+ "\x87\x47\x87\x48\x87\x49\x87\x4A\x87\x4B\x87\x4C\x87\x4D"
+ "\x87\x4E\x87\x4F\x87\x50\x87\x51\x87\x52\x87\x53\x87\x54"
+ "\x87\x55\x87\x56\x87\x57\x87\x58\x87\x59\x87\x5A\x87\x5B"
+ "\x87\x5C\x87\x5D\x87\x5F\x87\x60\x87\x61\x87\x62\x87\x63"
+ "\x87\x64\x87\x65\x87\x66\x87\x67\x87\x68\x87\x69\x87\x6A"
+ "\x87\x6B\x87\x6C\x87\x6D\x87\x6E\x87\x6F\x87\x70\x87\x71"
+ "\x87\x72\x87\x73\x87\x74\x87\x75\x87\x7E\x87\x80\x87\x81"
+ "\x87\x82\x87\x83\x87\x84\x87\x85\x87\x86\x87\x87\x87\x88"
+ "\x87\x89\x87\x8A\x87\x8B\x87\x8C\x87\x8D\x87\x8E\x87\x8F"
+ "\x87\x90\x87\x91\x87\x92\x87\x93\x87\x94\x87\x95\x87\x96"
+ "\x87\x97\x87\x98\x87\x99\x87\x9A\x87\x9B\x87\x9C"),
+ { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,
+ 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471,
+ 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,
+ 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
+ 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
+ 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B,
+ 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
+ 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x2252,0x2261,
+ 0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,0x221F,0x22BF,0x2235,
+ 0x2229,0x222A },
+ 83,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ { RTL_TEXTENCODING_SHIFT_JIS,
+ RTL_CONSTASCII_STRINGPARAM("\x00\xFA\x6F\xFA\x71"),
+ {0x0000, 0x4F92, 0x4F9A},
+ 3,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_SHIFT_JIS,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x87\x40\x87\x41\x87\x42\x87\x43\x87\x44\x87\x45\x87\x46"
+ "\x87\x47\x87\x48\x87\x49\x87\x4A\x87\x4B\x87\x4C\x87\x4D"
+ "\x87\x4E\x87\x4F\x87\x50\x87\x51\x87\x52\x87\x53\x87\x54"
+ "\x87\x55\x87\x56\x87\x57\x87\x58\x87\x59\x87\x5A\x87\x5B"
+ "\x87\x5C\x87\x5D\x87\x5F\x87\x60\x87\x61\x87\x62\x87\x63"
+ "\x87\x64\x87\x65\x87\x66\x87\x67\x87\x68\x87\x69\x87\x6A"
+ "\x87\x6B\x87\x6C\x87\x6D\x87\x6E\x87\x6F\x87\x70\x87\x71"
+ "\x87\x72\x87\x73\x87\x74\x87\x75\x87\x7E\x87\x80\x87\x81"
+ "\x87\x82\x87\x83\x87\x84\x87\x85\x87\x86\x87\x87\x87\x88"
+ "\x87\x89\x87\x8A\x87\x8B\x87\x8C\x87\x8D\x87\x8E\x87\x8F"
+ "\x87\x90\x87\x91\x87\x92\x87\x93\x87\x94\x87\x95\x87\x96"
+ "\x87\x97\x87\x98\x87\x99\x87\x9A\x87\x9B\x87\x9C"),
+ { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,
+ 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471,
+ 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,
+ 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
+ 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
+ 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B,
+ 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
+ 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x2252,0x2261,
+ 0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,0x221F,0x22BF,0x2235,
+ 0x2229,0x222A },
+ 83,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_2022_JP,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x1B$B\x2D\x21\x2D\x22\x2D\x23\x2D\x24\x2D\x25\x2D\x26"
+ "\x2D\x27\x2D\x28\x2D\x29\x2D\x2A\x2D\x2B\x2D\x2C\x2D\x2D"
+ "\x2D\x2E\x2D\x2F\x2D\x30\x2D\x31\x2D\x32\x2D\x33\x2D\x34"
+ "\x2D\x35\x2D\x36\x2D\x37\x2D\x38\x2D\x39\x2D\x3A\x2D\x3B"
+ "\x2D\x3C\x2D\x3D\x2D\x3E\x2D\x40\x2D\x41\x2D\x42\x2D\x43"
+ "\x2D\x44\x2D\x45\x2D\x46\x2D\x47\x2D\x48\x2D\x49\x2D\x4A"
+ "\x2D\x4B\x2D\x4C\x2D\x4D\x2D\x4E\x2D\x4F\x2D\x50\x2D\x51"
+ "\x2D\x52\x2D\x53\x2D\x54\x2D\x55\x2D\x56\x2D\x5F\x2D\x60"
+ "\x2D\x61\x2D\x62\x2D\x63\x2D\x64\x2D\x65\x2D\x66\x2D\x67"
+ "\x2D\x68\x2D\x69\x2D\x6A\x2D\x6B\x2D\x6C\x2D\x6D\x2D\x6E"
+ "\x2D\x6F\x2D\x70\x2D\x71\x2D\x72\x2D\x73\x2D\x74\x2D\x75"
+ "\x2D\x76\x2D\x77\x2D\x78\x2D\x79\x2D\x7A\x2D\x7B\x2D\x7C"
+ "\x1B(B"),
+ { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,
+ 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471,
+ 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,
+ 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
+ 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
+ 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B,
+ 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
+ 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x2252,0x2261,
+ 0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,0x221F,0x22BF,0x2235,
+ 0x2229,0x222A },
+ 83,
+ false,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_2022_JP,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x1B$B\x2D\x21\x2D\x22\x2D\x23\x2D\x24\x2D\x25\x2D\x26"
+ "\x2D\x27\x2D\x28\x2D\x29\x2D\x2A\x2D\x2B\x2D\x2C\x2D\x2D"
+ "\x2D\x2E\x2D\x2F\x2D\x30\x2D\x31\x2D\x32\x2D\x33\x2D\x34"
+ "\x2D\x35\x2D\x36\x2D\x37\x2D\x38\x2D\x39\x2D\x3A\x2D\x3B"
+ "\x2D\x3C\x2D\x3D\x2D\x3E\x2D\x40\x2D\x41\x2D\x42\x2D\x43"
+ "\x2D\x44\x2D\x45\x2D\x46\x2D\x47\x2D\x48\x2D\x49\x2D\x4A"
+ "\x2D\x4B\x2D\x4C\x2D\x4D\x2D\x4E\x2D\x4F\x2D\x50\x2D\x51"
+ "\x2D\x52\x2D\x53\x2D\x54\x2D\x55\x2D\x56\x2D\x5F\x2D\x60"
+ "\x2D\x61\x2D\x62\x2D\x63\x2D\x64\x2D\x65\x2D\x66\x2D\x67"
+ "\x2D\x68\x2D\x69\x2D\x6A\x2D\x6B\x2D\x6C\x2D\x6D\x2D\x6E"
+ "\x2D\x6F\x2D\x73\x2D\x74\x2D\x78\x2D\x79\x1B(B"),
+ { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,
+ 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471,
+ 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,
+ 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
+ 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
+ 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B,
+ 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
+ 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x222E,0x2211,
+ 0x221F,0x22BF },
+ 74,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xAD\xA1\xAD\xA2\xAD\xA3\xAD\xA4\xAD\xA5\xAD\xA6\xAD\xA7"
+ "\xAD\xA8\xAD\xA9\xAD\xAA\xAD\xAB\xAD\xAC\xAD\xAD\xAD\xAE"
+ "\xAD\xAF\xAD\xB0\xAD\xB1\xAD\xB2\xAD\xB3\xAD\xB4\xAD\xB5"
+ "\xAD\xB6\xAD\xB7\xAD\xB8\xAD\xB9\xAD\xBA\xAD\xBB\xAD\xBC"
+ "\xAD\xBD\xAD\xBE\xAD\xC0\xAD\xC1\xAD\xC2\xAD\xC3\xAD\xC4"
+ "\xAD\xC5\xAD\xC6\xAD\xC7\xAD\xC8\xAD\xC9\xAD\xCA\xAD\xCB"
+ "\xAD\xCC\xAD\xCD\xAD\xCE\xAD\xCF\xAD\xD0\xAD\xD1\xAD\xD2"
+ "\xAD\xD3\xAD\xD4\xAD\xD5\xAD\xD6\xAD\xDF\xAD\xE0\xAD\xE1"
+ "\xAD\xE2\xAD\xE3\xAD\xE4\xAD\xE5\xAD\xE6\xAD\xE7\xAD\xE8"
+ "\xAD\xE9\xAD\xEA\xAD\xEB\xAD\xEC\xAD\xED\xAD\xEE\xAD\xEF"
+ "\xAD\xF0\xAD\xF1\xAD\xF2\xAD\xF3\xAD\xF4\xAD\xF5\xAD\xF6"
+ "\xAD\xF7\xAD\xF8\xAD\xF9\xAD\xFA\xAD\xFB\xAD\xFC"),
+ { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,
+ 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471,
+ 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,
+ 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
+ 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
+ 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B,
+ 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
+ 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x2252,0x2261,
+ 0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,0x221F,0x22BF,0x2235,
+ 0x2229,0x222A },
+ 83,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xAD\xA1\xAD\xA2\xAD\xA3\xAD\xA4\xAD\xA5\xAD\xA6\xAD\xA7"
+ "\xAD\xA8\xAD\xA9\xAD\xAA\xAD\xAB\xAD\xAC\xAD\xAD\xAD\xAE"
+ "\xAD\xAF\xAD\xB0\xAD\xB1\xAD\xB2\xAD\xB3\xAD\xB4\xAD\xB5"
+ "\xAD\xB6\xAD\xB7\xAD\xB8\xAD\xB9\xAD\xBA\xAD\xBB\xAD\xBC"
+ "\xAD\xBD\xAD\xBE\xAD\xC0\xAD\xC1\xAD\xC2\xAD\xC3\xAD\xC4"
+ "\xAD\xC5\xAD\xC6\xAD\xC7\xAD\xC8\xAD\xC9\xAD\xCA\xAD\xCB"
+ "\xAD\xCC\xAD\xCD\xAD\xCE\xAD\xCF\xAD\xD0\xAD\xD1\xAD\xD2"
+ "\xAD\xD3\xAD\xD4\xAD\xD5\xAD\xD6\xAD\xDF\xAD\xE0\xAD\xE1"
+ "\xAD\xE2\xAD\xE3\xAD\xE4\xAD\xE5\xAD\xE6\xAD\xE7\xAD\xE8"
+ "\xAD\xE9\xAD\xEA\xAD\xEB\xAD\xEC\xAD\xED\xAD\xEE\xAD\xEF"
+ "\xAD\xF3\xAD\xF4\xAD\xF8\xAD\xF9"),
+ { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,
+ 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471,
+ 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,
+ 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
+ 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
+ 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B,
+ 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
+ 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x222E,0x2211,
+ 0x221F,0x22BF },
+ 74,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM("\xB9\xF5"),
+ { 0x9ED2 },
+ 1,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+ // Test ISO-8859-x/MS-125x range 0x80--9F:
+
+ { RTL_TEXTENCODING_ISO_8859_1,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_2,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_3,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_4,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_5,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_6,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_7,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_8,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_9,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_14,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISO_8859_15,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
+ "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
+ "\x9E\x9F"),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_MS_874,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1250,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1251,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1252,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1253,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1254,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1255,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1256,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1257,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_1258,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
+ 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
+ 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
+ 0x009B,0x009C,0x009D,0x009E,0x009F },
+ 32,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_MS_949,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xB0\xA1\xB0\xA2\x81\x41\x81\x42\xB0\xA3\x81\x43\x81\x44"
+ "\xB0\xA4\xB0\xA5\xB0\xA6\xB0\xA7\x81\x45\x81\x46\x81\x47"
+ "\x81\x48\x81\x49\xB0\xA8\xB0\xA9\xB0\xAA\xB0\xAB\xB0\xAC"
+ "\xB0\xAD\xB0\xAE\xB0\xAF\x81\x4A\xB0\xB0\xB0\xB1\xB0\xB2"),
+ { 0xAC00,0xAC01,0xAC02,0xAC03,0xAC04,0xAC05,0xAC06,0xAC07,0xAC08,
+ 0xAC09,0xAC0A,0xAC0B,0xAC0C,0xAC0D,0xAC0E,0xAC0F,0xAC10,0xAC11,
+ 0xAC12,0xAC13,0xAC14,0xAC15,0xAC16,0xAC17,0xAC18,0xAC19,0xAC1A,
+ 0xAC1B },
+ 28,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_MS_949,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC9\xA1\xC9\xA2\xC9\xA3\xC9\xFC\xC9\xFD\xC9\xFE"
+ "\xFE\xA1\xFE\xA2\xFE\xA3\xFE\xFC\xFE\xFD\xFE\xFE"),
+ { 0xE000,0xE001,0xE002,0xE05B,0xE05C,0xE05D,
+ 0xE05E,0xE05F,0xE060,0xE0B9,0xE0BA,0xE0BB },
+ 12,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ { RTL_TEXTENCODING_EUC_KR,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xB0\xA1\xB0\xA2" "\xB0\xA3"
+ "\xB0\xA4\xB0\xA5\xB0\xA6\xB0\xA7"
+ "\xB0\xA8\xB0\xA9\xB0\xAA\xB0\xAB\xB0\xAC"
+ "\xB0\xAD\xB0\xAE\xB0\xAF" "\xB0\xB0\xB0\xB1\xB0\xB2"),
+ { 0xAC00,0xAC01, 0xAC04, 0xAC07,0xAC08,
+ 0xAC09,0xAC0A, 0xAC10,0xAC11,
+ 0xAC12,0xAC13,0xAC14,0xAC15,0xAC16,0xAC17, 0xAC19,0xAC1A,
+ 0xAC1B },
+ 18,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_KR,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xB0\xA1\xB0\xA2" "\xB0\xA3"
+ "\xB0\xA4\xB0\xA5\xB0\xA6\xB0\xA7"
+ "\xB0\xA8\xB0\xA9\xB0\xAA\xB0\xAB\xB0\xAC"
+ "\xB0\xAD\xB0\xAE\xB0\xAF" "\xB0\xB0\xB0\xB1\xB0\xB2"),
+ { 0xAC00,0xAC01,0xAC02,0xAC03,0xAC04,0xAC05,0xAC06,0xAC07,0xAC08,
+ 0xAC09,0xAC0A,0xAC0B,0xAC0C,0xAC0D,0xAC0E,0xAC0F,0xAC10,0xAC11,
+ 0xAC12,0xAC13,0xAC14,0xAC15,0xAC16,0xAC17,0xAC18,0xAC19,0xAC1A,
+ 0xAC1B },
+ 28,
+ true,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_EUC_KR,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC9\xA1\xC9\xA2\xC9\xA3\xC9\xFC\xC9\xFD\xC9\xFE"
+ "\xFE\xA1\xFE\xA2\xFE\xA3\xFE\xFC\xFE\xFD\xFE\xFE"),
+ { 0xE000,0xE001,0xE002,0xE05B,0xE05C,0xE05D,
+ 0xE05E,0xE05F,0xE060,0xE0B9,0xE0BA,0xE0BB },
+ 12,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+ // Test UTF-8:
+
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\x00"),
+ { 0x0000 },
+ 1,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF"),
+ { 0xFEFF },
+ 1,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF\xEF\xBB\xBF"),
+ { 0xFEFF,0xFEFF },
+ 2,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF"),
+ { 0 },
+ 0,
+ false,
+ true,
+ true,
+ true,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF\xEF\xBB\xBF"),
+ { 0xFEFF },
+ 1,
+ false,
+ true,
+ true,
+ true,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\x01\x02\x7E\x7F"),
+ { 0x0001,0x0002,0x007E,0x007F },
+ 4,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_UTF8,
+ RTL_CONSTASCII_STRINGPARAM("\xEF\xBF\xBF"),
+ {0xFFFF},
+ 1,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+ // Test Java UTF-8:
+
+ { RTL_TEXTENCODING_JAVA_UTF8,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xEF\xBB\xBF\xC0\x80\x01\x20\x41\x7F\xED\xA0\x80"
+ "\xED\xB0\x80"),
+ { 0xFEFF,0x0000,0x0001,0x0020,0x0041,0x007F,0xD800,0xDC00 },
+ 8,
+ false,
+ true,
+ true,
+ true,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ // Bug #112949#:
+ { RTL_TEXTENCODING_SHIFT_JIS,
+ RTL_CONSTASCII_STRINGPARAM("\x81\x63"),
+ { 0x2026 },
+ 1,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_SHIFT_JIS,
+ RTL_CONSTASCII_STRINGPARAM("\xA0\xFD\xFE\xFF"),
+ { 0x00A0, 0x00A9, 0x2122, 0x2026 },
+ 4,
+ false,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_SHIFT_JIS,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x00A0, 0x00A9, 0x2122 },
+ 3,
+ false,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+#endif
+ { RTL_TEXTENCODING_MS_932,
+ RTL_CONSTASCII_STRINGPARAM("\x81\x63"),
+ { 0x2026 },
+ 1,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_MS_932,
+ RTL_CONSTASCII_STRINGPARAM("\xA0\xFD\xFE\xFF"),
+ { 0x00A0, 0x00A9, 0x2122, 0x2026 },
+ 4,
+ false,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_MS_932,
+ RTL_CONSTASCII_STRINGPARAM(""),
+ { 0x00A0, 0x00A9, 0x2122 },
+ 3,
+ false,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
+ { RTL_TEXTENCODING_APPLE_JAPANESE,
+ RTL_CONSTASCII_STRINGPARAM("\xA0\xFD\xFE\x81\x63"),
+ { 0x00A0, 0x00A9, 0x2122, 0x2026 },
+ 4,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_APPLE_JAPANESE,
+ RTL_CONSTASCII_STRINGPARAM("\xFF"),
+ { 0x2026 },
+ 1,
+ false,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+ { RTL_TEXTENCODING_ADOBE_STANDARD,
+ RTL_CONSTASCII_STRINGPARAM("\x20\x2D\xA4\xB4\xC5"),
+ { 0x0020, 0x002D, 0x2215, 0x00B7, 0x00AF },
+ 5,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ADOBE_STANDARD,
+ RTL_CONSTASCII_STRINGPARAM("\x20\x2D\xA4\xB4\xC5"),
+ { 0x00A0, 0x00AD, 0x2044, 0x2219, 0x02C9 },
+ 5,
+ false,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+ { RTL_TEXTENCODING_ADOBE_SYMBOL,
+ RTL_CONSTASCII_STRINGPARAM("\x20\x44\x57\x6D\xA4"),
+ { 0x0020, 0x0394, 0x03A9, 0x03BC, 0x2215 },
+ 5,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ADOBE_SYMBOL,
+ RTL_CONSTASCII_STRINGPARAM("\x20\x44\x57\x6D\xA4"),
+ { 0x00A0, 0x2206, 0x2126, 0x00B5, 0x2044 },
+ 5,
+ false,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ // Bug #i62310#:
+ { RTL_TEXTENCODING_SHIFT_JIS,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xF0\x40\xF0\x7E\xF0\x80\xF0\xFC\xF1\x40\xF9\xFC"),
+ { 0xE000, 0xE03E, 0xE03F, 0xE0BB, 0xE0BC, 0xE757 },
+ 6,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+ // Bug #i73103#:
+ { RTL_TEXTENCODING_MS_1258,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC0\x41\xDE\xE3\xD2\xD4\xEC\xFD\xF2"),
+ { 0x00C0, 0x0041, 0x0303, 0x0103, 0x0309, 0x00D4, 0x0301, 0x01B0,
+ 0x0323 },
+ 9,
+ true,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_MS_1258,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xC0\x41\xDE\xE3\xD2\xD4\xEC\xFD\xF2"),
+ { 0x00C0, 0x00C3, 0x1EB3, 0x1ED0, 0x1EF1 },
+ 5,
+ false,
+ false,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva
+ { RTL_TEXTENCODING_ISCII_DEVANAGARI,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\xD7\xE6\x20\xD4\xCF\xE8\xD6\x20"
+ "\xC8\xD8\xD1\xE1\x20\xB3\xCA\xDC"
+ "\xCF\xC4\xDA\xD7\x20\xD8\xDB\xA2"
+ "\xC4\xDE\x20\xB1\xCF\x20\xCC\xDD"
+ "\xD7\xD1\xCC\xDA\xC6\x20\xC4\xE5"
+ "\xC6\xE5\xA2\x20\xB3\xE1\x20\xB3"
+ "\xBD\xE8\xBD\xCF\xC8\xC6\x20\xB3"
+ "\xE5\x20\xC9\xBD\xB3\xDA\xCF\x20"
+ "\xB8\xDD\xB3\xE1\x20\xC3\xE1\x20"
+ "\xEA"),
+ { 0x0938, 0x094C, 0x0020, 0x0935, 0x0930, 0x094D, 0x0937, 0x0020,
+ 0x092A, 0x0939, 0x0932, 0x0947, 0x0020, 0x0915, 0x092C, 0x0940,
+ 0x0930, 0x0926, 0x093E, 0x0938, 0x0020, 0x0939, 0x093F, 0x0902,
+ 0x0926, 0x0942, 0x0020, 0x0914, 0x0930, 0x0020, 0x092E, 0x0941,
+ 0x0938, 0x0932, 0x092E, 0x093E, 0x0928, 0x0020, 0x0926, 0x094B,
+ 0x0928, 0x094B, 0x0902, 0x0020, 0x0915, 0x0947, 0x0020, 0x0915,
+ 0x091F, 0x094D, 0x091F, 0x0930, 0x092A, 0x0928, 0x0020, 0x0915,
+ 0x094B, 0x0020, 0x092B, 0x091F, 0x0915, 0x093E, 0x0930, 0x0020,
+ 0x091A, 0x0941, 0x0915, 0x0947, 0x0020, 0x0925, 0x0947, 0x0020,
+ 0x0964 },
+ 73,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_ISCII_DEVANAGARI,
+ RTL_CONSTASCII_STRINGPARAM("\xE8\xE8\xE8\xE9\xA1\xE9\xEA\xE9"),
+ { 0x094D, 0x200C, 0x094D, 0x200D, 0x0950, 0x93D },
+ 6,
+ false,
+ true,
+ true,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }
+#endif
+ };
+ for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
+ doComplexCharSetTest(data[i]);
+ }
+}
+
+void Test::testComplexCut() {
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja || WITH_LOCALE_zh
+ static ComplexCharSetTest const data[]
+ = {
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM("\xA1"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM("\x8E"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM("\x8F"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_JP,
+ RTL_CONSTASCII_STRINGPARAM("\x8F\xA1"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ { RTL_TEXTENCODING_EUC_CN,
+ RTL_CONSTASCII_STRINGPARAM("\xA1"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+#endif
+/* ,
+ { RTL_TEXTENCODING_EUC_TW,
+ RTL_CONSTASCII_STRINGPARAM("\xA1"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_TW,
+ RTL_CONSTASCII_STRINGPARAM("\x8E"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_TW,
+ RTL_CONSTASCII_STRINGPARAM("\x8E\xA1"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
+ { RTL_TEXTENCODING_EUC_TW,
+ RTL_CONSTASCII_STRINGPARAM("\x8E\xA1\xA1"),
+ { 0 },
+ 0,
+ true,
+ true,
+ false,
+ false,
+ RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR } */ };
+ for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
+ doComplexCharSetCutTest(data[i]);
+ }
+#endif
+}
+
+void Test::testInvalidUtf7() {
+ auto const converter = rtl_createTextToUnicodeConverter(RTL_TEXTENCODING_UTF7);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\x80"), buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+}
+
+void Test::testInvalidUtf8() {
+ // UTF-8, invalid bytes:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\x80\xBF\xFE\xFF"),
+ buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(4), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD\uFFFD\uFFFD\uFFFD"),
+ OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, non-shortest two-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xC0\x80"),
+ buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(2), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, cut two-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xC0"), buf,
+ TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(0), size);
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOSMALL, info);
+ CPPUNIT_ASSERT(converted <= 1);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, non-shortest three-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xE0\x9F\xBF"),
+ buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(3), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, cut three-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xE0\x80"), buf,
+ TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(0), size);
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOSMALL, info);
+ CPPUNIT_ASSERT(converted <= 2);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, cut three-byte sequence followed by more:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xE0\x80."), buf,
+ TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(2), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD."), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(3), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, surrogates:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr,
+ RTL_CONSTASCII_STRINGPARAM("\xED\xA0\x80\xED\xB0\x80"), buf,
+ TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(2), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(6), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, non-shortest four-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xF0\x8F\xBF\xBF"),
+ buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, too-large four-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xF4\x90\x80\x80"),
+ buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, five-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr,
+ RTL_CONSTASCII_STRINGPARAM("\xFB\xBF\xBF\xBF\xBF"),
+ buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(5), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // UTF-8, six-byte sequence:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr,
+ RTL_CONSTASCII_STRINGPARAM("\xFD\xBF\xBF\xBF\xBF\xBF"),
+ buf, TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(6), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // Java UTF-8, U+0000:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_JAVA_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\0"), buf,
+ TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+ // Java UTF-8, U+10000:
+ {
+ auto const converter = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_JAVA_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ OStringLiteral const input(u8"\U00010000");
+ sal_Unicode buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertTextToUnicode(
+ converter, nullptr, input.data, input.size, buf,
+ TEST_STRING_SIZE,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
+ | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+ }
+}
+
+void Test::testInvalidUnicode() {
+ auto const converter = rtl_createUnicodeToTextConverter(RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT(converter != nullptr);
+ sal_Unicode const input[] = {0xDC00}; // lone low surrogate
+ char buf[TEST_STRING_SIZE];
+ sal_uInt32 info;
+ sal_Size converted;
+ auto const size = rtl_convertUnicodeToText(
+ converter, nullptr, input, SAL_N_ELEMENTS(input), buf, TEST_STRING_SIZE,
+ (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR
+ | RTL_UNICODETOTEXT_FLAGS_FLUSH),
+ &info, &converted);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(0), size);
+ CPPUNIT_ASSERT_EQUAL(RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_INVALID, info);
+ CPPUNIT_ASSERT_EQUAL(sal_Size(1), converted);
+ rtl_destroyTextToUnicodeConverter(converter);
+}
+
+void Test::testSRCBUFFERTOSMALL() {
+ rtl_TextToUnicodeConverter cv = rtl_createTextToUnicodeConverter(
+ RTL_TEXTENCODING_EUC_JP);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeConverter(EUC-JP) failed",
+ cv != nullptr);
+ rtl_TextToUnicodeContext cx = rtl_createTextToUnicodeContext(cv);
+ CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", cx != nullptr);
+ char src = '\xA1';
+ sal_Unicode dst[10];
+ sal_uInt32 info;
+ sal_Size cvt;
+ CPPUNIT_ASSERT_EQUAL(
+ sal_Size(0),
+ rtl_convertTextToUnicode(
+ cv, cx, &src, 1, dst, SAL_N_ELEMENTS(dst),
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
+ &info, &cvt));
+ CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL, info);
+ CPPUNIT_ASSERT(cvt <= 1);
+ rtl_destroyTextToUnicodeContext(cv, cx);
+ rtl_destroyTextToUnicodeConverter(cv);
+}
+
+void Test::testMime() {
+ struct Data {
+ char const * mime;
+ rtl_TextEncoding encoding;
+ bool reverse;
+ };
+ static Data const data[] = {
+ { "GBK", RTL_TEXTENCODING_GBK, false },
+ { "CP936", RTL_TEXTENCODING_GBK, false },
+ { "MS936", RTL_TEXTENCODING_GBK, false },
+ { "windows-936", RTL_TEXTENCODING_GBK, false },
+
+ { "GB18030", RTL_TEXTENCODING_GB_18030, false },
+
+ { "TIS-620", RTL_TEXTENCODING_TIS_620, true },
+ { "ISO-8859-11", RTL_TEXTENCODING_TIS_620, false }, // not registered
+
+ { "CP874", RTL_TEXTENCODING_MS_874, false }, // not registered
+ { "MS874", RTL_TEXTENCODING_MS_874, false }, // not registered
+ { "windows-874", RTL_TEXTENCODING_MS_874, true }, // not registered
+
+ { "ISO_8859-8:1988", RTL_TEXTENCODING_ISO_8859_8, false },
+ { "iso-ir-138", RTL_TEXTENCODING_ISO_8859_8, false },
+ { "ISO_8859-8", RTL_TEXTENCODING_ISO_8859_8, false },
+ { "ISO-8859-8", RTL_TEXTENCODING_ISO_8859_8, true },
+ { "hebrew", RTL_TEXTENCODING_ISO_8859_8, false },
+ { "csISOLatinHebrew", RTL_TEXTENCODING_ISO_8859_8, false },
+
+ { "windows-1255", RTL_TEXTENCODING_MS_1255, true },
+
+ { "IBM862", RTL_TEXTENCODING_IBM_862, true },
+ { "cp862", RTL_TEXTENCODING_IBM_862, false },
+ { "862", RTL_TEXTENCODING_IBM_862, false },
+ { "csPC862LatinHebrew", RTL_TEXTENCODING_IBM_862, false },
+
+ { "ISO_8859-6:1987", RTL_TEXTENCODING_ISO_8859_6, false },
+ { "iso-ir-127", RTL_TEXTENCODING_ISO_8859_6, false },
+ { "ISO_8859-6", RTL_TEXTENCODING_ISO_8859_6, false },
+ { "ISO-8859-6", RTL_TEXTENCODING_ISO_8859_6, true },
+ { "ECMA-114", RTL_TEXTENCODING_ISO_8859_6, false },
+ { "ASMO-708", RTL_TEXTENCODING_ISO_8859_6, false },
+ { "arabic", RTL_TEXTENCODING_ISO_8859_6, false },
+ { "csISOLatinArabic", RTL_TEXTENCODING_ISO_8859_6, false },
+
+ { "windows-1256", RTL_TEXTENCODING_MS_1256, true },
+
+ { "IBM864", RTL_TEXTENCODING_IBM_864, true },
+ { "cp864", RTL_TEXTENCODING_IBM_864, false },
+ { "csIBM864", RTL_TEXTENCODING_IBM_864, false },
+
+ { "KOI8-R", RTL_TEXTENCODING_KOI8_R, false },
+ { "csKOI8R", RTL_TEXTENCODING_KOI8_R, false },
+ { "koi8-r", RTL_TEXTENCODING_KOI8_R, true },
+
+ { "KOI8-U", RTL_TEXTENCODING_KOI8_U, true },
+
+ { "IBM860", RTL_TEXTENCODING_IBM_860, true },
+ { "cp860", RTL_TEXTENCODING_IBM_860, false },
+ { "860", RTL_TEXTENCODING_IBM_860, false },
+ { "csIBM860", RTL_TEXTENCODING_IBM_860, false },
+
+ { "IBM861", RTL_TEXTENCODING_IBM_861, true },
+ { "cp861", RTL_TEXTENCODING_IBM_861, false },
+ { "861", RTL_TEXTENCODING_IBM_861, false },
+ { "cp-is", RTL_TEXTENCODING_IBM_861, false },
+ { "csIBM861", RTL_TEXTENCODING_IBM_861, false },
+
+ { "IBM863", RTL_TEXTENCODING_IBM_863, true },
+ { "cp863", RTL_TEXTENCODING_IBM_863, false },
+ { "863", RTL_TEXTENCODING_IBM_863, false },
+ { "csIBM863", RTL_TEXTENCODING_IBM_863, false },
+
+ { "IBM865", RTL_TEXTENCODING_IBM_865, true },
+ { "cp865", RTL_TEXTENCODING_IBM_865, false },
+ { "865", RTL_TEXTENCODING_IBM_865, false },
+ { "csIBM865", RTL_TEXTENCODING_IBM_865, false },
+
+ { "Latin-9", RTL_TEXTENCODING_ISO_8859_15, false },
+
+ { "KS_C_5601-1987", RTL_TEXTENCODING_MS_949, false },
+ { "iso-ir-149", RTL_TEXTENCODING_MS_949, false },
+ { "KS_C_5601-1989", RTL_TEXTENCODING_MS_949, false },
+ { "KSC_5601", RTL_TEXTENCODING_MS_949, false },
+ { "korean", RTL_TEXTENCODING_MS_949, false },
+ { "csKSC56011987", RTL_TEXTENCODING_MS_949, false },
+ { nullptr, RTL_TEXTENCODING_MS_949, true },
+
+ { "Adobe-Standard-Encoding", RTL_TEXTENCODING_ADOBE_STANDARD, false },
+ { "csAdobeStandardEncoding", RTL_TEXTENCODING_ADOBE_STANDARD, false },
+ { "Adobe-Symbol-Encoding", RTL_TEXTENCODING_ADOBE_SYMBOL, false },
+ { "csHPPSMath", RTL_TEXTENCODING_ADOBE_SYMBOL, false },
+
+ { "PTCP154", RTL_TEXTENCODING_PT154, true },
+ { "csPTCP154", RTL_TEXTENCODING_PT154, false },
+ { "PT154", RTL_TEXTENCODING_PT154, false },
+ { "CP154", RTL_TEXTENCODING_PT154, false },
+ { "Cyrillic-Asian", RTL_TEXTENCODING_PT154, false }
+ };
+ for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
+ if (data[i].mime == nullptr) {
+ OSL_ASSERT(data[i].reverse);
+ CPPUNIT_ASSERT_EQUAL(
+ static_cast< char const * >(nullptr),
+ rtl_getMimeCharsetFromTextEncoding(data[i].encoding));
+ } else {
+ CPPUNIT_ASSERT_EQUAL(
+ data[i].encoding,
+ rtl_getTextEncodingFromMimeCharset(data[i].mime));
+ if (data[i].reverse) {
+ CPPUNIT_ASSERT_EQUAL(
+ OString(data[i].mime),
+ OString(
+ rtl_getMimeCharsetFromTextEncoding(data[i].encoding)));
+ }
+ }
+ }
+}
+
+void Test::testWindows() {
+ struct Data {
+ sal_uInt32 codePage;
+ rtl_TextEncoding encoding;
+ bool reverse;
+ };
+ static Data const data[] = {
+ { 42, RTL_TEXTENCODING_SYMBOL, true },
+ { 437, RTL_TEXTENCODING_IBM_437, true },
+ { 708, RTL_TEXTENCODING_ISO_8859_6, false },
+ { 737, RTL_TEXTENCODING_IBM_737, true },
+ { 775, RTL_TEXTENCODING_IBM_775, true },
+ { 850, RTL_TEXTENCODING_IBM_850, true },
+ { 852, RTL_TEXTENCODING_IBM_852, true },
+ { 855, RTL_TEXTENCODING_IBM_855, true },
+ { 857, RTL_TEXTENCODING_IBM_857, true },
+ { 860, RTL_TEXTENCODING_IBM_860, true },
+ { 861, RTL_TEXTENCODING_IBM_861, true },
+ { 862, RTL_TEXTENCODING_IBM_862, true },
+ { 863, RTL_TEXTENCODING_IBM_863, true },
+ { 864, RTL_TEXTENCODING_IBM_864, true },
+ { 865, RTL_TEXTENCODING_IBM_865, true },
+ { 866, RTL_TEXTENCODING_IBM_866, true },
+ { 869, RTL_TEXTENCODING_IBM_869, true },
+ { 874, RTL_TEXTENCODING_MS_874, true },
+ { 932, RTL_TEXTENCODING_MS_932, true },
+ { 936, RTL_TEXTENCODING_MS_936, true },
+ { 949, RTL_TEXTENCODING_MS_949, true },
+ { 950, RTL_TEXTENCODING_MS_950, true },
+ { 1250, RTL_TEXTENCODING_MS_1250, true },
+ { 1251, RTL_TEXTENCODING_MS_1251, true },
+ { 1252, RTL_TEXTENCODING_MS_1252, true },
+ { 1253, RTL_TEXTENCODING_MS_1253, true },
+ { 1254, RTL_TEXTENCODING_MS_1254, true },
+ { 1255, RTL_TEXTENCODING_MS_1255, true },
+ { 1256, RTL_TEXTENCODING_MS_1256, true },
+ { 1257, RTL_TEXTENCODING_MS_1257, true },
+ { 1258, RTL_TEXTENCODING_MS_1258, true },
+ { 1361, RTL_TEXTENCODING_MS_1361, true },
+ { 10000, RTL_TEXTENCODING_APPLE_ROMAN, true },
+ { 10001, RTL_TEXTENCODING_APPLE_JAPANESE, true },
+ { 10002, RTL_TEXTENCODING_APPLE_CHINTRAD, true },
+ { 10003, RTL_TEXTENCODING_APPLE_KOREAN, true },
+ { 10004, RTL_TEXTENCODING_APPLE_ARABIC, true },
+ { 10005, RTL_TEXTENCODING_APPLE_HEBREW, true },
+ { 10006, RTL_TEXTENCODING_APPLE_GREEK, true },
+ { 10007, RTL_TEXTENCODING_APPLE_CYRILLIC, true },
+ { 10008, RTL_TEXTENCODING_APPLE_CHINSIMP, true },
+ { 10010, RTL_TEXTENCODING_APPLE_ROMANIAN, true },
+ { 10017, RTL_TEXTENCODING_APPLE_UKRAINIAN, true },
+ { 10029, RTL_TEXTENCODING_APPLE_CENTEURO, true },
+ { 10079, RTL_TEXTENCODING_APPLE_ICELAND, true },
+ { 10081, RTL_TEXTENCODING_APPLE_TURKISH, true },
+ { 10082, RTL_TEXTENCODING_APPLE_CROATIAN, true },
+ { 20127, RTL_TEXTENCODING_ASCII_US, true },
+ { 20866, RTL_TEXTENCODING_KOI8_R, true },
+ { 21866, RTL_TEXTENCODING_KOI8_U, true },
+ { 28591, RTL_TEXTENCODING_ISO_8859_1, true },
+ { 28592, RTL_TEXTENCODING_ISO_8859_2, true },
+ { 28593, RTL_TEXTENCODING_ISO_8859_3, true },
+ { 28594, RTL_TEXTENCODING_ISO_8859_4, true },
+ { 28595, RTL_TEXTENCODING_ISO_8859_5, true },
+ { 28596, RTL_TEXTENCODING_ISO_8859_6, true },
+ { 28597, RTL_TEXTENCODING_ISO_8859_7, true },
+ { 28598, RTL_TEXTENCODING_ISO_8859_8, true },
+ { 28599, RTL_TEXTENCODING_ISO_8859_9, true },
+ { 28605, RTL_TEXTENCODING_ISO_8859_15, true },
+ { 50220, RTL_TEXTENCODING_ISO_2022_JP, true },
+ { 50225, RTL_TEXTENCODING_ISO_2022_KR, true },
+ { 51932, RTL_TEXTENCODING_EUC_JP, true },
+ { 51936, RTL_TEXTENCODING_EUC_CN, true },
+ { 51949, RTL_TEXTENCODING_EUC_KR, true },
+ { 65000, RTL_TEXTENCODING_UTF7, true },
+ { 65001, RTL_TEXTENCODING_UTF8, true },
+ { 1200, RTL_TEXTENCODING_DONTKNOW, false }, // UTF_16LE
+ { 1201, RTL_TEXTENCODING_DONTKNOW, false }, // UTF_16LE
+ { 0, RTL_TEXTENCODING_DONTKNOW, true },
+ { 0, RTL_TEXTENCODING_UCS4, true },
+ { 0, RTL_TEXTENCODING_UCS2, true },
+ { 57002, RTL_TEXTENCODING_ISCII_DEVANAGARI, true }
+ };
+ for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
+ OSL_ASSERT(data[i].codePage != 0 || data[i].reverse);
+ if (data[i].codePage != 0) {
+ CPPUNIT_ASSERT_EQUAL(
+ data[i].encoding,
+ rtl_getTextEncodingFromWindowsCodePage(data[i].codePage));
+ }
+ if (data[i].reverse) {
+ CPPUNIT_ASSERT_EQUAL(
+ data[i].codePage,
+ rtl_getWindowsCodePageFromTextEncoding(data[i].encoding));
+ }
+ }
+}
+
+void Test::testInfo() {
+ struct Data {
+ rtl_TextEncoding encoding;
+ sal_uInt32 flag;
+ bool value;
+ };
+ static Data const data[] = {
+#if WITH_LOCALE_ALL || WITH_LOCALE_ja
+ { RTL_TEXTENCODING_APPLE_JAPANESE, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_EUC_JP, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_INFO_CONTEXT, true },
+ { RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_SHIFT_JIS, RTL_TEXTENCODING_INFO_ASCII, false },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_ko
+ { RTL_TEXTENCODING_APPLE_KOREAN, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_EUC_KR, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_INFO_CONTEXT, true },
+ { RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_INFO_ASCII, false },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ { RTL_TEXTENCODING_APPLE_CHINTRAD, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_BIG5, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_BIG5_HKSCS, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_EUC_CN, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_EUC_TW, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_GBK, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_INFO_UNICODE, true },
+ { RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_INFO_CONTEXT, true },
+ { RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_INFO_ASCII, false },
+#endif
+#if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva
+ { RTL_TEXTENCODING_ISCII_DEVANAGARI, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_ISCII_DEVANAGARI, RTL_TEXTENCODING_INFO_MIME, false },
+#endif
+ { RTL_TEXTENCODING_MS_1361, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_MS_874, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_MS_932, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_MS_936, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_MS_949, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_MS_950, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_IBM_860, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_IBM_861, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_IBM_863, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_IBM_865, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_ADOBE_STANDARD, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_ADOBE_STANDARD, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_ADOBE_STANDARD, RTL_TEXTENCODING_INFO_SYMBOL, false },
+ { RTL_TEXTENCODING_ADOBE_SYMBOL, RTL_TEXTENCODING_INFO_ASCII, false },
+ { RTL_TEXTENCODING_ADOBE_SYMBOL, RTL_TEXTENCODING_INFO_MIME, true },
+ { RTL_TEXTENCODING_ADOBE_SYMBOL, RTL_TEXTENCODING_INFO_SYMBOL, true },
+ { RTL_TEXTENCODING_PT154, RTL_TEXTENCODING_INFO_ASCII, true },
+ { RTL_TEXTENCODING_PT154, RTL_TEXTENCODING_INFO_MIME, true }
+ };
+ for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
+ rtl_TextEncodingInfo info;
+ info.StructSize = sizeof info;
+ CPPUNIT_ASSERT(rtl_getTextEncodingInfo(data[i].encoding, &info));
+ CPPUNIT_ASSERT_EQUAL(data[i].value, ((info.Flags & data[i].flag) != 0));
+ }
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/uri/rtl_Uri.cxx b/sal/qa/rtl/uri/rtl_Uri.cxx
new file mode 100644
index 000000000..81ec98345
--- /dev/null
+++ b/sal/qa/rtl/uri/rtl_Uri.cxx
@@ -0,0 +1,80 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <stdlib.h>
+#include <rtl/strbuf.hxx>
+#include <rtl/uri.hxx>
+#include <osl/thread.h>
+#include <osl/file.hxx>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+namespace Stringtest
+{
+
+ class Convert : public CppUnit::TestFixture
+ {
+ public:
+ OString convertToOString(OUString const& _suStr)
+ {
+ return OUStringToOString(_suStr, osl_getThreadTextEncoding()/*RTL_TEXTENCODING_ASCII_US*/);
+ }
+
+ void showContent(OUString const& _suStr)
+ {
+ OString sStr = convertToOString(_suStr);
+ printf("%s\n", sStr.getStr());
+ }
+
+ void test_FromUTF8_001()
+ {
+ // string --> ustring
+ OString sStrUTF8("h%C3%A4llo");
+ OUString suStrUTF8 = OStringToOUString(sStrUTF8, RTL_TEXTENCODING_ASCII_US);
+
+ // UTF8 --> real ustring
+ OUString suStr_UriDecodeToIuri = rtl::Uri::decode(suStrUTF8, rtl_UriDecodeToIuri, RTL_TEXTENCODING_UTF8);
+ showContent(suStr_UriDecodeToIuri);
+
+ // string --> ustring
+ OString sStr("h\xE4llo", strlen("h\xE4llo"));
+ OUString suString = OStringToOUString(sStr, RTL_TEXTENCODING_ISO_8859_15);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Strings must be equal", suString, suStr_UriDecodeToIuri);
+
+ // ustring --> ustring (UTF8)
+ OUString suStr2 = rtl::Uri::encode(suStr_UriDecodeToIuri, rtl_UriCharClassUnoParamValue, rtl_UriEncodeKeepEscapes, RTL_TEXTENCODING_UTF8);
+ showContent(suStr2);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Strings must be equal", suStr2, suStrUTF8);
+ // suStr should be equal to suStr2
+ }
+
+ CPPUNIT_TEST_SUITE( Convert );
+ CPPUNIT_TEST( test_FromUTF8_001 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION( Stringtest::Convert );
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/uri/rtl_testuri.cxx b/sal/qa/rtl/uri/rtl_testuri.cxx
new file mode 100644
index 000000000..fc7e1d30a
--- /dev/null
+++ b/sal/qa/rtl/uri/rtl_testuri.cxx
@@ -0,0 +1,514 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <config_locales.h>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/uri.hxx>
+#include <rtl/ustrbuf.hxx>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <cstddef>
+#include <stdio.h>
+
+namespace {
+
+struct Test: public CppUnit::TestFixture {
+ void test_Uri();
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(test_Uri);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void Test::test_Uri() {
+ rtl_UriCharClass const eFirstCharClass = rtl_UriCharClassNone;
+ rtl_UriCharClass const eLastCharClass = rtl_UriCharClassUnoParamValue;
+
+ OUString aText1;
+ OUString aText2;
+
+ // Check that all characters map back to themselves when encoded/decoded:
+
+ aText1 = OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "\x00\x01\x02\x03\x04\x05\x06\x07"
+ "\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"
+ "\x10\x11\x12\x13\x14\x15\x16\x17"
+ "\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"
+ "\x20\x21\x22\x23\x24\x25\x26\x27"
+ "\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F"
+ "\x30\x31\x32\x33\x34\x35\x36\x37"
+ "\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F"
+ "\x40\x41\x42\x43\x44\x45\x46\x47"
+ "\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F"
+ "\x50\x51\x52\x53\x54\x55\x56\x57"
+ "\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F"
+ "\x60\x61\x62\x63\x64\x65\x66\x67"
+ "\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F"
+ "\x70\x71\x72\x73\x74\x75\x76\x77"
+ "\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F"));
+ aText2 = aText1;
+ for (rtl_UriCharClass eCharClass = eFirstCharClass;
+ eCharClass <= eLastCharClass;
+ eCharClass = static_cast< rtl_UriCharClass >(eCharClass + 1))
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 1",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeKeepEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ASCII_US));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 2",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ASCII_US));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 3",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeKeepEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 4",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 5",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeKeepEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 6",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8));
+ }
+
+ aText1 = OUString(
+ ("\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"
+ "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"
+ "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F"
+ "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F"
+ "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F"
+ "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F"
+ "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F"
+ "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F"
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F"
+ "\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF"
+ "\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF"
+ "\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF"
+ "\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF"
+ "\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF"
+ "\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"),
+ 256, RTL_TEXTENCODING_ISO_8859_1);
+ aText2 = aText1;
+ for (rtl_UriCharClass eCharClass = eFirstCharClass;
+ eCharClass <= eLastCharClass;
+ eCharClass = static_cast< rtl_UriCharClass >(eCharClass + 1))
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 7",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeKeepEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 8",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_ISO_8859_1),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 9",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeKeepEscapes,
+ RTL_TEXTENCODING_UTF8),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 10",
+ aText2,
+ rtl::Uri::decode(
+ rtl::Uri::encode(
+ aText1, eCharClass, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_UTF8),
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8));
+ }
+
+ // Check surrogate handling:
+
+ aText1 = u"\xD800" // %ED%A0%80
+ u"\U000103FF" // 0xD800,0xDFFF -> %F0%90%8F%BF
+ u"\xDFFF" // %ED%BF%BF
+ u"A"; // A
+ aText2 = "%ED%A0%80" "%F0%90%8F%BF" "%ED%BF%BF" "A";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 11",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_UTF8));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 12",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeKeepEscapes,
+ RTL_TEXTENCODING_UTF8));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 13",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_UTF8));
+
+ aText1 = "%ed%a0%80" "%f0%90%8f%bf" "%ed%bf%bf" "A";
+ aText2 = u"%ED%A0%80" u"\U000103FF" u"%ED%BF%BF" u"A";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 14",
+ aText2,
+ rtl::Uri::decode(aText1, rtl_UriDecodeToIuri, RTL_TEXTENCODING_UTF8));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 15",
+ aText2,
+ rtl::Uri::decode(
+ aText1, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8));
+
+ // Check UTF-8 handling:
+
+ aText1 = "%E0%83%BF";
+ // \U+00FF encoded with three instead of two bytes
+ aText2 = aText1;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 16",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_UTF8));
+
+ aText1 = "%EF%BF%BF";
+ // \U+FFFF is no legal character
+ aText2 = aText1;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 17",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_UTF8));
+
+ // Check IURI handling:
+
+ aText1 = "%30%C3%BF";
+ aText2 = u"%30\u00FF";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 18",
+ aText2,
+ rtl::Uri::decode(aText1, rtl_UriDecodeToIuri, RTL_TEXTENCODING_UTF8));
+
+ // Check modified rtl_UriCharClassUnoParamValue (removed '[' and ']'):
+
+ aText1 = "[]%5B%5D";
+ aText2 = "%5B%5D%5B%5D";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 19",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUnoParamValue, rtl_UriEncodeCheckEscapes,
+ RTL_TEXTENCODING_ASCII_US));
+
+ // Check Uri::convertRelToAbs:
+
+ struct RelToAbsTest
+ {
+ char const * pBase;
+ char const * pRel;
+ char const * pAbs;
+ };
+ static RelToAbsTest const aRelToAbsTest[]
+ = { // The following tests are taken from RFC 3986:
+ { "http://a/b/c/d;p?q", "g:h", "g:h" },
+ { "http://a/b/c/d;p?q", "g", "http://a/b/c/g" },
+ { "http://a/b/c/d;p?q", "./g", "http://a/b/c/g" },
+ { "http://a/b/c/d;p?q", "g/", "http://a/b/c/g/" },
+ { "http://a/b/c/d;p?q", "/g", "http://a/g" },
+ { "http://a/b/c/d;p?q", "//g", "http://g" },
+ { "http://a/b/c/d;p?q", "?y", "http://a/b/c/d;p?y" },
+ { "http://a/b/c/d;p?q", "g?y", "http://a/b/c/g?y" },
+ { "http://a/b/c/d;p?q", "#s", "http://a/b/c/d;p?q#s" },
+ { "http://a/b/c/d;p?q", "g#s", "http://a/b/c/g#s" },
+ { "http://a/b/c/d;p?q", "g?y#s", "http://a/b/c/g?y#s" },
+ { "http://a/b/c/d;p?q", ";x", "http://a/b/c/;x" },
+ { "http://a/b/c/d;p?q", "g;x", "http://a/b/c/g;x" },
+ { "http://a/b/c/d;p?q", "g;x?y#s", "http://a/b/c/g;x?y#s" },
+ { "http://a/b/c/d;p?q", "", "http://a/b/c/d;p?q" },
+ { "http://a/b/c/d;p?q", ".", "http://a/b/c/" },
+ { "http://a/b/c/d;p?q", "./", "http://a/b/c/" },
+ { "http://a/b/c/d;p?q", "..", "http://a/b/" },
+ { "http://a/b/c/d;p?q", "../", "http://a/b/" },
+ { "http://a/b/c/d;p?q", "../g", "http://a/b/g" },
+ { "http://a/b/c/d;p?q", "../..", "http://a/" },
+ { "http://a/b/c/d;p?q", "../../", "http://a/" },
+ { "http://a/b/c/d;p?q", "../../g", "http://a/g" },
+ { "http://a/b/c/d;p?q", "../../../g", "http://a/g" },
+ { "http://a/b/c/d;p?q", "../../../../g", "http://a/g" },
+ { "http://a/b/c/d;p?q", "/./g", "http://a/g" },
+ { "http://a/b/c/d;p?q", "/../g", "http://a/g" },
+ { "http://a/b/c/d;p?q", "g.", "http://a/b/c/g." },
+ { "http://a/b/c/d;p?q", ".g", "http://a/b/c/.g" },
+ { "http://a/b/c/d;p?q", "g..", "http://a/b/c/g.." },
+ { "http://a/b/c/d;p?q", "..g", "http://a/b/c/..g" },
+ { "http://a/b/c/d;p?q", "./../g", "http://a/b/g" },
+ { "http://a/b/c/d;p?q", "./g/.", "http://a/b/c/g/" },
+ { "http://a/b/c/d;p?q", "g/./h", "http://a/b/c/g/h" },
+ { "http://a/b/c/d;p?q", "g/../h", "http://a/b/c/h" },
+ { "http://a/b/c/d;p?q", "g;x=1/./y", "http://a/b/c/g;x=1/y" },
+ { "http://a/b/c/d;p?q", "g;x=1/../y", "http://a/b/c/y" },
+ { "http://a/b/c/d;p?q", "g?y/./x", "http://a/b/c/g?y/./x" },
+ { "http://a/b/c/d;p?q", "g?y/../x", "http://a/b/c/g?y/../x" },
+ { "http://a/b/c/d;p?q", "g#s/./x", "http://a/b/c/g#s/./x" },
+ { "http://a/b/c/d;p?q", "g#s/../x", "http://a/b/c/g#s/../x" },
+ { "http://a/b/c/d;p?q", "http:g", "http:g" },
+
+ { "http!://a/b/c/d;p?q", "g:h", "g:h" },
+ { "http!://a/b/c/d;p?q", "g", nullptr },
+ { "http:b/c/d;p?q", "g:h", "g:h" },
+ { "http:b/c/d;p?q", "g", "http:b/c/g" },
+ { "http://a/b/../", "../c", "http://a/c" },
+ { "http://a/b/..", "../c", "http://a/c" },
+ { "http://a/./b/", ".././.././../c", "http://a/c" },
+ { "http://a", "b", "http://a/b" },
+ { "", "http://a/b/../c", "http://a/c" },
+
+ { "http://a/b/c", "d", "http://a/b/d" },
+ { "http://a/b/c/", "d", "http://a/b/c/d" },
+ { "http://a/b/c//", "d", "http://a/b/c//d" } };
+
+ for (std::size_t i = 0; i < SAL_N_ELEMENTS(aRelToAbsTest); ++i)
+ {
+ OUString aAbs;
+ bool bMalformed = false;
+ try {
+ aAbs = rtl::Uri::convertRelToAbs(
+ OUString::createFromAscii(aRelToAbsTest[i].pBase),
+ OUString::createFromAscii(aRelToAbsTest[i].pRel));
+ } catch (const rtl::MalformedUriException &) {
+ bMalformed = true;
+ }
+ if (bMalformed
+ ? aRelToAbsTest[i].pAbs != nullptr
+ : (aRelToAbsTest[i].pAbs == nullptr
+ || !aAbs.equalsAscii(aRelToAbsTest[i].pAbs)))
+ {
+ printf(
+ "FAILED convertRelToAbs(%s, %s) -> %s != %s\n",
+ aRelToAbsTest[i].pBase, aRelToAbsTest[i].pRel,
+ (bMalformed
+ ? "<MALFORMED>"
+ : OUStringToOString(
+ aAbs, RTL_TEXTENCODING_UTF8).getStr()),
+ (aRelToAbsTest[i].pAbs == nullptr
+ ? "<MALFORMED>" : aRelToAbsTest[i].pAbs));
+ CPPUNIT_ASSERT(false);
+ }
+ }
+
+ // Check encode with unusual text encodings:
+
+ {
+ sal_Unicode const aText1U[] = { ' ', '!', 0x0401, 0x045F, 0 };
+ aText1 = OUString(aText1U);
+ aText2 = "%20!%A1%FF";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 20",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_ISO_8859_5));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 20a",
+ aText1,
+ rtl::Uri::decode(
+ aText2, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_5));
+ }
+ {
+ sal_Unicode const aText1U[] = { ' ', '!', 0x0401, 0x0700, 0x045F, 0 };
+ aText1 = OUString(aText1U);
+ sal_Unicode const aText2U[] = {
+ '%', '2', '0', '!', '%', 'A', '1', 0x0700, '%', 'F', 'F', 0 };
+ aText2 = OUString(aText2U);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 21",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_ISO_8859_5));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 21a",
+ aText1,
+ rtl::Uri::decode(
+ aText2, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_5));
+ }
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ {
+ sal_Unicode const aText1U[] = { ' ', '!', 0x028A, 0xD849, 0xDD13, 0 };
+ aText1 = OUString(aText1U);
+ aText2 = "%20!%81%30%B1%33%95%39%C5%37";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 22",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_GB_18030));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 22a",
+ aText1,
+ rtl::Uri::decode(
+ aText2, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_GB_18030));
+ }
+#endif
+ // Check strict mode:
+
+ {
+ sal_Unicode const aText1U[] = { ' ', '!', 0x0401, 0x0700, 0x045F, 0 };
+ aText1 = OUString(aText1U);
+ aText2 = OUString();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 23",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeStrict,
+ RTL_TEXTENCODING_ISO_8859_5));
+ }
+ {
+ aText1 = "%20%C4%80%FF";
+ aText2 = OUString();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 24",
+ aText2,
+ rtl::Uri::decode(
+ aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_UTF8));
+ }
+#if WITH_LOCALE_ALL || WITH_LOCALE_zh
+ {
+ aText1 = "%81 ";
+ aText2 = OUString();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 25",
+ aText2,
+ rtl::Uri::decode(
+ aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030));
+ }
+ {
+ aText1 = "%81%20";
+ aText2 = OUString();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 26",
+ aText2,
+ rtl::Uri::decode(
+ aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030));
+ }
+ {
+ aText1 = "%81%30%B1%33";
+ sal_Unicode const aText2U[] = { 0x028A, 0 };
+ aText2 = OUString(aText2U);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 27",
+ aText2,
+ rtl::Uri::decode(
+ aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030));
+ }
+ {
+ aText1 = "%810%B13";
+ sal_Unicode const aText2U[] = { 0x028A, 0 };
+ aText2 = OUString(aText2U);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 28",
+ aText2,
+ rtl::Uri::decode(
+ aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030));
+ }
+#endif
+ // Check rtl_UriEncodeStrictKeepEscapes mode:
+
+ {
+ aText1 = "%%ea%c3%aa";
+ aText2 = "%25%EA%C3%AA";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 29",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeStrictKeepEscapes,
+ RTL_TEXTENCODING_UTF8));
+ }
+ {
+ sal_Unicode const aText1U[] = { 0x00EA, 0 };
+ aText1 = OUString(aText1U);
+ aText2 = "%C3%AA";
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 30",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeStrictKeepEscapes,
+ RTL_TEXTENCODING_UTF8));
+ }
+ {
+ sal_Unicode const aText1U[] = { ' ', '!', 0x0401, 0x0700, 0x045F, 0 };
+ aText1 = OUString(aText1U);
+ aText2 = OUString();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "failure 23",
+ aText2,
+ rtl::Uri::encode(
+ aText1, rtl_UriCharClassUric, rtl_UriEncodeStrictKeepEscapes,
+ RTL_TEXTENCODING_ISO_8859_5));
+ }
+}
+
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/rtl/uuid/rtl_Uuid.cxx b/sal/qa/rtl/uuid/rtl_Uuid.cxx
new file mode 100644
index 000000000..b77e84afe
--- /dev/null
+++ b/sal/qa/rtl/uuid/rtl_Uuid.cxx
@@ -0,0 +1,157 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <rtl/uuid.h>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#ifdef _WIN32
+#if !defined WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#elif defined UNX
+#include <unistd.h>
+#include <time.h>
+#endif
+
+
+namespace rtl_Uuid
+{
+class createUuid : public CppUnit::TestFixture
+{
+public:
+#define TEST_UUID 20
+ void createUuid_001()
+ {
+ sal_uInt8 aNode[TEST_UUID][16];
+ sal_Int32 i,i2;
+ for( i = 0 ; i < TEST_UUID ; i ++ )
+ {
+ rtl_createUuid( aNode[i], nullptr, false );
+ }
+ bool bRes = true;
+ for( i = 0 ; i < TEST_UUID ; i ++ )
+ {
+ for( i2 = i+1 ; i2 < TEST_UUID ; i2 ++ )
+ {
+ if ( rtl_compareUuid( aNode[i] , aNode[i2] ) == 0 )
+ {
+ bRes = false;
+ break;
+ }
+ }
+ if ( !bRes )
+ break;
+ }
+ CPPUNIT_ASSERT_MESSAGE("createUuid: every uuid must be different.", bRes);
+ }
+ /*
+ void createUuid_002()
+ {
+ sal_uInt8 pNode[16];
+ sal_uInt8 aNode[TEST_UUID][16];
+ sal_Int32 i,i2;
+ for( i = 0 ; i < TEST_UUID ; i ++ )
+ {
+ rtl_createUuid( aNode[i], pNode, sal_True );
+ }
+ sal_Bool bRes = sal_True;
+ for( i = 0 ; i < TEST_UUID ; i ++ )
+ {
+ //printUuid( aNode[i] );
+ for( i2 = i+1 ; i2 < TEST_UUID ; i2 ++ )
+ {
+ if ( rtl_compareUuid( aNode[i] , aNode[i2] ) == 0 )
+ {
+ bRes = sal_False;
+ break;
+ }
+ }
+ if ( bRes == sal_False )
+ break;
+ }
+ CPPUNIT_ASSERT_MESSAGE("createUuid: every uuid must be different.", bRes == sal_True );
+ }*/
+
+ CPPUNIT_TEST_SUITE(createUuid);
+ CPPUNIT_TEST(createUuid_001);
+ //CPPUNIT_TEST(createUuid_002);
+ CPPUNIT_TEST_SUITE_END();
+}; // class createUuid
+
+class createNamedUuid : public CppUnit::TestFixture
+{
+public:
+ void createNamedUuid_001()
+ {
+ sal_uInt8 NameSpace_DNS[16] = RTL_UUID_NAMESPACE_DNS;
+ sal_uInt8 NameSpace_URL[16] = RTL_UUID_NAMESPACE_URL;
+ sal_uInt8 pPriorCalculatedUUID[16] = {
+ 0x52,0xc9,0x30,0xa5,
+ 0xd1,0x61,0x3b,0x16,
+ 0x98,0xc5,0xf8,0xd1,
+ 0x10,0x10,0x6d,0x4d };
+
+ sal_uInt8 pNamedUUID[16], pNamedUUID2[16];
+
+ // Same name does generate the same uuid
+ rtl_String *pName = nullptr;
+ rtl_string_newFromStr( &pName , "this is a bla.blubs.DNS-Name" );
+ rtl_createNamedUuid( pNamedUUID , NameSpace_DNS , pName );
+ rtl_createNamedUuid( pNamedUUID2 , NameSpace_DNS , pName );
+ CPPUNIT_ASSERT_MESSAGE( "Same name should generate the same uuid", ! memcmp( pNamedUUID , pNamedUUID2 , 16 ) && rtl_compareUuid( pNamedUUID , pNamedUUID2 ) == 0 );
+ CPPUNIT_ASSERT_MESSAGE( "Same name should generate the same uuid", ! memcmp( pNamedUUID , pPriorCalculatedUUID , 16 ) );
+
+ // Different names does not generate the same uuid
+ rtl_string_newFromStr( &pName , "this is a bla.blubs.DNS-Namf" );
+ rtl_createNamedUuid( pNamedUUID2 , NameSpace_DNS , pName );
+ CPPUNIT_ASSERT_MESSAGE("Different names does not generate the same uuid.", memcmp( pNamedUUID , pNamedUUID2 , 16 ) );
+
+ // the same name with different namespace uuid produces different uuids
+ rtl_createNamedUuid( pNamedUUID , NameSpace_URL , pName );
+ CPPUNIT_ASSERT_MESSAGE( " same name with different namespace uuid produces different uuids", memcmp( pNamedUUID , pNamedUUID2 , 16 ) && rtl_compareUuid( pNamedUUID , pNamedUUID2 ) != 0);
+
+ //test compareUuid
+ if ( rtl_compareUuid( pNamedUUID , pNamedUUID2 ) > 0 )
+ { CPPUNIT_ASSERT_MESSAGE( " compare uuids", rtl_compareUuid( pNamedUUID2 , pNamedUUID ) < 0);
+ }
+ else
+ CPPUNIT_ASSERT_MESSAGE( " compare uuids", rtl_compareUuid( pNamedUUID2 , pNamedUUID ) > 0);
+
+ rtl_string_release( pName );
+ }
+
+ CPPUNIT_TEST_SUITE(createNamedUuid);
+ CPPUNIT_TEST(createNamedUuid_001);
+ CPPUNIT_TEST_SUITE_END();
+}; // class createNamedUuid
+
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_Uuid::createUuid);
+CPPUNIT_TEST_SUITE_REGISTRATION(rtl_Uuid::createNamedUuid);
+} // namespace rtl_Uuid
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/sal/test_types.cxx b/sal/qa/sal/test_types.cxx
new file mode 100644
index 000000000..f863247b6
--- /dev/null
+++ b/sal/qa/sal/test_types.cxx
@@ -0,0 +1,74 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cstddef>
+#include <stdio.h>
+#include <string.h>
+
+#include <sal/types.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+namespace {
+
+template< typename T > void testPrintf(
+ char const * result, char const * format, T argument)
+{
+ std::size_t const bufsize = 1000;
+ char buf[bufsize];
+ int n = snprintf(buf, bufsize, format, argument);
+ CPPUNIT_ASSERT(n >= 0 && sal::static_int_cast< unsigned int >(n) < bufsize);
+ CPPUNIT_ASSERT_EQUAL(0, strcmp(buf, result));
+}
+
+class Test: public CppUnit::TestFixture {
+public:
+ void test();
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(test);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void Test::test() {
+ testPrintf("-2147483648", "%" SAL_PRIdINT32, SAL_MIN_INT32);
+ testPrintf("4294967295", "%" SAL_PRIuUINT32, SAL_MAX_UINT32);
+ testPrintf("ffffffff", "%" SAL_PRIxUINT32, SAL_MAX_UINT32);
+ testPrintf("FFFFFFFF", "%" SAL_PRIXUINT32, SAL_MAX_UINT32);
+ testPrintf("-9223372036854775808", "%" SAL_PRIdINT64, SAL_MIN_INT64);
+ testPrintf("18446744073709551615", "%" SAL_PRIuUINT64, SAL_MAX_UINT64);
+ testPrintf("ffffffffffffffff", "%" SAL_PRIxUINT64, SAL_MAX_UINT64);
+ testPrintf("FFFFFFFFFFFFFFFF", "%" SAL_PRIXUINT64, SAL_MAX_UINT64);
+ testPrintf("123", "%" SAL_PRI_SIZET "u", static_cast< std::size_t >(123));
+ testPrintf(
+ "-123", "%" SAL_PRI_PTRDIFFT "d", static_cast< std::ptrdiff_t >(-123));
+ testPrintf("-123", "%" SAL_PRIdINTPTR, static_cast< sal_IntPtr >(-123));
+ testPrintf("123", "%" SAL_PRIuUINTPTR, static_cast< sal_uIntPtr >(123));
+ testPrintf("abc", "%" SAL_PRIxUINTPTR, static_cast< sal_uIntPtr >(0xabc));
+ testPrintf("ABC", "%" SAL_PRIXUINTPTR, static_cast< sal_uIntPtr >(0xabc));
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Test);
+
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/qa/systools/test_comtools.cxx b/sal/qa/systools/test_comtools.cxx
new file mode 100644
index 000000000..694a4a665
--- /dev/null
+++ b/sal/qa/systools/test_comtools.cxx
@@ -0,0 +1,239 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <systools/win32/comtools.hxx>
+
+namespace {
+
+class COMObject : public IUnknown
+{
+public:
+ COMObject() : ref_count_(0)
+ {
+ }
+
+ virtual ~COMObject()
+ {
+ }
+
+ ULONG __stdcall AddRef() override
+ {
+ ref_count_++;
+ return ref_count_;
+ }
+
+ ULONG __stdcall Release() override
+ {
+ ULONG cnt = --ref_count_;
+ if (cnt == 0)
+ delete this;
+ return cnt;
+ }
+
+ HRESULT __stdcall QueryInterface(REFIID riid, void** ppv) override
+ {
+ if (riid == IID_IUnknown)
+ {
+ AddRef();
+ *ppv = this;
+ return S_OK;
+ }
+ return E_NOINTERFACE;
+ }
+
+ ULONG GetRefCount() const
+ {
+ return ref_count_;
+ }
+
+private:
+ ULONG ref_count_;
+};
+
+}
+
+static sal::systools::COMReference<IUnknown> comObjectSource()
+{
+ return sal::systools::COMReference<IUnknown>(new COMObject);
+}
+
+static bool comObjectSink(sal::systools::COMReference<IUnknown> r, ULONG expectedRefCountOnReturn)
+{
+ r = sal::systools::COMReference<IUnknown>();
+ COMObject* p = reinterpret_cast<COMObject*>(r.get());
+ if (p)
+ return (p->GetRefCount() == expectedRefCountOnReturn);
+ else
+ return (0 == expectedRefCountOnReturn);
+}
+
+static void comObjectSource2(LPVOID* ppv)
+{
+ COMObject* p = new COMObject;
+ p->AddRef();
+ *ppv = p;
+}
+
+namespace test_comtools
+{
+
+ class test_COMReference : public CppUnit::TestFixture
+ {
+
+ public:
+ /// test of COMReference<IUnknown> r;
+ void default_ctor()
+ {
+ sal::systools::COMReference<IUnknown> r;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("COMReference should be empty", static_cast<IUnknown *>(nullptr), r.get());
+ }
+
+ void test_ctor_manual_AddRef()
+ {
+ COMObject* p = new COMObject;
+ p->AddRef();
+ sal::systools::COMReference<IUnknown> r(p, false);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r.get())->GetRefCount());
+ }
+
+ void test_copy_ctor()
+ {
+ sal::systools::COMReference<IUnknown> r(comObjectSource());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r.get())->GetRefCount());
+ }
+
+ void test_copy_assignment()
+ {
+ sal::systools::COMReference<IUnknown> r;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("COMReference should be empty", static_cast<IUnknown *>(nullptr), r.get());
+
+ r = comObjectSource();
+ CPPUNIT_ASSERT_MESSAGE("COMReference should be empty", r.get() != nullptr);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r.get())->GetRefCount());
+ }
+
+ void test_ref_to_ref_assignment()
+ {
+ sal::systools::COMReference<IUnknown> r1 = comObjectSource();
+ sal::systools::COMReference<IUnknown> r2 = r1;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 2 is expected", ULONG(2), reinterpret_cast<COMObject*>(r2.get())->GetRefCount());
+ }
+
+ void test_pointer_to_ref_assignment()
+ {
+ sal::systools::COMReference<IUnknown> r;
+ r = new COMObject;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r.get())->GetRefCount());
+ }
+
+ void test_pointer_to_ref_assignment2()
+ {
+ sal::systools::COMReference<IUnknown> r = comObjectSource();
+ r = new COMObject;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r.get())->GetRefCount());
+ }
+
+ void test_source_sink()
+ {
+ CPPUNIT_ASSERT_MESSAGE("Wrong reference count, 0 is expected", comObjectSink(comObjectSource(), 0));
+ }
+
+ void test_address_operator()
+ {
+ sal::systools::COMReference<IUnknown> r;
+ comObjectSource2(reinterpret_cast<LPVOID*>(&r));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count, 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r.get())->GetRefCount());
+ }
+
+ void test_address_operator2()
+ {
+ sal::systools::COMReference<IUnknown> r1 = comObjectSource();
+ sal::systools::COMReference<IUnknown> r2 = r1;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 2 is expected", ULONG(2), reinterpret_cast<COMObject*>(r2.get())->GetRefCount());
+ comObjectSource2(reinterpret_cast<LPVOID*>(&r1));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r1.get())->GetRefCount());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r2.get())->GetRefCount());
+ }
+
+ void test_clear()
+ {
+ sal::systools::COMReference<IUnknown> r = comObjectSource();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast<COMObject*>(r.get())->GetRefCount());
+ r.clear();
+ CPPUNIT_ASSERT_MESSAGE("Expect reference to be empty", !r.is());
+ }
+
+ void test_query_interface()
+ {
+ try
+ {
+ sal::systools::COMReference<IUnknown> r1 = comObjectSource();
+ sal::systools::COMReference<IUnknown> r2 = r1.QueryInterface<IUnknown>(IID_IUnknown);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count, 2 is expected", ULONG(2), reinterpret_cast<COMObject*>(r2.get())->GetRefCount());
+ }
+ catch(const sal::systools::ComError&)
+ {
+ CPPUNIT_ASSERT_MESSAGE("Exception should not have been thrown", false);
+ }
+ }
+
+ void test_query_interface_throw()
+ {
+ try
+ {
+ sal::systools::COMReference<IUnknown> r1 = comObjectSource();
+ sal::systools::COMReference<IPersistFile> r2 = r1.QueryInterface<IPersistFile>(IID_IPersistFile);
+ }
+ catch(const sal::systools::ComError&)
+ {
+ return;
+ }
+ CPPUNIT_ASSERT_MESSAGE("Exception should have been thrown", false);
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(test_COMReference);
+ CPPUNIT_TEST(default_ctor);
+ CPPUNIT_TEST(test_ctor_manual_AddRef);
+ CPPUNIT_TEST(test_copy_ctor);
+ CPPUNIT_TEST(test_copy_assignment);
+ CPPUNIT_TEST(test_ref_to_ref_assignment);
+ CPPUNIT_TEST(test_pointer_to_ref_assignment);
+ CPPUNIT_TEST(test_pointer_to_ref_assignment2);
+ CPPUNIT_TEST(test_source_sink);
+ CPPUNIT_TEST(test_address_operator);
+ CPPUNIT_TEST(test_address_operator2);
+ CPPUNIT_TEST(test_clear);
+ CPPUNIT_TEST(test_query_interface);
+ CPPUNIT_TEST(test_query_interface_throw);
+ CPPUNIT_TEST_SUITE_END();
+ };
+
+CPPUNIT_TEST_SUITE_REGISTRATION(test_comtools::test_COMReference);
+
+} // namespace rtl_OUString
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */