187d2adbcSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
387d2adbcSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
487d2adbcSAndrew Rist * or more contributor license agreements. See the NOTICE file
587d2adbcSAndrew Rist * distributed with this work for additional information
687d2adbcSAndrew Rist * regarding copyright ownership. The ASF licenses this file
787d2adbcSAndrew Rist * to you under the Apache License, Version 2.0 (the
887d2adbcSAndrew Rist * "License"); you may not use this file except in compliance
987d2adbcSAndrew Rist * with the License. You may obtain a copy of the License at
1087d2adbcSAndrew Rist *
1187d2adbcSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
1287d2adbcSAndrew Rist *
1387d2adbcSAndrew Rist * Unless required by applicable law or agreed to in writing,
1487d2adbcSAndrew Rist * software distributed under the License is distributed on an
1587d2adbcSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1687d2adbcSAndrew Rist * KIND, either express or implied. See the License for the
1787d2adbcSAndrew Rist * specific language governing permissions and limitations
1887d2adbcSAndrew Rist * under the License.
1987d2adbcSAndrew Rist *
2087d2adbcSAndrew Rist *************************************************************/
2187d2adbcSAndrew Rist
2287d2adbcSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sal.hxx"
26cdf0e10cSrcweir
27*fd5f88ecSDamjan Jovanovic #include "gtest/gtest.h"
28cdf0e10cSrcweir #include "rtl/ustrbuf.hxx"
29cdf0e10cSrcweir #include "rtl/ustring.h"
30cdf0e10cSrcweir #include "rtl/ustring.hxx"
31cdf0e10cSrcweir
32cdf0e10cSrcweir namespace {
33cdf0e10cSrcweir
appendString(rtl::OUStringBuffer & buffer,rtl::OUString const & string)34cdf0e10cSrcweir void appendString(rtl::OUStringBuffer & buffer, rtl::OUString const & string) {
35cdf0e10cSrcweir buffer.append(static_cast< sal_Unicode >('"'));
36cdf0e10cSrcweir for (int i = 0; i < string.getLength(); ++i) {
37cdf0e10cSrcweir buffer.appendAscii(RTL_CONSTASCII_STRINGPARAM("\\u"));
38cdf0e10cSrcweir sal_Unicode c = string[i];
39cdf0e10cSrcweir if (c < 0x1000) {
40cdf0e10cSrcweir buffer.append(static_cast< sal_Unicode >('0'));
41cdf0e10cSrcweir if (c < 0x100) {
42cdf0e10cSrcweir buffer.append(static_cast< sal_Unicode >('0'));
43cdf0e10cSrcweir if (c < 0x10) {
44cdf0e10cSrcweir buffer.append(static_cast< sal_Unicode >('0'));
45cdf0e10cSrcweir }
46cdf0e10cSrcweir }
47cdf0e10cSrcweir }
48cdf0e10cSrcweir buffer.append(
49cdf0e10cSrcweir static_cast< sal_Int32 >(c), static_cast< sal_Int16 >(16));
50cdf0e10cSrcweir }
51cdf0e10cSrcweir buffer.append(static_cast< sal_Unicode >('"'));
52cdf0e10cSrcweir }
53cdf0e10cSrcweir
createMessage(rtl::OUStringBuffer & message,rtl::OUString const & string1,rtl::OUString const & string2)54cdf0e10cSrcweir void createMessage(
55cdf0e10cSrcweir rtl::OUStringBuffer & message, rtl::OUString const & string1,
56cdf0e10cSrcweir rtl::OUString const & string2)
57cdf0e10cSrcweir {
58cdf0e10cSrcweir message.setLength(0);
59cdf0e10cSrcweir appendString(message, string1);
60cdf0e10cSrcweir message.appendAscii(RTL_CONSTASCII_STRINGPARAM(" vs. "));
61cdf0e10cSrcweir appendString(message, string2);
62cdf0e10cSrcweir }
63cdf0e10cSrcweir
64cdf0e10cSrcweir }
65cdf0e10cSrcweir
66*fd5f88ecSDamjan Jovanovic
67*fd5f88ecSDamjan Jovanovic namespace test { namespace oustringbuffer {
68*fd5f88ecSDamjan Jovanovic
69*fd5f88ecSDamjan Jovanovic class Utf32: public ::testing::Test {
70*fd5f88ecSDamjan Jovanovic };
71*fd5f88ecSDamjan Jovanovic
TEST_F(Utf32,appendUtf32)72*fd5f88ecSDamjan Jovanovic TEST_F(Utf32, appendUtf32) {
73cdf0e10cSrcweir int const str1Len = 3;
74cdf0e10cSrcweir sal_Unicode const str1[str1Len] = { 'a', 'b', 'c' };
75cdf0e10cSrcweir int const str2Len = 4;
76cdf0e10cSrcweir sal_Unicode const str2[str2Len] = { 'a', 'b', 'c', 'd' };
77cdf0e10cSrcweir int const str3Len = 6;
78cdf0e10cSrcweir sal_Unicode const str3[str3Len] = { 'a', 'b', 'c', 'd', 0xD800, 0xDC00 };
79cdf0e10cSrcweir rtl::OUStringBuffer message;
80cdf0e10cSrcweir rtl::OUStringBuffer buf1(rtl::OUString(str1, str1Len));
81cdf0e10cSrcweir buf1.appendUtf32('d');
82cdf0e10cSrcweir rtl::OUString res1(buf1.makeStringAndClear());
83cdf0e10cSrcweir createMessage(message, res1, rtl::OUString(str2, str2Len));
84*fd5f88ecSDamjan Jovanovic ASSERT_TRUE(
85*fd5f88ecSDamjan Jovanovic res1 == rtl::OUString(str2, str2Len)) << message.getStr();
86cdf0e10cSrcweir rtl::OUStringBuffer buf2(rtl::OUString(str2, str2Len));
87cdf0e10cSrcweir buf2.appendUtf32(0x10000);
88cdf0e10cSrcweir rtl::OUString res2(buf2.makeStringAndClear());
89cdf0e10cSrcweir createMessage(message, res2, rtl::OUString(str3, str3Len));
90*fd5f88ecSDamjan Jovanovic ASSERT_TRUE(
91*fd5f88ecSDamjan Jovanovic res2 == rtl::OUString(str3, str3Len)) << message.getStr();
92cdf0e10cSrcweir }
93cdf0e10cSrcweir
TEST_F(Utf32,insertUtf32)94*fd5f88ecSDamjan Jovanovic TEST_F(Utf32, insertUtf32) {
95cdf0e10cSrcweir int const str1Len = 3;
96cdf0e10cSrcweir sal_Unicode const str1[str1Len] = { 'a', 'b', 'c' };
97cdf0e10cSrcweir int const str2Len = 4;
98cdf0e10cSrcweir sal_Unicode const str2[str2Len] = { 'a', 'b', 'd', 'c' };
99cdf0e10cSrcweir int const str3Len = 6;
100cdf0e10cSrcweir sal_Unicode const str3[str3Len] = { 'a', 'b', 0xDBFF, 0xDFFF, 'd', 'c' };
101cdf0e10cSrcweir rtl::OUStringBuffer message;
102cdf0e10cSrcweir rtl::OUStringBuffer buf1(rtl::OUString(str1, str1Len));
103cdf0e10cSrcweir buf1.insertUtf32(2, 'd');
104cdf0e10cSrcweir rtl::OUString res1(buf1.makeStringAndClear());
105cdf0e10cSrcweir createMessage(message, res1, rtl::OUString(str2, str2Len));
106*fd5f88ecSDamjan Jovanovic ASSERT_TRUE(
107*fd5f88ecSDamjan Jovanovic res1 == rtl::OUString(str2, str2Len)) << message.getStr();
108cdf0e10cSrcweir rtl::OUStringBuffer buf2(rtl::OUString(str2, str2Len));
109cdf0e10cSrcweir buf2.insertUtf32(2, 0x10FFFF);
110cdf0e10cSrcweir rtl::OUString res2(buf2.makeStringAndClear());
111cdf0e10cSrcweir createMessage(message, res2, rtl::OUString(str3, str3Len));
112*fd5f88ecSDamjan Jovanovic ASSERT_TRUE(
113*fd5f88ecSDamjan Jovanovic res2 == rtl::OUString(str3, str3Len)) << message.getStr();
114cdf0e10cSrcweir }
115*fd5f88ecSDamjan Jovanovic
116*fd5f88ecSDamjan Jovanovic } }
117*fd5f88ecSDamjan Jovanovic
118*fd5f88ecSDamjan Jovanovic
119*fd5f88ecSDamjan Jovanovic
120