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 10*647a425cSAndrew Rist * 11*647a425cSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*647a425cSAndrew Rist * 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. 19*647a425cSAndrew Rist * 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 67cdf0e10cSrcweir template< typename T > void append( 68cdf0e10cSrcweir rtl::OUStringBuffer & buffer, T const & value) 69cdf0e10cSrcweir { 70cdf0e10cSrcweir buffer.append(value); 71cdf0e10cSrcweir } 72cdf0e10cSrcweir 73cdf0e10cSrcweir template<> void append(rtl::OUStringBuffer & buffer, bool const & value) { 74cdf0e10cSrcweir buffer.append(static_cast< sal_Bool >(value)); 75cdf0e10cSrcweir } 76cdf0e10cSrcweir 77cdf0e10cSrcweir template<> void append(rtl::OUStringBuffer & buffer, std::size_t const & value) 78cdf0e10cSrcweir { 79cdf0e10cSrcweir buffer.append(static_cast< sal_Int32 >(value)); 80cdf0e10cSrcweir } 81cdf0e10cSrcweir 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 > 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 147cdf0e10cSrcweir void Test::setUp() { 148cdf0e10cSrcweir m_context = cppu::defaultBootstrap_InitialComponentContext(); 149cdf0e10cSrcweir m_uriFactory = css::uri::UriReferenceFactory::create(m_context); 150cdf0e10cSrcweir } 151cdf0e10cSrcweir 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 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 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 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 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 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 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 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