xref: /aoo4110/main/sal/qa/rtl/uri/rtl_testuri.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sal.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "rtl/strbuf.hxx"
28*b1cdbd2cSJim Jagielski #include "rtl/textenc.h"
29*b1cdbd2cSJim Jagielski #include "rtl/uri.h"
30*b1cdbd2cSJim Jagielski #include "rtl/uri.hxx"
31*b1cdbd2cSJim Jagielski #include "rtl/ustrbuf.hxx"
32*b1cdbd2cSJim Jagielski #include "rtl/ustring.h"
33*b1cdbd2cSJim Jagielski #include "rtl/ustring.hxx"
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski #include "testshl/simpleheader.hxx"
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski #include <cstddef>
38*b1cdbd2cSJim Jagielski #include <stdio.h>
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski namespace {
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski struct Test: public CppUnit::TestFixture {
43*b1cdbd2cSJim Jagielski     void test_Uri();
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski     CPPUNIT_TEST_SUITE(Test);
46*b1cdbd2cSJim Jagielski     CPPUNIT_TEST(test_Uri);
47*b1cdbd2cSJim Jagielski     CPPUNIT_TEST_SUITE_END();
48*b1cdbd2cSJim Jagielski };
49*b1cdbd2cSJim Jagielski 
test_Uri()50*b1cdbd2cSJim Jagielski void Test::test_Uri() {
51*b1cdbd2cSJim Jagielski     rtl_UriCharClass const eFirstCharClass = rtl_UriCharClassNone;
52*b1cdbd2cSJim Jagielski     rtl_UriCharClass const eLastCharClass = rtl_UriCharClassUnoParamValue;
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski     rtl::OUStringBuffer aBuffer;
55*b1cdbd2cSJim Jagielski     rtl::OUString aText1;
56*b1cdbd2cSJim Jagielski     rtl::OUString aText2;
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski     // Check that all characters map back to themselves when encoded/decoded:
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski     aText1 = rtl::OUString(
61*b1cdbd2cSJim Jagielski         RTL_CONSTASCII_USTRINGPARAM(
62*b1cdbd2cSJim Jagielski             "\0x00\0x01\0x02\0x03\0x04\0x05\0x06\0x07"
63*b1cdbd2cSJim Jagielski             "\0x08\0x09\0x0A\0x0B\0x0C\0x0D\0x0E\0x0F"
64*b1cdbd2cSJim Jagielski             "\0x10\0x11\0x12\0x13\0x14\0x15\0x16\0x17"
65*b1cdbd2cSJim Jagielski             "\0x18\0x19\0x1A\0x1B\0x1C\0x1D\0x1E\0x1F"
66*b1cdbd2cSJim Jagielski             "\0x20\0x21\0x22\0x23\0x24\0x25\0x26\0x27"
67*b1cdbd2cSJim Jagielski             "\0x28\0x29\0x2A\0x2B\0x2C\0x2D\0x2E\0x2F"
68*b1cdbd2cSJim Jagielski             "\0x30\0x31\0x32\0x33\0x34\0x35\0x36\0x37"
69*b1cdbd2cSJim Jagielski             "\0x38\0x39\0x3A\0x3B\0x3C\0x3D\0x3E\0x3F"
70*b1cdbd2cSJim Jagielski             "\0x40\0x41\0x42\0x43\0x44\0x45\0x46\0x47"
71*b1cdbd2cSJim Jagielski             "\0x48\0x49\0x4A\0x4B\0x4C\0x4D\0x4E\0x4F"
72*b1cdbd2cSJim Jagielski             "\0x50\0x51\0x52\0x53\0x54\0x55\0x56\0x57"
73*b1cdbd2cSJim Jagielski             "\0x58\0x59\0x5A\0x5B\0x5C\0x5D\0x5E\0x5F"
74*b1cdbd2cSJim Jagielski             "\0x60\0x61\0x62\0x63\0x64\0x65\0x66\0x67"
75*b1cdbd2cSJim Jagielski             "\0x68\0x69\0x6A\0x6B\0x6C\0x6D\0x6E\0x6F"
76*b1cdbd2cSJim Jagielski             "\0x70\0x71\0x72\0x73\0x74\0x75\0x76\0x77"
77*b1cdbd2cSJim Jagielski             "\0x78\0x79\0x7A\0x7B\0x7C\0x7D\0x7E\0x7F"));
78*b1cdbd2cSJim Jagielski     aText2 = aText1;
79*b1cdbd2cSJim Jagielski     {for (rtl_UriCharClass eCharClass = eFirstCharClass;
80*b1cdbd2cSJim Jagielski           eCharClass <= eLastCharClass;
81*b1cdbd2cSJim Jagielski           eCharClass = static_cast< rtl_UriCharClass >(eCharClass + 1))
82*b1cdbd2cSJim Jagielski     {
83*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
84*b1cdbd2cSJim Jagielski             "failure 1",
85*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
86*b1cdbd2cSJim Jagielski                 rtl::Uri::encode(
87*b1cdbd2cSJim Jagielski                     aText1, eCharClass, rtl_UriEncodeKeepEscapes,
88*b1cdbd2cSJim Jagielski                     RTL_TEXTENCODING_ISO_8859_1),
89*b1cdbd2cSJim Jagielski                 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ASCII_US)
90*b1cdbd2cSJim Jagielski              == aText2));
91*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
92*b1cdbd2cSJim Jagielski             "failure 2",
93*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
94*b1cdbd2cSJim Jagielski                 rtl::Uri::encode(
95*b1cdbd2cSJim Jagielski                     aText1, eCharClass, rtl_UriEncodeCheckEscapes,
96*b1cdbd2cSJim Jagielski                     RTL_TEXTENCODING_ISO_8859_1),
97*b1cdbd2cSJim Jagielski                 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ASCII_US)
98*b1cdbd2cSJim Jagielski              == aText2));
99*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
100*b1cdbd2cSJim Jagielski             "failure 3",
101*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
102*b1cdbd2cSJim Jagielski                 rtl::Uri::encode(
103*b1cdbd2cSJim Jagielski                     aText1, eCharClass, rtl_UriEncodeKeepEscapes,
104*b1cdbd2cSJim Jagielski                     RTL_TEXTENCODING_ISO_8859_1),
105*b1cdbd2cSJim Jagielski                 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1)
106*b1cdbd2cSJim Jagielski              == aText2));
107*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
108*b1cdbd2cSJim Jagielski             "failure 4",
109*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
110*b1cdbd2cSJim Jagielski                 rtl::Uri::encode(
111*b1cdbd2cSJim Jagielski                     aText1, eCharClass, rtl_UriEncodeCheckEscapes,
112*b1cdbd2cSJim Jagielski                     RTL_TEXTENCODING_ISO_8859_1),
113*b1cdbd2cSJim Jagielski                 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1)
114*b1cdbd2cSJim Jagielski              == aText2));
115*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
116*b1cdbd2cSJim Jagielski             "failure 5",
117*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
118*b1cdbd2cSJim Jagielski                 rtl::Uri::encode(
119*b1cdbd2cSJim Jagielski                     aText1, eCharClass, rtl_UriEncodeKeepEscapes,
120*b1cdbd2cSJim Jagielski                     RTL_TEXTENCODING_ISO_8859_1),
121*b1cdbd2cSJim Jagielski                 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8)
122*b1cdbd2cSJim Jagielski              == aText2));
123*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
124*b1cdbd2cSJim Jagielski             "failure 6",
125*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
126*b1cdbd2cSJim Jagielski                 rtl::Uri::encode(
127*b1cdbd2cSJim Jagielski                     aText1, eCharClass, rtl_UriEncodeCheckEscapes,
128*b1cdbd2cSJim Jagielski                     RTL_TEXTENCODING_ISO_8859_1),
129*b1cdbd2cSJim Jagielski                 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8)
130*b1cdbd2cSJim Jagielski              == aText2));
131*b1cdbd2cSJim Jagielski     }}
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski     aText1 = rtl::OUString(
134*b1cdbd2cSJim Jagielski         RTL_CONSTASCII_USTRINGPARAM(
135*b1cdbd2cSJim Jagielski             "\0x00\0x01\0x02\0x03\0x04\0x05\0x06\0x07"
136*b1cdbd2cSJim Jagielski             "\0x08\0x09\0x0A\0x0B\0x0C\0x0D\0x0E\0x0F"
137*b1cdbd2cSJim Jagielski             "\0x10\0x11\0x12\0x13\0x14\0x15\0x16\0x17"
138*b1cdbd2cSJim Jagielski             "\0x18\0x19\0x1A\0x1B\0x1C\0x1D\0x1E\0x1F"
139*b1cdbd2cSJim Jagielski             "\0x20\0x21\0x22\0x23\0x24\0x25\0x26\0x27"
140*b1cdbd2cSJim Jagielski             "\0x28\0x29\0x2A\0x2B\0x2C\0x2D\0x2E\0x2F"
141*b1cdbd2cSJim Jagielski             "\0x30\0x31\0x32\0x33\0x34\0x35\0x36\0x37"
142*b1cdbd2cSJim Jagielski             "\0x38\0x39\0x3A\0x3B\0x3C\0x3D\0x3E\0x3F"
143*b1cdbd2cSJim Jagielski             "\0x40\0x41\0x42\0x43\0x44\0x45\0x46\0x47"
144*b1cdbd2cSJim Jagielski             "\0x48\0x49\0x4A\0x4B\0x4C\0x4D\0x4E\0x4F"
145*b1cdbd2cSJim Jagielski             "\0x50\0x51\0x52\0x53\0x54\0x55\0x56\0x57"
146*b1cdbd2cSJim Jagielski             "\0x58\0x59\0x5A\0x5B\0x5C\0x5D\0x5E\0x5F"
147*b1cdbd2cSJim Jagielski             "\0x60\0x61\0x62\0x63\0x64\0x65\0x66\0x67"
148*b1cdbd2cSJim Jagielski             "\0x68\0x69\0x6A\0x6B\0x6C\0x6D\0x6E\0x6F"
149*b1cdbd2cSJim Jagielski             "\0x70\0x71\0x72\0x73\0x74\0x75\0x76\0x77"
150*b1cdbd2cSJim Jagielski             "\0x78\0x79\0x7A\0x7B\0x7C\0x7D\0x7E\0x7F"
151*b1cdbd2cSJim Jagielski             "\0x80\0x81\0x82\0x83\0x84\0x85\0x86\0x87"
152*b1cdbd2cSJim Jagielski             "\0x88\0x89\0x8A\0x8B\0x8C\0x8D\0x8E\0x8F"
153*b1cdbd2cSJim Jagielski             "\0x90\0x91\0x92\0x93\0x94\0x95\0x96\0x97"
154*b1cdbd2cSJim Jagielski             "\0x98\0x99\0x9A\0x9B\0x9C\0x9D\0x9E\0x9F"
155*b1cdbd2cSJim Jagielski             "\0xA0\0xA1\0xA2\0xA3\0xA4\0xA5\0xA6\0xA7"
156*b1cdbd2cSJim Jagielski             "\0xA8\0xA9\0xAA\0xAB\0xAC\0xAD\0xAE\0xAF"
157*b1cdbd2cSJim Jagielski             "\0xB0\0xB1\0xB2\0xB3\0xB4\0xB5\0xB6\0xB7"
158*b1cdbd2cSJim Jagielski             "\0xB8\0xB9\0xBA\0xBB\0xBC\0xBD\0xBE\0xBF"
159*b1cdbd2cSJim Jagielski             "\0xC0\0xC1\0xC2\0xC3\0xC4\0xC5\0xC6\0xC7"
160*b1cdbd2cSJim Jagielski             "\0xC8\0xC9\0xCA\0xCB\0xCC\0xCD\0xCE\0xCF"
161*b1cdbd2cSJim Jagielski             "\0xD0\0xD1\0xD2\0xD3\0xD4\0xD5\0xD6\0xD7"
162*b1cdbd2cSJim Jagielski             "\0xD8\0xD9\0xDA\0xDB\0xDC\0xDD\0xDE\0xDF"
163*b1cdbd2cSJim Jagielski             "\0xE0\0xE1\0xE2\0xE3\0xE4\0xE5\0xE6\0xE7"
164*b1cdbd2cSJim Jagielski             "\0xE8\0xE9\0xEA\0xEB\0xEC\0xED\0xEE\0xEF"
165*b1cdbd2cSJim Jagielski             "\0xF0\0xF1\0xF2\0xF3\0xF4\0xF5\0xF6\0xF7"
166*b1cdbd2cSJim Jagielski             "\0xF8\0xF9\0xFA\0xFB\0xFC\0xFD\0xFE\0xFF"));
167*b1cdbd2cSJim Jagielski     aText2 = aText1;
168*b1cdbd2cSJim Jagielski     {for (rtl_UriCharClass eCharClass = eFirstCharClass;
169*b1cdbd2cSJim Jagielski           eCharClass <= eLastCharClass;
170*b1cdbd2cSJim Jagielski           eCharClass = static_cast< rtl_UriCharClass >(eCharClass + 1))
171*b1cdbd2cSJim Jagielski     {
172*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
173*b1cdbd2cSJim Jagielski             "failure 7",
174*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
175*b1cdbd2cSJim Jagielski                 rtl::Uri::encode(
176*b1cdbd2cSJim Jagielski                     aText1, eCharClass, rtl_UriEncodeKeepEscapes,
177*b1cdbd2cSJim Jagielski                     RTL_TEXTENCODING_ISO_8859_1),
178*b1cdbd2cSJim Jagielski                 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1)
179*b1cdbd2cSJim Jagielski              == aText2));
180*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
181*b1cdbd2cSJim Jagielski             "failure 8",
182*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
183*b1cdbd2cSJim Jagielski                 rtl::Uri::encode(
184*b1cdbd2cSJim Jagielski                     aText1, eCharClass, rtl_UriEncodeCheckEscapes,
185*b1cdbd2cSJim Jagielski                     RTL_TEXTENCODING_ISO_8859_1),
186*b1cdbd2cSJim Jagielski                 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1)
187*b1cdbd2cSJim Jagielski              == aText2));
188*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
189*b1cdbd2cSJim Jagielski             "failure 9",
190*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
191*b1cdbd2cSJim Jagielski                 rtl::Uri::encode(
192*b1cdbd2cSJim Jagielski                     aText1, eCharClass, rtl_UriEncodeKeepEscapes,
193*b1cdbd2cSJim Jagielski                     RTL_TEXTENCODING_UTF8),
194*b1cdbd2cSJim Jagielski                 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8)
195*b1cdbd2cSJim Jagielski              == aText2));
196*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
197*b1cdbd2cSJim Jagielski             "failure 10",
198*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
199*b1cdbd2cSJim Jagielski                 rtl::Uri::encode(
200*b1cdbd2cSJim Jagielski                     aText1, eCharClass, rtl_UriEncodeCheckEscapes,
201*b1cdbd2cSJim Jagielski                     RTL_TEXTENCODING_UTF8),
202*b1cdbd2cSJim Jagielski                 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8)
203*b1cdbd2cSJim Jagielski              == aText2));
204*b1cdbd2cSJim Jagielski     }}
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski     // Check surrogate handling:
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski     aBuffer.append(static_cast< sal_Unicode >(0xD800)); // %ED%A0%80
209*b1cdbd2cSJim Jagielski     aBuffer.append(static_cast< sal_Unicode >(0xD800)); // %F0%90%8F%BF
210*b1cdbd2cSJim Jagielski     aBuffer.append(static_cast< sal_Unicode >(0xDFFF));
211*b1cdbd2cSJim Jagielski     aBuffer.append(static_cast< sal_Unicode >(0xDFFF)); // %ED%BF%BF
212*b1cdbd2cSJim Jagielski     aBuffer.append(static_cast< sal_Unicode >('A')); // A
213*b1cdbd2cSJim Jagielski     aText1 = aBuffer.makeStringAndClear();
214*b1cdbd2cSJim Jagielski     aText2 = rtl::OUString(
215*b1cdbd2cSJim Jagielski         RTL_CONSTASCII_USTRINGPARAM(
216*b1cdbd2cSJim Jagielski             "%ED%A0%80" "%F0%90%8F%BF" "%ED%BF%BF" "A"));
217*b1cdbd2cSJim Jagielski     CPPUNIT_ASSERT_MESSAGE(
218*b1cdbd2cSJim Jagielski         "failure 11",
219*b1cdbd2cSJim Jagielski         (rtl::Uri::encode(
220*b1cdbd2cSJim Jagielski             aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
221*b1cdbd2cSJim Jagielski             RTL_TEXTENCODING_UTF8)
222*b1cdbd2cSJim Jagielski          == aText2));
223*b1cdbd2cSJim Jagielski     CPPUNIT_ASSERT_MESSAGE(
224*b1cdbd2cSJim Jagielski         "failure 12",
225*b1cdbd2cSJim Jagielski         (rtl::Uri::encode(
226*b1cdbd2cSJim Jagielski             aText1, rtl_UriCharClassUric, rtl_UriEncodeKeepEscapes,
227*b1cdbd2cSJim Jagielski             RTL_TEXTENCODING_UTF8)
228*b1cdbd2cSJim Jagielski          == aText2));
229*b1cdbd2cSJim Jagielski     CPPUNIT_ASSERT_MESSAGE(
230*b1cdbd2cSJim Jagielski         "failure 13",
231*b1cdbd2cSJim Jagielski         (rtl::Uri::encode(
232*b1cdbd2cSJim Jagielski             aText1, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes,
233*b1cdbd2cSJim Jagielski             RTL_TEXTENCODING_UTF8)
234*b1cdbd2cSJim Jagielski          == aText2));
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski     aText1 = rtl::OUString(
237*b1cdbd2cSJim Jagielski         RTL_CONSTASCII_USTRINGPARAM(
238*b1cdbd2cSJim Jagielski             "%ed%a0%80" "%f0%90%8f%bf" "%ed%bf%bf" "A"));
239*b1cdbd2cSJim Jagielski     aBuffer.appendAscii(RTL_CONSTASCII_STRINGPARAM("%ED%A0%80"));
240*b1cdbd2cSJim Jagielski     aBuffer.append(static_cast< sal_Unicode >(0xD800));
241*b1cdbd2cSJim Jagielski     aBuffer.append(static_cast< sal_Unicode >(0xDFFF));
242*b1cdbd2cSJim Jagielski     aBuffer.appendAscii(RTL_CONSTASCII_STRINGPARAM("%ED%BF%BF"));
243*b1cdbd2cSJim Jagielski     aBuffer.append(static_cast< sal_Unicode >('A'));
244*b1cdbd2cSJim Jagielski     aText2 = aBuffer.makeStringAndClear();
245*b1cdbd2cSJim Jagielski     CPPUNIT_ASSERT_MESSAGE(
246*b1cdbd2cSJim Jagielski         "failure 14",
247*b1cdbd2cSJim Jagielski         (rtl::Uri::decode(aText1, rtl_UriDecodeToIuri, RTL_TEXTENCODING_UTF8)
248*b1cdbd2cSJim Jagielski          == aText2));
249*b1cdbd2cSJim Jagielski     CPPUNIT_ASSERT_MESSAGE(
250*b1cdbd2cSJim Jagielski         "failure 15",
251*b1cdbd2cSJim Jagielski         (rtl::Uri::decode(
252*b1cdbd2cSJim Jagielski             aText1, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8)
253*b1cdbd2cSJim Jagielski          == aText2));
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski     // Check UTF-8 handling:
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski     aText1 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%E0%83%BF"));
258*b1cdbd2cSJim Jagielski         // \U+00FF encoded with three instead of two bytes
259*b1cdbd2cSJim Jagielski     aText2 = aText1;
260*b1cdbd2cSJim Jagielski     CPPUNIT_ASSERT_MESSAGE(
261*b1cdbd2cSJim Jagielski         "failure 16",
262*b1cdbd2cSJim Jagielski         (rtl::Uri::encode(
263*b1cdbd2cSJim Jagielski             aText1, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes,
264*b1cdbd2cSJim Jagielski             RTL_TEXTENCODING_UTF8)
265*b1cdbd2cSJim Jagielski          == aText2));
266*b1cdbd2cSJim Jagielski 
267*b1cdbd2cSJim Jagielski     aText1 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%EF%BF%BF"));
268*b1cdbd2cSJim Jagielski         // \U+FFFF is no legal character
269*b1cdbd2cSJim Jagielski     aText2 = aText1;
270*b1cdbd2cSJim Jagielski     CPPUNIT_ASSERT_MESSAGE(
271*b1cdbd2cSJim Jagielski         "failure 17",
272*b1cdbd2cSJim Jagielski         (rtl::Uri::encode(
273*b1cdbd2cSJim Jagielski             aText1, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes,
274*b1cdbd2cSJim Jagielski             RTL_TEXTENCODING_UTF8)
275*b1cdbd2cSJim Jagielski          == aText2));
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski     // Check IURI handling:
278*b1cdbd2cSJim Jagielski 
279*b1cdbd2cSJim Jagielski     aText1 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%30%C3%BF"));
280*b1cdbd2cSJim Jagielski     aBuffer.appendAscii(RTL_CONSTASCII_STRINGPARAM("%30"));
281*b1cdbd2cSJim Jagielski     aBuffer.append(static_cast< sal_Unicode >(0x00FF));
282*b1cdbd2cSJim Jagielski     aText2 = aBuffer.makeStringAndClear();
283*b1cdbd2cSJim Jagielski     CPPUNIT_ASSERT_MESSAGE(
284*b1cdbd2cSJim Jagielski         "failure 18",
285*b1cdbd2cSJim Jagielski         (rtl::Uri::decode(aText1, rtl_UriDecodeToIuri, RTL_TEXTENCODING_UTF8)
286*b1cdbd2cSJim Jagielski          == aText2));
287*b1cdbd2cSJim Jagielski 
288*b1cdbd2cSJim Jagielski     // Check modified rtl_UriCharClassUnoParamValue (removed '[' and ']'):
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski     aText1 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("[]%5B%5D"));
291*b1cdbd2cSJim Jagielski     aText2 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%5B%5D%5B%5D"));
292*b1cdbd2cSJim Jagielski     CPPUNIT_ASSERT_MESSAGE(
293*b1cdbd2cSJim Jagielski         "failure 19",
294*b1cdbd2cSJim Jagielski         (rtl::Uri::encode(
295*b1cdbd2cSJim Jagielski             aText1, rtl_UriCharClassUnoParamValue, rtl_UriEncodeCheckEscapes,
296*b1cdbd2cSJim Jagielski             RTL_TEXTENCODING_ASCII_US)
297*b1cdbd2cSJim Jagielski          == aText2));
298*b1cdbd2cSJim Jagielski 
299*b1cdbd2cSJim Jagielski     // Check Uri::convertRelToAbs:
300*b1cdbd2cSJim Jagielski 
301*b1cdbd2cSJim Jagielski     struct RelToAbsTest
302*b1cdbd2cSJim Jagielski     {
303*b1cdbd2cSJim Jagielski         char const * pBase;
304*b1cdbd2cSJim Jagielski         char const * pRel;
305*b1cdbd2cSJim Jagielski         char const * pAbs;
306*b1cdbd2cSJim Jagielski     };
307*b1cdbd2cSJim Jagielski     static RelToAbsTest const aRelToAbsTest[]
308*b1cdbd2cSJim Jagielski         = { // The following tests are taken from RFC 2396:
309*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g:h", "g:h" },
310*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g", "http://a/b/c/g" },
311*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "./g", "http://a/b/c/g" },
312*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g/", "http://a/b/c/g/" },
313*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "/g", "http://a/g" },
314*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "//g", "http://g" },
315*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "?y", "http://a/b/c/?y" },
316*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g?y", "http://a/b/c/g?y" },
317*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "#s", "http://a/b/c/d;p?q#s" },
318*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g#s", "http://a/b/c/g#s" },
319*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g?y#s", "http://a/b/c/g?y#s" },
320*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", ";x", "http://a/b/c/;x" },
321*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g;x", "http://a/b/c/g;x" },
322*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g;x?y#s", "http://a/b/c/g;x?y#s" },
323*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", ".", "http://a/b/c/" },
324*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "./", "http://a/b/c/" },
325*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "..", "http://a/b/" },
326*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "../", "http://a/b/" },
327*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "../g", "http://a/b/g" },
328*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "../..", "http://a/" },
329*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "../../", "http://a/" },
330*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "../../g", "http://a/g" },
331*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "", "http://a/b/c/d;p?q" },
332*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "../../../g", "http://a/../g" },
333*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "../../../../g", "http://a/../../g" },
334*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "/./g", "http://a/./g" },
335*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "/../g", "http://a/../g" },
336*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g.", "http://a/b/c/g." },
337*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", ".g", "http://a/b/c/.g" },
338*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g..", "http://a/b/c/g.." },
339*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "..g", "http://a/b/c/..g" },
340*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "./../g", "http://a/b/g" },
341*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "./g/.", "http://a/b/c/g/" },
342*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g/./h", "http://a/b/c/g/h" },
343*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g/../h", "http://a/b/c/h" },
344*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g;x=1/./y", "http://a/b/c/g;x=1/y" },
345*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g;x=1/../y", "http://a/b/c/y" },
346*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g?y/./x", "http://a/b/c/g?y/./x" },
347*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g?y/../x", "http://a/b/c/g?y/../x" },
348*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g#s/./x", "http://a/b/c/g#s/./x" },
349*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "g#s/../x", "http://a/b/c/g#s/../x" },
350*b1cdbd2cSJim Jagielski             { "http://a/b/c/d;p?q", "http:g", "http:g" },
351*b1cdbd2cSJim Jagielski             { "http!://a/b/c/d;p?q", "g:h", "g:h" },
352*b1cdbd2cSJim Jagielski             { "http!://a/b/c/d;p?q", "g", 0 },
353*b1cdbd2cSJim Jagielski             { "http:b/c/d;p?q", "g:h", "g:h" },
354*b1cdbd2cSJim Jagielski             { "http:b/c/d;p?q", "g", 0 },
355*b1cdbd2cSJim Jagielski             { "http://a/b/../", "../c", "http://a/b/../../c" },
356*b1cdbd2cSJim Jagielski             { "http://a/b/..", "../c", "http://a/c" },
357*b1cdbd2cSJim Jagielski             { "http://a/./b/", ".././.././../c", "http://a/./../../c" } };
358*b1cdbd2cSJim Jagielski     for (std::size_t i = 0; i < sizeof aRelToAbsTest / sizeof (RelToAbsTest); ++i)
359*b1cdbd2cSJim Jagielski     {
360*b1cdbd2cSJim Jagielski         rtl::OUString aAbs;
361*b1cdbd2cSJim Jagielski         bool bMalformed = false;
362*b1cdbd2cSJim Jagielski         try {
363*b1cdbd2cSJim Jagielski             aAbs = rtl::Uri::convertRelToAbs(
364*b1cdbd2cSJim Jagielski                 rtl::OUString::createFromAscii(aRelToAbsTest[i].pBase),
365*b1cdbd2cSJim Jagielski                 rtl::OUString::createFromAscii(aRelToAbsTest[i].pRel));
366*b1cdbd2cSJim Jagielski         } catch (rtl::MalformedUriException &) {
367*b1cdbd2cSJim Jagielski             bMalformed = true;
368*b1cdbd2cSJim Jagielski         }
369*b1cdbd2cSJim Jagielski         if (bMalformed
370*b1cdbd2cSJim Jagielski             ? aRelToAbsTest[i].pAbs != 0
371*b1cdbd2cSJim Jagielski             : (aRelToAbsTest[i].pAbs == 0
372*b1cdbd2cSJim Jagielski                || !aAbs.equalsAscii(aRelToAbsTest[i].pAbs)))
373*b1cdbd2cSJim Jagielski         {
374*b1cdbd2cSJim Jagielski             printf(
375*b1cdbd2cSJim Jagielski                 "FAILED convertRelToAbs(%s, %s) -> %s != %s\n",
376*b1cdbd2cSJim Jagielski                 aRelToAbsTest[i].pBase, aRelToAbsTest[i].pRel,
377*b1cdbd2cSJim Jagielski                 (bMalformed
378*b1cdbd2cSJim Jagielski                  ? "<MALFORMED>"
379*b1cdbd2cSJim Jagielski                  : rtl::OUStringToOString(
380*b1cdbd2cSJim Jagielski                      aAbs, RTL_TEXTENCODING_UTF8).getStr()),
381*b1cdbd2cSJim Jagielski                 (aRelToAbsTest[i].pAbs == 0
382*b1cdbd2cSJim Jagielski                  ? "<MALFORMED>" : aRelToAbsTest[i].pAbs));
383*b1cdbd2cSJim Jagielski             CPPUNIT_ASSERT(false);
384*b1cdbd2cSJim Jagielski         }
385*b1cdbd2cSJim Jagielski     }
386*b1cdbd2cSJim Jagielski 
387*b1cdbd2cSJim Jagielski     // Check encode with unusual text encodings:
388*b1cdbd2cSJim Jagielski 
389*b1cdbd2cSJim Jagielski     {
390*b1cdbd2cSJim Jagielski         sal_Unicode const aText1U[] = { ' ', '!', 0x0401, 0x045F, 0 };
391*b1cdbd2cSJim Jagielski         aText1 = rtl::OUString(aText1U);
392*b1cdbd2cSJim Jagielski         aText2 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%20!%A1%FF"));
393*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
394*b1cdbd2cSJim Jagielski             "failure 20",
395*b1cdbd2cSJim Jagielski             (rtl::Uri::encode(
396*b1cdbd2cSJim Jagielski                 aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
397*b1cdbd2cSJim Jagielski                 RTL_TEXTENCODING_ISO_8859_5)
398*b1cdbd2cSJim Jagielski              == aText2));
399*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
400*b1cdbd2cSJim Jagielski             "failure 20a",
401*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
402*b1cdbd2cSJim Jagielski                 aText2, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_5)
403*b1cdbd2cSJim Jagielski              == aText1));
404*b1cdbd2cSJim Jagielski     }
405*b1cdbd2cSJim Jagielski     {
406*b1cdbd2cSJim Jagielski         sal_Unicode const aText1U[] = { ' ', '!', 0x0401, 0x0700, 0x045F, 0 };
407*b1cdbd2cSJim Jagielski         aText1 = rtl::OUString(aText1U);
408*b1cdbd2cSJim Jagielski         sal_Unicode const aText2U[] = {
409*b1cdbd2cSJim Jagielski             '%', '2', '0', '!', '%', 'A', '1', 0x0700, '%', 'F', 'F', 0 };
410*b1cdbd2cSJim Jagielski         aText2 = rtl::OUString(aText2U);
411*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
412*b1cdbd2cSJim Jagielski             "failure 21",
413*b1cdbd2cSJim Jagielski             (rtl::Uri::encode(
414*b1cdbd2cSJim Jagielski                 aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
415*b1cdbd2cSJim Jagielski                 RTL_TEXTENCODING_ISO_8859_5)
416*b1cdbd2cSJim Jagielski              == aText2));
417*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
418*b1cdbd2cSJim Jagielski             "failure 21a",
419*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
420*b1cdbd2cSJim Jagielski                 aText2, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_5)
421*b1cdbd2cSJim Jagielski              == aText1));
422*b1cdbd2cSJim Jagielski     }
423*b1cdbd2cSJim Jagielski     {
424*b1cdbd2cSJim Jagielski         sal_Unicode const aText1U[] = { ' ', '!', 0x028A, 0xD849, 0xDD13, 0 };
425*b1cdbd2cSJim Jagielski         aText1 = rtl::OUString(aText1U);
426*b1cdbd2cSJim Jagielski         aText2 = rtl::OUString(
427*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("%20!%81%30%B1%33%95%39%C5%37"));
428*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
429*b1cdbd2cSJim Jagielski             "failure 22",
430*b1cdbd2cSJim Jagielski             (rtl::Uri::encode(
431*b1cdbd2cSJim Jagielski                 aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
432*b1cdbd2cSJim Jagielski                 RTL_TEXTENCODING_GB_18030)
433*b1cdbd2cSJim Jagielski              == aText2));
434*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
435*b1cdbd2cSJim Jagielski             "failure 22a",
436*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
437*b1cdbd2cSJim Jagielski                 aText2, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_GB_18030)
438*b1cdbd2cSJim Jagielski              == aText1));
439*b1cdbd2cSJim Jagielski     }
440*b1cdbd2cSJim Jagielski 
441*b1cdbd2cSJim Jagielski     // Check strict mode:
442*b1cdbd2cSJim Jagielski 
443*b1cdbd2cSJim Jagielski     {
444*b1cdbd2cSJim Jagielski         sal_Unicode const aText1U[] = { ' ', '!', 0x0401, 0x0700, 0x045F, 0 };
445*b1cdbd2cSJim Jagielski         aText1 = rtl::OUString(aText1U);
446*b1cdbd2cSJim Jagielski         aText2 = rtl::OUString();
447*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
448*b1cdbd2cSJim Jagielski             "failure 23",
449*b1cdbd2cSJim Jagielski             (rtl::Uri::encode(
450*b1cdbd2cSJim Jagielski                 aText1, rtl_UriCharClassUric, rtl_UriEncodeStrict,
451*b1cdbd2cSJim Jagielski                 RTL_TEXTENCODING_ISO_8859_5)
452*b1cdbd2cSJim Jagielski              == aText2));
453*b1cdbd2cSJim Jagielski     }
454*b1cdbd2cSJim Jagielski     {
455*b1cdbd2cSJim Jagielski         aText1 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%20%C4%80%FF"));
456*b1cdbd2cSJim Jagielski         aText2 = rtl::OUString();
457*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
458*b1cdbd2cSJim Jagielski             "failure 24",
459*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
460*b1cdbd2cSJim Jagielski                 aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_UTF8)
461*b1cdbd2cSJim Jagielski              == aText2));
462*b1cdbd2cSJim Jagielski     }
463*b1cdbd2cSJim Jagielski     {
464*b1cdbd2cSJim Jagielski         aText1 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%81 "));
465*b1cdbd2cSJim Jagielski         aText2 = rtl::OUString();
466*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
467*b1cdbd2cSJim Jagielski             "failure 25",
468*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
469*b1cdbd2cSJim Jagielski                 aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030)
470*b1cdbd2cSJim Jagielski              == aText2));
471*b1cdbd2cSJim Jagielski     }
472*b1cdbd2cSJim Jagielski     {
473*b1cdbd2cSJim Jagielski         aText1 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%81%20"));
474*b1cdbd2cSJim Jagielski         aText2 = rtl::OUString();
475*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
476*b1cdbd2cSJim Jagielski             "failure 26",
477*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
478*b1cdbd2cSJim Jagielski                 aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030)
479*b1cdbd2cSJim Jagielski              == aText2));
480*b1cdbd2cSJim Jagielski     }
481*b1cdbd2cSJim Jagielski     {
482*b1cdbd2cSJim Jagielski         aText1 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%81%30%B1%33"));
483*b1cdbd2cSJim Jagielski         sal_Unicode const aText2U[] = { 0x028A, 0 };
484*b1cdbd2cSJim Jagielski         aText2 = rtl::OUString(aText2U);
485*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
486*b1cdbd2cSJim Jagielski             "failure 27",
487*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
488*b1cdbd2cSJim Jagielski                 aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030)
489*b1cdbd2cSJim Jagielski              == aText2));
490*b1cdbd2cSJim Jagielski     }
491*b1cdbd2cSJim Jagielski     {
492*b1cdbd2cSJim Jagielski         aText1 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%810%B13"));
493*b1cdbd2cSJim Jagielski         sal_Unicode const aText2U[] = { 0x028A, 0 };
494*b1cdbd2cSJim Jagielski         aText2 = rtl::OUString(aText2U);
495*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
496*b1cdbd2cSJim Jagielski             "failure 28",
497*b1cdbd2cSJim Jagielski             (rtl::Uri::decode(
498*b1cdbd2cSJim Jagielski                 aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030)
499*b1cdbd2cSJim Jagielski              == aText2));
500*b1cdbd2cSJim Jagielski     }
501*b1cdbd2cSJim Jagielski 
502*b1cdbd2cSJim Jagielski     // Check rtl_UriEncodeStrictKeepEscapes mode:
503*b1cdbd2cSJim Jagielski 
504*b1cdbd2cSJim Jagielski     {
505*b1cdbd2cSJim Jagielski         aText1 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%%ea%c3%aa"));
506*b1cdbd2cSJim Jagielski         aText2 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%25%EA%C3%AA"));
507*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
508*b1cdbd2cSJim Jagielski             "failure 29",
509*b1cdbd2cSJim Jagielski             (rtl::Uri::encode(
510*b1cdbd2cSJim Jagielski                 aText1, rtl_UriCharClassUric, rtl_UriEncodeStrictKeepEscapes,
511*b1cdbd2cSJim Jagielski                 RTL_TEXTENCODING_UTF8)
512*b1cdbd2cSJim Jagielski              == aText2));
513*b1cdbd2cSJim Jagielski     }
514*b1cdbd2cSJim Jagielski     {
515*b1cdbd2cSJim Jagielski         sal_Unicode const aText1U[] = { 0x00EA, 0 };
516*b1cdbd2cSJim Jagielski         aText1 = rtl::OUString(aText1U);
517*b1cdbd2cSJim Jagielski         aText2 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%C3%AA"));
518*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
519*b1cdbd2cSJim Jagielski             "failure 30",
520*b1cdbd2cSJim Jagielski             (rtl::Uri::encode(
521*b1cdbd2cSJim Jagielski                 aText1, rtl_UriCharClassUric, rtl_UriEncodeStrictKeepEscapes,
522*b1cdbd2cSJim Jagielski                 RTL_TEXTENCODING_UTF8)
523*b1cdbd2cSJim Jagielski              == aText2));
524*b1cdbd2cSJim Jagielski     }
525*b1cdbd2cSJim Jagielski     {
526*b1cdbd2cSJim Jagielski         sal_Unicode const aText1U[] = { ' ', '!', 0x0401, 0x0700, 0x045F, 0 };
527*b1cdbd2cSJim Jagielski         aText1 = rtl::OUString(aText1U);
528*b1cdbd2cSJim Jagielski         aText2 = rtl::OUString();
529*b1cdbd2cSJim Jagielski         CPPUNIT_ASSERT_MESSAGE(
530*b1cdbd2cSJim Jagielski             "failure 23",
531*b1cdbd2cSJim Jagielski             (rtl::Uri::encode(
532*b1cdbd2cSJim Jagielski                 aText1, rtl_UriCharClassUric, rtl_UriEncodeStrictKeepEscapes,
533*b1cdbd2cSJim Jagielski                 RTL_TEXTENCODING_ISO_8859_5)
534*b1cdbd2cSJim Jagielski              == aText2));
535*b1cdbd2cSJim Jagielski     }
536*b1cdbd2cSJim Jagielski }
537*b1cdbd2cSJim Jagielski 
538*b1cdbd2cSJim Jagielski }
539*b1cdbd2cSJim Jagielski 
540*b1cdbd2cSJim Jagielski CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(Test, "rtl_testuri");
541*b1cdbd2cSJim Jagielski NOADDITIONAL;
542