merge the formfield patch from ooo-build
[ooovba.git] / sal / qa / rtl / uri / rtl_testuri.cxx
blob8a018416e67a2695e361c24c7683f71c09421132
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: rtl_testuri.cxx,v $
10 * $Revision: 1.9 $
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"
36 #include "rtl/uri.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"
44 #include <cstddef>
45 #include <stdio.h>
47 namespace {
49 struct Test: public CppUnit::TestFixture {
50 void test_Uri();
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;
62 rtl::OUString aText1;
63 rtl::OUString aText2;
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"));
85 aText2 = aText1;
86 {for (rtl_UriCharClass eCharClass = eFirstCharClass;
87 eCharClass <= eLastCharClass;
88 eCharClass = static_cast< rtl_UriCharClass >(eCharClass + 1))
90 CPPUNIT_ASSERT_MESSAGE(
91 "failure 1",
92 (rtl::Uri::decode(
93 rtl::Uri::encode(
94 aText1, eCharClass, rtl_UriEncodeKeepEscapes,
95 RTL_TEXTENCODING_ISO_8859_1),
96 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ASCII_US)
97 == aText2));
98 CPPUNIT_ASSERT_MESSAGE(
99 "failure 2",
100 (rtl::Uri::decode(
101 rtl::Uri::encode(
102 aText1, eCharClass, rtl_UriEncodeCheckEscapes,
103 RTL_TEXTENCODING_ISO_8859_1),
104 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ASCII_US)
105 == aText2));
106 CPPUNIT_ASSERT_MESSAGE(
107 "failure 3",
108 (rtl::Uri::decode(
109 rtl::Uri::encode(
110 aText1, eCharClass, rtl_UriEncodeKeepEscapes,
111 RTL_TEXTENCODING_ISO_8859_1),
112 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1)
113 == aText2));
114 CPPUNIT_ASSERT_MESSAGE(
115 "failure 4",
116 (rtl::Uri::decode(
117 rtl::Uri::encode(
118 aText1, eCharClass, rtl_UriEncodeCheckEscapes,
119 RTL_TEXTENCODING_ISO_8859_1),
120 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1)
121 == aText2));
122 CPPUNIT_ASSERT_MESSAGE(
123 "failure 5",
124 (rtl::Uri::decode(
125 rtl::Uri::encode(
126 aText1, eCharClass, rtl_UriEncodeKeepEscapes,
127 RTL_TEXTENCODING_ISO_8859_1),
128 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8)
129 == aText2));
130 CPPUNIT_ASSERT_MESSAGE(
131 "failure 6",
132 (rtl::Uri::decode(
133 rtl::Uri::encode(
134 aText1, eCharClass, rtl_UriEncodeCheckEscapes,
135 RTL_TEXTENCODING_ISO_8859_1),
136 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8)
137 == aText2));
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"));
174 aText2 = aText1;
175 {for (rtl_UriCharClass eCharClass = eFirstCharClass;
176 eCharClass <= eLastCharClass;
177 eCharClass = static_cast< rtl_UriCharClass >(eCharClass + 1))
179 CPPUNIT_ASSERT_MESSAGE(
180 "failure 7",
181 (rtl::Uri::decode(
182 rtl::Uri::encode(
183 aText1, eCharClass, rtl_UriEncodeKeepEscapes,
184 RTL_TEXTENCODING_ISO_8859_1),
185 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1)
186 == aText2));
187 CPPUNIT_ASSERT_MESSAGE(
188 "failure 8",
189 (rtl::Uri::decode(
190 rtl::Uri::encode(
191 aText1, eCharClass, rtl_UriEncodeCheckEscapes,
192 RTL_TEXTENCODING_ISO_8859_1),
193 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1)
194 == aText2));
195 CPPUNIT_ASSERT_MESSAGE(
196 "failure 9",
197 (rtl::Uri::decode(
198 rtl::Uri::encode(
199 aText1, eCharClass, rtl_UriEncodeKeepEscapes,
200 RTL_TEXTENCODING_UTF8),
201 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8)
202 == aText2));
203 CPPUNIT_ASSERT_MESSAGE(
204 "failure 10",
205 (rtl::Uri::decode(
206 rtl::Uri::encode(
207 aText1, eCharClass, rtl_UriEncodeCheckEscapes,
208 RTL_TEXTENCODING_UTF8),
209 rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8)
210 == aText2));
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(
225 "failure 11",
226 (rtl::Uri::encode(
227 aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
228 RTL_TEXTENCODING_UTF8)
229 == aText2));
230 CPPUNIT_ASSERT_MESSAGE(
231 "failure 12",
232 (rtl::Uri::encode(
233 aText1, rtl_UriCharClassUric, rtl_UriEncodeKeepEscapes,
234 RTL_TEXTENCODING_UTF8)
235 == aText2));
236 CPPUNIT_ASSERT_MESSAGE(
237 "failure 13",
238 (rtl::Uri::encode(
239 aText1, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes,
240 RTL_TEXTENCODING_UTF8)
241 == aText2));
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(
253 "failure 14",
254 (rtl::Uri::decode(aText1, rtl_UriDecodeToIuri, RTL_TEXTENCODING_UTF8)
255 == aText2));
256 CPPUNIT_ASSERT_MESSAGE(
257 "failure 15",
258 (rtl::Uri::decode(
259 aText1, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8)
260 == aText2));
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
266 aText2 = aText1;
267 CPPUNIT_ASSERT_MESSAGE(
268 "failure 16",
269 (rtl::Uri::encode(
270 aText1, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes,
271 RTL_TEXTENCODING_UTF8)
272 == aText2));
274 aText1 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%EF%BF%BF"));
275 // \U+FFFF is no legal character
276 aText2 = aText1;
277 CPPUNIT_ASSERT_MESSAGE(
278 "failure 17",
279 (rtl::Uri::encode(
280 aText1, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes,
281 RTL_TEXTENCODING_UTF8)
282 == aText2));
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(
291 "failure 18",
292 (rtl::Uri::decode(aText1, rtl_UriDecodeToIuri, RTL_TEXTENCODING_UTF8)
293 == aText2));
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(
300 "failure 19",
301 (rtl::Uri::encode(
302 aText1, rtl_UriCharClassUnoParamValue, rtl_UriEncodeCheckEscapes,
303 RTL_TEXTENCODING_ASCII_US)
304 == aText2));
306 // Check Uri::convertRelToAbs:
308 struct RelToAbsTest
310 char const * pBase;
311 char const * pRel;
312 char const * pAbs;
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)
367 rtl::OUString aAbs;
368 bool bMalformed = false;
369 try {
370 aAbs = rtl::Uri::convertRelToAbs(
371 rtl::OUString::createFromAscii(aRelToAbsTest[i].pBase),
372 rtl::OUString::createFromAscii(aRelToAbsTest[i].pRel));
373 } catch (rtl::MalformedUriException &) {
374 bMalformed = true;
376 if (bMalformed
377 ? aRelToAbsTest[i].pAbs != 0
378 : (aRelToAbsTest[i].pAbs == 0
379 || !aAbs.equalsAscii(aRelToAbsTest[i].pAbs)))
381 printf(
382 "FAILED convertRelToAbs(%s, %s) -> %s != %s\n",
383 aRelToAbsTest[i].pBase, aRelToAbsTest[i].pRel,
384 (bMalformed
385 ? "<MALFORMED>"
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(
401 "failure 20",
402 (rtl::Uri::encode(
403 aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
404 RTL_TEXTENCODING_ISO_8859_5)
405 == aText2));
406 CPPUNIT_ASSERT_MESSAGE(
407 "failure 20a",
408 (rtl::Uri::decode(
409 aText2, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_5)
410 == aText1));
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(
419 "failure 21",
420 (rtl::Uri::encode(
421 aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
422 RTL_TEXTENCODING_ISO_8859_5)
423 == aText2));
424 CPPUNIT_ASSERT_MESSAGE(
425 "failure 21a",
426 (rtl::Uri::decode(
427 aText2, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_5)
428 == aText1));
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(
436 "failure 22",
437 (rtl::Uri::encode(
438 aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes,
439 RTL_TEXTENCODING_GB_18030)
440 == aText2));
441 CPPUNIT_ASSERT_MESSAGE(
442 "failure 22a",
443 (rtl::Uri::decode(
444 aText2, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_GB_18030)
445 == aText1));
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(
455 "failure 23",
456 (rtl::Uri::encode(
457 aText1, rtl_UriCharClassUric, rtl_UriEncodeStrict,
458 RTL_TEXTENCODING_ISO_8859_5)
459 == aText2));
462 aText1 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%20%C4%80%FF"));
463 aText2 = rtl::OUString();
464 CPPUNIT_ASSERT_MESSAGE(
465 "failure 24",
466 (rtl::Uri::decode(
467 aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_UTF8)
468 == aText2));
471 aText1 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%81 "));
472 aText2 = rtl::OUString();
473 CPPUNIT_ASSERT_MESSAGE(
474 "failure 25",
475 (rtl::Uri::decode(
476 aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030)
477 == aText2));
480 aText1 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%81%20"));
481 aText2 = rtl::OUString();
482 CPPUNIT_ASSERT_MESSAGE(
483 "failure 26",
484 (rtl::Uri::decode(
485 aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030)
486 == aText2));
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(
493 "failure 27",
494 (rtl::Uri::decode(
495 aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030)
496 == aText2));
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(
503 "failure 28",
504 (rtl::Uri::decode(
505 aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030)
506 == aText2));
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(
515 "failure 29",
516 (rtl::Uri::encode(
517 aText1, rtl_UriCharClassUric, rtl_UriEncodeStrictKeepEscapes,
518 RTL_TEXTENCODING_UTF8)
519 == aText2));
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(
526 "failure 30",
527 (rtl::Uri::encode(
528 aText1, rtl_UriCharClassUric, rtl_UriEncodeStrictKeepEscapes,
529 RTL_TEXTENCODING_UTF8)
530 == aText2));
533 sal_Unicode const aText1U[] = { ' ', '!', 0x0401, 0x0700, 0x045F, 0 };
534 aText1 = rtl::OUString(aText1U);
535 aText2 = rtl::OUString();
536 CPPUNIT_ASSERT_MESSAGE(
537 "failure 23",
538 (rtl::Uri::encode(
539 aText1, rtl_UriCharClassUric, rtl_UriEncodeStrictKeepEscapes,
540 RTL_TEXTENCODING_ISO_8859_5)
541 == aText2));
547 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(Test, "rtl_testuri");
548 NOADDITIONAL;