xref: /aoo4110/main/tools/workben/urltest.cxx (revision b1cdbd2c)
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_tools.hxx"
26 #include <tools/inetmime.hxx>
27 #include <tools/urlobj.hxx>
28 #include "com/sun/star/util/XStringWidth.hpp"
29 #include "com/sun/star/uno/Reference.hxx"
30 #include "cppuhelper/implbase1.hxx"
31 #include "osl/thread.h"
32 #include "rtl/string.h"
33 #include "rtl/string.hxx"
34 #include "rtl/textenc.h"
35 #include "rtl/ustring.h"
36 #include "rtl/ustring.hxx"
37 
38 #include <cstddef>
39 #include <cstdlib>
40 #include <iostream>
41 #include <ostream>
42 #include <stdio.h>
43 
44 using namespace com::sun;
45 
operator <<(std::ostream & out,rtl::OUString const & value)46 std::ostream & operator <<(std::ostream & out, rtl::OUString const & value) {
47     out << rtl::OUStringToOString(value, RTL_TEXTENCODING_ASCII_US).getStr();
48     return out;
49 }
50 
51 namespace {
52 
assertEqual(rtl::OUString const & message,T1 const & expected,T2 const & actual)53 template< typename T1, typename T2 > bool assertEqual(
54     rtl::OUString const & message, T1 const & expected, T2 const & actual)
55 {
56     bool success = expected == actual;
57     if (!success) {
58         std::cout
59             << "FAILED " << message << ": " << expected << " != " << actual
60             << '\n';
61     }
62     return success;
63 }
64 
65 }
66 
67 //============================================================================
68 //
69 //  testRelToAbs
70 //
71 //============================================================================
72 
73 struct RelToAbsTest
74 {
75 	sal_Char const * m_pBase;
76 	sal_Char const * m_pRel;
77 	sal_Char const * m_pAbs;
78 	sal_Char const * m_pAlt;
79 };
80 
81 //============================================================================
testRelToAbs(RelToAbsTest const * pTest,std::size_t nSize)82 bool testRelToAbs(RelToAbsTest const * pTest, std::size_t nSize)
83 {
84 	bool bSuccess = true;
85 	INetURLObject aBase;
86 	String aTest;
87 	for (std::size_t i = 0; i < nSize; ++i)
88 	{
89 		if (pTest[i].m_pBase)
90 		{
91 			aBase.SetURL(pTest[i].m_pBase);
92 		}
93 		if (aBase.HasError())
94 		{
95 			printf(" BAD BASE %s\n",
96 				   pTest[i].m_pBase ? pTest[i].m_pBase : "");
97             bSuccess = false;
98 			continue;
99 		}
100 		INetURLObject aAbs;
101 		aBase.GetNewAbsURL(pTest[i].m_pRel, &aAbs);
102 		ByteString aTheAbs(String(aAbs.GetMainURL(INetURLObject::NO_DECODE)),
103 						   RTL_TEXTENCODING_ISO_8859_1);
104 		if (!(aTheAbs.Equals(pTest[i].m_pAbs)
105               || pTest[i].m_pAlt && aTheAbs.Equals(pTest[i].m_pAlt)))
106 		{
107 			printf(" BAD GetNewAbsURL %s -> %s (%s)\n", pTest[i].m_pRel,
108 				   aTheAbs.GetBuffer(), pTest[i].m_pAbs);
109 			bSuccess = false;
110 		}
111         aTheAbs = ByteString(
112             String(
113                 INetURLObject::GetAbsURL(
114                     aBase.GetMainURL(INetURLObject::NO_DECODE),
115                     UniString(pTest[i].m_pRel, RTL_TEXTENCODING_ISO_8859_1))),
116             RTL_TEXTENCODING_ISO_8859_1);
117 		if (!(aTheAbs.Equals(pTest[i].m_pAbs)
118               || pTest[i].m_pAlt && aTheAbs.Equals(pTest[i].m_pAlt)))
119 		{
120 			printf(" BAD GetAbsURL %s -> %s (%s)\n", pTest[i].m_pRel,
121 				   aTheAbs.GetBuffer(), pTest[i].m_pAbs);
122 			bSuccess = false;
123 		}
124 	}
125 	printf("\n");
126 	return bSuccess;
127 }
128 
129 //============================================================================
130 //
131 //  testSetFSys
132 //
133 //============================================================================
134 
135 struct SetFSysTest
136 {
137 	sal_Char const * m_pPath;
138 	INetURLObject::FSysStyle m_eStyle;
139 	sal_Char const * m_pUrl;
140 };
141 
142 //============================================================================
toString(INetURLObject::FSysStyle eStyle)143 inline sal_Char const * toString(INetURLObject::FSysStyle eStyle)
144 {
145 	static sal_Char aBuffer[5];
146 	int i = 0;
147 	if (eStyle & INetURLObject::FSYS_VOS)
148 		aBuffer[i++] = 'V';
149 	if (eStyle & INetURLObject::FSYS_UNX)
150 		aBuffer[i++] = 'U';
151 	if (eStyle & INetURLObject::FSYS_DOS)
152 		aBuffer[i++] = 'D';
153 	if (eStyle & INetURLObject::FSYS_MAC)
154 		aBuffer[i++] = 'M';
155 	if (i == 0)
156 		aBuffer[i++] = '-';
157 	aBuffer[i] = '\0';
158 	return aBuffer;
159 }
160 
161 //============================================================================
testSetFSys(SetFSysTest const * pTest,std::size_t nSize)162 bool testSetFSys(SetFSysTest const * pTest, std::size_t nSize)
163 {
164 	bool bSuccess = true;
165 	String aPath;
166 	for (std::size_t i = 0; i < nSize; ++i)
167 	{
168 		if (pTest[i].m_pPath)
169 			aPath = String::CreateFromAscii(pTest[i].m_pPath);
170 		if (aPath.Len() == 0)
171 		{
172 			printf(" NO PATH\n");
173 			continue;
174 		}
175 		INetURLObject aUrl1(aPath, pTest[i].m_eStyle);
176 		INetURLObject aUrl2;
177 		aUrl2.setFSysPath(aPath, pTest[i].m_eStyle);
178 		if (aUrl1.GetMainURL(INetURLObject::NO_DECODE).
179 			          equalsAscii(pTest[i].m_pUrl)
180 			&& aUrl2.GetMainURL(INetURLObject::NO_DECODE).
181 			             equalsAscii(pTest[i].m_pUrl))
182 			printf("  ok %s %s -> %s\n",
183 				   ByteString(aPath, RTL_TEXTENCODING_ISO_8859_1).GetBuffer(),
184 				   toString(pTest[i].m_eStyle), pTest[i].m_pUrl);
185 		else
186 		{
187 			String aTestA = aUrl1.GetMainURL(INetURLObject::NO_DECODE);
188 			String aTestB = aUrl2.GetMainURL(INetURLObject::NO_DECODE);
189 
190 			printf(" BAD %s %s -> %s, %s (%s)\n",
191 				   ByteString(aPath, RTL_TEXTENCODING_ISO_8859_1).GetBuffer(),
192 				   toString(pTest[i].m_eStyle),
193 				   ByteString(aTestA, RTL_TEXTENCODING_ISO_8859_1).GetBuffer(),
194 				   ByteString(aTestB, RTL_TEXTENCODING_ISO_8859_1).GetBuffer(),
195 				   pTest[i].m_pUrl);
196 			bSuccess = false;
197 		}
198 	}
199 	printf("\n");
200 	return bSuccess;
201 }
202 
203 //============================================================================
204 //
205 //  main
206 //
207 //============================================================================
208 
209 namespace {
210 
211 class StringWidth: public cppu::WeakImplHelper1< star::util::XStringWidth >
212 {
213 public:
queryStringWidth(rtl::OUString const & rString)214     virtual sal_Int32 SAL_CALL queryStringWidth(rtl::OUString const & rString)
215         throw (star::uno::RuntimeException)
216     {
217         return rString.getLength();
218     }
219 };
220 
abbreviate(INetURLObject aObj)221 void abbreviate(INetURLObject aObj)
222 {
223     star::uno::Reference< star::util::XStringWidth > xWidth(new StringWidth);
224     sal_Int32 nMax = aObj.GetMainURL(INetURLObject::NO_DECODE).getLength() + 10;
225     for (sal_Int32 i = -10; i <= nMax; ++i)
226     {
227         rtl::OString
228             aAbbreviated(rtl::OUStringToOString(
229                              aObj.getAbbreviated(xWidth,
230                                                  i,
231                                                  INetURLObject::NO_DECODE),
232                              RTL_TEXTENCODING_UTF8));
233         printf(
234             "%4ld: <%s", static_cast< long int >(i), aAbbreviated.getStr());
235         for (sal_Int32 j = aAbbreviated.getLength(); j < i; ++j)
236             printf(" ");
237         printf(">\n");
238     }
239 }
240 
test_getSegmentCount(char const * url,bool ignoreFinalSlash,sal_Int32 result)241 bool test_getSegmentCount(
242     char const * url, bool ignoreFinalSlash, sal_Int32 result)
243 {
244     return
245         assertEqual(
246             rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("test_getSegmentCount")),
247             result,
248             INetURLObject(rtl::OUString::createFromAscii(url)).getSegmentCount(
249                 ignoreFinalSlash));
250 }
251 
test_insertName(char const * url,char const * name,bool appendFinalSlash,sal_Int32 index,bool ignoreFinalSlash,bool success,char const * result)252 bool test_insertName(
253     char const * url, char const * name, bool appendFinalSlash, sal_Int32 index,
254     bool ignoreFinalSlash, bool success, char const * result)
255 {
256     INetURLObject tmp(rtl::OUString::createFromAscii(url));
257     return
258         assertEqual(
259             rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("test_insertName")),
260             success,
261             tmp.insertName(
262                 rtl::OUString::createFromAscii(name), appendFinalSlash, index,
263                 ignoreFinalSlash)) &
264         assertEqual(
265             rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("test_insertName")),
266             rtl::OUString::createFromAscii(result),
267             tmp.GetMainURL(INetURLObject::NO_DECODE));
268 }
269 
test_removeSegment(char const * url,sal_Int32 index,bool ignoreFinalSlash,bool success,char const * result)270 bool test_removeSegment(
271     char const * url, sal_Int32 index, bool ignoreFinalSlash, bool success,
272     char const * result)
273 {
274     INetURLObject tmp(rtl::OUString::createFromAscii(url));
275     return
276         assertEqual(
277             rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("test_removeSegment")),
278             success, tmp.removeSegment(index, ignoreFinalSlash)) &
279         assertEqual(
280             rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("test_removeSegment")),
281             rtl::OUString::createFromAscii(result),
282             tmp.GetMainURL(INetURLObject::NO_DECODE));
283 }
284 
285 }
286 
287 int
288 #if defined WNT
289 __cdecl
290 #endif // WNT
main()291 main()
292 {
293 	bool bSuccess = true;
294 
295 	if (true)
296 	{
297 		// The data for this test is taken from the files
298 		// <http://www.ics.uci.edu/~fielding/url/testN.html> with N = 1,
299 		// ..., 3, as of August 28, 2000:
300 		static RelToAbsTest const aTest[]
301 			= { //{ "http://a/b/c/d;p?q", "g:h", "g:h", 0 },
302 				{ "http://a/b/c/d;p?q", "g", "http://a/b/c/g", 0 },
303 				{ 0, "./g", "http://a/b/c/g", 0 },
304 				{ 0, "g/", "http://a/b/c/g/", 0 },
305 				{ 0, "/g", "http://a/g", 0 },
306 				{ 0, "//g", "http://g", "http://g/" },
307 				//{ 0, "?y", "http://a/b/c/d;p?y", 0 },
308 				{ 0, "g?y", "http://a/b/c/g?y", 0 },
309 				//{ 0, "#s", "http://a/b/c/d;p?q#s", 0 },
310 				{ 0, "g#s", "http://a/b/c/g#s", 0 },
311 				{ 0, "g?y#s", "http://a/b/c/g?y#s", 0 },
312 				{ 0, ";x", "http://a/b/c/;x", 0 },
313 				{ 0, "g;x", "http://a/b/c/g;x", 0 },
314 				{ 0, "g;x?y#s", "http://a/b/c/g;x?y#s", 0 },
315 				{ 0, ".", "http://a/b/c/", 0 },
316 				{ 0, "./", "http://a/b/c/", 0 },
317 				{ 0, "..", "http://a/b/", 0 },
318 				{ 0, "../", "http://a/b/", 0 },
319 				{ 0, "../g", "http://a/b/g", 0 },
320 				{ 0, "../..", "http://a/", 0 },
321 				{ 0, "../../", "http://a/", 0 },
322 				{ 0, "../../g", "http://a/g", 0 },
323 				//{ 0, "", "http://a/b/c/d;p?q", 0 },
324 				{ 0, "../../../g", "http://a/../g", "http://a/g" },
325 				{ 0, "../../../../g", "http://a/../../g", "http://a/g" },
326 				{ 0, "/./g", "http://a/./g", 0 },
327 				{ 0, "/../g", "http://a/../g", 0 },
328 				{ 0, "g.", "http://a/b/c/g.", 0 },
329 				{ 0, ".g", "http://a/b/c/.g", 0 },
330 				{ 0, "g..", "http://a/b/c/g..", 0 },
331 				{ 0, "..g", "http://a/b/c/..g", 0 },
332 				{ 0, "./../g", "http://a/b/g", 0 },
333 				{ 0, "./g/.", "http://a/b/c/g/", 0 },
334 				{ 0, "g/./h", "http://a/b/c/g/h", 0 },
335 				{ 0, "g/../h", "http://a/b/c/h", 0 },
336 				{ 0, "g;x=1/./y", "http://a/b/c/g;x=1/y", 0 },
337 				{ 0, "g;x=1/../y", "http://a/b/c/y", 0 },
338 				{ 0, "g?y/./x", "http://a/b/c/g?y/./x", 0 },
339 				{ 0, "g?y/../x", "http://a/b/c/g?y/../x", 0 },
340 				{ 0, "g#s/./x", "http://a/b/c/g#s/./x", 0 },
341 				{ 0, "g#s/../x", "http://a/b/c/g#s/../x", 0 },
342 				{ 0, "http:g", "http:g", "http://a/b/c/g" },
343 				//{ 0, "http:", "http:", 0 },
344 				{ "http://a/b/c/d;p?q=1/2", "g", "http://a/b/c/g", 0 },
345 				{ 0, "./g", "http://a/b/c/g", 0 },
346 				{ 0, "g/", "http://a/b/c/g/", 0 },
347 				{ 0, "/g", "http://a/g", 0 },
348 				{ 0, "//g", "http://g", "http://g/" },
349 				{ 0, "g?y", "http://a/b/c/g?y", 0 },
350 				{ 0, "g?y/./x", "http://a/b/c/g?y/./x", 0 },
351 				{ 0, "g?y/../x", "http://a/b/c/g?y/../x", 0 },
352 				{ 0, "g#s", "http://a/b/c/g#s", 0 },
353 				{ 0, "g#s/./x", "http://a/b/c/g#s/./x", 0 },
354 				{ 0, "g#s/../x", "http://a/b/c/g#s/../x", 0 },
355 				{ 0, "./", "http://a/b/c/", 0 },
356 				{ 0, "../", "http://a/b/", 0 },
357 				{ 0, "../g", "http://a/b/g", 0 },
358 				{ 0, "../../", "http://a/", 0 },
359 				{ 0, "../../g", "http://a/g", 0 },
360 				{ "http://a/b/c/d;p=1/2?q", "g", "http://a/b/c/d;p=1/g", 0 },
361 				{ 0, "./g", "http://a/b/c/d;p=1/g", 0 },
362 				{ 0, "g/", "http://a/b/c/d;p=1/g/", 0 },
363 				{ 0, "g?y", "http://a/b/c/d;p=1/g?y", 0 },
364 				{ 0, ";x", "http://a/b/c/d;p=1/;x", 0 },
365 				{ 0, "g;x", "http://a/b/c/d;p=1/g;x", 0 },
366 				{ 0, "g;x=1/./y", "http://a/b/c/d;p=1/g;x=1/y", 0 },
367 				{ 0, "g;x=1/../y", "http://a/b/c/d;p=1/y", 0 },
368 				{ 0, "./", "http://a/b/c/d;p=1/", 0 },
369 				{ 0, "../", "http://a/b/c/", 0 },
370 				{ 0, "../g", "http://a/b/c/g", 0 },
371 				{ 0, "../../", "http://a/b/", 0 },
372 				{ 0, "../../g", "http://a/b/g", 0 },
373                 { "file:///", "generic:", "file:///generic:", 0 },
374                 { 0, "generic:#fragment", "file:///generic:#fragment", 0 },
375                 { 0, "generic:something", "generic:something", 0 },
376                 { 0, "c:/foo/bar", "file:///c:/foo/bar", 0 },
377                 { 0, "c:\\foo\\bar", "file:///c:%5Cfoo%5Cbar", 0 } };
378 		if (!testRelToAbs(aTest, sizeof aTest / sizeof (RelToAbsTest)))
379 			bSuccess = false;
380 	}
381 
382 	if (false)
383 	{
384 		static SetFSysTest const aTest[]
385 			= { { "//.", INetURLObject::FSysStyle(0), "" },
386 				{ 0, INetURLObject::FSysStyle(1), "file:///" },
387 				{ 0, INetURLObject::FSysStyle(2), "file:////." },
388 				{ 0, INetURLObject::FSysStyle(3), "file:///" },
389 				{ 0, INetURLObject::FSysStyle(4), "file:///%2F%2F." },
390 				{ 0, INetURLObject::FSysStyle(5), "file:///" },
391 				{ 0, INetURLObject::FSysStyle(6), "file:////." },
392 				{ 0, INetURLObject::FSysStyle(7), "file:///" },
393 				{ 0, INetURLObject::FSysStyle(8), "file:///%2F%2F." },
394 				{ 0, INetURLObject::FSysStyle(9), "file:///" },
395 				{ 0, INetURLObject::FSysStyle(10), "file:////." },
396 				{ 0, INetURLObject::FSysStyle(11), "file:///" },
397 				{ 0, INetURLObject::FSysStyle(12), "file:///%2F%2F." },
398 				{ 0, INetURLObject::FSysStyle(13), "file:///" },
399 				{ 0, INetURLObject::FSysStyle(14), "file:////." },
400 				{ 0, INetURLObject::FSysStyle(15), "file:///" },
401 				{ "//./", INetURLObject::FSysStyle(0), "" },
402 				{ 0, INetURLObject::FSysStyle(1), "file:///" },
403 				{ 0, INetURLObject::FSysStyle(2), "file:////./" },
404 				{ 0, INetURLObject::FSysStyle(3), "file:///" },
405 				{ 0, INetURLObject::FSysStyle(4), "file:///%2F%2F.%2F" },
406 				{ 0, INetURLObject::FSysStyle(5), "file:///" },
407 				{ 0, INetURLObject::FSysStyle(6), "file:////./" },
408 				{ 0, INetURLObject::FSysStyle(7), "file:///" },
409 				{ 0, INetURLObject::FSysStyle(8), "file:///%2F%2F.%2F" },
410 				{ 0, INetURLObject::FSysStyle(9), "file:///" },
411 				{ 0, INetURLObject::FSysStyle(10), "file:////./" },
412 				{ 0, INetURLObject::FSysStyle(11), "file:///" },
413 				{ 0, INetURLObject::FSysStyle(12), "file:///%2F%2F.%2F" },
414 				{ 0, INetURLObject::FSysStyle(13), "file:///" },
415 				{ 0, INetURLObject::FSysStyle(14), "file:////./" },
416 				{ 0, INetURLObject::FSysStyle(15), "file:///" },
417 				{ "//./a/b\\c:d", INetURLObject::FSysStyle(0), "" },
418 				{ 0, INetURLObject::FSysStyle(1), "file:///a/b%5Cc:d" },
419 				{ 0, INetURLObject::FSysStyle(2), "file:////./a/b%5Cc:d" },
420 				{ 0, INetURLObject::FSysStyle(3), "file:///a/b%5Cc:d" },
421 				{ 0, INetURLObject::FSysStyle(4), "file:///%2F%2F.%2Fa%2Fb/c:d" },
422 				{ 0, INetURLObject::FSysStyle(5), "file:///a/b%5Cc:d" },
423 				{ 0, INetURLObject::FSysStyle(6), "file:////./a/b%5Cc:d" },
424 				{ 0, INetURLObject::FSysStyle(7), "file:///a/b%5Cc:d" },
425 				{ 0, INetURLObject::FSysStyle(8), "file:///%2F%2F.%2Fa%2Fb%5Cc/d" },
426 				{ 0, INetURLObject::FSysStyle(9), "file:///a/b%5Cc:d" },
427 				{ 0, INetURLObject::FSysStyle(10), "file:////./a/b%5Cc:d" },
428 				{ 0, INetURLObject::FSysStyle(11), "file:///a/b%5Cc:d" },
429 				{ 0, INetURLObject::FSysStyle(12), "file:///%2F%2F.%2Fa%2Fb/c:d" },
430 				{ 0, INetURLObject::FSysStyle(13), "file:///a/b%5Cc:d" },
431 				{ 0, INetURLObject::FSysStyle(14), "file:////./a/b%5Cc:d" },
432 				{ 0, INetURLObject::FSysStyle(15), "file:///a/b%5Cc:d" } };
433 		if (!testSetFSys(aTest, sizeof aTest / sizeof (SetFSysTest)))
434 			bSuccess = false;
435 	}
436 
437 /*
438 	if (false)
439 	{
440 		bool bAbs = false;
441 		INetURLObject aUrl1(INetURLObject().smartRel2Abs(L"/export/home/mba/Office/user/Basic/soffice.sbl", bAbs));
442 
443 		INetURLObject aUrl2a(L"/export/home/mba/Office/user/Basic/soffice.sbl", INET_PROT_FILE);
444 
445 		INetURLObject aUrl2b(L"file:///export/home/mba/Office/user/Basic/soffice.sbl", INET_PROT_FILE);
446 
447 		INetURLObject aUrl3a(L"/export/home/mba/Office/user/Basic/soffice.sbl", INetURLObject::FSYS_DETECT);
448 
449 		INetURLObject aUrl3b(L"file:///export/home/mba/Office/user/Basic/soffice.sbl", INetURLObject::FSYS_DETECT);
450 	}
451 */
452 
453 	if (true)
454 	{
455 		INetURLObject aUrl1("http://host:1234/xy/~zw?xxx=yyy");
456 		if (aUrl1.HasError())
457 		{
458 			printf("BAD http\n");
459 			bSuccess = false;
460 		}
461 		INetURLObject aUrl2("vnd.sun.star.webdav://host:1234/xy/~zw?xxx=yyy");
462 		if (aUrl2.HasError())
463 		{
464 			printf("BAD vnd.sun.star.webdav\n");
465 			bSuccess = false;
466 		}
467 	}
468 
469 	if (true)
470 	{
471         struct Test { char const * in; char const * out; };
472 		static Test const aTest[]
473 			= { { "vnd.sun.star.help://", "vnd.sun.star.help:///" },
474                 { "vnd.sun.star.help:///", 0 },
475 				{ "vnd.sun.star.help://swriter",
476                   "vnd.sun.star.help://swriter/" },
477 				{ "vnd.sun.star.help://swriter/", 0 },
478 				{ "vnd.sun.star.help://swriter/12345", 0 },
479 				{ "vnd.sun.star.help://swriter/1234X", 0 },
480 				{ "vnd.sun.star.help://swriter/?a=b?c=d", 0 },
481 				{ "vnd.sun.star.help://swriter/12345?a=b?c=d", 0 },
482 				{ "vnd.sun.star.help://swriter/12345???", 0 },
483 				{ "vnd.sun.star.help://swriter/#xxx", 0 },
484 				{ "vnd.sun.star.help://swriter/12345#xxx", 0 },
485 				{ "vnd.sun.star.help://swriter/1234X#xxx", 0 },
486 				{ "vnd.sun.star.help://swriter/?a=b?c=d#xxx", 0 },
487 				{ "vnd.sun.star.help://swriter/12345?a=b?c=d#xxx", 0 },
488 				{ "vnd.sun.star.help://swriter/12345???#xxx", 0 },
489 				{ "vnd.sun.star.help://swriter/start", 0 },
490 				{ "vnd.sun.star.help://swriter/s/t/a/r/t", 0 },
491 				{ "vnd.sun.star.help://swriter/a%2Fb%3Fc%2534d/e?f", 0 },
492                 { "vnd.sun.star.help://swriter?foo",
493                   "vnd.sun.star.help://swriter/?foo" },
494                 { "vnd.sun.star.help://swriter/?foo", 0 } };
495 		for (std::size_t i = 0; i < sizeof aTest / sizeof aTest[0]; ++i)
496 		{
497 			INetURLObject aUrl(aTest[i].in);
498 			if (aUrl.HasError())
499 				printf("BAD %s\n", aTest[i].in);
500 			else if (aUrl.GetMainURL(INetURLObject::DECODE_TO_IURI).
501                          equalsAscii(
502                              aTest[i].out == 0 ? aTest[i].in : aTest[i].out)
503                      		!= sal_True)
504 			{
505 				String sTest(aUrl.GetMainURL(INetURLObject::DECODE_TO_IURI));
506 				printf("BAD %s -> %s\n",
507 					   aTest[i].in,
508 					   ByteString(sTest, RTL_TEXTENCODING_ASCII_US).
509 					   GetBuffer());
510 			}
511 		}
512 	}
513 
514 	if (true)
515 	{
516 		static sal_Char const * const aTest[]
517 			= { /*TODO "vnd.sun.star.wfs://",*/
518 				/*TODO "vnd.sun.star.wfs://LocalHost",*/
519 				/*TODO "vnd.sun.star.wfs:///c|/xyz/",*/
520 				/*TODO "vnd.sun.star.wfs://xxx/yyy?zzz",*/
521 				"vnd.sun.star.wfs:///x/y/z",
522 				"vnd.sun.star.generic:///x/y/z",
523 				"vnd.sun.star.generic://host:34/x/y/z"
524 				/*TODO "wfs://",*/
525 				/*TODO "wfs://LocalHost",*/
526 				/*TODO "wfs:///c|/xyz/",*/
527 				/*TODO "wfs://xxx/yyy?zzz",*/
528 				/*TODO "wfs:///x/y/z"*/ };
529 		for (std::size_t i = 0; i < sizeof aTest / sizeof aTest[0]; ++i)
530 		{
531 			INetURLObject aUrl(aTest[i]);
532 			if (aUrl.HasError())
533 				printf("BAD %s\n", aTest[i]);
534 			else
535 			{
536 				if (aUrl.GetProtocol() != INET_PROT_GENERIC) {
537 					printf("BAD PROTOCOL %i -> %i\n",
538 						   aUrl.GetProtocol(),
539 						   INET_PROT_GENERIC);
540 				}
541 				if (aUrl.GetMainURL(INetURLObject::DECODE_TO_IURI).
542                          equalsAscii(aTest[i]) != sal_True)
543 				{
544 				String sTest(aUrl.GetMainURL(INetURLObject::DECODE_TO_IURI));
545 				printf("BAD %s -> %s\n",
546 					   aTest[i],
547 					   ByteString(sTest, RTL_TEXTENCODING_ASCII_US).GetBuffer());
548 				}
549 			}
550 		}
551 	}
552 
553 	if (true)
554 	{
555 		static sal_Char const * const aTest[]
556 			= { /*TODO "vnd.sun.star.pkg:",*/
557 				/*TODO "vnd.sun.star.pkg:/",*/
558 				/*TODO "vnd.sun.star.pkg://abc",*/
559 				/*TODO "vnd.sun.star.pkg://file:%2F%2F%2Fa:%2Fb%20c",*/
560 				"vnd.sun.star.pkg://file:%2F%2F%2Fa:%2Fb%20c/",
561 				"vnd.sun.star.pkg://file:%2F%2F%2Fa:%2Fb%20c/xx",
562 				/*TODO "vnd.sun.star.pkg://file:%2F%2F%2Fa:%2Fb%20c/xx;yy",*/
563 				"vnd.sun.star.pkg://file:%2F%2F%2Fa:%2Fb%20c/xx//yy" };
564 		for (std::size_t i = 0; i < sizeof aTest / sizeof aTest[0]; ++i)
565 		{
566 			INetURLObject aUrl(aTest[i]);
567 			if (aUrl.HasError())
568 				printf("BAD %s\n", aTest[i]);
569 			else if (aUrl.GetMainURL(INetURLObject::DECODE_TO_IURI).
570                          equalsAscii(aTest[i]) != sal_True)
571 			{
572 				String sTest(aUrl.GetMainURL(INetURLObject::DECODE_TO_IURI));
573 				printf("BAD %s -> %s\n",
574 					   aTest[i],
575 					   ByteString(sTest, RTL_TEXTENCODING_ASCII_US).GetBuffer());
576 			}
577 		}
578 	}
579 
580 	if (true)
581 	{
582 		static sal_Char const * const aTest[]
583 			= { /*TODO "vnd.sun.star.cmd:",*/
584 				/*TODO "vnd.sun.star.cmd:/",*/
585 				"vnd.sun.star.cmd:logout",
586 				"vnd.sun.star.cmd:log/out",
587 				/*TODO "vnd.sun.star.cmd:[logout]",*/
588 				"vnd.sun.star.cmd:log[out]" };
589 		for (std::size_t i = 0; i < sizeof aTest / sizeof aTest[0]; ++i)
590 		{
591 			INetURLObject aUrl(aTest[i]);
592 			if (aUrl.HasError())
593 				printf("BAD %s\n", aTest[i]);
594 			else if (aUrl.GetMainURL(INetURLObject::DECODE_TO_IURI).
595                          equalsAscii(aTest[i]) != sal_True)
596 			{
597 				String sTest(aUrl.GetMainURL(INetURLObject::DECODE_TO_IURI));
598 				printf("BAD %s -> %s\n",
599 					   aTest[i],
600 					   ByteString(sTest, RTL_TEXTENCODING_ASCII_US).GetBuffer());
601 			}
602 		}
603 	}
604 
605 	if (true)
606 	{
607 		rtl::OUString
608 			aParameters(rtl::OUString::createFromAscii("; CharSet=UTF-8  ; Blubber=Blob"));
609 		sal_Unicode const * pBegin = aParameters.getStr();
610 		sal_Unicode const * pEnd = pBegin + aParameters.getLength();
611 		INetContentTypeParameterList aList;
612 		if (INetMIME::scanParameters(pBegin, pEnd, &aList) == pEnd)
613 		{
614 			ULONG nCount = aList.Count();
615 			for (ULONG i = 0; i < nCount; ++i)
616 			{
617 				INetContentTypeParameter const * p = aList.GetObject(i);
618 				if (p)
619                 {
620 /*
621 					printf("attribute: '%s'\n charset: '%s'\n language: '%s'\n value: '%s'\n converted: %s\n",
622 						   p->m_sAttribute.GetBuffer(),
623 						   p->m_sCharset.GetBuffer(),
624 						   p->m_sLanguage.GetBuffer(),
625 						   rtl::OUStringToOString(p->m_sValue,RTL_TEXTENCODING_UTF8).getStr(),
626 						   p->m_bConverted ? "true" : "false");
627 */
628                 }
629 				else
630 					printf("BAD INetContentTypeParameter\n");
631 			}
632 		}
633 		else
634 		{
635 			printf("BAD INetMIME::scanParameters()\n");
636 			bSuccess = false;
637 		}
638 	}
639 
640     if (true)
641     {
642         {
643             INetURLObject aObj;
644             aObj.setFSysPath(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("a:")),
645                              INetURLObject::FSYS_DETECT);
646             if (!rtl::OUString(aObj.GetMainURL(INetURLObject::NO_DECODE)).
647                      equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("file:///a:")))
648             {
649                 printf("BAD setFSysPath(\"a:\")\n");
650                 bSuccess = false;
651             }
652         }
653         {
654             INetURLObject aObj;
655             aObj.setFSysPath(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
656                                                "a:/")),
657                              INetURLObject::FSYS_DETECT);
658             if (!rtl::OUString(aObj.GetMainURL(INetURLObject::NO_DECODE)).
659                      equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("file:///a:/")))
660             {
661                 printf("BAD setFSysPath(\"a:/\")\n");
662                 bSuccess = false;
663             }
664         }
665         {
666             INetURLObject aObj;
667             aObj.setFSysPath(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
668                                                "a:\\")),
669                              INetURLObject::FSYS_DETECT);
670             if (!rtl::OUString(aObj.GetMainURL(INetURLObject::NO_DECODE)).
671                      equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("file:///a:/")))
672             {
673                 printf("BAD setFSysPath(\"a:\\\")\n");
674                 bSuccess = false;
675             }
676         }
677 
678         if (!rtl::OUString(INetURLObject("file:///a:").
679                                getFSysPath(INetURLObject::FSYS_DETECT)).
680                  equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("a:")))
681         {
682             printf("BAD getFSysPath(\"file:///a:\")\n");
683             bSuccess = false;
684         }
685         if (!rtl::OUString(INetURLObject("file:///a:/").
686                                getFSysPath(INetURLObject::FSYS_DETECT)).
687                  equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("a:\\")))
688         {
689             printf("BAD getFSysPath(\"file:///a:/\")\n");
690             bSuccess = false;
691         }
692 
693         {
694             bool bWasAbsolute;
695             if (!rtl::OUString(INetURLObject(rtl::OUString(
696                                                  RTL_CONSTASCII_USTRINGPARAM(
697                                                      "file:///"))).
698                                    smartRel2Abs(
699                                            rtl::OUString(
700                                                RTL_CONSTASCII_USTRINGPARAM(
701                                                    "a:")),
702                                            bWasAbsolute).
703                                        GetMainURL(INetURLObject::NO_DECODE)).
704                      equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("file:///a:"))
705                 || !bWasAbsolute)
706             {
707                 printf("BAD smartRel2Abs(\"a:\")\n");
708                 bSuccess = false;
709             }
710         }
711         {
712             bool bWasAbsolute;
713             if (!rtl::OUString(INetURLObject(rtl::OUString(
714                                                  RTL_CONSTASCII_USTRINGPARAM(
715                                                      "file:///"))).
716                                    smartRel2Abs(
717                                            rtl::OUString(
718                                                RTL_CONSTASCII_USTRINGPARAM(
719                                                    "a:/")),
720                                            bWasAbsolute).
721                                        GetMainURL(INetURLObject::NO_DECODE)).
722                      equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("file:///a:/"))
723                 || !bWasAbsolute)
724             {
725                 printf("BAD smartRel2Abs(\"a:/\")\n");
726                 bSuccess = false;
727             }
728         }
729         {
730             bool bWasAbsolute;
731             if (!rtl::OUString(INetURLObject(rtl::OUString(
732                                                  RTL_CONSTASCII_USTRINGPARAM(
733                                                      "file:///"))).
734                                    smartRel2Abs(
735                                            rtl::OUString(
736                                                RTL_CONSTASCII_USTRINGPARAM(
737                                                    "a:\\")),
738                                            bWasAbsolute).
739                                        GetMainURL(INetURLObject::NO_DECODE)).
740                      equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("file:///a:/"))
741                 || !bWasAbsolute)
742             {
743                 printf("BAD smartRel2Abs(\"a:\\\")\n");
744                 bSuccess = false;
745             }
746         }
747         {
748             bool bWasAbsolute;
749             if (!rtl::OUString(INetURLObject(rtl::OUString(
750                                                  RTL_CONSTASCII_USTRINGPARAM(
751                                                      "file:///"))).
752                                    smartRel2Abs(
753                                            rtl::OUString(
754                                                RTL_CONSTASCII_USTRINGPARAM(
755                                                    "generic:")),
756                                            bWasAbsolute).
757                                        GetMainURL(INetURLObject::NO_DECODE)).
758                      equalsAsciiL(
759                          RTL_CONSTASCII_STRINGPARAM("file:///generic:"))
760                 || bWasAbsolute)
761             {
762                 printf("BAD smartRel2Abs(\"generic:\")\n");
763                 bSuccess = false;
764             }
765         }
766         {
767             bool bWasAbsolute;
768             if (!rtl::OUString(INetURLObject(rtl::OUString(
769                                                  RTL_CONSTASCII_USTRINGPARAM(
770                                                      "file:///"))).
771                                    smartRel2Abs(
772                                            rtl::OUString(
773                                                RTL_CONSTASCII_USTRINGPARAM(
774                                                    "generic:#fragment")),
775                                            bWasAbsolute).
776                                        GetMainURL(INetURLObject::NO_DECODE)).
777                      equalsAsciiL(
778                          RTL_CONSTASCII_STRINGPARAM(
779                              "file:///generic:#fragment"))
780                 || bWasAbsolute)
781             {
782                 printf("BAD smartRel2Abs(\"generic:#fragment\")\n");
783                 bSuccess = false;
784             }
785         }
786         {
787             bool bWasAbsolute;
788             if (!rtl::OUString(INetURLObject(rtl::OUString(
789                                                  RTL_CONSTASCII_USTRINGPARAM(
790                                                      "file:///"))).
791                                    smartRel2Abs(
792                                            rtl::OUString(
793                                                RTL_CONSTASCII_USTRINGPARAM(
794                                                    "generic:something")),
795                                            bWasAbsolute).
796                                        GetMainURL(INetURLObject::NO_DECODE)).
797                      equalsAsciiL(
798                          RTL_CONSTASCII_STRINGPARAM("generic:something"))
799                 || !bWasAbsolute)
800             {
801                 printf("BAD smartRel2Abs(\"generic:something\")\n");
802                 bSuccess = false;
803             }
804         }
805         {
806             bool bWasAbsolute;
807             if (!rtl::OUString(INetURLObject(rtl::OUString(
808                                                  RTL_CONSTASCII_USTRINGPARAM(
809                                                      "file:///"))).
810                                    smartRel2Abs(
811                                            rtl::OUString(
812                                                RTL_CONSTASCII_USTRINGPARAM(
813                                                    "\\\\unc_host\\path")),
814                                            bWasAbsolute).
815                                        GetMainURL(INetURLObject::NO_DECODE)).
816                      equalsAsciiL(
817                          RTL_CONSTASCII_STRINGPARAM("file://unc_host/path"))
818                 || !bWasAbsolute)
819             {
820                 printf("BAD smartRel2Abs(\"\\\\unc_host\\path\")\n");
821                 bSuccess = false;
822             }
823         }
824     }
825 
826     if (true)
827     {
828 /*TODO
829         {
830             INetURLObject aObj(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("http://xxx/yyy?abc/def~")));
831             if (!rtl::OUString(aObj.GetMainURL(INetURLObject::NO_DECODE)).
832                      equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("http://xxx/yyy?abc%2Fdef%7E")))
833             {
834                 printf("BAD http query 1\n");
835                 bSuccess = false;
836             }
837         }
838 */
839         {
840             INetURLObject aObj(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("https://xxx/yyy?abc/def~")));
841             if (!rtl::OUString(aObj.GetMainURL(INetURLObject::NO_DECODE)).
842                      equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("https://xxx/yyy?abc/def~")))
843             {
844                 printf("BAD https query 1\n");
845                 bSuccess = false;
846             }
847         }
848 /*TODO
849         {
850             INetURLObject aObj(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("http://xxx/yyy")));
851             aObj.SetParam("abc/def~");
852             if (!rtl::OUString(aObj.GetMainURL(INetURLObject::NO_DECODE)).
853                      equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("http://xxx/yyy?abc%2Fdef%7E")))
854             {
855                 printf("BAD http query 2\n");
856                 bSuccess = false;
857             }
858         }
859 */
860         {
861             INetURLObject aObj(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("https://xxx/yyy")));
862             aObj.SetParam("abc/def~");
863             if (!rtl::OUString(aObj.GetMainURL(INetURLObject::NO_DECODE)).
864                      equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("https://xxx/yyy?abc/def~")))
865             {
866                 printf("BAD https query 2\n");
867                 bSuccess = false;
868             }
869         }
870     }
871 
872     if (true)
873     {
874         if (INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.hier:"))).HasError())
875         {
876             printf("BAD vnd.sun.star.hier test 1\n");
877             bSuccess = false;
878         }
879         if (!INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.hier://"))).HasError())
880         {
881             printf("BAD vnd.sun.star.hier test 2\n");
882             bSuccess = false;
883         }
884         if (!INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.hier:///"))).HasError())
885         {
886             printf("BAD vnd.sun.star.hier test 3\n");
887             bSuccess = false;
888         }
889         if (!INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.hier:///abc"))).HasError())
890         {
891             printf("BAD vnd.sun.star.hier test 4\n");
892             bSuccess = false;
893         }
894         if (INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.hier://abc"))).HasError())
895         {
896             printf("BAD vnd.sun.star.hier test 5\n");
897             bSuccess = false;
898         }
899         if (INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.hier://abc/def"))).HasError())
900         {
901             printf("BAD vnd.sun.star.hier test 6\n");
902             bSuccess = false;
903         }
904     }
905 
906     if (false)
907     {
908         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
909                                                    "file:///"))));
910         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
911                                                    "file:///a"))));
912         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
913                                                    "file:///a/def/"))));
914         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
915                                                    "file:///ab/def/"))));
916         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
917                                                    "file:///abc/def/"))));
918         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
919                                                    "file:///a/def"))));
920         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
921                                                    "file:///ab/def"))));
922         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
923                                                    "file:///abc/def"))));
924         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
925                                                    "file:///abcdef/d"))));
926         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
927                                                    "file:///abcdef/de"))));
928         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
929                                                    "file:///abcdef/def"))));
930         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
931                                                    "file://some.host/"))));
932         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
933                                                    "file://some.host/a"))));
934         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
935                                                    "file://some.host/a/def/"))));
936         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
937                                                    "file://some.host/ab/def/"))));
938         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
939                                                    "file://some.host/abc/def/"))));
940         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
941                                                    "file://some.host/a/def"))));
942         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
943                                                    "file://some.host/ab/def"))));
944         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
945                                                    "file://some.host/abc/def"))));
946         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
947                                                    "file://some.host/abcdef/d"))));
948         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
949                                                    "file://some.host/abcdef/de"))));
950         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
951                                                    "file://some.host/abcdef/def"))));
952         abbreviate(INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
953             "http://foo/aa/bb//cc/d/eee////ff/ggggggg/hhhhhh/iii/j/"
954             "kkkkkkkkkkkkk/ll/mm/nn/oo/p"))));
955     }
956 
957     if (true)
958     {
959         {
960             rtl::OUString
961                 aBase(RTL_CONSTASCII_USTRINGPARAM("file:///a:/b/c"));
962             rtl::OUString aAbs(RTL_CONSTASCII_USTRINGPARAM("file:///a:/d/e"));
963             rtl::OUString aRel(INetURLObject::GetRelURL(aBase, aAbs));
964             if (!aRel.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("../d/e")))
965             {
966                 printf("BAD GetRelURL(%s, %s) = %s\n",
967                        rtl::OUStringToOString(aBase, RTL_TEXTENCODING_UTF8).
968                            getStr(),
969                        rtl::OUStringToOString(aAbs, RTL_TEXTENCODING_UTF8).
970                            getStr(),
971                        rtl::OUStringToOString(aRel, RTL_TEXTENCODING_UTF8).
972                            getStr());
973                 bSuccess = false;
974             }
975         }
976         {
977             rtl::OUString
978                 aBase(RTL_CONSTASCII_USTRINGPARAM("file:///a:/b/c"));
979             rtl::OUString aAbs(RTL_CONSTASCII_USTRINGPARAM("file:///d:/e/f"));
980             rtl::OUString aRel(INetURLObject::GetRelURL(aBase, aAbs));
981             if (aRel != aAbs)
982             {
983                 printf("BAD GetRelURL(%s, %s) = %s\n",
984                        rtl::OUStringToOString(aBase, RTL_TEXTENCODING_UTF8).
985                            getStr(),
986                        rtl::OUStringToOString(aAbs, RTL_TEXTENCODING_UTF8).
987                            getStr(),
988                        rtl::OUStringToOString(aRel, RTL_TEXTENCODING_UTF8).
989                            getStr());
990                 bSuccess = false;
991             }
992         }
993         {
994             rtl::OUString
995                 aBase(RTL_CONSTASCII_USTRINGPARAM("file:///a:/b/c"));
996             rtl::OUString aAbs(RTL_CONSTASCII_USTRINGPARAM("file:///d/e/f"));
997             rtl::OUString aRel(INetURLObject::GetRelURL(aBase, aAbs));
998             if (!aRel.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("../../d/e/f")))
999             {
1000                 printf("BAD GetRelURL(%s, %s) = %s\n",
1001                        rtl::OUStringToOString(aBase, RTL_TEXTENCODING_UTF8).
1002                            getStr(),
1003                        rtl::OUStringToOString(aAbs, RTL_TEXTENCODING_UTF8).
1004                            getStr(),
1005                        rtl::OUStringToOString(aRel, RTL_TEXTENCODING_UTF8).
1006                            getStr());
1007                 bSuccess = false;
1008             }
1009         }
1010         {
1011             rtl::OUString
1012                 aBase(RTL_CONSTASCII_USTRINGPARAM("file:///a:/b/c"));
1013             rtl::OUString aAbs(RTL_CONSTASCII_USTRINGPARAM("file:///d:/e/f"));
1014             rtl::OUString
1015                 aRel(INetURLObject::GetRelURL(aBase,
1016                                               aAbs,
1017                                               INetURLObject::WAS_ENCODED,
1018                                               INetURLObject::DECODE_TO_IURI,
1019                                               RTL_TEXTENCODING_UTF8,
1020                                               INetURLObject::FSYS_UNX));
1021             if (!aRel.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(
1022                                        "../../d:/e/f")))
1023             {
1024                 printf("BAD GetRelURL(%s, %s) = %s\n",
1025                        rtl::OUStringToOString(aBase, RTL_TEXTENCODING_UTF8).
1026                            getStr(),
1027                        rtl::OUStringToOString(aAbs, RTL_TEXTENCODING_UTF8).
1028                            getStr(),
1029                        rtl::OUStringToOString(aRel, RTL_TEXTENCODING_UTF8).
1030                            getStr());
1031                 bSuccess = false;
1032             }
1033         }
1034 /*TODO
1035         {
1036             rtl::OUString
1037                 aBase(RTL_CONSTASCII_USTRINGPARAM("file:///test.html"));
1038             rtl::OUString
1039                 aAbs(RTL_CONSTASCII_USTRINGPARAM("/images/myimage.gif"));
1040             rtl::OUString aRel(INetURLObject::GetRelURL(aBase, aAbs));
1041             if (aRel != aAbs)
1042             {
1043                 printf("BAD GetRelURL(%s, %s) = %s\n",
1044                        rtl::OUStringToOString(aBase, RTL_TEXTENCODING_UTF8).
1045                            getStr(),
1046                        rtl::OUStringToOString(aAbs, RTL_TEXTENCODING_UTF8).
1047                            getStr(),
1048                        rtl::OUStringToOString(aRel, RTL_TEXTENCODING_UTF8).
1049                            getStr());
1050                 bSuccess = false;
1051             }
1052         }
1053 */
1054     }
1055 
1056     if (true)
1057     {
1058         INetURLObject aUrl(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
1059                                              "file://host/dir/file")));
1060         rtl::OUString aPath;
1061         aPath = aUrl.getFSysPath(INetURLObject::FSYS_DETECT);
1062         if (!aPath.
1063                  equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("//host/dir/file")))
1064         {
1065             printf("BAD getFSysPath(VOS|UNX|DOS|MAC) = %s\n",
1066                    rtl::OUStringToOString(aPath, RTL_TEXTENCODING_UTF8).
1067                        getStr());
1068             bSuccess = false;
1069         }
1070         aPath = aUrl.getFSysPath(INetURLObject::FSysStyle(
1071                                      INetURLObject::FSYS_UNX
1072                                          | INetURLObject::FSYS_DOS
1073                                          | INetURLObject::FSYS_MAC));
1074         if (!aPath.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(
1075                                     "\\\\host\\dir\\file")))
1076         {
1077             printf("BAD getFSysPath(UNX|DOS|MAC) = %s\n",
1078                    rtl::OUStringToOString(aPath, RTL_TEXTENCODING_UTF8).
1079                        getStr());
1080             bSuccess = false;
1081         }
1082         aPath = aUrl.getFSysPath(INetURLObject::FSysStyle(
1083                                      INetURLObject::FSYS_UNX
1084                                          | INetURLObject::FSYS_MAC));
1085         if (aPath.getLength() != 0)
1086         {
1087             printf("BAD getFSysPath(UNX|MAC) = %s\n",
1088                    rtl::OUStringToOString(aPath, RTL_TEXTENCODING_UTF8).
1089                        getStr());
1090             bSuccess = false;
1091         }
1092     }
1093 
1094     if (true)
1095     {
1096         {
1097             INetURLObject aUrl1(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.odma:")));
1098             rtl::OUString aUrl2(aUrl1.GetMainURL(
1099                                     INetURLObject::DECODE_TO_IURI));
1100             if (!aUrl2.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("vnd.sun.star.odma:/")))
1101             {
1102                 printf("BAD vnd.sun.star.odma: != %s\n",
1103                        rtl::OUStringToOString(aUrl2, RTL_TEXTENCODING_UTF8).
1104                            getStr());
1105                 bSuccess = false;
1106             }
1107         }
1108         {
1109             INetURLObject aUrl1(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.odma:/")));
1110             rtl::OUString aUrl2(aUrl1.GetMainURL(
1111                                     INetURLObject::DECODE_TO_IURI));
1112             if (!aUrl2.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("vnd.sun.star.odma:/")))
1113             {
1114                 printf("BAD vnd.sun.star.odma:/ != %s\n",
1115                        rtl::OUStringToOString(aUrl2, RTL_TEXTENCODING_UTF8).
1116                            getStr());
1117                 bSuccess = false;
1118             }
1119         }
1120         {
1121             INetURLObject aUrl1(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.odma:/bla/bla")));
1122             rtl::OUString aUrl2(aUrl1.GetMainURL(
1123                                     INetURLObject::DECODE_TO_IURI));
1124             if (!aUrl2.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("vnd.sun.star.odma:/bla%2Fbla")))
1125             {
1126                 printf("BAD vnd.sun.star.odma:/bla/bla != %s\n",
1127                        rtl::OUStringToOString(aUrl2, RTL_TEXTENCODING_UTF8).
1128                            getStr());
1129                 bSuccess = false;
1130             }
1131         }
1132     }
1133 
1134     if (true)
1135     {
1136         struct Test
1137         {
1138             char const * m_pInput;
1139             char const * m_pOutput;
1140         };
1141 		static Test const aTest[]
1142 			= { { "file:///abc", "file:///abc" },
1143                 { "file://localhost/abc", "file:///abc" },
1144                 { "file://LocalHost/abc", "file:///abc" },
1145                 { "file://LOCALHOST/abc", "file:///abc" },
1146                 { "file://127.0.0.1/abc", "file://127.0.0.1/abc" },
1147                 { "file://xxx.yyy-zzz/abc", "file://xxx.yyy-zzz/abc" },
1148                 { "file://xxx_yyy/abc", "file://xxx_yyy/abc" },
1149                 { "file://!%23$%&'()-.@^_{}~/abc",
1150                   "file://!%23$%25&'()-.@%5E_%7B%7D~/abc" },
1151                 { "file://d:\\dir1\\file1", 0 },
1152                 { "http://as@alaska:8000/test/test.sxw", 0 },
1153                 { "telnet:", 0 },
1154                 { "telnet://", 0 },
1155                 { "telnet://ab:cd@ef:", "telnet://ab:cd@ef:/" },
1156                 { "telnet://ab:cd@ef:123", "telnet://ab:cd@ef:123/" },
1157                 { "TELNET://abc.def.ghi/", "telnet://abc.def.ghi/" },
1158                 { "telnet://abc.def.ghi/jkl", 0 },
1159                 { "telnet://abc.def.ghi?jkl", 0 },
1160                 { "telnet://abc.def.ghi/?jkl", 0 },
1161                 { "file:", 0 },
1162                 { "file:/", "file:///" },
1163                 { "file:/abc", "file:///abc" },
1164                 { "file:/abc/def", "file:///abc/def" },
1165                 { "file:/localhost", "file:///localhost" },
1166                 { "file://", "file:///" },
1167                 { "file:///", "file:///" },
1168                 { "http:", 0 },
1169                 { "http:/abc", 0 },
1170                 { "news:", 0 },
1171                 { "news:*", "news:*" },
1172                 { "news:**", 0 },
1173                 { "news:%2A", 0 },
1174                 { "news:a", "news:a" },
1175                 { "news:A", "news:A" },
1176                 { "news:+-._", 0 },
1177                 { "news:A0+-._", "news:A0+-._" },
1178                 { "news:0", 0 },
1179                 { "news:AB,", 0 },
1180                 { "news:abc@def", "news:abc@def" },
1181                 { "news:abc@def:33", 0 },
1182                 { "news:abc@123.456.789.0", "news:abc@123.456.789.0" },
1183                 { "news:abc@def.", "news:abc@def." },
1184                 { "news:abc@def.ghi", "news:abc@def.ghi" },
1185                 { "news:abc@def.-ghi", 0 },
1186                 { "news:abc@def.ghi@", 0 },
1187                 { "news:%21%22%23@def", "news:%21%22%23@def" },
1188                 { "news:!%22%23@def", "news:!%22%23@def" },
1189                 { "news: @def", "news:%20@def" },
1190                 { "vnd.sun.star.tdoc:", 0 },
1191                 { "vnd.sun.star.tdoc:a/b/c", 0 },
1192                 { "vnd.sun.star.tdoc:/", "vnd.sun.star.tdoc:/" },
1193                 { "vnd.sun.star.tdoc:/a;b/", "vnd.sun.star.tdoc:/a%3Bb/" },
1194                 { "vnd.sun.star.tdoc:/a?b", "vnd.sun.star.tdoc:/a%3Fb" },
1195                 { "http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/x",
1196                   "http://[fedc:ba98:7654:3210:fedc:ba98:7654:3210]:80/x" },
1197                 { "http://[1080:0:0:0:8:800:200C:417A]/index.html",
1198                   "http://[1080:0:0:0:8:800:200c:417a]/index.html" },
1199                 { "http://[3ffe:2a00:100:7031::1]",
1200                   "http://[3ffe:2a00:100:7031::1]/" },
1201                 { "http://[1080::8:800:200c:417a]/foo",
1202                   "http://[1080::8:800:200c:417a]/foo" },
1203                 { "http://[::192.9.5.5]/ipng", "http://[::192.9.5.5]/ipng" },
1204                 { "http://[:::192.9.5.5]/ipng", "http://[:::192.9.5.5]/ipng" },
1205                 { "http://[::FFFF:129.144.52.38]:80/index.html",
1206                   "http://[::ffff:129.144.52.38]:80/index.html" },
1207                 { "http://[2010:836B:4179::836B:4179]",
1208                   "http://[2010:836b:4179::836b:4179]/" },
1209                 { "http://[::1]", "http://[::1]/" },
1210                 { "http://[0:0:0:0:0:0:13.1.68.3]/",
1211                   "http://[0:0:0:0:0:0:13.1.68.3]/" },
1212                 { "http://[0:0:0:0:0:FFFF:129.144.52.38]/",
1213                   "http://[0:0:0:0:0:ffff:129.144.52.38]/" },
1214                 { "smb://", "smb:///" },
1215                 { "smb://foo", "smb://foo/" },
1216                 { "smb://x;foo:bar@baz.xyz:12345/ab?cd",
1217                   "smb://x;foo:bar@baz.xyz:12345/ab?cd" } };
1218 		for (std::size_t i = 0; i < sizeof aTest / sizeof aTest[0]; ++i)
1219 		{
1220 			INetURLObject aUrl(aTest[i].m_pInput);
1221 			if (aTest[i].m_pOutput == 0
1222                 ? !aUrl.HasError()
1223                 : (aUrl.HasError()
1224                    || (aUrl.GetMainURL(INetURLObject::DECODE_TO_IURI).
1225                            equalsAscii(aTest[i].m_pOutput)
1226                        != sal_True)))
1227 			{
1228 				String sTest(aUrl.GetMainURL(INetURLObject::DECODE_TO_IURI));
1229 				printf("BAD %s -> %s != %s\n",
1230 					   aTest[i].m_pInput,
1231                        aUrl.HasError() ? "<none>"
1232                        : ByteString(sTest, RTL_TEXTENCODING_ASCII_US).GetBuffer(),
1233                        aTest[i].m_pOutput == 0 ? "<none>" : aTest[i].m_pOutput);
1234 			}
1235 		}
1236     }
1237 
1238     if (true)
1239     {
1240         struct Test
1241         {
1242             char const * m_pInput;
1243             char const * m_pOutput;
1244         };
1245 		static Test const aTest[]
1246 			= { { "file://d:\\dir1\\file1", "file:///d:/dir1/file1" },
1247                 { "http://as@alaska:8000/test/test.sxw", 0 } };
1248 		for (std::size_t i = 0; i < sizeof aTest / sizeof aTest[0]; ++i)
1249 		{
1250 			INetURLObject aUrl = INetURLObject(
1251                 String(aTest[i].m_pInput, RTL_TEXTENCODING_UTF8),
1252                 INET_PROT_HTTP);
1253 			if (aTest[i].m_pOutput == 0
1254                 ? !aUrl.HasError()
1255                 : (aUrl.HasError()
1256                    || (aUrl.GetMainURL(INetURLObject::DECODE_TO_IURI).
1257                            equalsAscii(aTest[i].m_pOutput)
1258                        != sal_True)))
1259 			{
1260 				String sTest(aUrl.GetMainURL(INetURLObject::DECODE_TO_IURI));
1261 				printf("BAD %s -> %s != %s\n",
1262 					   aTest[i].m_pInput,
1263                        aUrl.HasError() ? "<none>"
1264                        : ByteString(sTest, RTL_TEXTENCODING_ASCII_US).GetBuffer(),
1265                        aTest[i].m_pOutput == 0 ? "<none>" : aTest[i].m_pOutput);
1266 			}
1267 		}
1268     }
1269 
1270     if (true)
1271     {
1272         INetURLObject aUrl;
1273         rtl::OUString aUser;
1274         aUrl = INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
1275                                                "ftp://test")));
1276         aUser = aUrl.GetUser();
1277         if (aUser.getLength() != 0)
1278             printf(
1279                 "BAD <ftp://test> user: \"%s\" != \"\"",
1280                 rtl::OUStringToOString(aUser, RTL_TEXTENCODING_UTF8).getStr());
1281         aUrl = INetURLObject(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
1282                                                "ftp://user@test")));
1283         aUser = aUrl.GetUser();
1284         if (!aUser.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("user")))
1285             printf(
1286                 "BAD <ftp://user@test> user: \"%s\" != \"user\"",
1287                 rtl::OUStringToOString(aUser, RTL_TEXTENCODING_UTF8).getStr());
1288     }
1289 
1290     if (true)
1291     {
1292         INetURLObject aUrl;
1293 
1294         aUrl = INetURLObject("vnd.sun.star.pkg://foo.bar/a/b/c?abc/def?");
1295         if (aUrl.GetProtocol() != INET_PROT_VND_SUN_STAR_PKG)
1296             printf("BAD <vnd.sun.star.pkg://foo.bar/a/b/c?abc/def?>:"
1297                    " scheme = %d\n",
1298                    static_cast< int >(aUrl.GetProtocol()));
1299         else
1300         {
1301             if (!rtl::OUString(aUrl.GetMainURL(INetURLObject::NO_DECODE)).
1302                 equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(
1303                                  "vnd.sun.star.pkg://foo.bar/a/b/c?abc/def?")))
1304                 printf("BAD <vnd.sun.star.pkg://foo.bar/a/b/c?abc/def?>:"
1305                        " URL = %s\n",
1306                        rtl::OUStringToOString(
1307                            aUrl.GetMainURL(INetURLObject::NO_DECODE),
1308                            RTL_TEXTENCODING_UTF8).getStr());
1309             if (!rtl::OUString(aUrl.GetParam(INetURLObject::NO_DECODE)).
1310                 equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("abc/def?")))
1311                 printf("BAD <vnd.sun.star.pkg://foo.bar/a/b/c?abc/def?>:"
1312                        " query = %s\n",
1313                        rtl::OUStringToOString(
1314                            aUrl.GetParam(INetURLObject::NO_DECODE),
1315                            RTL_TEXTENCODING_UTF8).getStr());
1316         }
1317 
1318         aUrl = INetURLObject("vnd.sun.star.pkg://foo.bar/a/b/c%3Fabc/def%3F");
1319         if (aUrl.GetProtocol() != INET_PROT_VND_SUN_STAR_PKG)
1320             printf("BAD <vnd.sun.star.pkg://foo.bar/a/b/c%%3Fabc/def%%3F>:"
1321                    " scheme = %d\n",
1322                    static_cast< int >(aUrl.GetProtocol()));
1323         else
1324         {
1325             if (!rtl::OUString(aUrl.GetMainURL(INetURLObject::NO_DECODE)).
1326                 equalsAsciiL(
1327                     RTL_CONSTASCII_STRINGPARAM(
1328                         "vnd.sun.star.pkg://foo.bar/a/b/c%3Fabc/def%3F")))
1329                 printf("BAD <vnd.sun.star.pkg://foo.bar/a/b/c?abc/def?>:"
1330                        " URL = %s\n",
1331                        rtl::OUStringToOString(
1332                            aUrl.GetMainURL(INetURLObject::NO_DECODE),
1333                            RTL_TEXTENCODING_UTF8).getStr());
1334             if (!rtl::OUString(aUrl.GetParam(INetURLObject::NO_DECODE)).
1335                 equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("")))
1336                 printf("BAD <vnd.sun.star.pkg://foo.bar/a/b/c%%3Fabc/def%%3F>:"
1337                        " query = %s\n",
1338                        rtl::OUStringToOString(
1339                            aUrl.GetParam(INetURLObject::NO_DECODE),
1340                            RTL_TEXTENCODING_UTF8).getStr());
1341         }
1342     }
1343 
1344     if (true)
1345     {
1346         struct Test
1347         {
1348             INetProtocol eScheme;
1349             char const * pPath;
1350             char const * pUri;
1351         };
1352 		static Test const aTest[]
1353 			= { { INET_PROT_FILE, "", "file:///" },
1354                 { INET_PROT_FILE, "/", "file:///" },
1355                 { INET_PROT_FILE, "abc", 0 },
1356                 { INET_PROT_FILE, "/abc/", "file:///abc/" },
1357                 { INET_PROT_NEWS, "", 0 },
1358                 { INET_PROT_NEWS, "*", "news:*" },
1359                 { INET_PROT_NEWS, "**", 0 },
1360                 { INET_PROT_NEWS, "%2A", 0 },
1361                 { INET_PROT_NEWS, "a", "news:a" },
1362                 { INET_PROT_NEWS, "A", "news:A" },
1363                 { INET_PROT_NEWS, "+-._", 0 },
1364                 { INET_PROT_NEWS, "A0+-._", "news:A0+-._" },
1365                 { INET_PROT_NEWS, "0", 0 },
1366                 { INET_PROT_NEWS, "AB,", 0 },
1367                 { INET_PROT_NEWS, "abc@def", "news:abc@def" },
1368                 { INET_PROT_NEWS, "abc@def:33", 0 },
1369                 { INET_PROT_NEWS, "abc@123.456.789.0",
1370                   "news:abc@123.456.789.0" },
1371                 { INET_PROT_NEWS, "abc@def.", "news:abc@def." },
1372                 { INET_PROT_NEWS, "abc@def.ghi", "news:abc@def.ghi" },
1373                 { INET_PROT_NEWS, "abc@def.-ghi", 0 },
1374                 { INET_PROT_NEWS, "abc@def.ghi@", 0 },
1375                 { INET_PROT_NEWS, "!\"#@def", "news:!%22%23@def" },
1376                 { INET_PROT_NEWS, " @def", "news:%20@def" } };
1377 		for (std::size_t i = 0; i < sizeof aTest / sizeof aTest[0]; ++i)
1378 		{
1379 			INetURLObject aUri;
1380             bool bOk = aUri.ConcatData(aTest[i].eScheme, String(), String(),
1381                                        String(), 0,
1382                                        String(aTest[i].pPath,
1383                                               RTL_TEXTENCODING_ASCII_US),
1384                                        INetURLObject::ENCODE_ALL);
1385             if (bOk == aUri.HasError())
1386                 printf(
1387                     "BAD ConcatData(%d, ..., %s) = %d, HasError() = %d\n",
1388                     static_cast< int >(aTest[i].eScheme), aTest[i].pPath,
1389                     static_cast< int >(bOk),
1390                     static_cast< int >(aUri.HasError()));
1391 			else if (aTest[i].pUri == 0
1392                      ? !aUri.HasError()
1393                      : (aUri.HasError()
1394                         || (aUri.GetMainURL(INetURLObject::DECODE_TO_IURI).
1395                                 equalsAscii(aTest[i].pUri)
1396                             != sal_True)))
1397 			{
1398 				String sTest(aUri.GetMainURL(INetURLObject::DECODE_TO_IURI));
1399 				printf("BAD ConcatData(%d, ..., %s) -> %s != %s\n",
1400 					   static_cast< int >(aTest[i].eScheme), aTest[i].pPath,
1401                        aUri.HasError() ? "<none>"
1402                        : ByteString(sTest, RTL_TEXTENCODING_ASCII_US).GetBuffer(),
1403                        aTest[i].pUri == 0 ? "<none>" : aTest[i].pUri);
1404 			}
1405 		}
1406     }
1407 
1408     if (true)
1409     {
1410         // #i13760#
1411 
1412         // Test for unrelated URLs.
1413         const rtl::OUString aBaseURL(RTL_CONSTASCII_USTRINGPARAM(
1414                                 "http://www.openoffice.org"));
1415         rtl::OUString aRelURL (RTL_CONSTASCII_USTRINGPARAM(
1416                                 "http://www.sun.com"));
1417 
1418         rtl::OUString aRelURLToTest(
1419             INetURLObject::GetRelURL(aBaseURL, aRelURL));
1420 
1421         if (INetURLObject(aRelURLToTest) != INetURLObject(aRelURL))
1422             printf("BAD GetRelURL(%s, %s), ret = %s\n",
1423                        ByteString(aBaseURL.getStr(),
1424                                   RTL_TEXTENCODING_ASCII_US).GetBuffer(),
1425                        ByteString(aRelURL.getStr(),
1426                                   RTL_TEXTENCODING_ASCII_US).GetBuffer(),
1427                        ByteString(aRelURLToTest.getStr(),
1428                                   RTL_TEXTENCODING_ASCII_US).GetBuffer());
1429 
1430         // Test for related URLs.
1431         aRelURL = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
1432                                 "http://www.openoffice.org/api/test.html"));
1433         aRelURLToTest = rtl::OUString(
1434             INetURLObject::GetRelURL(aBaseURL, aRelURL));
1435 
1436         if (!aRelURLToTest.equalsAsciiL(
1437                 RTL_CONSTASCII_STRINGPARAM("api/test.html")))
1438             printf("BAD GetRelURL(%s, %s), ret = %s\n",
1439                        ByteString(aBaseURL.getStr(),
1440                                   RTL_TEXTENCODING_ASCII_US).GetBuffer(),
1441                        ByteString(aRelURL.getStr(),
1442                                   RTL_TEXTENCODING_ASCII_US).GetBuffer(),
1443                        ByteString(aRelURLToTest.getStr(),
1444                                   RTL_TEXTENCODING_ASCII_US).GetBuffer());
1445     }
1446 
1447     if (true) { // #112130#
1448         INetURLObject url1(rtl::OUString::createFromAscii(".uno:abc%3Fdef"));
1449         if (url1.GetProtocol() != INET_PROT_UNO) {
1450             printf("BAD .uno:abc%%3Fdef\n");
1451             bSuccess = false;
1452         }
1453         if (!rtl::OUString(url1.GetURLPath(INetURLObject::NO_DECODE)).
1454                 equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("abc%3Fdef"))) {
1455             printf(
1456                 "BAD GetURLPath(.uno:abc%%3Fdef): %s\n",
1457                 rtl::OUStringToOString(
1458                     url1.GetURLPath(INetURLObject::NO_DECODE),
1459                     osl_getThreadTextEncoding()).getStr());
1460             bSuccess = false;
1461         }
1462         if (url1.HasParam()) {
1463             printf("BAD HasParam(.uno:abc%%3Fdef)\n");
1464             bSuccess = false;
1465         }
1466         INetURLObject url2(rtl::OUString::createFromAscii(".uno:abc?def?ghi"));
1467         if (url2.GetProtocol() != INET_PROT_UNO) {
1468             printf("BAD .uno:abc?def?ghi\n");
1469             bSuccess = false;
1470         }
1471         if (!rtl::OUString(url2.GetURLPath(INetURLObject::NO_DECODE)).
1472                 equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("abc"))) {
1473             printf(
1474                 "BAD GetURLPath(.uno:abc?def?ghi): %s\n",
1475                 rtl::OUStringToOString(
1476                     url2.GetURLPath(INetURLObject::NO_DECODE),
1477                     osl_getThreadTextEncoding()).getStr());
1478             bSuccess = false;
1479         }
1480         if (!url2.HasParam()) {
1481             printf("BAD HasParam(.uno:abc?def?ghi)\n");
1482             bSuccess = false;
1483         }
1484         if (!rtl::OUString(url2.GetParam(INetURLObject::NO_DECODE)).
1485                 equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("def?ghi"))) {
1486             printf(
1487                 "BAD GetURLPath(.uno:abc?def?ghi): %s\n",
1488                 rtl::OUStringToOString(
1489                     url2.GetParam(INetURLObject::NO_DECODE),
1490                     osl_getThreadTextEncoding()).getStr());
1491             bSuccess = false;
1492         }
1493     }
1494 
1495     if (true) { // #116269#
1496         rtl::OUString url;
1497         INetURLObject urlobj;
1498 
1499         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("A-b.3:/%2f?x#y"));
1500         urlobj = INetURLObject(url);
1501         bSuccess &= assertEqual(url, INET_PROT_GENERIC, urlobj.GetProtocol());
1502         bSuccess &= assertEqual(
1503             url, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("a-b.3:/%2F?x#y")),
1504             rtl::OUString(urlobj.GetMainURL(INetURLObject::NO_DECODE)));
1505         bSuccess &= assertEqual(url, false, urlobj.HasUserData());
1506         bSuccess &= assertEqual(url, false, urlobj.hasPassword());
1507         bSuccess &= assertEqual(url, false, urlobj.HasPort());
1508         bSuccess &= assertEqual(
1509             url, rtl::OUString(), rtl::OUString(urlobj.GetHost()));
1510         bSuccess &= assertEqual(
1511             url, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/%2F?x")),
1512             rtl::OUString(urlobj.GetURLPath()));
1513         bSuccess &= assertEqual(url, false, urlobj.HasParam());
1514         bSuccess &= assertEqual(url, true, urlobj.HasMark());
1515         bSuccess &= assertEqual(
1516             url, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("y")),
1517             rtl::OUString(urlobj.GetMark()));
1518 
1519         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("foo:"));
1520         urlobj = INetURLObject(url);
1521         bSuccess &= assertEqual(url, true, urlobj.HasError());
1522 
1523         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("foo:#"));
1524         urlobj = INetURLObject(url);
1525         bSuccess &= assertEqual(url, true, urlobj.HasError());
1526 
1527         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("foo:/"));
1528         urlobj = INetURLObject(url);
1529         bSuccess &= assertEqual(url, INET_PROT_GENERIC, urlobj.GetProtocol());
1530         bSuccess &= assertEqual(
1531             url, url,
1532             rtl::OUString(urlobj.GetMainURL(INetURLObject::NO_DECODE)));
1533 
1534         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".foo:/"));
1535         urlobj = INetURLObject(url);
1536         bSuccess &= assertEqual(url, true, urlobj.HasError());
1537 
1538         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("C:\\bla"));
1539         urlobj = INetURLObject(url);
1540         bSuccess &= assertEqual(url, true, urlobj.HasError());
1541 
1542         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("C:\\bla"));
1543         urlobj = INetURLObject(url, INET_PROT_FILE);
1544         bSuccess &= assertEqual(url, INET_PROT_FILE, urlobj.GetProtocol());
1545         bSuccess &= assertEqual(
1546             url, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("file:///C:/bla")),
1547             rtl::OUString(urlobj.GetMainURL(INetURLObject::NO_DECODE)));
1548 
1549         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LPR:\\bla"));
1550         urlobj = INetURLObject(url);
1551         bSuccess &= assertEqual(url, INET_PROT_GENERIC, urlobj.GetProtocol());
1552         bSuccess &= assertEqual(
1553             url, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("lpr:%5Cbla")),
1554             rtl::OUString(urlobj.GetMainURL(INetURLObject::NO_DECODE)));
1555 
1556         url = rtl::OUString(
1557             RTL_CONSTASCII_USTRINGPARAM("private:factory/swriter"));
1558         urlobj = INetURLObject(url);
1559         bSuccess &= assertEqual(
1560             url, INET_PROT_PRIV_SOFFICE, urlobj.GetProtocol());
1561         bSuccess &= assertEqual(
1562             url, url,
1563             rtl::OUString(urlobj.GetMainURL(INetURLObject::NO_DECODE)));
1564 
1565         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("A-b.3:/%2f?x#y"));
1566         urlobj = INetURLObject(url, INET_PROT_CID);
1567         bSuccess &= assertEqual(url, INET_PROT_GENERIC, urlobj.GetProtocol());
1568         bSuccess &= assertEqual(
1569             url, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("a-b.3:/%2F?x#y")),
1570             rtl::OUString(urlobj.GetMainURL(INetURLObject::NO_DECODE)));
1571 
1572         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("foo:"));
1573         urlobj = INetURLObject(url, INET_PROT_CID);
1574         bSuccess &= assertEqual(url, INET_PROT_CID, urlobj.GetProtocol());
1575         bSuccess &= assertEqual(
1576             url, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("cid:foo:")),
1577             rtl::OUString(urlobj.GetMainURL(INetURLObject::NO_DECODE)));
1578 
1579         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("foo:#"));
1580         urlobj = INetURLObject(url, INET_PROT_CID);
1581         bSuccess &= assertEqual(url, INET_PROT_CID, urlobj.GetProtocol());
1582         bSuccess &= assertEqual(
1583             url, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("cid:foo:#")),
1584             rtl::OUString(urlobj.GetMainURL(INetURLObject::NO_DECODE)));
1585 
1586         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("foo:/"));
1587         urlobj = INetURLObject(url, INET_PROT_CID);
1588         bSuccess &= assertEqual(url, INET_PROT_GENERIC, urlobj.GetProtocol());
1589         bSuccess &= assertEqual(
1590             url, url,
1591             rtl::OUString(urlobj.GetMainURL(INetURLObject::NO_DECODE)));
1592 
1593         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".foo:/"));
1594         urlobj = INetURLObject(url, INET_PROT_CID);
1595         bSuccess &= assertEqual(url, INET_PROT_CID, urlobj.GetProtocol());
1596         bSuccess &= assertEqual(
1597             url, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("cid:.foo:/")),
1598             rtl::OUString(urlobj.GetMainURL(INetURLObject::NO_DECODE)));
1599 
1600         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("C:\\bla"));
1601         urlobj = INetURLObject(url, INET_PROT_CID);
1602         bSuccess &= assertEqual(url, INET_PROT_FILE, urlobj.GetProtocol());
1603         bSuccess &= assertEqual(
1604             url, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("file:///C:/bla")),
1605             rtl::OUString(urlobj.GetMainURL(INetURLObject::NO_DECODE)));
1606 
1607         url = rtl::OUString(
1608             RTL_CONSTASCII_USTRINGPARAM("private:factory/swriter"));
1609         urlobj = INetURLObject(url, INET_PROT_CID);
1610         bSuccess &= assertEqual(
1611             url, INET_PROT_PRIV_SOFFICE, urlobj.GetProtocol());
1612         bSuccess &= assertEqual(
1613             url, url,
1614             rtl::OUString(urlobj.GetMainURL(INetURLObject::NO_DECODE)));
1615 
1616         // #i80134#:
1617         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\\\\foobar\\%20#"));
1618         urlobj = INetURLObject(url, INET_PROT_FILE);
1619         bSuccess &= assertEqual(url, INET_PROT_FILE, urlobj.GetProtocol());
1620         bSuccess &= assertEqual(
1621             url,
1622             rtl::OUString(
1623                 RTL_CONSTASCII_USTRINGPARAM("file://foobar/%2520%23")),
1624             rtl::OUString(urlobj.GetMainURL(INetURLObject::NO_DECODE)));
1625         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\\\\foo_bar\\%20#"));
1626         urlobj = INetURLObject(url, INET_PROT_FILE);
1627         bSuccess &= assertEqual(url, INET_PROT_FILE, urlobj.GetProtocol());
1628         bSuccess &= assertEqual(
1629             url,
1630             rtl::OUString(
1631                 RTL_CONSTASCII_USTRINGPARAM("file://foo_bar/%2520%23")),
1632             rtl::OUString(urlobj.GetMainURL(INetURLObject::NO_DECODE)));
1633     }
1634 
1635     if (true) { // #i53184#
1636         rtl::OUString url(RTL_CONSTASCII_USTRINGPARAM("file://comp_name/path"));
1637         bSuccess &= assertEqual(
1638             rtl::OUString(
1639                 RTL_CONSTASCII_USTRINGPARAM("#i53184# smart INET_PROT_FILE")),
1640             INetURLObject(url, INET_PROT_FILE).GetMainURL(
1641                 INetURLObject::NO_DECODE),
1642             url);
1643         bSuccess &= assertEqual(
1644             rtl::OUString(
1645                 RTL_CONSTASCII_USTRINGPARAM("#i53184# strict")),
1646             INetURLObject(url).GetMainURL(INetURLObject::NO_DECODE), url);
1647     }
1648 
1649     if (true) {
1650         rtl::OUString path;
1651         path = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/a/b/c"));
1652         bSuccess &= assertEqual(
1653             path,
1654             rtl::OUString(
1655                 INetURLObject(path, INetURLObject::FSYS_DETECT).GetMainURL(
1656                     INetURLObject::NO_DECODE)),
1657             rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("file:///a/b/c")));
1658         path = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("a\\b\\c"));
1659         bSuccess &= assertEqual(
1660             path,
1661             rtl::OUString(
1662                 INetURLObject(path, INetURLObject::FSYS_DETECT).GetMainURL(
1663                     INetURLObject::NO_DECODE)),
1664             rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("file:///a/b/c")));
1665         path = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("a:b:c"));
1666         bSuccess &= assertEqual(
1667             path, INetURLObject(path, INetURLObject::FSYS_DETECT).HasError(),
1668             true);
1669         bSuccess &= assertEqual(
1670             path,
1671             rtl::OUString(
1672                 INetURLObject(
1673                     path,
1674                     INetURLObject::FSysStyle(
1675                         INetURLObject::FSYS_DETECT | INetURLObject::FSYS_MAC)).
1676                 GetMainURL(INetURLObject::NO_DECODE)),
1677             rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("file:///a/b/c")));
1678         rtl::OUString url;
1679         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/a/b/c"));
1680         bSuccess &= assertEqual(
1681             url,
1682             rtl::OUString(
1683                 INetURLObject(url, INET_PROT_HTTP).GetMainURL(
1684                     INetURLObject::NO_DECODE)),
1685             rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("file:///a/b/c")));
1686         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("a:\\b\\c"));
1687         bSuccess &= assertEqual(
1688             url,
1689             rtl::OUString(
1690                 INetURLObject(url, INET_PROT_HTTP).GetMainURL(
1691                     INetURLObject::NO_DECODE)),
1692             rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("file:///a:/b/c")));
1693         url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("a:b:c"));
1694         bSuccess &= assertEqual(
1695             url, INetURLObject(url, INET_PROT_HTTP).HasError(), true);
1696         bSuccess &= assertEqual(
1697             url,
1698             (INetURLObject(
1699                 url, INET_PROT_HTTP, INetURLObject::WAS_ENCODED,
1700                 RTL_TEXTENCODING_UTF8,
1701                 INetURLObject::FSysStyle(
1702                     INetURLObject::FSYS_DETECT | INetURLObject::FSYS_MAC)).
1703              HasError()),
1704             true);
1705     }
1706 
1707     bSuccess &= test_getSegmentCount("mailto:a@b", false, 0);
1708     bSuccess &= test_getSegmentCount("vnd.sun.star.expand:$PREFIX", false, 1);
1709     bSuccess &= test_getSegmentCount("vnd.sun.star.expand:$PREFIX", true, 1);
1710     bSuccess &= test_getSegmentCount("vnd.sun.star.expand:$PREFIX/", false, 2);
1711     bSuccess &= test_getSegmentCount("vnd.sun.star.expand:$PREFIX/", true, 1);
1712     bSuccess &= test_getSegmentCount(
1713         "vnd.sun.star.expand:$PREFIX/foo", false, 2);
1714     bSuccess &= test_getSegmentCount(
1715         "vnd.sun.star.expand:$PREFIX/foo", true, 2);
1716     bSuccess &= test_getSegmentCount("file:///", false, 1);
1717     bSuccess &= test_getSegmentCount("file:///", true, 0);
1718     bSuccess &= test_getSegmentCount("file:///foo", false, 1);
1719     bSuccess &= test_getSegmentCount("file:///foo", true, 1);
1720 
1721     bSuccess &= test_insertName(
1722         "mailto:a@b", "foo", false, 0, false, false, "mailto:a@b");
1723     bSuccess &= test_insertName(
1724         "vnd.sun.star.expand:$PREFIX", "foo", false, 0, false, true,
1725         "vnd.sun.star.expand:%2Ffoo/$PREFIX");
1726     bSuccess &= test_insertName(
1727         "vnd.sun.star.expand:$PREFIX", "foo", false, 0, true, true,
1728         "vnd.sun.star.expand:%2Ffoo/$PREFIX");
1729     bSuccess &= test_insertName(
1730         "vnd.sun.star.expand:$PREFIX", "foo", true, 0, false, true,
1731         "vnd.sun.star.expand:%2Ffoo/$PREFIX");
1732     bSuccess &= test_insertName(
1733         "vnd.sun.star.expand:$PREFIX", "foo", true, 0, true, true,
1734         "vnd.sun.star.expand:%2Ffoo/$PREFIX");
1735     bSuccess &= test_insertName(
1736         "vnd.sun.star.expand:$PREFIX", "foo", false, 1, false, true,
1737         "vnd.sun.star.expand:$PREFIX/foo");
1738     bSuccess &= test_insertName(
1739         "vnd.sun.star.expand:$PREFIX", "foo", false, 1, true, true,
1740         "vnd.sun.star.expand:$PREFIX/foo");
1741     bSuccess &= test_insertName(
1742         "vnd.sun.star.expand:$PREFIX", "foo", true, 1, false, true,
1743         "vnd.sun.star.expand:$PREFIX/foo/");
1744     bSuccess &= test_insertName(
1745         "vnd.sun.star.expand:$PREFIX", "foo", true, 1, true, true,
1746         "vnd.sun.star.expand:$PREFIX/foo/");
1747     bSuccess &= test_insertName(
1748         "vnd.sun.star.expand:$PREFIX", "foo", false,
1749         INetURLObject::LAST_SEGMENT, false, true,
1750         "vnd.sun.star.expand:$PREFIX/foo");
1751     bSuccess &= test_insertName(
1752         "vnd.sun.star.expand:$PREFIX", "foo", false,
1753         INetURLObject::LAST_SEGMENT, true, true,
1754         "vnd.sun.star.expand:$PREFIX/foo");
1755     bSuccess &= test_insertName(
1756         "vnd.sun.star.expand:$PREFIX", "foo", true,
1757         INetURLObject::LAST_SEGMENT, false, true,
1758         "vnd.sun.star.expand:$PREFIX/foo/");
1759     bSuccess &= test_insertName(
1760         "vnd.sun.star.expand:$PREFIX", "foo", true,
1761         INetURLObject::LAST_SEGMENT, true, true,
1762         "vnd.sun.star.expand:$PREFIX/foo/");
1763     bSuccess &= test_insertName(
1764         "vnd.sun.star.expand:$PREFIX/", "foo", false,
1765         1, false, true,
1766         "vnd.sun.star.expand:$PREFIX/foo/");
1767     bSuccess &= test_insertName(
1768         "vnd.sun.star.expand:$PREFIX/", "foo", false,
1769         1, true, true,
1770         "vnd.sun.star.expand:$PREFIX/foo");
1771     bSuccess &= test_insertName(
1772         "vnd.sun.star.expand:$PREFIX/", "foo", true,
1773         1, false, true,
1774         "vnd.sun.star.expand:$PREFIX/foo/");
1775     bSuccess &= test_insertName(
1776         "vnd.sun.star.expand:$PREFIX/", "foo", true,
1777         1, true, true,
1778         "vnd.sun.star.expand:$PREFIX/foo/");
1779     bSuccess &= test_insertName(
1780         "vnd.sun.star.expand:$PREFIX/", "foo", false,
1781         INetURLObject::LAST_SEGMENT, false, true,
1782         "vnd.sun.star.expand:$PREFIX//foo");
1783     bSuccess &= test_insertName(
1784         "vnd.sun.star.expand:$PREFIX/", "foo", false,
1785         INetURLObject::LAST_SEGMENT, true, true,
1786         "vnd.sun.star.expand:$PREFIX/foo");
1787     bSuccess &= test_insertName(
1788         "vnd.sun.star.expand:$PREFIX/", "foo", true,
1789         INetURLObject::LAST_SEGMENT, false, true,
1790         "vnd.sun.star.expand:$PREFIX//foo/");
1791     bSuccess &= test_insertName(
1792         "vnd.sun.star.expand:$PREFIX/", "foo", true,
1793         INetURLObject::LAST_SEGMENT, true, true,
1794         "vnd.sun.star.expand:$PREFIX/foo/");
1795     bSuccess &= test_insertName(
1796         "file:///", "foo", false, 0, false, true, "file:///foo/");
1797     bSuccess &= test_insertName(
1798         "file:///", "foo", false, 0, true, true, "file:///foo");
1799     bSuccess &= test_insertName(
1800         "file:///", "foo", true, 0, false, true, "file:///foo/");
1801     bSuccess &= test_insertName(
1802         "file:///", "foo", true, 0, true, true, "file:///foo/");
1803     bSuccess &= test_insertName(
1804         "file:///bar", "foo", false, 0, false, true, "file:///foo/bar");
1805     bSuccess &= test_insertName(
1806         "file:///bar", "foo", false, 0, true, true, "file:///foo/bar");
1807     bSuccess &= test_insertName(
1808         "file:///bar", "foo", true, 0, false, true, "file:///foo/bar");
1809     bSuccess &= test_insertName(
1810         "file:///bar", "foo", true, 0, true, true, "file:///foo/bar");
1811 
1812     bSuccess &= test_removeSegment("mailto:a@b", 0, false, false, "mailto:a@b");
1813     bSuccess &= test_removeSegment(
1814         "vnd.sun.star.expand:$PREFIX", 0, false, false,
1815         "vnd.sun.star.expand:$PREFIX");
1816     bSuccess &= test_removeSegment(
1817         "vnd.sun.star.expand:$PREFIX", 0, true, true,
1818         "vnd.sun.star.expand:%2F");
1819     bSuccess &= test_removeSegment(
1820         "vnd.sun.star.expand:$PREFIX", 1, false, false,
1821         "vnd.sun.star.expand:$PREFIX");
1822     bSuccess &= test_removeSegment(
1823         "vnd.sun.star.expand:$PREFIX", 1, true, false,
1824         "vnd.sun.star.expand:$PREFIX");
1825     bSuccess &= test_removeSegment(
1826         "vnd.sun.star.expand:$PREFIX", 2, false, false,
1827         "vnd.sun.star.expand:$PREFIX");
1828     bSuccess &= test_removeSegment(
1829         "vnd.sun.star.expand:$PREFIX", 2, true, false,
1830         "vnd.sun.star.expand:$PREFIX");
1831     bSuccess &= test_removeSegment(
1832         "vnd.sun.star.expand:$PREFIX", INetURLObject::LAST_SEGMENT, false,
1833         false, "vnd.sun.star.expand:$PREFIX");
1834     bSuccess &= test_removeSegment(
1835         "vnd.sun.star.expand:$PREFIX", INetURLObject::LAST_SEGMENT, true, true,
1836         "vnd.sun.star.expand:%2F");
1837     bSuccess &= test_removeSegment(
1838         "vnd.sun.star.expand:$PREFIX/", 0, false, true,
1839         "vnd.sun.star.expand:%2F");
1840     bSuccess &= test_removeSegment(
1841         "vnd.sun.star.expand:$PREFIX/", 0, true, true,
1842         "vnd.sun.star.expand:%2F");
1843     bSuccess &= test_removeSegment(
1844         "vnd.sun.star.expand:$PREFIX/", 1, false, true,
1845         "vnd.sun.star.expand:$PREFIX");
1846     bSuccess &= test_removeSegment(
1847         "vnd.sun.star.expand:$PREFIX/", 1, true, true,
1848         "vnd.sun.star.expand:$PREFIX/");
1849     bSuccess &= test_removeSegment(
1850         "vnd.sun.star.expand:$PREFIX/", 2, false, false,
1851         "vnd.sun.star.expand:$PREFIX/");
1852     bSuccess &= test_removeSegment(
1853         "vnd.sun.star.expand:$PREFIX/", 2, true, false,
1854         "vnd.sun.star.expand:$PREFIX/");
1855     bSuccess &= test_removeSegment(
1856         "vnd.sun.star.expand:$PREFIX/", INetURLObject::LAST_SEGMENT, false,
1857         true, "vnd.sun.star.expand:$PREFIX");
1858     bSuccess &= test_removeSegment(
1859         "vnd.sun.star.expand:$PREFIX/", INetURLObject::LAST_SEGMENT, true,
1860         true, "vnd.sun.star.expand:%2F");
1861     bSuccess &= test_removeSegment("file:///", 0, false, true, "file:///");
1862     bSuccess &= test_removeSegment("file:///", 0, true, true, "file:///");
1863     bSuccess &= test_removeSegment("file:///", 1, false, false, "file:///");
1864     bSuccess &= test_removeSegment("file:///", 1, true, false, "file:///");
1865     bSuccess &= test_removeSegment("file:///", 2, false, false, "file:///");
1866     bSuccess &= test_removeSegment("file:///", 2, true, false, "file:///");
1867     bSuccess &= test_removeSegment(
1868         "file:///", INetURLObject::LAST_SEGMENT, false, true, "file:///");
1869     bSuccess &= test_removeSegment(
1870         "file:///", INetURLObject::LAST_SEGMENT, true, false, "file:///");
1871     bSuccess &= test_removeSegment("file:///foo", 0, false, true, "file:///");
1872     bSuccess &= test_removeSegment("file:///foo", 0, true, true, "file:///");
1873     bSuccess &= test_removeSegment(
1874         "file:///foo", 1, false, false, "file:///foo");
1875     bSuccess &= test_removeSegment(
1876         "file:///foo", 1, true, false, "file:///foo");
1877     bSuccess &= test_removeSegment(
1878         "file:///foo", 2, false, false, "file:///foo");
1879     bSuccess &= test_removeSegment(
1880         "file:///foo", 2, true, false, "file:///foo");
1881     bSuccess &= test_removeSegment(
1882         "file:///foo", INetURLObject::LAST_SEGMENT, false, true, "file:///");
1883     bSuccess &= test_removeSegment(
1884         "file:///foo", INetURLObject::LAST_SEGMENT, true, true, "file:///");
1885     bSuccess &= test_removeSegment("file:///foo/", 0, false, true, "file:///");
1886     bSuccess &= test_removeSegment("file:///foo/", 0, true, true, "file:///");
1887     bSuccess &= test_removeSegment(
1888         "file:///foo/", 1, false, true, "file:///foo");
1889     bSuccess &= test_removeSegment(
1890         "file:///foo/", 1, true, true, "file:///foo/");
1891     bSuccess &= test_removeSegment(
1892         "file:///foo/", 2, false, false, "file:///foo/");
1893     bSuccess &= test_removeSegment(
1894         "file:///foo/", 2, true, false, "file:///foo/");
1895     bSuccess &= test_removeSegment(
1896         "file:///foo/", INetURLObject::LAST_SEGMENT, false, true,
1897         "file:///foo");
1898     bSuccess &= test_removeSegment(
1899         "file:///foo/", INetURLObject::LAST_SEGMENT, true, true, "file:///");
1900 
1901 	return bSuccess ? EXIT_SUCCESS : EXIT_FAILURE;
1902 }
1903