forked from amazingfate/loongoffice
Regression introduced into LIBO_INTERNAL_ONLY code with 1da69081732c8a429840edaaf10cfb789ea68df8 "add string_view variants of methods to O[U]StringBuffer". And add some tests. Assigning an OStringChar to an OStringBuffer also uses the std::string_view assignment operator, so also test that with testOStringChar, even though there it is relatively likely that the OStringChar temporary is followed by null bytes, which could make the test happen to erroneously succeed. But at least tools like ASan or Valgrind could catch that. On the other hand, assigning an OUStringChar to an OUStringBuffer does not use the std::u16string_view assignment operator (and rather uses a ConstCharArrayDetector-based one, which was similarly broken and has been fixed in b66387574ef9c83cbfff622468496b6f0ac4d571 "Fix -Werror=array-bounds"), so there's no test for that here. Change-Id: I7cf10ee5ce0e4280a91d116cd82d4871a0f44af6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132363 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
93 lines
3.3 KiB
C++
93 lines
3.3 KiB
C++
/* -*- 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 <string_view>
|
|
|
|
#include <cppunit/TestFixture.h>
|
|
#include <cppunit/TestAssert.h>
|
|
#include <cppunit/extensions/HelperMacros.h>
|
|
|
|
#include <o3tl/cppunittraitshelper.hxx>
|
|
#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(u"1") + "23456789012345";
|
|
CPPUNIT_ASSERT_EQUAL(s1, b4.toString());
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b4.getCapacity());
|
|
b4 = OUStringLiteral(u"a") + "bc";
|
|
CPPUNIT_ASSERT_EQUAL(s2, b4.toString());
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b4.getCapacity());
|
|
b4 = OUStringLiteral(u"1") + "234567890123456";
|
|
CPPUNIT_ASSERT_EQUAL(s3, b4.toString());
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(32), b4.getCapacity());
|
|
b4 = OUStringChar('a');
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), b4.getLength());
|
|
CPPUNIT_ASSERT_EQUAL(u'a', b4.getStr()[0]);
|
|
CPPUNIT_ASSERT_EQUAL(u'\0', b4.getStr()[1]);
|
|
b4 = std::u16string_view(u"abc").substr(
|
|
0, 2); // avoid the string_view accidentally being NUL-terminated
|
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), b4.getLength());
|
|
CPPUNIT_ASSERT_EQUAL(u'a', b4.getStr()[0]);
|
|
CPPUNIT_ASSERT_EQUAL(u'b', b4.getStr()[1]);
|
|
CPPUNIT_ASSERT_EQUAL(u'\0', b4.getStr()[2]);
|
|
}
|
|
|
|
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: */
|