xref: /aoo42x/main/stoc/test/uriproc/test_uriproc.cxx (revision 4bd09bdf)
1647a425cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3647a425cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4647a425cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5647a425cSAndrew Rist  * distributed with this work for additional information
6647a425cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7647a425cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8647a425cSAndrew Rist  * "License"); you may not use this file except in compliance
9647a425cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10647a425cSAndrew Rist  *
11647a425cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12647a425cSAndrew Rist  *
13647a425cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14647a425cSAndrew Rist  * software distributed under the License is distributed on an
15647a425cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16647a425cSAndrew Rist  * KIND, either express or implied.  See the License for the
17647a425cSAndrew Rist  * specific language governing permissions and limitations
18647a425cSAndrew Rist  * under the License.
19647a425cSAndrew Rist  *
20647a425cSAndrew Rist  *************************************************************/
21647a425cSAndrew Rist 
22647a425cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_stoc.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "com/sun/star/lang/XComponent.hpp"
28cdf0e10cSrcweir #include "com/sun/star/lang/XMultiComponentFactory.hpp"
29cdf0e10cSrcweir #include "com/sun/star/uno/Reference.hxx"
30cdf0e10cSrcweir #include "com/sun/star/uno/XComponentContext.hpp"
31cdf0e10cSrcweir #include "com/sun/star/uri/ExternalUriReferenceTranslator.hpp"
32cdf0e10cSrcweir #include "com/sun/star/uri/UriReferenceFactory.hpp"
33cdf0e10cSrcweir #include "com/sun/star/uri/VndSunStarPkgUrlReferenceFactory.hpp"
34cdf0e10cSrcweir #include "com/sun/star/uri/XExternalUriReferenceTranslator.hpp"
35cdf0e10cSrcweir #include "com/sun/star/uri/XUriReference.hpp"
36cdf0e10cSrcweir #include "com/sun/star/uri/XUriReferenceFactory.hpp"
37cdf0e10cSrcweir #include "com/sun/star/uri/XVndSunStarExpandUrlReference.hpp"
38cdf0e10cSrcweir #include "com/sun/star/uri/XVndSunStarPkgUrlReferenceFactory.hpp"
39cdf0e10cSrcweir #include "com/sun/star/uri/XVndSunStarScriptUrlReference.hpp"
40cdf0e10cSrcweir #include "com/sun/star/util/XMacroExpander.hpp"
41cdf0e10cSrcweir #include "cppuhelper/bootstrap.hxx"
42*4bd09bdfSDamjan Jovanovic #include "gtest/gtest.h"
43cdf0e10cSrcweir #include "osl/diagnose.h"
44*4bd09bdfSDamjan Jovanovic #include "osl/process.h"
45cdf0e10cSrcweir #include "rtl/string.h"
46cdf0e10cSrcweir #include "rtl/string.hxx"
47cdf0e10cSrcweir #include "rtl/textenc.h"
48cdf0e10cSrcweir #include "rtl/ustrbuf.hxx"
49cdf0e10cSrcweir #include "rtl/ustring.hxx"
50cdf0e10cSrcweir #include "sal/types.h"
51cdf0e10cSrcweir 
52cdf0e10cSrcweir #include <cstdlib>
53cdf0e10cSrcweir 
54cdf0e10cSrcweir namespace css = com::sun::star;
55cdf0e10cSrcweir 
56cdf0e10cSrcweir namespace {
57cdf0e10cSrcweir 
58cdf0e10cSrcweir #define TEST_ASSERT_EQUAL(token1, token2, token3, expected, actual) \
59*4bd09bdfSDamjan Jovanovic     ASSERT_TRUE( \
60*4bd09bdfSDamjan Jovanovic         (actual) == (expected)) << \
61cdf0e10cSrcweir         createTestAssertEqualMessage( \
62cdf0e10cSrcweir             token1, token2, token3, #expected, #actual, expected, actual). \
63*4bd09bdfSDamjan Jovanovic             getStr()
64cdf0e10cSrcweir 
append(rtl::OUStringBuffer & buffer,T const & value)65cdf0e10cSrcweir template< typename T > void append(
66cdf0e10cSrcweir     rtl::OUStringBuffer & buffer, T const & value)
67cdf0e10cSrcweir {
68cdf0e10cSrcweir     buffer.append(value);
69cdf0e10cSrcweir }
70cdf0e10cSrcweir 
append(rtl::OUStringBuffer & buffer,bool const & value)71cdf0e10cSrcweir template<> void append(rtl::OUStringBuffer & buffer, bool const & value) {
72cdf0e10cSrcweir     buffer.append(static_cast< sal_Bool >(value));
73cdf0e10cSrcweir }
74cdf0e10cSrcweir 
append(rtl::OUStringBuffer & buffer,std::size_t const & value)75cdf0e10cSrcweir template<> void append(rtl::OUStringBuffer & buffer, std::size_t const & value)
76cdf0e10cSrcweir {
77cdf0e10cSrcweir     buffer.append(static_cast< sal_Int32 >(value));
78cdf0e10cSrcweir }
79cdf0e10cSrcweir 
append(rtl::OUStringBuffer & buffer,char const * const & value)80cdf0e10cSrcweir template<> void append(rtl::OUStringBuffer & buffer, char const * const & value)
81cdf0e10cSrcweir {
82cdf0e10cSrcweir     buffer.appendAscii(value);
83cdf0e10cSrcweir }
84cdf0e10cSrcweir 
85cdf0e10cSrcweir template< typename T1, typename T2, typename T3, typename T4 >
createTestAssertEqualMessage(char const * token1,T1 const & token2,T2 const & token3,char const * expectedExpr,char const * actualExpr,T3 const & expected,T4 const & actual)86cdf0e10cSrcweir rtl::OString createTestAssertEqualMessage(
87cdf0e10cSrcweir     char const * token1, T1 const & token2, T2 const & token3,
88cdf0e10cSrcweir     char const * expectedExpr, char const * actualExpr, T3 const & expected,
89cdf0e10cSrcweir     T4 const & actual)
90cdf0e10cSrcweir {
91cdf0e10cSrcweir     rtl::OUStringBuffer buf;
92cdf0e10cSrcweir     buf.appendAscii(token1);
93cdf0e10cSrcweir     buf.append(static_cast< sal_Unicode >('|'));
94cdf0e10cSrcweir     append(buf, token2);
95cdf0e10cSrcweir     buf.append(static_cast< sal_Unicode >('|'));
96cdf0e10cSrcweir     append(buf, token3);
97cdf0e10cSrcweir     buf.appendAscii(RTL_CONSTASCII_STRINGPARAM(": TEST_ASSERT_EQUAL("));
98cdf0e10cSrcweir     buf.appendAscii(expectedExpr);
99cdf0e10cSrcweir     buf.appendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
100cdf0e10cSrcweir     buf.appendAscii(actualExpr);
101cdf0e10cSrcweir     buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("): <"));
102cdf0e10cSrcweir     append(buf, expected);
103cdf0e10cSrcweir     buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("> != <"));
104cdf0e10cSrcweir     append(buf, actual);
105cdf0e10cSrcweir     buf.append(static_cast< sal_Unicode >('>'));
106cdf0e10cSrcweir     return rtl::OUStringToOString(
107cdf0e10cSrcweir         buf.makeStringAndClear(), RTL_TEXTENCODING_ASCII_US);
108cdf0e10cSrcweir }
109cdf0e10cSrcweir 
110*4bd09bdfSDamjan Jovanovic class Test: public ::testing::Test {
111cdf0e10cSrcweir public:
112*4bd09bdfSDamjan Jovanovic     virtual void SetUp();
113cdf0e10cSrcweir 
114*4bd09bdfSDamjan Jovanovic     virtual void TearDown();
115cdf0e10cSrcweir 
116*4bd09bdfSDamjan Jovanovic protected:
117cdf0e10cSrcweir     css::uno::Reference< css::uno::XComponentContext > m_context;
118cdf0e10cSrcweir     css::uno::Reference< css::uri::XUriReferenceFactory > m_uriFactory;
119cdf0e10cSrcweir };
120cdf0e10cSrcweir 
SetUp()121*4bd09bdfSDamjan Jovanovic void Test::SetUp() {
122cdf0e10cSrcweir     m_context = cppu::defaultBootstrap_InitialComponentContext();
123cdf0e10cSrcweir     m_uriFactory = css::uri::UriReferenceFactory::create(m_context);
124cdf0e10cSrcweir }
125cdf0e10cSrcweir 
TearDown()126*4bd09bdfSDamjan Jovanovic void Test::TearDown() {
127cdf0e10cSrcweir     m_uriFactory.clear();
128cdf0e10cSrcweir     css::uno::Reference< css::lang::XComponent >(
129cdf0e10cSrcweir         m_context, css::uno::UNO_QUERY_THROW)->dispose();
130cdf0e10cSrcweir }
131cdf0e10cSrcweir 
TEST_F(Test,testParse)132*4bd09bdfSDamjan Jovanovic TEST_F(Test, testParse) {
133cdf0e10cSrcweir     struct Data {
134cdf0e10cSrcweir         char const * uriReference;
135cdf0e10cSrcweir         char const * scheme;
136cdf0e10cSrcweir         char const * schemeSpecificPart;
137cdf0e10cSrcweir         bool isHierarchical;
138cdf0e10cSrcweir         char const * authority;
139cdf0e10cSrcweir         char const * path;
140cdf0e10cSrcweir         bool hasRelativePath;
141cdf0e10cSrcweir         sal_Int32 pathSegmentCount;
142cdf0e10cSrcweir         char const * pathSegment0;
143cdf0e10cSrcweir         char const * pathSegment1;
144cdf0e10cSrcweir         char const * pathSegment2;
145cdf0e10cSrcweir         char const * pathSegment3;
146cdf0e10cSrcweir         char const * pathSegment4;
147cdf0e10cSrcweir         char const * query;
148cdf0e10cSrcweir         char const * fragment;
149cdf0e10cSrcweir     };
150cdf0e10cSrcweir     Data data[] = {
151cdf0e10cSrcweir         { "", 0, "", true, 0,
152cdf0e10cSrcweir           "", true, 0, "", "", "", "", "", 0, 0 },
153cdf0e10cSrcweir         { "scheme:", 0, 0, false, 0,
154cdf0e10cSrcweir           0, false, 0, 0, 0, 0, 0, 0, 0, 0 },
155cdf0e10cSrcweir         { "scheme:/", "scheme", "/", true, 0,
156cdf0e10cSrcweir           "/", false, 1, "", "", "", "", "", 0, 0 },
157cdf0e10cSrcweir         { "scheme://", "scheme", "//", true, "",
158cdf0e10cSrcweir           "", false, 0, "", "", "", "", "", 0, 0 },
159cdf0e10cSrcweir         { "scheme:///", "scheme", "///", true, "",
160cdf0e10cSrcweir           "/", false, 1, "", "", "", "", "", 0, 0 },
161cdf0e10cSrcweir         { "scheme:////", "scheme", "////", true, "",
162cdf0e10cSrcweir           "//", false, 2, "", "", "", "", "", 0, 0 },
163cdf0e10cSrcweir         { "scheme:////", "scheme", "////", true, "",
164cdf0e10cSrcweir           "//", false, 2, "", "", "", "", "", 0, 0 },
165cdf0e10cSrcweir         { "scheme:#", 0, 0, false, 0,
166cdf0e10cSrcweir           0, false, 0, 0, 0, 0, 0, 0, 0, 0 },
167cdf0e10cSrcweir         { "scheme:?", "scheme", "?", false, 0,
168cdf0e10cSrcweir           "?", false, 0, "", "", "", "", "", 0, 0 },
169cdf0e10cSrcweir         { "/", 0, "/", true, 0,
170cdf0e10cSrcweir           "/", false, 1, "", "", "", "", "", 0, 0 },
171cdf0e10cSrcweir         { "//", 0, "//", true, "",
172cdf0e10cSrcweir           "", false, 0, "", "", "", "", "", 0, 0 },
173cdf0e10cSrcweir         { "///", 0, "///", true, "",
174cdf0e10cSrcweir           "/", false, 1, "", "", "", "", "", 0, 0 },
175cdf0e10cSrcweir         { "////", 0, "////", true, "",
176cdf0e10cSrcweir           "//", false, 2, "", "", "", "", "", 0, 0 } };
177cdf0e10cSrcweir     for (std::size_t i = 0; i < sizeof data / sizeof data[0]; ++i) {
178cdf0e10cSrcweir         css::uno::Reference< css::uri::XUriReference > uriRef(
179cdf0e10cSrcweir             m_uriFactory->parse(
180cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].uriReference)));
181*4bd09bdfSDamjan Jovanovic         ASSERT_TRUE(uriRef.is() == (data[i].schemeSpecificPart != 0));
182cdf0e10cSrcweir         if (uriRef.is()) {
183cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
184cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
185cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].uriReference),
186cdf0e10cSrcweir                 uriRef->getUriReference());
187cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
188cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
189cdf0e10cSrcweir                 data[i].scheme != 0, uriRef->isAbsolute());
190cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
191cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
192cdf0e10cSrcweir                 rtl::OUString::createFromAscii(
193cdf0e10cSrcweir                     data[i].scheme == 0 ? "" : data[i].scheme),
194cdf0e10cSrcweir                 uriRef->getScheme());
195cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
196cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
197cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].schemeSpecificPart),
198cdf0e10cSrcweir                 uriRef->getSchemeSpecificPart());
199cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
200cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
201cdf0e10cSrcweir                 data[i].isHierarchical,
202cdf0e10cSrcweir                 static_cast< bool >(uriRef->isHierarchical()));
203cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
204cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
205cdf0e10cSrcweir                 data[i].authority != 0, uriRef->hasAuthority());
206cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
207cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
208cdf0e10cSrcweir                 rtl::OUString::createFromAscii(
209cdf0e10cSrcweir                     data[i].authority == 0 ? "" : data[i].authority),
210cdf0e10cSrcweir                 uriRef->getAuthority());
211cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
212cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
213cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].path),
214cdf0e10cSrcweir                 uriRef->getPath());
215cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
216cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
217cdf0e10cSrcweir                 data[i].hasRelativePath,
218cdf0e10cSrcweir                 static_cast< bool >(uriRef->hasRelativePath()));
219cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
220cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
221cdf0e10cSrcweir                 data[i].pathSegmentCount, uriRef->getPathSegmentCount());
222cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
223cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
224cdf0e10cSrcweir                 rtl::OUString::createFromAscii(""), uriRef->getPathSegment(-1));
225cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
226cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
227cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].pathSegment0),
228cdf0e10cSrcweir                 uriRef->getPathSegment(0));
229cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
230cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
231cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].pathSegment1),
232cdf0e10cSrcweir                 uriRef->getPathSegment(1));
233cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
234cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
235cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].pathSegment2),
236cdf0e10cSrcweir                 uriRef->getPathSegment(2));
237cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
238cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
239cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].pathSegment3),
240cdf0e10cSrcweir                 uriRef->getPathSegment(3));
241cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
242cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
243cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].pathSegment4),
244cdf0e10cSrcweir                 uriRef->getPathSegment(4));
245cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
246cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
247cdf0e10cSrcweir                 rtl::OUString::createFromAscii(""), uriRef->getPathSegment(5));
248cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
249cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
250cdf0e10cSrcweir                 data[i].query != 0, uriRef->hasQuery());
251cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
252cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
253cdf0e10cSrcweir                 rtl::OUString::createFromAscii(
254cdf0e10cSrcweir                     data[i].query == 0 ? "" : data[i].query),
255cdf0e10cSrcweir                 uriRef->getQuery());
256cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
257cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
258cdf0e10cSrcweir                 data[i].fragment != 0, uriRef->hasFragment());
259cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
260cdf0e10cSrcweir                 "testParse", i, data[i].uriReference,
261cdf0e10cSrcweir                 rtl::OUString::createFromAscii(
262cdf0e10cSrcweir                     data[i].fragment == 0 ? "" : data[i].fragment),
263cdf0e10cSrcweir                 uriRef->getFragment());
264cdf0e10cSrcweir         }
265cdf0e10cSrcweir     }
266cdf0e10cSrcweir }
267cdf0e10cSrcweir 
TEST_F(Test,testMakeAbsolute)268*4bd09bdfSDamjan Jovanovic TEST_F(Test, testMakeAbsolute) {
269cdf0e10cSrcweir     struct Data {
270cdf0e10cSrcweir         char const * baseUriReference;
271cdf0e10cSrcweir         char const * uriReference;
272cdf0e10cSrcweir         bool processSpecialBaseSegments;
273cdf0e10cSrcweir         css::uri::RelativeUriExcessParentSegments excessParentSegments;
274cdf0e10cSrcweir         char const * absolute;
275cdf0e10cSrcweir     };
276cdf0e10cSrcweir     Data data[] = {
277cdf0e10cSrcweir         // The following tests are taken from RFC 2396, Appendix C:
278cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g:h", true,
279cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "g:h" },
280cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g", true,
281cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/c/g" },
282cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "./g", true,
283cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/c/g" },
284cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g/", true,
285cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/c/g/" },
286cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "//g", true,
287cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://g" },
288cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "?y", true,
289cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/c/?y" },
290cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g?y", true,
291cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR,
292cdf0e10cSrcweir           "http://a/b/c/g?y" },
293cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "#s", true,
294cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR,
295cdf0e10cSrcweir           "http://a/b/c/d;p?q#s" },
296cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g#s", true,
297cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR,
298cdf0e10cSrcweir           "http://a/b/c/g#s" },
299cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g?y#s", true,
300cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR,
301cdf0e10cSrcweir           "http://a/b/c/g?y#s" },
302cdf0e10cSrcweir         { "http://a/b/c/d;p?q", ";x", true,
303cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/c/;x" },
304cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g;x", true,
305cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR,
306cdf0e10cSrcweir           "http://a/b/c/g;x" },
307cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g;x?y#s", true,
308cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR,
309cdf0e10cSrcweir           "http://a/b/c/g;x?y#s" },
310cdf0e10cSrcweir         { "http://a/b/c/d;p?q", ".", true,
311cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/c/" },
312cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "./", true,
313cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/c/" },
314cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "..", true,
315cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/" },
316cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "../", true,
317cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/" },
318cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "../g", true,
319cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/g" },
320cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "../..", true,
321cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/" },
322cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "../../", true,
323cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/" },
324cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "../../g", true,
325cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/g" },
326cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "", true,
327cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR,
328cdf0e10cSrcweir           "http://a/b/c/d;p?q" },
329cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "../../../g", true,
330cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, 0 },
331cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "../../../g", true,
332cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_RETAIN, "http://a/../g" },
333cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "../../../g", true,
334cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_REMOVE, "http://a/g" },
335cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "../../../../g", true,
336cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, 0 },
337cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "../../../../g", true,
338cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_RETAIN,
339cdf0e10cSrcweir           "http://a/../../g" },
340cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "../../../../g", true,
341cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_REMOVE, "http://a/g" },
342cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "/./g", true,
343cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/./g" },
344cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "/../g", true,
345cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/../g" },
346cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g.", true,
347cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/c/g." },
348cdf0e10cSrcweir         { "http://a/b/c/d;p?q", ".g", true,
349cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/c/.g" },
350cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g..", true,
351cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR,
352cdf0e10cSrcweir           "http://a/b/c/g.." },
353cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "..g", true,
354cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR,
355cdf0e10cSrcweir           "http://a/b/c/..g" },
356cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "./../g", true,
357cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/g" },
358cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "./g/.", true,
359cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/c/g/" },
360cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g/./h", true,
361cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR,
362cdf0e10cSrcweir           "http://a/b/c/g/h" },
363cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g/../h", true,
364cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/c/h" },
365cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g;x=1/./y", true,
366cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR,
367cdf0e10cSrcweir           "http://a/b/c/g;x=1/y" },
368cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g;x=1/../y", true,
369cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http://a/b/c/y" },
370cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g?y/./x", true,
371cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR,
372cdf0e10cSrcweir           "http://a/b/c/g?y/./x" },
373cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g?y/../x", true,
374cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR,
375cdf0e10cSrcweir           "http://a/b/c/g?y/../x" },
376cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g#s/./x", true,
377cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR,
378cdf0e10cSrcweir           "http://a/b/c/g#s/./x" },
379cdf0e10cSrcweir         { "http://a/b/c/d;p?q", "g#s/../x", true,
380cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR,
381cdf0e10cSrcweir           "http://a/b/c/g#s/../x" },
382cdf0e10cSrcweir         { "http.://a/b/c/d;p?q", "http.:g", true,
383cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "http.:g" },
384cdf0e10cSrcweir 
385cdf0e10cSrcweir         { "scheme://a", "", true,
386cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
387cdf0e10cSrcweir         { "scheme://a", ".", true,
388cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
389cdf0e10cSrcweir         { "scheme://a", "./", true,
390cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
391cdf0e10cSrcweir         { "scheme://a", "./.", true,
392cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
393cdf0e10cSrcweir         { "scheme://a", "././", true,
394cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
395cdf0e10cSrcweir         { "scheme://a", "././.", true,
396cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
397cdf0e10cSrcweir         { "scheme://a", "x/..", true,
398cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
399cdf0e10cSrcweir         { "scheme://a", "x/../", true,
400cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
401cdf0e10cSrcweir         { "scheme://a", "x/../.", true,
402cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
403cdf0e10cSrcweir         { "scheme://a", "x/.././", true,
404cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
405cdf0e10cSrcweir         { "scheme://a", "x/.././.", true,
406cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
407cdf0e10cSrcweir         { "scheme://a", "x/../././", true,
408cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
409cdf0e10cSrcweir         { "scheme://a", "x/../././.", true,
410cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
411cdf0e10cSrcweir         { "scheme://a", "./x/..", true,
412cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
413cdf0e10cSrcweir         { "scheme://a", "././x/..", true,
414cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
415cdf0e10cSrcweir         { "scheme://a", "./././x/..", true,
416cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
417cdf0e10cSrcweir         { "scheme://a", "./x/../.", true,
418cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
419cdf0e10cSrcweir         { "scheme://a", "./x/.././", true,
420cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
421cdf0e10cSrcweir         { "scheme://a", "././x/.././.", true,
422cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
423cdf0e10cSrcweir         { "scheme://a", "././x/../././", true,
424cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
425cdf0e10cSrcweir         { "scheme://a", "./././x/../././.", true,
426cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
427cdf0e10cSrcweir 
428cdf0e10cSrcweir         { "scheme://a/", "", true,
429cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
430cdf0e10cSrcweir         { "scheme://a/", ".", true,
431cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
432cdf0e10cSrcweir         { "scheme://a/", "./", true,
433cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
434cdf0e10cSrcweir         { "scheme://a/", "./.", true,
435cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
436cdf0e10cSrcweir         { "scheme://a/", "././", true,
437cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
438cdf0e10cSrcweir         { "scheme://a/", "././.", true,
439cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
440cdf0e10cSrcweir         { "scheme://a/", "x/..", true,
441cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
442cdf0e10cSrcweir         { "scheme://a/", "x/../", true,
443cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
444cdf0e10cSrcweir         { "scheme://a/", "x/../.", true,
445cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
446cdf0e10cSrcweir         { "scheme://a/", "x/.././", true,
447cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
448cdf0e10cSrcweir         { "scheme://a/", "x/.././.", true,
449cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
450cdf0e10cSrcweir         { "scheme://a/", "x/../././", true,
451cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
452cdf0e10cSrcweir         { "scheme://a/", "x/../././.", true,
453cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
454cdf0e10cSrcweir         { "scheme://a/", "./x/..", true,
455cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
456cdf0e10cSrcweir         { "scheme://a/", "././x/..", true,
457cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
458cdf0e10cSrcweir         { "scheme://a/", "./././x/..", true,
459cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
460cdf0e10cSrcweir         { "scheme://a/", "./x/../.", true,
461cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
462cdf0e10cSrcweir         { "scheme://a/", "./x/.././", true,
463cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
464cdf0e10cSrcweir         { "scheme://a/", "././x/.././.", true,
465cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
466cdf0e10cSrcweir         { "scheme://a/", "././x/../././", true,
467cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
468cdf0e10cSrcweir         { "scheme://a/", "./././x/../././.", true,
469cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
470cdf0e10cSrcweir 
471cdf0e10cSrcweir         { "scheme://a/b", "", true,
472cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b" },
473cdf0e10cSrcweir         { "scheme://a/b", ".", true,
474cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
475cdf0e10cSrcweir         { "scheme://a/b", "./", true,
476cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
477cdf0e10cSrcweir         { "scheme://a/b", "./.", true,
478cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
479cdf0e10cSrcweir         { "scheme://a/b", "././", true,
480cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
481cdf0e10cSrcweir         { "scheme://a/b", "././.", true,
482cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
483cdf0e10cSrcweir         { "scheme://a/b", "x/..", true,
484cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
485cdf0e10cSrcweir         { "scheme://a/b", "x/../", true,
486cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
487cdf0e10cSrcweir         { "scheme://a/b", "x/../.", true,
488cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
489cdf0e10cSrcweir         { "scheme://a/b", "x/.././", true,
490cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
491cdf0e10cSrcweir         { "scheme://a/b", "x/.././.", true,
492cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
493cdf0e10cSrcweir         { "scheme://a/b", "x/../././", true,
494cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
495cdf0e10cSrcweir         { "scheme://a/b", "x/../././.", true,
496cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
497cdf0e10cSrcweir         { "scheme://a/b", "./x/..", true,
498cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
499cdf0e10cSrcweir         { "scheme://a/b", "././x/..", true,
500cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
501cdf0e10cSrcweir         { "scheme://a/b", "./././x/..", true,
502cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
503cdf0e10cSrcweir         { "scheme://a/b", "./x/../.", true,
504cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
505cdf0e10cSrcweir         { "scheme://a/b", "./x/.././", true,
506cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
507cdf0e10cSrcweir         { "scheme://a/b", "././x/.././.", true,
508cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
509cdf0e10cSrcweir         { "scheme://a/b", "././x/../././", true,
510cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
511cdf0e10cSrcweir         { "scheme://a/b", "./././x/../././.", true,
512cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/" },
513cdf0e10cSrcweir 
514cdf0e10cSrcweir         { "scheme://a/b/", "", true,
515cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
516cdf0e10cSrcweir         { "scheme://a/b/", ".", true,
517cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
518cdf0e10cSrcweir         { "scheme://a/b/", "./", true,
519cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
520cdf0e10cSrcweir         { "scheme://a/b/", "./.", true,
521cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
522cdf0e10cSrcweir         { "scheme://a/b/", "././", true,
523cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
524cdf0e10cSrcweir         { "scheme://a/b/", "././.", true,
525cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
526cdf0e10cSrcweir         { "scheme://a/b/", "x/..", true,
527cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
528cdf0e10cSrcweir         { "scheme://a/b/", "x/../", true,
529cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
530cdf0e10cSrcweir         { "scheme://a/b/", "x/../.", true,
531cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
532cdf0e10cSrcweir         { "scheme://a/b/", "x/.././", true,
533cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
534cdf0e10cSrcweir         { "scheme://a/b/", "x/.././.", true,
535cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
536cdf0e10cSrcweir         { "scheme://a/b/", "x/../././", true,
537cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
538cdf0e10cSrcweir         { "scheme://a/b/", "x/../././.", true,
539cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
540cdf0e10cSrcweir         { "scheme://a/b/", "./x/..", true,
541cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
542cdf0e10cSrcweir         { "scheme://a/b/", "././x/..", true,
543cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
544cdf0e10cSrcweir         { "scheme://a/b/", "./././x/..", true,
545cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
546cdf0e10cSrcweir         { "scheme://a/b/", "./x/../.", true,
547cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
548cdf0e10cSrcweir         { "scheme://a/b/", "./x/.././", true,
549cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
550cdf0e10cSrcweir         { "scheme://a/b/", "././x/.././.", true,
551cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
552cdf0e10cSrcweir         { "scheme://a/b/", "././x/../././", true,
553cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
554cdf0e10cSrcweir         { "scheme://a/b/", "./././x/../././.", true,
555cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a/b/" },
556cdf0e10cSrcweir 
557cdf0e10cSrcweir         { "scheme://a#s", "", true,
558cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a" },
559cdf0e10cSrcweir         { "scheme://a", "?q", true,
560cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a?q" },
561cdf0e10cSrcweir         { "scheme://a#s", "?q", true,
562cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a?q" },
563cdf0e10cSrcweir         { "scheme://a", "#s", true,
564cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a#s" },
565cdf0e10cSrcweir         { "scheme://a#s1", "#s2", true,
566cdf0e10cSrcweir           css::uri::RelativeUriExcessParentSegments_ERROR, "scheme://a#s2" } };
567cdf0e10cSrcweir     for (std::size_t i = 0; i < sizeof data / sizeof data[0]; ++i) {
568cdf0e10cSrcweir         css::uno::Reference< css::uri::XUriReference > baseUriRef(
569cdf0e10cSrcweir             m_uriFactory->parse(
570cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].baseUriReference)));
571*4bd09bdfSDamjan Jovanovic         ASSERT_TRUE(baseUriRef.is());
572cdf0e10cSrcweir         css::uno::Reference< css::uri::XUriReference > uriRef(
573cdf0e10cSrcweir             m_uriFactory->parse(
574cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].uriReference)));
575*4bd09bdfSDamjan Jovanovic         ASSERT_TRUE(uriRef.is());
576cdf0e10cSrcweir         css::uno::Reference< css::uri::XUriReference > absolute(
577cdf0e10cSrcweir             m_uriFactory->makeAbsolute(
578cdf0e10cSrcweir                 baseUriRef, uriRef, data[i].processSpecialBaseSegments,
579cdf0e10cSrcweir                 data[i].excessParentSegments));
580cdf0e10cSrcweir         TEST_ASSERT_EQUAL(
581cdf0e10cSrcweir             "testMakeAbsolute", i, data[i].uriReference,
582cdf0e10cSrcweir             data[i].absolute != 0, absolute.is());
583cdf0e10cSrcweir         if (absolute.is()) {
584cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
585cdf0e10cSrcweir                 "testMakeAbsolute", i, data[i].uriReference,
586cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].absolute),
587cdf0e10cSrcweir                 absolute->getUriReference());
588cdf0e10cSrcweir         }
589cdf0e10cSrcweir     }
590cdf0e10cSrcweir }
591cdf0e10cSrcweir 
TEST_F(Test,testMakeRelative)592*4bd09bdfSDamjan Jovanovic TEST_F(Test, testMakeRelative) {
593cdf0e10cSrcweir     struct Data {
594cdf0e10cSrcweir         char const * baseUriReference;
595cdf0e10cSrcweir         char const * uriReference;
596cdf0e10cSrcweir         bool preferAuthorityOverRelativePath;
597cdf0e10cSrcweir         bool preferAbsoluteOverRelativePath;
598cdf0e10cSrcweir         bool encodeRetainedSpecialSegments;
599cdf0e10cSrcweir         char const * relative;
600cdf0e10cSrcweir         char const * absolute;
601cdf0e10cSrcweir     };
602cdf0e10cSrcweir     Data data[] = {
603cdf0e10cSrcweir         { "scheme1://a/b/c", "scheme2://a/b/c?q#s", true, true, false,
604cdf0e10cSrcweir           "scheme2://a/b/c?q#s", 0 },
605cdf0e10cSrcweir         { "scheme://a/b/c", "scheme:a/b/c?q#s", true, true, false,
606cdf0e10cSrcweir           "scheme:a/b/c?q#s", 0 },
607cdf0e10cSrcweir         { "scheme://a/b/c", "", true, true, false, "", "scheme://a/b/c" },
608cdf0e10cSrcweir         { "scheme://a/b/c", "//d/e/f", true, true, false, "//d/e/f",
609cdf0e10cSrcweir           "scheme://d/e/f" },
610cdf0e10cSrcweir         { "scheme://a/b/c", "./e?q#s", true, true, false, "./e?q#s",
611cdf0e10cSrcweir           "scheme://a/b/e?q#s" },
612cdf0e10cSrcweir         { "scheme://a/b", "scheme://a?q", true, true, false, "/?q",
613cdf0e10cSrcweir           "scheme://a/?q" },
614cdf0e10cSrcweir         { "scheme://a/b", "scheme://a?q", true, false, false, "?q",
615cdf0e10cSrcweir           "scheme://a/?q" },
616cdf0e10cSrcweir         { "scheme://a", "scheme://a?q", true, true, false, "?q", 0 },
617cdf0e10cSrcweir         { "scheme://a/", "scheme://a?q", true, true, false, "?q",
618cdf0e10cSrcweir           "scheme://a/?q" },
619cdf0e10cSrcweir         { "scheme://a", "scheme://a/?q", true, true, false, "?q",
620cdf0e10cSrcweir           "scheme://a?q" },
621cdf0e10cSrcweir         { "scheme://a/", "scheme://a/?q", true, true, false, "?q",
622cdf0e10cSrcweir           "scheme://a/?q" },
623cdf0e10cSrcweir         { "scheme://a?q", "scheme://a?q", true, true, false, "", 0 },
624cdf0e10cSrcweir         { "scheme://a/?q", "scheme://a?q", true, true, false, "",
625cdf0e10cSrcweir           "scheme://a/?q" },
626cdf0e10cSrcweir         { "scheme://a?q", "scheme://a/?q", true, true, false, "",
627cdf0e10cSrcweir           "scheme://a?q" },
628cdf0e10cSrcweir         { "scheme://a/?q", "scheme://a/?q", true, true, false, "", 0 },
629cdf0e10cSrcweir         { "scheme://a/b/c/d", "scheme://a//", true, true, false, "//a//", 0 },
630cdf0e10cSrcweir         { "scheme://a/b/c/d", "scheme://a//", false, true, false, "../..//",
631cdf0e10cSrcweir           0 },
632cdf0e10cSrcweir         { "scheme://a/b/c/d", "scheme://a//", true, false, false, "../..//",
633cdf0e10cSrcweir           0 },
634cdf0e10cSrcweir         { "scheme://a/b/c/d", "scheme://a//", false, false, false, "../..//",
635cdf0e10cSrcweir           0 },
636cdf0e10cSrcweir         { "scheme://a/b/c/d", "scheme://a/e", true, true, false, "/e", 0 },
637cdf0e10cSrcweir         { "scheme://a/b/c/d", "scheme://a/e", true, false, false, "../../e",
638cdf0e10cSrcweir           0 },
639cdf0e10cSrcweir         { "scheme://a/b/c/d/e", "scheme://a/b/f", true, true, false, "../../f",
640cdf0e10cSrcweir           0 },
641cdf0e10cSrcweir         { "scheme://a/b/c/d/e", "scheme://a/b", true, true, false, "/b", 0 },
642cdf0e10cSrcweir         { "scheme://a/b/c/d/e", "scheme://a/b", true, false, false,
643cdf0e10cSrcweir           "../../../b", 0 },
644cdf0e10cSrcweir         { "scheme://a/b/c/d/e", "scheme://a/b/", true, true, false, "../..",
645cdf0e10cSrcweir           0 },
646cdf0e10cSrcweir         { "scheme://a/b/c/d/e", "scheme://a/b/c", true, true, false, "../../c",
647cdf0e10cSrcweir           0 },
648cdf0e10cSrcweir         { "scheme://a/b/c/d/e", "scheme://a/b/c/", true, true, false, "..", 0 },
649cdf0e10cSrcweir         { "scheme://a/b/", "scheme://a/b/c/d", true, true, false, "c/d", 0 },
650cdf0e10cSrcweir         { "scheme://a/b/", "scheme://a/b/c/d/", true, true, false, "c/d/", 0 },
651cdf0e10cSrcweir         { "scheme://a/b/c", "scheme://a/b//", true, true, false, ".//", 0 },
652cdf0e10cSrcweir         { "scheme://a/b/c", "scheme://a/b//d", true, true, false, ".//d", 0 },
653cdf0e10cSrcweir         { "scheme://a/b/c", "scheme://a/b//d//", true, true, false, ".//d//",
654cdf0e10cSrcweir           0 },
655cdf0e10cSrcweir         { "scheme://a/b/c", "scheme://a/b/d+:", true, true, false, "./d+:", 0 },
656cdf0e10cSrcweir         { "scheme://a/b/c", "scheme://a/b/+d:", true, true, false, "+d:", 0 },
657cdf0e10cSrcweir         { "scheme://a/b/c", "scheme://a/b/d#e:f", true, true, false, "d#e:f",
658cdf0e10cSrcweir           0 },
659cdf0e10cSrcweir         { "scheme://a/b/c/", "scheme://a/b/../d/.e/.", true, true, false,
660cdf0e10cSrcweir           "../../d/.e/.",
661cdf0e10cSrcweir           "scheme://a/d/.e/" },
662cdf0e10cSrcweir         { "scheme://a/b/c/", "scheme://a/b/../d/.e/.", true, true, true,
663cdf0e10cSrcweir           "../%2E%2E/d/.e/%2E", "scheme://a/b/%2E%2E/d/.e/%2E" },
664cdf0e10cSrcweir         { "scheme://auth/a/b", "scheme://auth//c/d", true, true, false,
665cdf0e10cSrcweir           "//auth//c/d", 0 },
666cdf0e10cSrcweir         { "scheme://auth/a/b", "scheme://auth//c/d", false, true, false,
667cdf0e10cSrcweir           "..//c/d", 0 },
668cdf0e10cSrcweir         { "scheme://auth/a/b", "scheme://auth/c/d", true, true, false, "/c/d",
669cdf0e10cSrcweir           0 },
670cdf0e10cSrcweir         { "scheme://auth/a/b", "scheme://auth/c/d", true, false, false,
671cdf0e10cSrcweir           "../c/d", 0 } };
672cdf0e10cSrcweir     for (std::size_t i = 0; i < sizeof data / sizeof data[0]; ++i) {
673cdf0e10cSrcweir         css::uno::Reference< css::uri::XUriReference > baseUriRef(
674cdf0e10cSrcweir             m_uriFactory->parse(
675cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].baseUriReference)));
676*4bd09bdfSDamjan Jovanovic         ASSERT_TRUE(baseUriRef.is());
677cdf0e10cSrcweir         css::uno::Reference< css::uri::XUriReference > uriRef(
678cdf0e10cSrcweir             m_uriFactory->parse(
679cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].uriReference)));
680*4bd09bdfSDamjan Jovanovic         ASSERT_TRUE(uriRef.is());
681cdf0e10cSrcweir         css::uno::Reference< css::uri::XUriReference > relative(
682cdf0e10cSrcweir             m_uriFactory->makeRelative(
683cdf0e10cSrcweir                 baseUriRef, uriRef, data[i].preferAuthorityOverRelativePath,
684cdf0e10cSrcweir                 data[i].preferAbsoluteOverRelativePath,
685cdf0e10cSrcweir                 data[i].encodeRetainedSpecialSegments));
686cdf0e10cSrcweir         TEST_ASSERT_EQUAL(
687cdf0e10cSrcweir             "testMakeRelative", i, data[i].uriReference,
688cdf0e10cSrcweir             data[i].relative != 0, relative.is());
689cdf0e10cSrcweir         if (relative.is()) {
690cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
691cdf0e10cSrcweir                 "testMakeRelative", i, data[i].uriReference,
692cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].relative),
693cdf0e10cSrcweir                 relative->getUriReference());
694cdf0e10cSrcweir             css::uno::Reference< css::uri::XUriReference > absolute(
695cdf0e10cSrcweir                 m_uriFactory->makeAbsolute(
696cdf0e10cSrcweir                     baseUriRef, relative, true,
697cdf0e10cSrcweir                     css::uri::RelativeUriExcessParentSegments_ERROR));
698*4bd09bdfSDamjan Jovanovic             ASSERT_TRUE(absolute.is());
699cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
700cdf0e10cSrcweir                 "testMakeRelative", i, data[i].uriReference,
701cdf0e10cSrcweir                 rtl::OUString::createFromAscii(
702cdf0e10cSrcweir                     data[i].absolute == 0
703cdf0e10cSrcweir                     ? data[i].uriReference : data[i].absolute),
704cdf0e10cSrcweir                 absolute->getUriReference());
705cdf0e10cSrcweir         }
706cdf0e10cSrcweir     }
707cdf0e10cSrcweir }
708cdf0e10cSrcweir 
TEST_F(Test,testVndSunStarExpand)709*4bd09bdfSDamjan Jovanovic TEST_F(Test, testVndSunStarExpand) {
710cdf0e10cSrcweir     struct Data {
711cdf0e10cSrcweir         char const * uriReference;
712cdf0e10cSrcweir         char const * expanded;
713cdf0e10cSrcweir     };
714cdf0e10cSrcweir     Data data[] = {
715cdf0e10cSrcweir         { "vnd.sun.star.expand:", "" }, // liberally accepted
716cdf0e10cSrcweir         { "vnd.sun.star.expand:/", "/" }, // liberally accepted
717cdf0e10cSrcweir         { "vnd.sun.star.expand:%80", 0 },
718cdf0e10cSrcweir         { "vnd.sun.star.expand:%5C$%5C%24%5C%5C", "$$\\" } };
719cdf0e10cSrcweir     css::uno::Reference< css::util::XMacroExpander > expander(
720cdf0e10cSrcweir         m_context->getValueByName(
721cdf0e10cSrcweir               rtl::OUString(
722cdf0e10cSrcweir                   RTL_CONSTASCII_USTRINGPARAM(
723cdf0e10cSrcweir                       "/singletons/com.sun.star.util.theMacroExpander"))),
724cdf0e10cSrcweir         css::uno::UNO_QUERY_THROW);
725cdf0e10cSrcweir     for (std::size_t i = 0; i < sizeof data / sizeof data[0]; ++i) {
726cdf0e10cSrcweir         css::uno::Reference< css::uri::XUriReference > uriRef(
727cdf0e10cSrcweir             m_uriFactory->parse(
728cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].uriReference)));
729cdf0e10cSrcweir         TEST_ASSERT_EQUAL(
730cdf0e10cSrcweir             "testVndSunStarExpand", i, data[i].uriReference,
731cdf0e10cSrcweir             data[i].expanded != 0, uriRef.is());
732cdf0e10cSrcweir         if (uriRef.is()) {
733cdf0e10cSrcweir             css::uno::Reference< css::uri::XVndSunStarExpandUrlReference >
734cdf0e10cSrcweir                 expandUrl(uriRef, css::uno::UNO_QUERY_THROW);
735cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
736cdf0e10cSrcweir                 "testVndSunStarExpand", i, data[i].uriReference,
737cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].expanded),
738cdf0e10cSrcweir                 expandUrl->expand(expander));
739cdf0e10cSrcweir         }
740cdf0e10cSrcweir     }
741cdf0e10cSrcweir }
742cdf0e10cSrcweir 
TEST_F(Test,testVndSunStarScript)743*4bd09bdfSDamjan Jovanovic TEST_F(Test, testVndSunStarScript) {
744cdf0e10cSrcweir     struct Parameter {
745cdf0e10cSrcweir         char const * key;
746cdf0e10cSrcweir         char const * value;
747cdf0e10cSrcweir     };
748cdf0e10cSrcweir     std::size_t const parameterCount = 3;
749cdf0e10cSrcweir     struct Data {
750cdf0e10cSrcweir         char const * uriReference;
751cdf0e10cSrcweir         char const * name;
752cdf0e10cSrcweir         const bool   normalized;
753cdf0e10cSrcweir         Parameter parameters[parameterCount];
754cdf0e10cSrcweir     };
755cdf0e10cSrcweir     Data data[] = {
756cdf0e10cSrcweir         { "vnd.sun.star.script:", 0, false, {} },
757cdf0e10cSrcweir         { "vnd.sun.star.script:/", 0, false, {} },
758cdf0e10cSrcweir         { "vnd.sun.star.script:/abc/def?ghi=jkl&mno=pqr", 0, false, {} },
759cdf0e10cSrcweir         { "vnd.sun.star.script:abc%3fdef/ghi", "abc?def/ghi", false, {} },
760cdf0e10cSrcweir         { "vnd.sun.star.script:name?a", 0, false, {} },
761cdf0e10cSrcweir         { "vnd.sun.star.script:name?a=", "name", true, { { "a", "" }, { "A", 0 } } },
762cdf0e10cSrcweir         { "vnd.sun.star.script:name?a=&", 0, true, {} },
763cdf0e10cSrcweir         { "vnd.sun.star.script:name?key1=&%26=%3D&key1=hello", "name", true,
764cdf0e10cSrcweir           { { "key1", "" }, { "key2", 0 }, { "&", "=" } } } };
765cdf0e10cSrcweir     for (std::size_t i = 0; i < sizeof data / sizeof data[0]; ++i) {
766cdf0e10cSrcweir         css::uno::Reference< css::uri::XUriReference > uriRef(
767cdf0e10cSrcweir             m_uriFactory->parse(
768cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].uriReference)));
769cdf0e10cSrcweir         TEST_ASSERT_EQUAL(
770cdf0e10cSrcweir             "testVndSunStarScript", i, data[i].uriReference, data[i].name != 0,
771cdf0e10cSrcweir             uriRef.is());
772cdf0e10cSrcweir         if (uriRef.is()) {
773cdf0e10cSrcweir             css::uno::Reference< css::uri::XVndSunStarScriptUrlReference >
774cdf0e10cSrcweir                 scriptUrl(uriRef, css::uno::UNO_QUERY_THROW);
775cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
776cdf0e10cSrcweir                 "testVndSunStarScript", i, data[i].uriReference,
777cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].uriReference),
778cdf0e10cSrcweir                 scriptUrl->getUriReference());
779cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
780cdf0e10cSrcweir                 "testVndSunStarScript", i, data[i].uriReference,
781cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].name),
782cdf0e10cSrcweir                 scriptUrl->getName());
783cdf0e10cSrcweir             rtl::OUString originalReference(uriRef->getUriReference());
784cdf0e10cSrcweir             for (std::size_t j = 0; j < parameterCount; ++j) {
785cdf0e10cSrcweir                 if (data[i].parameters[j].key != 0) {
786cdf0e10cSrcweir                     TEST_ASSERT_EQUAL(
787cdf0e10cSrcweir                         "testVndSunStarScript",
788cdf0e10cSrcweir                         static_cast< double >(i)
789cdf0e10cSrcweir                         + static_cast< double >(j) / 10.0,
790cdf0e10cSrcweir                         data[i].uriReference,
791cdf0e10cSrcweir                         data[i].parameters[j].value != 0,
792cdf0e10cSrcweir                         scriptUrl->hasParameter(
793cdf0e10cSrcweir                             rtl::OUString::createFromAscii(
794cdf0e10cSrcweir                                 data[i].parameters[j].key)));
795cdf0e10cSrcweir                     TEST_ASSERT_EQUAL(
796cdf0e10cSrcweir                         "testVndSunStarScript",
797cdf0e10cSrcweir                         static_cast< double >(i)
798cdf0e10cSrcweir                         + static_cast< double >(j) / 10.0,
799cdf0e10cSrcweir                         data[i].uriReference,
800cdf0e10cSrcweir                         rtl::OUString::createFromAscii(
801cdf0e10cSrcweir                             data[i].parameters[j].value),
802cdf0e10cSrcweir                         scriptUrl->getParameter(
803cdf0e10cSrcweir                             rtl::OUString::createFromAscii(
804cdf0e10cSrcweir                                 data[i].parameters[j].key)));
805cdf0e10cSrcweir 
806cdf0e10cSrcweir                     // setting the parameter to its original value should not change
807cdf0e10cSrcweir                     // the overall uri reference (provided it was normalized before)
808cdf0e10cSrcweir                     if ( data[i].normalized ) {
809cdf0e10cSrcweir                         if ( scriptUrl->hasParameter(rtl::OUString::createFromAscii(
810cdf0e10cSrcweir                             data[i].parameters[j].key)) ) {
811cdf0e10cSrcweir                             scriptUrl->setParameter(
812cdf0e10cSrcweir                                 rtl::OUString::createFromAscii(
813cdf0e10cSrcweir                                     data[i].parameters[j].key),
814cdf0e10cSrcweir                                 scriptUrl->getParameter(
815cdf0e10cSrcweir                                     rtl::OUString::createFromAscii(
816cdf0e10cSrcweir                                         data[i].parameters[j].key)));
817cdf0e10cSrcweir                             TEST_ASSERT_EQUAL(
818cdf0e10cSrcweir                                 "testVndSunStarScript",
819cdf0e10cSrcweir                                 static_cast< double >(i)
820cdf0e10cSrcweir                                 + static_cast< double >(j) / 10.0,
821cdf0e10cSrcweir                                 ::rtl::OUString::createFromAscii("setParameter"),
822cdf0e10cSrcweir                                 originalReference,
823cdf0e10cSrcweir                                 uriRef->getUriReference());
824cdf0e10cSrcweir                         }
825cdf0e10cSrcweir                     }
826cdf0e10cSrcweir                 }
827cdf0e10cSrcweir             }
828cdf0e10cSrcweir             if ( data[i].normalized ) {
829cdf0e10cSrcweir                 scriptUrl->setName(scriptUrl->getName());
830cdf0e10cSrcweir                 TEST_ASSERT_EQUAL(
831cdf0e10cSrcweir                     "testVndSunStarScript",
832cdf0e10cSrcweir                     i,
833cdf0e10cSrcweir                     ::rtl::OUString::createFromAscii("setName"),
834cdf0e10cSrcweir                     originalReference,
835cdf0e10cSrcweir                     uriRef->getUriReference());
836cdf0e10cSrcweir             }
837cdf0e10cSrcweir         }
838cdf0e10cSrcweir     }
839cdf0e10cSrcweir 
840cdf0e10cSrcweir     css::uno::Reference< css::uri::XUriReference > uriRef(
841cdf0e10cSrcweir         m_uriFactory->parse(
842cdf0e10cSrcweir             rtl::OUString(
843cdf0e10cSrcweir                 RTL_CONSTASCII_USTRINGPARAM(
844cdf0e10cSrcweir                     "vnd.sun.star.script:Hello?location=Library.Module"))),
845cdf0e10cSrcweir         css::uno::UNO_SET_THROW);
846cdf0e10cSrcweir     css::uno::Reference< css::uri::XVndSunStarScriptUrlReference >
847cdf0e10cSrcweir         scriptUrl(uriRef, css::uno::UNO_QUERY_THROW);
848cdf0e10cSrcweir 
849cdf0e10cSrcweir     scriptUrl->setParameter(
850cdf0e10cSrcweir         ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "location")),
851cdf0e10cSrcweir         ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "foo")));
852cdf0e10cSrcweir     TEST_ASSERT_EQUAL(
853cdf0e10cSrcweir         "testVndSunStarScript", (sal_Int32)10, (sal_Int32)1,
854cdf0e10cSrcweir         uriRef->getUriReference(),
855cdf0e10cSrcweir         ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.script:Hello?location=foo")));
856cdf0e10cSrcweir 
857cdf0e10cSrcweir     scriptUrl->setParameter(
858cdf0e10cSrcweir         ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "language")),
859cdf0e10cSrcweir         ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "StarBasic")));
860cdf0e10cSrcweir     TEST_ASSERT_EQUAL(
861cdf0e10cSrcweir         "testVndSunStarScript", (sal_Int32)10, (sal_Int32)2,
862cdf0e10cSrcweir         uriRef->getUriReference(),
863cdf0e10cSrcweir         ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.script:Hello?location=foo&language=StarBasic")));
864cdf0e10cSrcweir 
865cdf0e10cSrcweir 
866cdf0e10cSrcweir     bool caughtExpected = false;
867cdf0e10cSrcweir     try {
868cdf0e10cSrcweir         scriptUrl->setName(::rtl::OUString());
869cdf0e10cSrcweir     }
870cdf0e10cSrcweir     catch( const css::lang::IllegalArgumentException& ) {
871cdf0e10cSrcweir         caughtExpected = true;
872cdf0e10cSrcweir     }
873cdf0e10cSrcweir     TEST_ASSERT_EQUAL(
874cdf0e10cSrcweir         "testVndSunStarScript",
875cdf0e10cSrcweir         ::rtl::OUString::createFromAscii("illegal arguments"),
876cdf0e10cSrcweir         ::rtl::OUString::createFromAscii("name"),
877cdf0e10cSrcweir         caughtExpected,
878cdf0e10cSrcweir         true);
879cdf0e10cSrcweir 
880cdf0e10cSrcweir     caughtExpected = false;
881cdf0e10cSrcweir     try {
882cdf0e10cSrcweir         scriptUrl->setParameter(
883cdf0e10cSrcweir             ::rtl::OUString(),
884cdf0e10cSrcweir             ::rtl::OUString::createFromAscii("non-empty"));
885cdf0e10cSrcweir     }
886cdf0e10cSrcweir     catch( const css::lang::IllegalArgumentException& ) {
887cdf0e10cSrcweir         caughtExpected = true;
888cdf0e10cSrcweir     }
889cdf0e10cSrcweir     TEST_ASSERT_EQUAL(
890cdf0e10cSrcweir         "testVndSunStarScript",
891cdf0e10cSrcweir         ::rtl::OUString::createFromAscii("illegal arguments"),
892cdf0e10cSrcweir         ::rtl::OUString::createFromAscii("parameter"),
893cdf0e10cSrcweir         caughtExpected,
894cdf0e10cSrcweir         true);
895cdf0e10cSrcweir }
896cdf0e10cSrcweir 
TEST_F(Test,testTranslator)897*4bd09bdfSDamjan Jovanovic TEST_F(Test, testTranslator) {
898cdf0e10cSrcweir     struct Data {
899cdf0e10cSrcweir         char const * externalUriReference;
900cdf0e10cSrcweir         char const * internalUriReference;
901cdf0e10cSrcweir         bool toInternal;
902cdf0e10cSrcweir     };
903cdf0e10cSrcweir     Data data[] = {
904cdf0e10cSrcweir         { "", "", true },
905cdf0e10cSrcweir         { "#fragment", "#fragment", true },
906cdf0e10cSrcweir         { "segment/segment?query#fragment", "segment/segment?query#fragment",
907cdf0e10cSrcweir           true },
908cdf0e10cSrcweir         { "/segment/segment?query#fragment", "/segment/segment?query#fragment",
909cdf0e10cSrcweir           true },
910cdf0e10cSrcweir         { "//authority/segment?query#fragment",
911cdf0e10cSrcweir           "//authority/segment?query#fragment", true },
912cdf0e10cSrcweir         { "foo:bar#fragment", "foo:bar#fragment", true },
913cdf0e10cSrcweir         { "file:///abc/def", "file:///abc/def", true },
914cdf0e10cSrcweir         { "file:///abc/%FEef", "file:///abc/%feef", false },
915cdf0e10cSrcweir         { "file:///abc/%80%80ef", "file:///abc/%80%80ef", false },
916cdf0e10cSrcweir         { "file:///abc/%ED%A0%80%ED%B0%80ef",
917cdf0e10cSrcweir           "file:///abc/%ED%A0%80%ED%B0%80ef", false },
918cdf0e10cSrcweir         { "file:///abc/%25.ef", "file:///abc/%.ef", false },
919cdf0e10cSrcweir         { "file:///abc/%25ef", "file:///abc/%25ef", true } };
920cdf0e10cSrcweir     css::uno::Reference< css::uri::XExternalUriReferenceTranslator >
921cdf0e10cSrcweir         translator(css::uri::ExternalUriReferenceTranslator::create(m_context));
922cdf0e10cSrcweir     for (std::size_t i = 0; i < sizeof data / sizeof data[0]; ++i) {
923cdf0e10cSrcweir         if (data[i].toInternal) {
924cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
925cdf0e10cSrcweir                 "testTranslator, translateToInternal", i,
926cdf0e10cSrcweir                 data[i].externalUriReference,
927cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].internalUriReference),
928cdf0e10cSrcweir                 translator->translateToInternal(
929cdf0e10cSrcweir                     rtl::OUString::createFromAscii(
930cdf0e10cSrcweir                         data[i].externalUriReference)));
931cdf0e10cSrcweir         }
932cdf0e10cSrcweir         TEST_ASSERT_EQUAL(
933cdf0e10cSrcweir             "testTranslator, translateToExternal", i,
934cdf0e10cSrcweir             data[i].internalUriReference,
935cdf0e10cSrcweir             rtl::OUString::createFromAscii(data[i].externalUriReference),
936cdf0e10cSrcweir             translator->translateToExternal(
937cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].internalUriReference)));
938cdf0e10cSrcweir     }
939cdf0e10cSrcweir }
940cdf0e10cSrcweir 
TEST_F(Test,testPkgUrlFactory)941*4bd09bdfSDamjan Jovanovic TEST_F(Test, testPkgUrlFactory) {
942cdf0e10cSrcweir     struct Data {
943cdf0e10cSrcweir         char const * authority;
944cdf0e10cSrcweir         char const * result;
945cdf0e10cSrcweir     };
946cdf0e10cSrcweir     Data data[] = {
947cdf0e10cSrcweir         { "a/b/c", 0 },
948cdf0e10cSrcweir         { "file:///#foo", 0 },
949cdf0e10cSrcweir         { "file:///a%25b%2fc/d~e&f@g?h",
950cdf0e10cSrcweir           "vnd.sun.star.pkg://file:%2F%2F%2Fa%2525b%252fc%2Fd~e&f@g%3Fh" } };
951cdf0e10cSrcweir     css::uno::Reference< css::uri::XVndSunStarPkgUrlReferenceFactory > factory(
952cdf0e10cSrcweir         css::uri::VndSunStarPkgUrlReferenceFactory::create(m_context));
953cdf0e10cSrcweir     for (std::size_t i = 0; i < sizeof data / sizeof data[0]; ++i) {
954cdf0e10cSrcweir         css::uno::Reference< css::uri::XUriReference > url(
955cdf0e10cSrcweir             factory->createVndSunStarPkgUrlReference(
956cdf0e10cSrcweir                 m_uriFactory->parse(
957cdf0e10cSrcweir                     rtl::OUString::createFromAscii(data[i].authority))));
958cdf0e10cSrcweir         TEST_ASSERT_EQUAL(
959cdf0e10cSrcweir             "testVndSunStarPkgFactory", i, data[i].authority,
960cdf0e10cSrcweir             data[i].result != 0, static_cast< bool >(url.is()));
961cdf0e10cSrcweir         if (data[i].result != 0) {
962cdf0e10cSrcweir             TEST_ASSERT_EQUAL(
963cdf0e10cSrcweir                 "testVndSunStarPkgFactory", i, data[i].authority,
964cdf0e10cSrcweir                 rtl::OUString::createFromAscii(data[i].result),
965cdf0e10cSrcweir                 url->getUriReference());
966cdf0e10cSrcweir         }
967cdf0e10cSrcweir     }
968cdf0e10cSrcweir }
969cdf0e10cSrcweir 
970cdf0e10cSrcweir 
971cdf0e10cSrcweir }
972cdf0e10cSrcweir 
main(int argc,char ** argv)973*4bd09bdfSDamjan Jovanovic int main(int argc, char **argv)
974*4bd09bdfSDamjan Jovanovic {
975*4bd09bdfSDamjan Jovanovic     osl_setCommandArgs(argc, argv);
976*4bd09bdfSDamjan Jovanovic     ::testing::InitGoogleTest(&argc, argv);
977*4bd09bdfSDamjan Jovanovic     return RUN_ALL_TESTS();
978*4bd09bdfSDamjan Jovanovic }
979