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