1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #include <testshl/simpleheader.hxx> 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #include "cppuhelper/unourl.hxx" 27*b1cdbd2cSJim Jagielski #include "rtl/malformeduriexception.hxx" 28*b1cdbd2cSJim Jagielski #include "rtl/strbuf.hxx" 29*b1cdbd2cSJim Jagielski #include "rtl/string.h" 30*b1cdbd2cSJim Jagielski #include "rtl/textenc.h" 31*b1cdbd2cSJim Jagielski #include "rtl/ustring.hxx" 32*b1cdbd2cSJim Jagielski #include "sal/types.h" 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski namespace cppu_unourl 35*b1cdbd2cSJim Jagielski { 36*b1cdbd2cSJim Jagielski class UrlTest : public CppUnit::TestFixture 37*b1cdbd2cSJim Jagielski { 38*b1cdbd2cSJim Jagielski public: testDescriptorParsing()39*b1cdbd2cSJim Jagielski void testDescriptorParsing() 40*b1cdbd2cSJim Jagielski { 41*b1cdbd2cSJim Jagielski struct Test 42*b1cdbd2cSJim Jagielski { 43*b1cdbd2cSJim Jagielski char const * pInput; 44*b1cdbd2cSJim Jagielski bool bValid; 45*b1cdbd2cSJim Jagielski }; 46*b1cdbd2cSJim Jagielski static Test const aTests[] 47*b1cdbd2cSJim Jagielski = { { "", false }, 48*b1cdbd2cSJim Jagielski { "abc", true }, 49*b1cdbd2cSJim Jagielski { "Abc", true }, 50*b1cdbd2cSJim Jagielski { "aBC", true }, 51*b1cdbd2cSJim Jagielski { "ABC", true }, 52*b1cdbd2cSJim Jagielski { "1abc", true }, 53*b1cdbd2cSJim Jagielski { "123", true }, 54*b1cdbd2cSJim Jagielski { "abc-1", false }, 55*b1cdbd2cSJim Jagielski { "ab%63", false }, 56*b1cdbd2cSJim Jagielski { "abc,", false }, 57*b1cdbd2cSJim Jagielski { "abc,def=", true }, 58*b1cdbd2cSJim Jagielski { "abc,Def=", true }, 59*b1cdbd2cSJim Jagielski { "abc,DEF=", true }, 60*b1cdbd2cSJim Jagielski { "abc,1def=", true }, 61*b1cdbd2cSJim Jagielski { "abc,123=", true }, 62*b1cdbd2cSJim Jagielski { "abc,def-1=", false }, 63*b1cdbd2cSJim Jagielski { "abc,def", false }, 64*b1cdbd2cSJim Jagielski { "abc,def=xxx,def=xxx", false }, 65*b1cdbd2cSJim Jagielski { "abc,def=xxx,ghi=xxx", true }, 66*b1cdbd2cSJim Jagielski { "abc,,def=xxx", false }, 67*b1cdbd2cSJim Jagielski { "abc,def=xxx,,ghi=xxx", false }, 68*b1cdbd2cSJim Jagielski { "abc,def=xxx,ghi=xxx,", false }, 69*b1cdbd2cSJim Jagielski { "abc,def=%", true }, 70*b1cdbd2cSJim Jagielski { "abc,def=%1", true }, 71*b1cdbd2cSJim Jagielski { "abc,def=%00", true }, 72*b1cdbd2cSJim Jagielski { "abc,def=%22", true }, 73*b1cdbd2cSJim Jagielski { "abc,def=\"", true }, 74*b1cdbd2cSJim Jagielski { "abc,def=%ed%a0%80", true } }; 75*b1cdbd2cSJim Jagielski for (int i = 0; i < sizeof aTests / sizeof (Test); ++i) 76*b1cdbd2cSJim Jagielski { 77*b1cdbd2cSJim Jagielski bool bValid = false; 78*b1cdbd2cSJim Jagielski try 79*b1cdbd2cSJim Jagielski { 80*b1cdbd2cSJim Jagielski cppu::UnoUrlDescriptor aDescriptor(rtl::OUString::createFromAscii( 81*b1cdbd2cSJim Jagielski aTests[i].pInput)); 82*b1cdbd2cSJim Jagielski bValid = true; 83*b1cdbd2cSJim Jagielski } 84*b1cdbd2cSJim Jagielski catch (rtl::MalformedUriException &) 85*b1cdbd2cSJim Jagielski {} 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski if (aTests[i].bValid) 88*b1cdbd2cSJim Jagielski { 89*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Valid uri parsed as invalid", bValid); 90*b1cdbd2cSJim Jagielski } 91*b1cdbd2cSJim Jagielski else 92*b1cdbd2cSJim Jagielski { 93*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Invalid uri parsed as valid", !bValid); 94*b1cdbd2cSJim Jagielski } 95*b1cdbd2cSJim Jagielski } 96*b1cdbd2cSJim Jagielski } 97*b1cdbd2cSJim Jagielski testDescriptorDescriptor()98*b1cdbd2cSJim Jagielski void testDescriptorDescriptor() 99*b1cdbd2cSJim Jagielski { 100*b1cdbd2cSJim Jagielski struct Test 101*b1cdbd2cSJim Jagielski { 102*b1cdbd2cSJim Jagielski char const * pInput; 103*b1cdbd2cSJim Jagielski char const * pDescriptor; 104*b1cdbd2cSJim Jagielski }; 105*b1cdbd2cSJim Jagielski static Test const aTests[] 106*b1cdbd2cSJim Jagielski = {{ "abc", "abc" }, 107*b1cdbd2cSJim Jagielski { "Abc", "Abc" }, 108*b1cdbd2cSJim Jagielski { "aBC", "aBC" }, 109*b1cdbd2cSJim Jagielski { "ABC", "ABC" }, 110*b1cdbd2cSJim Jagielski { "1abc", "1abc" }, 111*b1cdbd2cSJim Jagielski { "123", "123" }, 112*b1cdbd2cSJim Jagielski { "abc,def=", "abc,def=" }, 113*b1cdbd2cSJim Jagielski { "abc,Def=", "abc,Def=" }, 114*b1cdbd2cSJim Jagielski { "abc,DEF=", "abc,DEF=" }, 115*b1cdbd2cSJim Jagielski { "abc,1def=", "abc,1def=" }, 116*b1cdbd2cSJim Jagielski { "abc,123=", "abc,123=" }, 117*b1cdbd2cSJim Jagielski { "abc,def=xxx,ghi=xxx", "abc,def=xxx,ghi=xxx" }, 118*b1cdbd2cSJim Jagielski { "abc,def=%", "abc,def=%" }, 119*b1cdbd2cSJim Jagielski { "abc,def=%1", "abc,def=%1" }, 120*b1cdbd2cSJim Jagielski { "abc,def=%00", "abc,def=%00" }, 121*b1cdbd2cSJim Jagielski { "abc,def=%22", "abc,def=%22" }, 122*b1cdbd2cSJim Jagielski { "abc,def=\"", "abc,def=\"" }, 123*b1cdbd2cSJim Jagielski { "abc,def=%ed%a0%80", "abc,def=%ed%a0%80" } }; 124*b1cdbd2cSJim Jagielski bool bResult = true; 125*b1cdbd2cSJim Jagielski for (int i = 0; i < sizeof aTests / sizeof (Test); ++i) 126*b1cdbd2cSJim Jagielski { 127*b1cdbd2cSJim Jagielski bool bValid = false; 128*b1cdbd2cSJim Jagielski rtl::OUString aDescriptor; 129*b1cdbd2cSJim Jagielski try 130*b1cdbd2cSJim Jagielski { 131*b1cdbd2cSJim Jagielski aDescriptor = cppu::UnoUrlDescriptor(rtl::OUString::createFromAscii( 132*b1cdbd2cSJim Jagielski aTests[i].pInput)). 133*b1cdbd2cSJim Jagielski getDescriptor(); 134*b1cdbd2cSJim Jagielski bValid = true; 135*b1cdbd2cSJim Jagielski } 136*b1cdbd2cSJim Jagielski catch (rtl::MalformedUriException &) 137*b1cdbd2cSJim Jagielski {} 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Failed to parse URI", bValid); 140*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Failed to parse URI correctly", 141*b1cdbd2cSJim Jagielski aDescriptor.equalsAscii( 142*b1cdbd2cSJim Jagielski aTests[i].pDescriptor)); 143*b1cdbd2cSJim Jagielski } 144*b1cdbd2cSJim Jagielski } 145*b1cdbd2cSJim Jagielski 146*b1cdbd2cSJim Jagielski testDescriptorName()147*b1cdbd2cSJim Jagielski void testDescriptorName() 148*b1cdbd2cSJim Jagielski { 149*b1cdbd2cSJim Jagielski struct Test 150*b1cdbd2cSJim Jagielski { 151*b1cdbd2cSJim Jagielski char const * pInput; 152*b1cdbd2cSJim Jagielski char const * pName; 153*b1cdbd2cSJim Jagielski }; 154*b1cdbd2cSJim Jagielski static Test const aTests[] 155*b1cdbd2cSJim Jagielski = { { "abc", "abc" }, 156*b1cdbd2cSJim Jagielski { "Abc", "abc" }, 157*b1cdbd2cSJim Jagielski { "aBC", "abc" }, 158*b1cdbd2cSJim Jagielski { "ABC", "abc" }, 159*b1cdbd2cSJim Jagielski { "1abc", "1abc" }, 160*b1cdbd2cSJim Jagielski { "123", "123" }, 161*b1cdbd2cSJim Jagielski { "abc,def=", "abc" }, 162*b1cdbd2cSJim Jagielski { "abc,Def=", "abc" }, 163*b1cdbd2cSJim Jagielski { "abc,DEF=", "abc" }, 164*b1cdbd2cSJim Jagielski { "abc,1def=", "abc" }, 165*b1cdbd2cSJim Jagielski { "abc,123=", "abc" }, 166*b1cdbd2cSJim Jagielski { "abc,def=xxx,ghi=xxx", "abc" }, 167*b1cdbd2cSJim Jagielski { "abc,def=%", "abc" }, 168*b1cdbd2cSJim Jagielski { "abc,def=%1", "abc" }, 169*b1cdbd2cSJim Jagielski { "abc,def=%00", "abc" }, 170*b1cdbd2cSJim Jagielski { "abc,def=%22", "abc" }, 171*b1cdbd2cSJim Jagielski { "abc,def=\"", "abc" }, 172*b1cdbd2cSJim Jagielski { "abc,def=%ed%a0%80", "abc" } }; 173*b1cdbd2cSJim Jagielski for (int i = 0; i < sizeof aTests / sizeof (Test); ++i) 174*b1cdbd2cSJim Jagielski { 175*b1cdbd2cSJim Jagielski bool bValid = false; 176*b1cdbd2cSJim Jagielski rtl::OUString aName; 177*b1cdbd2cSJim Jagielski try 178*b1cdbd2cSJim Jagielski { 179*b1cdbd2cSJim Jagielski aName = cppu::UnoUrlDescriptor(rtl::OUString::createFromAscii( 180*b1cdbd2cSJim Jagielski aTests[i].pInput)).getName(); 181*b1cdbd2cSJim Jagielski bValid = true; 182*b1cdbd2cSJim Jagielski } 183*b1cdbd2cSJim Jagielski catch (rtl::MalformedUriException &) 184*b1cdbd2cSJim Jagielski {} 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Failed to parse URI", bValid); 187*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Failed to parse URI correctly", 188*b1cdbd2cSJim Jagielski aName.equalsAscii(aTests[i].pName)); 189*b1cdbd2cSJim Jagielski } 190*b1cdbd2cSJim Jagielski } 191*b1cdbd2cSJim Jagielski testDescriptorKey(void)192*b1cdbd2cSJim Jagielski void testDescriptorKey(void) 193*b1cdbd2cSJim Jagielski { 194*b1cdbd2cSJim Jagielski struct Test 195*b1cdbd2cSJim Jagielski { 196*b1cdbd2cSJim Jagielski char const * pInput; 197*b1cdbd2cSJim Jagielski char const * pKey; 198*b1cdbd2cSJim Jagielski bool bPresent; 199*b1cdbd2cSJim Jagielski }; 200*b1cdbd2cSJim Jagielski static Test const aTests[] 201*b1cdbd2cSJim Jagielski = { { "abc", "abc", false }, 202*b1cdbd2cSJim Jagielski { "abc", "def", false }, 203*b1cdbd2cSJim Jagielski { "1abc", "def", false }, 204*b1cdbd2cSJim Jagielski { "123", "def", false }, 205*b1cdbd2cSJim Jagielski { "abc,def=", "abc", false }, 206*b1cdbd2cSJim Jagielski { "abc,def=", "def", true }, 207*b1cdbd2cSJim Jagielski { "abc,def=", "defg", false }, 208*b1cdbd2cSJim Jagielski { "abc,def=", "de", false }, 209*b1cdbd2cSJim Jagielski { "abc,def=", "ghi", false }, 210*b1cdbd2cSJim Jagielski { "abc,Def=", "def", true }, 211*b1cdbd2cSJim Jagielski { "abc,Def=", "Def", true }, 212*b1cdbd2cSJim Jagielski { "abc,Def=", "dEF", true }, 213*b1cdbd2cSJim Jagielski { "abc,Def=", "DEF", true }, 214*b1cdbd2cSJim Jagielski { "abc,def=xxx,ghi=xxx", "abc", false }, 215*b1cdbd2cSJim Jagielski { "abc,def=xxx,ghi=xxx", "def", true }, 216*b1cdbd2cSJim Jagielski { "abc,def=xxx,ghi=xxx", "ghi", true }, 217*b1cdbd2cSJim Jagielski { "abc,def=xxx,ghi=xxx", "jkl", false } }; 218*b1cdbd2cSJim Jagielski for (int i = 0; i < sizeof aTests / sizeof (Test); ++i) 219*b1cdbd2cSJim Jagielski { 220*b1cdbd2cSJim Jagielski bool bValid = false; 221*b1cdbd2cSJim Jagielski bool bPresent = false; 222*b1cdbd2cSJim Jagielski try 223*b1cdbd2cSJim Jagielski { 224*b1cdbd2cSJim Jagielski bPresent = cppu::UnoUrlDescriptor(rtl::OUString::createFromAscii( 225*b1cdbd2cSJim Jagielski aTests[i].pInput)). 226*b1cdbd2cSJim Jagielski hasParameter(rtl::OUString::createFromAscii(aTests[i].pKey)); 227*b1cdbd2cSJim Jagielski bValid = true; 228*b1cdbd2cSJim Jagielski } 229*b1cdbd2cSJim Jagielski catch (rtl::MalformedUriException &) 230*b1cdbd2cSJim Jagielski {} 231*b1cdbd2cSJim Jagielski 232*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Failed to parse URI", bValid); 233*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Failed to detect parameter correctly", 234*b1cdbd2cSJim Jagielski bPresent == aTests[i].bPresent); 235*b1cdbd2cSJim Jagielski } 236*b1cdbd2cSJim Jagielski } 237*b1cdbd2cSJim Jagielski testDescriptorValue()238*b1cdbd2cSJim Jagielski void testDescriptorValue() 239*b1cdbd2cSJim Jagielski { 240*b1cdbd2cSJim Jagielski struct Test 241*b1cdbd2cSJim Jagielski { 242*b1cdbd2cSJim Jagielski char const * pInput; 243*b1cdbd2cSJim Jagielski char const * pKey; 244*b1cdbd2cSJim Jagielski char const * pValue; 245*b1cdbd2cSJim Jagielski }; 246*b1cdbd2cSJim Jagielski static Test const aTests[] 247*b1cdbd2cSJim Jagielski = { { "abc", "abc", "" }, 248*b1cdbd2cSJim Jagielski { "abc", "def", "" }, 249*b1cdbd2cSJim Jagielski { "1abc", "def", "" }, 250*b1cdbd2cSJim Jagielski { "123", "def", "" }, 251*b1cdbd2cSJim Jagielski { "abc,def=", "abc", "" }, 252*b1cdbd2cSJim Jagielski { "abc,def=", "def", "" }, 253*b1cdbd2cSJim Jagielski { "abc,def=", "defg", "" }, 254*b1cdbd2cSJim Jagielski { "abc,def=", "de", "" }, 255*b1cdbd2cSJim Jagielski { "abc,def=", "ghi", "" }, 256*b1cdbd2cSJim Jagielski { "abc,Def=", "def", "" }, 257*b1cdbd2cSJim Jagielski { "abc,Def=", "Def", "" }, 258*b1cdbd2cSJim Jagielski { "abc,Def=", "dEF", "" }, 259*b1cdbd2cSJim Jagielski { "abc,Def=", "DEF", "" }, 260*b1cdbd2cSJim Jagielski { "abc,def=xxx,ghi=xxx", "abc", "" }, 261*b1cdbd2cSJim Jagielski { "abc,def=xxx,ghi=xxx", "def", "xxx" }, 262*b1cdbd2cSJim Jagielski { "abc,def=xxx,ghi=xxx", "ghi", "xxx" }, 263*b1cdbd2cSJim Jagielski { "abc,def=xxx,ghi=xxx", "jkl", "" }, 264*b1cdbd2cSJim Jagielski { "abc,def=%", "def", "%" }, 265*b1cdbd2cSJim Jagielski { "abc,def=%1", "def", "%1" }, 266*b1cdbd2cSJim Jagielski { "abc,def=%22", "def", "\"" }, 267*b1cdbd2cSJim Jagielski { "abc,def=\"", "def", "\"" }, 268*b1cdbd2cSJim Jagielski { "abc,def=abc", "def", "abc" }, 269*b1cdbd2cSJim Jagielski { "abc,def=Abc", "def", "Abc" }, 270*b1cdbd2cSJim Jagielski { "abc,def=aBC", "def", "aBC" }, 271*b1cdbd2cSJim Jagielski { "abc,def=ABC", "def", "ABC" }, 272*b1cdbd2cSJim Jagielski { "abc,def=%,ghi=", "def", "%" }, 273*b1cdbd2cSJim Jagielski { "abc,def=%1,ghi=", "def", "%1" }, 274*b1cdbd2cSJim Jagielski { "abc,def=%22,ghi=", "def", "\"" }, 275*b1cdbd2cSJim Jagielski { "abc,def=\",ghi=", "def", "\"" }, 276*b1cdbd2cSJim Jagielski { "abc,def=abc,ghi=", "def", "abc" }, 277*b1cdbd2cSJim Jagielski { "abc,def=Abc,ghi=", "def", "Abc" }, 278*b1cdbd2cSJim Jagielski { "abc,def=aBC,ghi=", "def", "aBC" }, 279*b1cdbd2cSJim Jagielski { "abc,def=ABC,ghi=", "def", "ABC" }, 280*b1cdbd2cSJim Jagielski { "abc,abc=,def=%", "def", "%" }, 281*b1cdbd2cSJim Jagielski { "abc,abc=,def=%1", "def", "%1" }, 282*b1cdbd2cSJim Jagielski { "abc,abc=,def=%22", "def", "\"" }, 283*b1cdbd2cSJim Jagielski { "abc,abc=,def=\"", "def", "\"" }, 284*b1cdbd2cSJim Jagielski { "abc,abc=,def=abc", "def", "abc" }, 285*b1cdbd2cSJim Jagielski { "abc,abc=,def=Abc", "def", "Abc" }, 286*b1cdbd2cSJim Jagielski { "abc,abc=,def=aBC", "def", "aBC" }, 287*b1cdbd2cSJim Jagielski { "abc,abc=,def=ABC", "def", "ABC" } }; 288*b1cdbd2cSJim Jagielski for (int i = 0; i < sizeof aTests / sizeof (Test); ++i) 289*b1cdbd2cSJim Jagielski { 290*b1cdbd2cSJim Jagielski bool bValid = false; 291*b1cdbd2cSJim Jagielski rtl::OUString aValue; 292*b1cdbd2cSJim Jagielski try 293*b1cdbd2cSJim Jagielski { 294*b1cdbd2cSJim Jagielski aValue = cppu::UnoUrlDescriptor(rtl::OUString::createFromAscii( 295*b1cdbd2cSJim Jagielski aTests[i].pInput)). 296*b1cdbd2cSJim Jagielski getParameter(rtl::OUString::createFromAscii(aTests[i].pKey)); 297*b1cdbd2cSJim Jagielski bValid = true; 298*b1cdbd2cSJim Jagielski } 299*b1cdbd2cSJim Jagielski catch (rtl::MalformedUriException &) 300*b1cdbd2cSJim Jagielski {} 301*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Failed to parse URI", bValid); 302*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Failed to get param correctly", 303*b1cdbd2cSJim Jagielski aValue.equalsAscii(aTests[i].pValue)); 304*b1cdbd2cSJim Jagielski } 305*b1cdbd2cSJim Jagielski } 306*b1cdbd2cSJim Jagielski testUrlParsing()307*b1cdbd2cSJim Jagielski void testUrlParsing() 308*b1cdbd2cSJim Jagielski { 309*b1cdbd2cSJim Jagielski struct Test 310*b1cdbd2cSJim Jagielski { 311*b1cdbd2cSJim Jagielski char const * pInput; 312*b1cdbd2cSJim Jagielski bool bValid; 313*b1cdbd2cSJim Jagielski }; 314*b1cdbd2cSJim Jagielski static Test const aTests[] 315*b1cdbd2cSJim Jagielski = { { "", false }, 316*b1cdbd2cSJim Jagielski { "abc", false }, 317*b1cdbd2cSJim Jagielski { "uno", false }, 318*b1cdbd2cSJim Jagielski { "uno:", false }, 319*b1cdbd2cSJim Jagielski { "uno:abc;def;ghi", true }, 320*b1cdbd2cSJim Jagielski { "Uno:abc;def;ghi", true }, 321*b1cdbd2cSJim Jagielski { "uNO:abc;def;ghi", true }, 322*b1cdbd2cSJim Jagielski { "UNO:abc;def;ghi", true }, 323*b1cdbd2cSJim Jagielski { "uno:abc,def=xxx,ghi=xxx;def,ghi=xxx,jkl=xxx;ghi", true }, 324*b1cdbd2cSJim Jagielski { "uno:abc,def=xxx,ghi=xxx;def,ghi=xxx,jkl=xxx,;ghi", false }, 325*b1cdbd2cSJim Jagielski { "uno:abc;def;", false }, 326*b1cdbd2cSJim Jagielski { "uno:abc;def;a", true }, 327*b1cdbd2cSJim Jagielski { "uno:abc;def;A", true }, 328*b1cdbd2cSJim Jagielski { "uno:abc;def;1", true }, 329*b1cdbd2cSJim Jagielski { "uno:abc;def;$&+,/:=?@", true }, 330*b1cdbd2cSJim Jagielski { "uno:abc;def;%24&+,/:=?@", false } }; 331*b1cdbd2cSJim Jagielski for (int i = 0; i < sizeof aTests / sizeof (Test); ++i) 332*b1cdbd2cSJim Jagielski { 333*b1cdbd2cSJim Jagielski bool bValid = false; 334*b1cdbd2cSJim Jagielski try 335*b1cdbd2cSJim Jagielski { 336*b1cdbd2cSJim Jagielski cppu::UnoUrl aUrl(rtl::OUString::createFromAscii(aTests[i].pInput)); 337*b1cdbd2cSJim Jagielski bValid = true; 338*b1cdbd2cSJim Jagielski } 339*b1cdbd2cSJim Jagielski catch (rtl::MalformedUriException &) 340*b1cdbd2cSJim Jagielski {} 341*b1cdbd2cSJim Jagielski 342*b1cdbd2cSJim Jagielski if (aTests[i].bValid) 343*b1cdbd2cSJim Jagielski { 344*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Valid uri parsed as invalid", bValid); 345*b1cdbd2cSJim Jagielski } 346*b1cdbd2cSJim Jagielski else 347*b1cdbd2cSJim Jagielski { 348*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Invalid uri parsed as valid", !bValid); 349*b1cdbd2cSJim Jagielski } 350*b1cdbd2cSJim Jagielski 351*b1cdbd2cSJim Jagielski } 352*b1cdbd2cSJim Jagielski } 353*b1cdbd2cSJim Jagielski testUrlConnection()354*b1cdbd2cSJim Jagielski void testUrlConnection() 355*b1cdbd2cSJim Jagielski { 356*b1cdbd2cSJim Jagielski struct Test 357*b1cdbd2cSJim Jagielski { 358*b1cdbd2cSJim Jagielski char const * pInput; 359*b1cdbd2cSJim Jagielski char const * pConnection; 360*b1cdbd2cSJim Jagielski }; 361*b1cdbd2cSJim Jagielski static Test const aTests[] 362*b1cdbd2cSJim Jagielski = { { "uno:abc;def;ghi", "abc" }, 363*b1cdbd2cSJim Jagielski { "uno:Abc;def;ghi", "Abc" }, 364*b1cdbd2cSJim Jagielski { "uno:aBC;def;ghi", "aBC" }, 365*b1cdbd2cSJim Jagielski { "uno:ABC;def;ghi", "ABC" }, 366*b1cdbd2cSJim Jagielski { "uno:abc,def=xxx,ghi=xxx;def,ghi=xxx,jkl=xxx;ghi", 367*b1cdbd2cSJim Jagielski "abc,def=xxx,ghi=xxx" } }; 368*b1cdbd2cSJim Jagielski for (int i = 0; i < sizeof aTests / sizeof (Test); ++i) 369*b1cdbd2cSJim Jagielski { 370*b1cdbd2cSJim Jagielski bool bValid = false; 371*b1cdbd2cSJim Jagielski rtl::OUString aConnection; 372*b1cdbd2cSJim Jagielski try 373*b1cdbd2cSJim Jagielski { 374*b1cdbd2cSJim Jagielski aConnection = cppu::UnoUrl(rtl::OUString::createFromAscii( 375*b1cdbd2cSJim Jagielski aTests[i].pInput)). 376*b1cdbd2cSJim Jagielski getConnection().getDescriptor(); 377*b1cdbd2cSJim Jagielski bValid = true; 378*b1cdbd2cSJim Jagielski } 379*b1cdbd2cSJim Jagielski catch (rtl::MalformedUriException &) 380*b1cdbd2cSJim Jagielski {} 381*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Failed to parse URI", bValid); 382*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Failed to get param correctly", 383*b1cdbd2cSJim Jagielski aConnection.equalsAscii( 384*b1cdbd2cSJim Jagielski aTests[i].pConnection)); 385*b1cdbd2cSJim Jagielski } 386*b1cdbd2cSJim Jagielski } 387*b1cdbd2cSJim Jagielski testUrlProtocol()388*b1cdbd2cSJim Jagielski void testUrlProtocol() 389*b1cdbd2cSJim Jagielski { 390*b1cdbd2cSJim Jagielski struct Test 391*b1cdbd2cSJim Jagielski { 392*b1cdbd2cSJim Jagielski char const * pInput; 393*b1cdbd2cSJim Jagielski char const * pProtocol; 394*b1cdbd2cSJim Jagielski }; 395*b1cdbd2cSJim Jagielski static Test const aTests[] 396*b1cdbd2cSJim Jagielski = { { "uno:abc;def;ghi", "def" }, 397*b1cdbd2cSJim Jagielski { "uno:abc;Def;ghi", "Def" }, 398*b1cdbd2cSJim Jagielski { "uno:abc;dEF;ghi", "dEF" }, 399*b1cdbd2cSJim Jagielski { "uno:abc;DEF;ghi", "DEF" }, 400*b1cdbd2cSJim Jagielski { "uno:abc,def=xxx,ghi=xxx;def,ghi=xxx,jkl=xxx;ghi", 401*b1cdbd2cSJim Jagielski "def,ghi=xxx,jkl=xxx" } }; 402*b1cdbd2cSJim Jagielski for (int i = 0; i < sizeof aTests / sizeof (Test); ++i) 403*b1cdbd2cSJim Jagielski { 404*b1cdbd2cSJim Jagielski bool bValid = false; 405*b1cdbd2cSJim Jagielski rtl::OUString aProtocol; 406*b1cdbd2cSJim Jagielski try 407*b1cdbd2cSJim Jagielski { 408*b1cdbd2cSJim Jagielski aProtocol = cppu::UnoUrl(rtl::OUString::createFromAscii( 409*b1cdbd2cSJim Jagielski aTests[i].pInput)). 410*b1cdbd2cSJim Jagielski getProtocol().getDescriptor(); 411*b1cdbd2cSJim Jagielski bValid = true; 412*b1cdbd2cSJim Jagielski } 413*b1cdbd2cSJim Jagielski catch (rtl::MalformedUriException &) 414*b1cdbd2cSJim Jagielski {} 415*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Failed to parse URI", bValid); 416*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Failed to get protocol correctly", 417*b1cdbd2cSJim Jagielski aProtocol.equalsAscii( 418*b1cdbd2cSJim Jagielski aTests[i].pProtocol)); 419*b1cdbd2cSJim Jagielski } 420*b1cdbd2cSJim Jagielski } 421*b1cdbd2cSJim Jagielski testUrlObjectName()422*b1cdbd2cSJim Jagielski void testUrlObjectName() 423*b1cdbd2cSJim Jagielski { 424*b1cdbd2cSJim Jagielski struct Test 425*b1cdbd2cSJim Jagielski { 426*b1cdbd2cSJim Jagielski char const * pInput; 427*b1cdbd2cSJim Jagielski char const * pObjectName; 428*b1cdbd2cSJim Jagielski }; 429*b1cdbd2cSJim Jagielski static Test const aTests[] 430*b1cdbd2cSJim Jagielski = { { "uno:abc;def;ghi", "ghi" }, 431*b1cdbd2cSJim Jagielski { "uno:abc;def;Ghi", "Ghi" }, 432*b1cdbd2cSJim Jagielski { "uno:abc;def;gHI", "gHI" }, 433*b1cdbd2cSJim Jagielski { "uno:abc;def;GHI", "GHI" }, 434*b1cdbd2cSJim Jagielski { "uno:abc,def=xxx,ghi=xxx;def,ghi=xxx,jkl=xxx;ghi", "ghi" }, 435*b1cdbd2cSJim Jagielski { "uno:abc;def;a", "a" }, 436*b1cdbd2cSJim Jagielski { "uno:abc;def;A", "A" }, 437*b1cdbd2cSJim Jagielski { "uno:abc;def;1", "1" }, 438*b1cdbd2cSJim Jagielski { "uno:abc;def;$&+,/:=?@", "$&+,/:=?@" } }; 439*b1cdbd2cSJim Jagielski for (int i = 0; i < sizeof aTests / sizeof (Test); ++i) 440*b1cdbd2cSJim Jagielski { 441*b1cdbd2cSJim Jagielski bool bValid = false; 442*b1cdbd2cSJim Jagielski rtl::OUString aObjectName; 443*b1cdbd2cSJim Jagielski try 444*b1cdbd2cSJim Jagielski { 445*b1cdbd2cSJim Jagielski aObjectName = cppu::UnoUrl(rtl::OUString::createFromAscii( 446*b1cdbd2cSJim Jagielski aTests[i].pInput)).getObjectName(); 447*b1cdbd2cSJim Jagielski bValid = true; 448*b1cdbd2cSJim Jagielski } 449*b1cdbd2cSJim Jagielski catch (rtl::MalformedUriException &) 450*b1cdbd2cSJim Jagielski {} 451*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Failed to parse URI", bValid); 452*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE("Failed to get protocol correctly", 453*b1cdbd2cSJim Jagielski aObjectName.equalsAscii( 454*b1cdbd2cSJim Jagielski aTests[i].pObjectName)); 455*b1cdbd2cSJim Jagielski } 456*b1cdbd2cSJim Jagielski } 457*b1cdbd2cSJim Jagielski 458*b1cdbd2cSJim Jagielski // Automatic registration code 459*b1cdbd2cSJim Jagielski CPPUNIT_TEST_SUITE(UrlTest); 460*b1cdbd2cSJim Jagielski CPPUNIT_TEST(testDescriptorParsing); 461*b1cdbd2cSJim Jagielski CPPUNIT_TEST(testDescriptorDescriptor); 462*b1cdbd2cSJim Jagielski CPPUNIT_TEST(testDescriptorName); 463*b1cdbd2cSJim Jagielski CPPUNIT_TEST(testDescriptorKey); 464*b1cdbd2cSJim Jagielski CPPUNIT_TEST(testDescriptorValue); 465*b1cdbd2cSJim Jagielski CPPUNIT_TEST(testUrlParsing); 466*b1cdbd2cSJim Jagielski CPPUNIT_TEST(testUrlConnection); 467*b1cdbd2cSJim Jagielski CPPUNIT_TEST(testUrlProtocol); 468*b1cdbd2cSJim Jagielski CPPUNIT_TEST(testUrlObjectName); 469*b1cdbd2cSJim Jagielski CPPUNIT_TEST_SUITE_END(); 470*b1cdbd2cSJim Jagielski }; 471*b1cdbd2cSJim Jagielski } // namespace cppu_ifcontainer 472*b1cdbd2cSJim Jagielski 473*b1cdbd2cSJim Jagielski CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(cppu_unourl::UrlTest, 474*b1cdbd2cSJim Jagielski "cppu_unourl"); 475*b1cdbd2cSJim Jagielski 476*b1cdbd2cSJim Jagielski NOADDITIONAL; 477*b1cdbd2cSJim Jagielski 478