1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: rtl_testuri.cxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_sal.hxx"
34 #include "rtl/strbuf.hxx"
35 #include "rtl/textenc.h"
37 #include "rtl/uri.hxx"
38 #include "rtl/ustrbuf.hxx"
39 #include "rtl/ustring.h"
40 #include "rtl/ustring.hxx"
42 #include "cppunit/simpleheader.hxx"
49 struct Test
: public CppUnit::TestFixture
{
52 CPPUNIT_TEST_SUITE(Test
);
53 CPPUNIT_TEST(test_Uri
);
54 CPPUNIT_TEST_SUITE_END();
57 void Test::test_Uri() {
58 rtl_UriCharClass
const eFirstCharClass
= rtl_UriCharClassNone
;
59 rtl_UriCharClass
const eLastCharClass
= rtl_UriCharClassUnoParamValue
;
61 rtl::OUStringBuffer aBuffer
;
65 // Check that all characters map back to themselves when encoded/decoded:
67 aText1
= rtl::OUString(
68 RTL_CONSTASCII_USTRINGPARAM(
69 "\0x00\0x01\0x02\0x03\0x04\0x05\0x06\0x07"
70 "\0x08\0x09\0x0A\0x0B\0x0C\0x0D\0x0E\0x0F"
71 "\0x10\0x11\0x12\0x13\0x14\0x15\0x16\0x17"
72 "\0x18\0x19\0x1A\0x1B\0x1C\0x1D\0x1E\0x1F"
73 "\0x20\0x21\0x22\0x23\0x24\0x25\0x26\0x27"
74 "\0x28\0x29\0x2A\0x2B\0x2C\0x2D\0x2E\0x2F"
75 "\0x30\0x31\0x32\0x33\0x34\0x35\0x36\0x37"
76 "\0x38\0x39\0x3A\0x3B\0x3C\0x3D\0x3E\0x3F"
77 "\0x40\0x41\0x42\0x43\0x44\0x45\0x46\0x47"
78 "\0x48\0x49\0x4A\0x4B\0x4C\0x4D\0x4E\0x4F"
79 "\0x50\0x51\0x52\0x53\0x54\0x55\0x56\0x57"
80 "\0x58\0x59\0x5A\0x5B\0x5C\0x5D\0x5E\0x5F"
81 "\0x60\0x61\0x62\0x63\0x64\0x65\0x66\0x67"
82 "\0x68\0x69\0x6A\0x6B\0x6C\0x6D\0x6E\0x6F"
83 "\0x70\0x71\0x72\0x73\0x74\0x75\0x76\0x77"
84 "\0x78\0x79\0x7A\0x7B\0x7C\0x7D\0x7E\0x7F"));
86 {for (rtl_UriCharClass eCharClass
= eFirstCharClass
;
87 eCharClass
<= eLastCharClass
;
88 eCharClass
= static_cast< rtl_UriCharClass
>(eCharClass
+ 1))
90 CPPUNIT_ASSERT_MESSAGE(
94 aText1
, eCharClass
, rtl_UriEncodeKeepEscapes
,
95 RTL_TEXTENCODING_ISO_8859_1
),
96 rtl_UriDecodeWithCharset
, RTL_TEXTENCODING_ASCII_US
)
98 CPPUNIT_ASSERT_MESSAGE(
102 aText1
, eCharClass
, rtl_UriEncodeCheckEscapes
,
103 RTL_TEXTENCODING_ISO_8859_1
),
104 rtl_UriDecodeWithCharset
, RTL_TEXTENCODING_ASCII_US
)
106 CPPUNIT_ASSERT_MESSAGE(
110 aText1
, eCharClass
, rtl_UriEncodeKeepEscapes
,
111 RTL_TEXTENCODING_ISO_8859_1
),
112 rtl_UriDecodeWithCharset
, RTL_TEXTENCODING_ISO_8859_1
)
114 CPPUNIT_ASSERT_MESSAGE(
118 aText1
, eCharClass
, rtl_UriEncodeCheckEscapes
,
119 RTL_TEXTENCODING_ISO_8859_1
),
120 rtl_UriDecodeWithCharset
, RTL_TEXTENCODING_ISO_8859_1
)
122 CPPUNIT_ASSERT_MESSAGE(
126 aText1
, eCharClass
, rtl_UriEncodeKeepEscapes
,
127 RTL_TEXTENCODING_ISO_8859_1
),
128 rtl_UriDecodeWithCharset
, RTL_TEXTENCODING_UTF8
)
130 CPPUNIT_ASSERT_MESSAGE(
134 aText1
, eCharClass
, rtl_UriEncodeCheckEscapes
,
135 RTL_TEXTENCODING_ISO_8859_1
),
136 rtl_UriDecodeWithCharset
, RTL_TEXTENCODING_UTF8
)
140 aText1
= rtl::OUString(
141 RTL_CONSTASCII_USTRINGPARAM(
142 "\0x00\0x01\0x02\0x03\0x04\0x05\0x06\0x07"
143 "\0x08\0x09\0x0A\0x0B\0x0C\0x0D\0x0E\0x0F"
144 "\0x10\0x11\0x12\0x13\0x14\0x15\0x16\0x17"
145 "\0x18\0x19\0x1A\0x1B\0x1C\0x1D\0x1E\0x1F"
146 "\0x20\0x21\0x22\0x23\0x24\0x25\0x26\0x27"
147 "\0x28\0x29\0x2A\0x2B\0x2C\0x2D\0x2E\0x2F"
148 "\0x30\0x31\0x32\0x33\0x34\0x35\0x36\0x37"
149 "\0x38\0x39\0x3A\0x3B\0x3C\0x3D\0x3E\0x3F"
150 "\0x40\0x41\0x42\0x43\0x44\0x45\0x46\0x47"
151 "\0x48\0x49\0x4A\0x4B\0x4C\0x4D\0x4E\0x4F"
152 "\0x50\0x51\0x52\0x53\0x54\0x55\0x56\0x57"
153 "\0x58\0x59\0x5A\0x5B\0x5C\0x5D\0x5E\0x5F"
154 "\0x60\0x61\0x62\0x63\0x64\0x65\0x66\0x67"
155 "\0x68\0x69\0x6A\0x6B\0x6C\0x6D\0x6E\0x6F"
156 "\0x70\0x71\0x72\0x73\0x74\0x75\0x76\0x77"
157 "\0x78\0x79\0x7A\0x7B\0x7C\0x7D\0x7E\0x7F"
158 "\0x80\0x81\0x82\0x83\0x84\0x85\0x86\0x87"
159 "\0x88\0x89\0x8A\0x8B\0x8C\0x8D\0x8E\0x8F"
160 "\0x90\0x91\0x92\0x93\0x94\0x95\0x96\0x97"
161 "\0x98\0x99\0x9A\0x9B\0x9C\0x9D\0x9E\0x9F"
162 "\0xA0\0xA1\0xA2\0xA3\0xA4\0xA5\0xA6\0xA7"
163 "\0xA8\0xA9\0xAA\0xAB\0xAC\0xAD\0xAE\0xAF"
164 "\0xB0\0xB1\0xB2\0xB3\0xB4\0xB5\0xB6\0xB7"
165 "\0xB8\0xB9\0xBA\0xBB\0xBC\0xBD\0xBE\0xBF"
166 "\0xC0\0xC1\0xC2\0xC3\0xC4\0xC5\0xC6\0xC7"
167 "\0xC8\0xC9\0xCA\0xCB\0xCC\0xCD\0xCE\0xCF"
168 "\0xD0\0xD1\0xD2\0xD3\0xD4\0xD5\0xD6\0xD7"
169 "\0xD8\0xD9\0xDA\0xDB\0xDC\0xDD\0xDE\0xDF"
170 "\0xE0\0xE1\0xE2\0xE3\0xE4\0xE5\0xE6\0xE7"
171 "\0xE8\0xE9\0xEA\0xEB\0xEC\0xED\0xEE\0xEF"
172 "\0xF0\0xF1\0xF2\0xF3\0xF4\0xF5\0xF6\0xF7"
173 "\0xF8\0xF9\0xFA\0xFB\0xFC\0xFD\0xFE\0xFF"));
175 {for (rtl_UriCharClass eCharClass
= eFirstCharClass
;
176 eCharClass
<= eLastCharClass
;
177 eCharClass
= static_cast< rtl_UriCharClass
>(eCharClass
+ 1))
179 CPPUNIT_ASSERT_MESSAGE(
183 aText1
, eCharClass
, rtl_UriEncodeKeepEscapes
,
184 RTL_TEXTENCODING_ISO_8859_1
),
185 rtl_UriDecodeWithCharset
, RTL_TEXTENCODING_ISO_8859_1
)
187 CPPUNIT_ASSERT_MESSAGE(
191 aText1
, eCharClass
, rtl_UriEncodeCheckEscapes
,
192 RTL_TEXTENCODING_ISO_8859_1
),
193 rtl_UriDecodeWithCharset
, RTL_TEXTENCODING_ISO_8859_1
)
195 CPPUNIT_ASSERT_MESSAGE(
199 aText1
, eCharClass
, rtl_UriEncodeKeepEscapes
,
200 RTL_TEXTENCODING_UTF8
),
201 rtl_UriDecodeWithCharset
, RTL_TEXTENCODING_UTF8
)
203 CPPUNIT_ASSERT_MESSAGE(
207 aText1
, eCharClass
, rtl_UriEncodeCheckEscapes
,
208 RTL_TEXTENCODING_UTF8
),
209 rtl_UriDecodeWithCharset
, RTL_TEXTENCODING_UTF8
)
213 // Check surrogate handling:
215 aBuffer
.append(static_cast< sal_Unicode
>(0xD800)); // %ED%A0%80
216 aBuffer
.append(static_cast< sal_Unicode
>(0xD800)); // %F0%90%8F%BF
217 aBuffer
.append(static_cast< sal_Unicode
>(0xDFFF));
218 aBuffer
.append(static_cast< sal_Unicode
>(0xDFFF)); // %ED%BF%BF
219 aBuffer
.append(static_cast< sal_Unicode
>('A')); // A
220 aText1
= aBuffer
.makeStringAndClear();
221 aText2
= rtl::OUString(
222 RTL_CONSTASCII_USTRINGPARAM(
223 "%ED%A0%80" "%F0%90%8F%BF" "%ED%BF%BF" "A"));
224 CPPUNIT_ASSERT_MESSAGE(
227 aText1
, rtl_UriCharClassUric
, rtl_UriEncodeIgnoreEscapes
,
228 RTL_TEXTENCODING_UTF8
)
230 CPPUNIT_ASSERT_MESSAGE(
233 aText1
, rtl_UriCharClassUric
, rtl_UriEncodeKeepEscapes
,
234 RTL_TEXTENCODING_UTF8
)
236 CPPUNIT_ASSERT_MESSAGE(
239 aText1
, rtl_UriCharClassUric
, rtl_UriEncodeCheckEscapes
,
240 RTL_TEXTENCODING_UTF8
)
243 aText1
= rtl::OUString(
244 RTL_CONSTASCII_USTRINGPARAM(
245 "%ed%a0%80" "%f0%90%8f%bf" "%ed%bf%bf" "A"));
246 aBuffer
.appendAscii(RTL_CONSTASCII_STRINGPARAM("%ED%A0%80"));
247 aBuffer
.append(static_cast< sal_Unicode
>(0xD800));
248 aBuffer
.append(static_cast< sal_Unicode
>(0xDFFF));
249 aBuffer
.appendAscii(RTL_CONSTASCII_STRINGPARAM("%ED%BF%BF"));
250 aBuffer
.append(static_cast< sal_Unicode
>('A'));
251 aText2
= aBuffer
.makeStringAndClear();
252 CPPUNIT_ASSERT_MESSAGE(
254 (rtl::Uri::decode(aText1
, rtl_UriDecodeToIuri
, RTL_TEXTENCODING_UTF8
)
256 CPPUNIT_ASSERT_MESSAGE(
259 aText1
, rtl_UriDecodeWithCharset
, RTL_TEXTENCODING_UTF8
)
262 // Check UTF-8 handling:
264 aText1
= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%E0%83%BF"));
265 // \U+00FF encoded with three instead of two bytes
267 CPPUNIT_ASSERT_MESSAGE(
270 aText1
, rtl_UriCharClassUric
, rtl_UriEncodeCheckEscapes
,
271 RTL_TEXTENCODING_UTF8
)
274 aText1
= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%EF%BF%BF"));
275 // \U+FFFF is no legal character
277 CPPUNIT_ASSERT_MESSAGE(
280 aText1
, rtl_UriCharClassUric
, rtl_UriEncodeCheckEscapes
,
281 RTL_TEXTENCODING_UTF8
)
284 // Check IURI handling:
286 aText1
= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%30%C3%BF"));
287 aBuffer
.appendAscii(RTL_CONSTASCII_STRINGPARAM("%30"));
288 aBuffer
.append(static_cast< sal_Unicode
>(0x00FF));
289 aText2
= aBuffer
.makeStringAndClear();
290 CPPUNIT_ASSERT_MESSAGE(
292 (rtl::Uri::decode(aText1
, rtl_UriDecodeToIuri
, RTL_TEXTENCODING_UTF8
)
295 // Check modified rtl_UriCharClassUnoParamValue (removed '[' and ']'):
297 aText1
= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("[]%5B%5D"));
298 aText2
= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%5B%5D%5B%5D"));
299 CPPUNIT_ASSERT_MESSAGE(
302 aText1
, rtl_UriCharClassUnoParamValue
, rtl_UriEncodeCheckEscapes
,
303 RTL_TEXTENCODING_ASCII_US
)
306 // Check Uri::convertRelToAbs:
314 static RelToAbsTest
const aRelToAbsTest
[]
315 = { // The following tests are taken from RFC 2396:
316 { "http://a/b/c/d;p?q", "g:h", "g:h" },
317 { "http://a/b/c/d;p?q", "g", "http://a/b/c/g" },
318 { "http://a/b/c/d;p?q", "./g", "http://a/b/c/g" },
319 { "http://a/b/c/d;p?q", "g/", "http://a/b/c/g/" },
320 { "http://a/b/c/d;p?q", "/g", "http://a/g" },
321 { "http://a/b/c/d;p?q", "//g", "http://g" },
322 { "http://a/b/c/d;p?q", "?y", "http://a/b/c/?y" },
323 { "http://a/b/c/d;p?q", "g?y", "http://a/b/c/g?y" },
324 { "http://a/b/c/d;p?q", "#s", "http://a/b/c/d;p?q#s" },
325 { "http://a/b/c/d;p?q", "g#s", "http://a/b/c/g#s" },
326 { "http://a/b/c/d;p?q", "g?y#s", "http://a/b/c/g?y#s" },
327 { "http://a/b/c/d;p?q", ";x", "http://a/b/c/;x" },
328 { "http://a/b/c/d;p?q", "g;x", "http://a/b/c/g;x" },
329 { "http://a/b/c/d;p?q", "g;x?y#s", "http://a/b/c/g;x?y#s" },
330 { "http://a/b/c/d;p?q", ".", "http://a/b/c/" },
331 { "http://a/b/c/d;p?q", "./", "http://a/b/c/" },
332 { "http://a/b/c/d;p?q", "..", "http://a/b/" },
333 { "http://a/b/c/d;p?q", "../", "http://a/b/" },
334 { "http://a/b/c/d;p?q", "../g", "http://a/b/g" },
335 { "http://a/b/c/d;p?q", "../..", "http://a/" },
336 { "http://a/b/c/d;p?q", "../../", "http://a/" },
337 { "http://a/b/c/d;p?q", "../../g", "http://a/g" },
338 { "http://a/b/c/d;p?q", "", "http://a/b/c/d;p?q" },
339 { "http://a/b/c/d;p?q", "../../../g", "http://a/../g" },
340 { "http://a/b/c/d;p?q", "../../../../g", "http://a/../../g" },
341 { "http://a/b/c/d;p?q", "/./g", "http://a/./g" },
342 { "http://a/b/c/d;p?q", "/../g", "http://a/../g" },
343 { "http://a/b/c/d;p?q", "g.", "http://a/b/c/g." },
344 { "http://a/b/c/d;p?q", ".g", "http://a/b/c/.g" },
345 { "http://a/b/c/d;p?q", "g..", "http://a/b/c/g.." },
346 { "http://a/b/c/d;p?q", "..g", "http://a/b/c/..g" },
347 { "http://a/b/c/d;p?q", "./../g", "http://a/b/g" },
348 { "http://a/b/c/d;p?q", "./g/.", "http://a/b/c/g/" },
349 { "http://a/b/c/d;p?q", "g/./h", "http://a/b/c/g/h" },
350 { "http://a/b/c/d;p?q", "g/../h", "http://a/b/c/h" },
351 { "http://a/b/c/d;p?q", "g;x=1/./y", "http://a/b/c/g;x=1/y" },
352 { "http://a/b/c/d;p?q", "g;x=1/../y", "http://a/b/c/y" },
353 { "http://a/b/c/d;p?q", "g?y/./x", "http://a/b/c/g?y/./x" },
354 { "http://a/b/c/d;p?q", "g?y/../x", "http://a/b/c/g?y/../x" },
355 { "http://a/b/c/d;p?q", "g#s/./x", "http://a/b/c/g#s/./x" },
356 { "http://a/b/c/d;p?q", "g#s/../x", "http://a/b/c/g#s/../x" },
357 { "http://a/b/c/d;p?q", "http:g", "http:g" },
358 { "http!://a/b/c/d;p?q", "g:h", "g:h" },
359 { "http!://a/b/c/d;p?q", "g", 0 },
360 { "http:b/c/d;p?q", "g:h", "g:h" },
361 { "http:b/c/d;p?q", "g", 0 },
362 { "http://a/b/../", "../c", "http://a/b/../../c" },
363 { "http://a/b/..", "../c", "http://a/c" },
364 { "http://a/./b/", ".././.././../c", "http://a/./../../c" } };
365 for (std::size_t i
= 0; i
< sizeof aRelToAbsTest
/ sizeof (RelToAbsTest
); ++i
)
368 bool bMalformed
= false;
370 aAbs
= rtl::Uri::convertRelToAbs(
371 rtl::OUString::createFromAscii(aRelToAbsTest
[i
].pBase
),
372 rtl::OUString::createFromAscii(aRelToAbsTest
[i
].pRel
));
373 } catch (rtl::MalformedUriException
&) {
377 ? aRelToAbsTest
[i
].pAbs
!= 0
378 : (aRelToAbsTest
[i
].pAbs
== 0
379 || !aAbs
.equalsAscii(aRelToAbsTest
[i
].pAbs
)))
382 "FAILED convertRelToAbs(%s, %s) -> %s != %s\n",
383 aRelToAbsTest
[i
].pBase
, aRelToAbsTest
[i
].pRel
,
386 : rtl::OUStringToOString(
387 aAbs
, RTL_TEXTENCODING_UTF8
).getStr()),
388 (aRelToAbsTest
[i
].pAbs
== 0
389 ? "<MALFORMED>" : aRelToAbsTest
[i
].pAbs
));
390 CPPUNIT_ASSERT(false);
394 // Check encode with unusual text encodings:
397 sal_Unicode
const aText1U
[] = { ' ', '!', 0x0401, 0x045F, 0 };
398 aText1
= rtl::OUString(aText1U
);
399 aText2
= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%20!%A1%FF"));
400 CPPUNIT_ASSERT_MESSAGE(
403 aText1
, rtl_UriCharClassUric
, rtl_UriEncodeIgnoreEscapes
,
404 RTL_TEXTENCODING_ISO_8859_5
)
406 CPPUNIT_ASSERT_MESSAGE(
409 aText2
, rtl_UriDecodeWithCharset
, RTL_TEXTENCODING_ISO_8859_5
)
413 sal_Unicode
const aText1U
[] = { ' ', '!', 0x0401, 0x0700, 0x045F, 0 };
414 aText1
= rtl::OUString(aText1U
);
415 sal_Unicode
const aText2U
[] = {
416 '%', '2', '0', '!', '%', 'A', '1', 0x0700, '%', 'F', 'F', 0 };
417 aText2
= rtl::OUString(aText2U
);
418 CPPUNIT_ASSERT_MESSAGE(
421 aText1
, rtl_UriCharClassUric
, rtl_UriEncodeIgnoreEscapes
,
422 RTL_TEXTENCODING_ISO_8859_5
)
424 CPPUNIT_ASSERT_MESSAGE(
427 aText2
, rtl_UriDecodeWithCharset
, RTL_TEXTENCODING_ISO_8859_5
)
431 sal_Unicode
const aText1U
[] = { ' ', '!', 0x028A, 0xD849, 0xDD13, 0 };
432 aText1
= rtl::OUString(aText1U
);
433 aText2
= rtl::OUString(
434 RTL_CONSTASCII_USTRINGPARAM("%20!%81%30%B1%33%95%39%C5%37"));
435 CPPUNIT_ASSERT_MESSAGE(
438 aText1
, rtl_UriCharClassUric
, rtl_UriEncodeIgnoreEscapes
,
439 RTL_TEXTENCODING_GB_18030
)
441 CPPUNIT_ASSERT_MESSAGE(
444 aText2
, rtl_UriDecodeWithCharset
, RTL_TEXTENCODING_GB_18030
)
448 // Check strict mode:
451 sal_Unicode
const aText1U
[] = { ' ', '!', 0x0401, 0x0700, 0x045F, 0 };
452 aText1
= rtl::OUString(aText1U
);
453 aText2
= rtl::OUString();
454 CPPUNIT_ASSERT_MESSAGE(
457 aText1
, rtl_UriCharClassUric
, rtl_UriEncodeStrict
,
458 RTL_TEXTENCODING_ISO_8859_5
)
462 aText1
= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%20%C4%80%FF"));
463 aText2
= rtl::OUString();
464 CPPUNIT_ASSERT_MESSAGE(
467 aText1
, rtl_UriDecodeStrict
, RTL_TEXTENCODING_UTF8
)
471 aText1
= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%81 "));
472 aText2
= rtl::OUString();
473 CPPUNIT_ASSERT_MESSAGE(
476 aText1
, rtl_UriDecodeStrict
, RTL_TEXTENCODING_GB_18030
)
480 aText1
= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%81%20"));
481 aText2
= rtl::OUString();
482 CPPUNIT_ASSERT_MESSAGE(
485 aText1
, rtl_UriDecodeStrict
, RTL_TEXTENCODING_GB_18030
)
489 aText1
= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%81%30%B1%33"));
490 sal_Unicode
const aText2U
[] = { 0x028A, 0 };
491 aText2
= rtl::OUString(aText2U
);
492 CPPUNIT_ASSERT_MESSAGE(
495 aText1
, rtl_UriDecodeStrict
, RTL_TEXTENCODING_GB_18030
)
499 aText1
= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%810%B13"));
500 sal_Unicode
const aText2U
[] = { 0x028A, 0 };
501 aText2
= rtl::OUString(aText2U
);
502 CPPUNIT_ASSERT_MESSAGE(
505 aText1
, rtl_UriDecodeStrict
, RTL_TEXTENCODING_GB_18030
)
509 // Check rtl_UriEncodeStrictKeepEscapes mode:
512 aText1
= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%%ea%c3%aa"));
513 aText2
= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%25%EA%C3%AA"));
514 CPPUNIT_ASSERT_MESSAGE(
517 aText1
, rtl_UriCharClassUric
, rtl_UriEncodeStrictKeepEscapes
,
518 RTL_TEXTENCODING_UTF8
)
522 sal_Unicode
const aText1U
[] = { 0x00EA, 0 };
523 aText1
= rtl::OUString(aText1U
);
524 aText2
= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%C3%AA"));
525 CPPUNIT_ASSERT_MESSAGE(
528 aText1
, rtl_UriCharClassUric
, rtl_UriEncodeStrictKeepEscapes
,
529 RTL_TEXTENCODING_UTF8
)
533 sal_Unicode
const aText1U
[] = { ' ', '!', 0x0401, 0x0700, 0x045F, 0 };
534 aText1
= rtl::OUString(aText1U
);
535 aText2
= rtl::OUString();
536 CPPUNIT_ASSERT_MESSAGE(
539 aText1
, rtl_UriCharClassUric
, rtl_UriEncodeStrictKeepEscapes
,
540 RTL_TEXTENCODING_ISO_8859_5
)
547 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(Test
, "rtl_testuri");