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