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 10cdf0e10cSrcweir * 1187d2adbcSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 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. 19cdf0e10cSrcweir * 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 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 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 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 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