1*87d2adbcSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*87d2adbcSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*87d2adbcSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*87d2adbcSAndrew Rist  * distributed with this work for additional information
6*87d2adbcSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*87d2adbcSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*87d2adbcSAndrew Rist  * "License"); you may not use this file except in compliance
9*87d2adbcSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*87d2adbcSAndrew Rist  *
11*87d2adbcSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*87d2adbcSAndrew Rist  *
13*87d2adbcSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*87d2adbcSAndrew Rist  * software distributed under the License is distributed on an
15*87d2adbcSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*87d2adbcSAndrew Rist  * KIND, either express or implied.  See the License for the
17*87d2adbcSAndrew Rist  * specific language governing permissions and limitations
18*87d2adbcSAndrew Rist  * under the License.
19*87d2adbcSAndrew Rist  *
20*87d2adbcSAndrew Rist  *************************************************************/
21*87d2adbcSAndrew Rist 
22*87d2adbcSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sal.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "testshl/simpleheader.hxx"
28cdf0e10cSrcweir #include "rtl/strbuf.hxx"
29cdf0e10cSrcweir #include "rtl/string.h"
30cdf0e10cSrcweir #include "rtl/string.hxx"
31cdf0e10cSrcweir #include "rtl/textenc.h"
32cdf0e10cSrcweir #include "rtl/ustring.hxx"
33cdf0e10cSrcweir #include "sal/types.h"
34cdf0e10cSrcweir 
35cdf0e10cSrcweir namespace test { namespace oustring {
36cdf0e10cSrcweir 
37cdf0e10cSrcweir class EndsWith: public CppUnit::TestFixture
38cdf0e10cSrcweir {
39cdf0e10cSrcweir private:
40cdf0e10cSrcweir     void endsWith();
41cdf0e10cSrcweir 
42cdf0e10cSrcweir     CPPUNIT_TEST_SUITE(EndsWith);
43cdf0e10cSrcweir     CPPUNIT_TEST(endsWith);
44cdf0e10cSrcweir     CPPUNIT_TEST_SUITE_END();
45cdf0e10cSrcweir };
46cdf0e10cSrcweir 
47cdf0e10cSrcweir } }
48cdf0e10cSrcweir 
49cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(test::oustring::EndsWith, "alltest");
50cdf0e10cSrcweir 
51cdf0e10cSrcweir namespace {
52cdf0e10cSrcweir 
appendString(rtl::OStringBuffer & buffer,rtl::OString const & string)53cdf0e10cSrcweir void appendString(rtl::OStringBuffer & buffer, rtl::OString const & string)
54cdf0e10cSrcweir {
55cdf0e10cSrcweir     buffer.append('"');
56cdf0e10cSrcweir     for (int i = 0; i < string.getLength(); ++i) {
57cdf0e10cSrcweir         char c = string[i];
58cdf0e10cSrcweir         if (c < ' ' || c == '"' || c == '\\' || c > '~') {
59cdf0e10cSrcweir             buffer.append('\\');
60cdf0e10cSrcweir             sal_Int32 n = static_cast< sal_Int32 >(
61cdf0e10cSrcweir                 static_cast< unsigned char >(c));
62cdf0e10cSrcweir             if (n < 16) {
63cdf0e10cSrcweir                 buffer.append('0');
64cdf0e10cSrcweir             }
65cdf0e10cSrcweir             buffer.append(n, 16);
66cdf0e10cSrcweir         } else {
67cdf0e10cSrcweir             buffer.append(c);
68cdf0e10cSrcweir         }
69cdf0e10cSrcweir     }
70cdf0e10cSrcweir     buffer.append('"');
71cdf0e10cSrcweir }
72cdf0e10cSrcweir 
73cdf0e10cSrcweir }
74cdf0e10cSrcweir 
endsWith()75cdf0e10cSrcweir void test::oustring::EndsWith::endsWith()
76cdf0e10cSrcweir {
77cdf0e10cSrcweir     struct Data {
78cdf0e10cSrcweir         char const * str1;
79cdf0e10cSrcweir         sal_Int32 str1Len;
80cdf0e10cSrcweir         char const * str2;
81cdf0e10cSrcweir         sal_Int32 str2Len;
82cdf0e10cSrcweir         bool endsWith;
83cdf0e10cSrcweir     };
84cdf0e10cSrcweir     Data const data[] = {
85cdf0e10cSrcweir         { RTL_CONSTASCII_STRINGPARAM(""), RTL_CONSTASCII_STRINGPARAM(""),
86cdf0e10cSrcweir           true },
87cdf0e10cSrcweir         { RTL_CONSTASCII_STRINGPARAM("abc"), RTL_CONSTASCII_STRINGPARAM(""),
88cdf0e10cSrcweir           true },
89cdf0e10cSrcweir         { RTL_CONSTASCII_STRINGPARAM(""), RTL_CONSTASCII_STRINGPARAM("abc"),
90cdf0e10cSrcweir           false },
91cdf0e10cSrcweir         { RTL_CONSTASCII_STRINGPARAM("ABC"), RTL_CONSTASCII_STRINGPARAM("abc"),
92cdf0e10cSrcweir           true },
93cdf0e10cSrcweir         { RTL_CONSTASCII_STRINGPARAM("abcd"), RTL_CONSTASCII_STRINGPARAM("bcd"),
94cdf0e10cSrcweir           true },
95cdf0e10cSrcweir         { RTL_CONSTASCII_STRINGPARAM("bcd"), RTL_CONSTASCII_STRINGPARAM("abcd"),
96cdf0e10cSrcweir           false },
97cdf0e10cSrcweir         { RTL_CONSTASCII_STRINGPARAM("a\0b\0c"),
98cdf0e10cSrcweir           RTL_CONSTASCII_STRINGPARAM("b\0c"), true },
99cdf0e10cSrcweir         { RTL_CONSTASCII_STRINGPARAM("a\0b\0c"),
100cdf0e10cSrcweir           RTL_CONSTASCII_STRINGPARAM("b"), false } };
101cdf0e10cSrcweir     for (int i = 0; i < sizeof data / sizeof data[0]; ++i) {
102cdf0e10cSrcweir         rtl::OStringBuffer msg;
103cdf0e10cSrcweir         appendString(msg, rtl::OString(data[i].str1, data[i].str1Len));
104cdf0e10cSrcweir         msg.append(
105cdf0e10cSrcweir             RTL_CONSTASCII_STRINGPARAM(".endsWithIgnoreAsciiCaseAsciiL("));
106cdf0e10cSrcweir         appendString(msg, rtl::OString(data[i].str2, data[i].str2Len));
107cdf0e10cSrcweir         msg.append(RTL_CONSTASCII_STRINGPARAM(") == "));
108cdf0e10cSrcweir         msg.append(static_cast< sal_Bool >(data[i].endsWith));
109cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE(
110cdf0e10cSrcweir             msg.getStr(),
111cdf0e10cSrcweir             rtl::OUString(
112cdf0e10cSrcweir                 data[i].str1, data[i].str1Len,
113cdf0e10cSrcweir                 RTL_TEXTENCODING_ASCII_US).endsWithIgnoreAsciiCaseAsciiL(
114cdf0e10cSrcweir                     data[i].str2, data[i].str2Len)
115cdf0e10cSrcweir             == data[i].endsWith);
116cdf0e10cSrcweir     }
117cdf0e10cSrcweir }
118