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