sl@0: // Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include "CUriAndAuthorityTest.h" sl@0: sl@0: #include sl@0: sl@0: #include "UriAndAuthorityTestCommon.h" sl@0: #include sl@0: #include sl@0: #include "UriAndAuthorityTests.h" sl@0: #include "SipUriAndAuthorityTests.h" sl@0: sl@0: CUriAndAuthorityTest* CUriAndAuthorityTest::NewLC(CIpuTestHarness* aTestHarness) sl@0: { sl@0: CUriAndAuthorityTest* self = new (ELeave) CUriAndAuthorityTest(aTestHarness); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: return self; sl@0: } sl@0: sl@0: CUriAndAuthorityTest* CUriAndAuthorityTest::NewL(CIpuTestHarness* aTestHarness) sl@0: { sl@0: CUriAndAuthorityTest* self = CUriAndAuthorityTest::NewLC(aTestHarness); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: CUriAndAuthorityTest::CUriAndAuthorityTest(CIpuTestHarness* aTestHarness) sl@0: : iTestHarness(aTestHarness) sl@0: { sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::ConstructL() sl@0: { sl@0: } sl@0: sl@0: CUriAndAuthorityTest::~CUriAndAuthorityTest() sl@0: { sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::DoTestsL() sl@0: { sl@0: // Test TUriParser Component Extraction sl@0: TestUriComponentExtractionL(KComps0, KScheme0, KUserInfo0, KHost0, KPort0, KPath0, KQuery0, KFragment0); sl@0: TestUriComponentExtractionL(KComps1, KScheme1, KUserInfo1, KHost1, KPort1, KPath1, KQuery1, KFragment1); sl@0: TestUriComponentExtractionL(KComps2, KScheme2, KUserInfo2, KHost2, KPort2, KPath2, KQuery2, KFragment2); sl@0: TestUriComponentExtractionL(KComps3, KScheme3, KUserInfo3, KHost3, KPort3, KPath3, KQuery3, KFragment3); sl@0: TestUriComponentExtractionL(KComps4, KScheme4, KUserInfo4, KHost4, KPort4, KPath4, KQuery4, KFragment4); sl@0: TestUriComponentExtractionL(KComps5, KScheme5, KUserInfo5, KHost5, KPort5, KPath5, KQuery5, KFragment5); sl@0: TestUriComponentExtractionL(KComps6, KScheme6, KUserInfo6, KHost6, KPort6, KPath6, KQuery6, KFragment6); sl@0: TestUriComponentExtractionL(KComps10, KScheme10, KUserInfo10, KHost10, KPort10, KPath10, KQuery10, KFragment10); sl@0: TestUriComponentExtractionL(KComps11, KScheme11, KUserInfo11, KHost11, KPort11, KPath11, KQuery11, KFragment11); sl@0: TestUriComponentExtractionL(KComps12, KScheme12, KUserInfo12, KHost12, KPort12, KPath12, KQuery12, KFragment12); sl@0: TestUriComponentExtractionL(KComps13, KScheme13, KUserInfo13, KHost13, KPort13, KPath13, KQuery13, KFragment13); sl@0: TestUriComponentExtractionL(KComps14, KScheme14, KUserInfo14, KHost14, KPort14, KPath14, KQuery14, KFragment14); sl@0: TestUriComponentExtractionL(KComps15, KScheme15, KUserInfo15, KHost15, KPort15, KPath15, KQuery15, KFragment15); sl@0: TestUriComponentExtractionL(KComps16, KScheme16, KUserInfo16, KHost16, KPort16, KPath16, KQuery16, KFragment16); sl@0: TestUriComponentExtractionL(KComps17, KScheme17, KUserInfo17, KHost17, KPort17, KPath17, KQuery17, KFragment17); sl@0: TestUriComponentExtractionL(KComps18, KScheme18, KUserInfo18, KHost18, KPort18, KPath18, KQuery18, KFragment18); sl@0: TestUriComponentExtractionL(KComps19, KScheme19, KUserInfo19, KHost19, KPort19, KPath19, KQuery19, KFragment19); sl@0: TestUriComponentExtractionL(KComps20, KScheme20, KUserInfo20, KHost20, KPort20, KPath20, KQuery20, KFragment20); sl@0: TestUriComponentExtractionL(KComps21, KScheme21, KUserInfo21, KHost21, KPort21, KPath21, KQuery21, KFragment21); sl@0: TestUriComponentExtractionL(KComps22, KScheme22, KUserInfo22, KHost22, KPort22, KPath22, KQuery22, KFragment22); sl@0: TestUriComponentExtractionL(KComps23, KScheme23, KUserInfo23, KHost23, KPort23, KPath23, KQuery23, KFragment23); sl@0: TestUriComponentExtractionL(KComps24, KScheme24, KUserInfo24, KHost24, KPort24, KPath24, KQuery24, KFragment24); sl@0: TestUriComponentExtractionL(KComps25, KScheme25, KUserInfo25, KHost25, KPort25, KPath25, KQuery25, KFragment25); sl@0: TestUriComponentExtractionL(KComps26, KScheme26, KUserInfo26, KHost26, KPort26, KPath26, KQuery26, KFragment26); sl@0: TestUriComponentExtractionL(KComps27, KScheme27, KUserInfo27, KHost27, KPort27, KPath27, KQuery27, KFragment27); sl@0: TestUriComponentExtractionL(KComps28, KScheme28, KUserInfo28, KHost28, KPort28, KPath28, KQuery28, KFragment28); sl@0: TestUriComponentExtractionL(KComps29, KScheme29, KUserInfo29, KHost29, KPort29, KPath29, KQuery29, KFragment29); sl@0: sl@0: // sl@0: // IPv6 Test cases Section 2.9.1 sl@0: TestUriComponentExtractionL(KComps30, KScheme30, KUserInfo30, KHost30, KPort30, KPath30, KQuery30, KFragment30); sl@0: TestUriComponentExtractionL(KComps31, KScheme31, KUserInfo31, KHost31, KPort31, KPath31, KQuery31, KFragment31); sl@0: TestUriComponentExtractionL(KComps32, KScheme32, KUserInfo32, KHost32, KPort32, KPath32, KQuery32, KFragment32); sl@0: TestUriComponentExtractionL(KComps33, KScheme33, KUserInfo33, KHost33, KPort33, KPath33, KQuery33, KFragment33); sl@0: TestUriComponentExtractionL(KComps34, KScheme34, KUserInfo34, KHost34, KPort34, KPath34, KQuery34, KFragment34); sl@0: TestUriComponentExtractionL(KComps35, KScheme35, KUserInfo35, KHost35, KPort35, KPath35, KQuery35, KFragment35); sl@0: TestUriComponentExtractionL(KComps36, KScheme36, KUserInfo36, KHost36, KPort36, KPath36, KQuery36, KFragment36); sl@0: sl@0: TestAuthorityComponentExtractionL(KAuthority0, KUserInfo0, KHost0, KPort0); sl@0: TestAuthorityComponentExtractionL(KAuthority1, KUserInfo1, KHost1, KPort1); sl@0: TestAuthorityComponentExtractionL(KAuthority2, KUserInfo2, KHost2, KPort2); sl@0: TestAuthorityComponentExtractionL(KAuthority3, KUserInfo3, KHost3, KPort3); sl@0: TestAuthorityComponentExtractionL(KAuthority4, KUserInfo4, KHost4, KPort4); sl@0: TestAuthorityComponentExtractionL(KAuthority5, KUserInfo5, KHost5, KPort5); sl@0: TestAuthorityComponentExtractionL(KAuthority6, KUserInfo6, KHost6, KPort6); sl@0: TestAuthorityComponentExtractionL(KAuthority10, KUserInfo10, KHost10, KPort10); sl@0: TestAuthorityComponentExtractionL(KAuthority11, KUserInfo11, KHost11, KPort11); sl@0: TestAuthorityComponentExtractionL(KAuthority12, KUserInfo12, KHost12, KPort12); sl@0: TestAuthorityComponentExtractionL(KAuthority13, KUserInfo13, KHost13, KPort13); sl@0: TestAuthorityComponentExtractionL(KAuthority14, KUserInfo14, KHost14, KPort14); sl@0: TestAuthorityComponentExtractionL(KAuthority15, KUserInfo15, KHost15, KPort15); sl@0: TestAuthorityComponentExtractionL(KAuthority16, KUserInfo16, KHost16, KPort16); sl@0: TestAuthorityComponentExtractionL(KAuthority17, KUserInfo17, KHost17, KPort17); sl@0: TestAuthorityComponentExtractionL(KAuthority18, KUserInfo18, KHost18, KPort18); sl@0: TestAuthorityComponentExtractionL(KAuthority19, KUserInfo19, KHost19, KPort19); sl@0: TestAuthorityComponentExtractionL(KAuthority20, KUserInfo20, KHost20, KPort20); sl@0: TestAuthorityComponentExtractionL(KAuthority21, KUserInfo21, KHost21, KPort21); sl@0: TestAuthorityComponentExtractionL(KAuthority22, KUserInfo22, KHost22, KPort22); sl@0: TestAuthorityComponentExtractionL(KAuthority23, KUserInfo23, KHost23, KPort23); sl@0: TestAuthorityComponentExtractionL(KAuthority24, KUserInfo24, KHost24, KPort24); sl@0: TestAuthorityComponentExtractionL(KAuthority25, KUserInfo25, KHost25, KPort25); sl@0: TestAuthorityComponentExtractionL(KAuthority26, KUserInfo26, KHost26, KPort26); sl@0: TestAuthorityComponentExtractionL(KAuthority27, KUserInfo27, KHost27, KPort27); sl@0: TestAuthorityComponentExtractionL(KAuthority28, KUserInfo28, KHost28, KPort28); sl@0: TestAuthorityComponentExtractionL(KAuthority29, KUserInfo29, KHost29, KPort29); sl@0: sl@0: // IPv6 Test cases sl@0: TestAuthorityComponentExtractionL(KAuthority30, KUserInfo30, KHost30, KPort30); sl@0: TestAuthorityComponentExtractionL(KAuthority31, KUserInfo31, KHost31, KPort31); sl@0: TestAuthorityComponentExtractionL(KAuthority32, KUserInfo32, KHost32, KPort32); sl@0: TestAuthorityComponentExtractionL(KAuthority33, KUserInfo33, KHost33, KPort33); sl@0: TestAuthorityComponentExtractionL(KAuthority34, KUserInfo34, KHost34, KPort34); sl@0: TestAuthorityComponentExtractionL(KAuthority35, KUserInfo35, KHost35, KPort35); sl@0: TestAuthorityComponentExtractionL(KAuthority36, KUserInfo36, KHost36, KPort36); sl@0: sl@0: TestResolveL(KBase,KRelative1,KResolved1); sl@0: TestResolveL(KBase,KRelative2,KResolved2); sl@0: TestResolveL(KBase,KRelative3,KResolved3); sl@0: TestResolveL(KBase,KRelative4,KResolved4); sl@0: TestResolveL(KBase,KRelative5,KResolved5); sl@0: TestResolveL(KBase,KRelative6,KResolved6); sl@0: TestResolveL(KBase,KRelative7,KResolved7); sl@0: TestResolveL(KBase,KRelative8,KResolved8); sl@0: TestResolveL(KBase,KRelative9,KResolved9); sl@0: TestResolveL(KBase,KRelative10,KResolved10); sl@0: TestResolveL(KBase,KRelative11,KResolved11); sl@0: TestResolveL(KBase,KRelative12,KResolved12); sl@0: TestResolveL(KBase,KRelative13,KResolved13); sl@0: TestResolveL(KBase,KRelative14,KResolved14); sl@0: TestResolveL(KBase,KRelative15,KResolved15); sl@0: TestResolveL(KBase,KRelative16,KResolved16); sl@0: TestResolveL(KBase,KRelative17,KResolved17); sl@0: TestResolveL(KBase,KRelative18,KResolved18); sl@0: TestResolveL(KBase,KRelative19,KResolved19); sl@0: TestResolveL(KBase,KRelative20,KResolved20); sl@0: TestResolveL(KBase,KRelative21,KResolved21); sl@0: TestResolveL(KBase,KRelative22,KResolved22); sl@0: sl@0: TestResolveL(KBase,KRelative23,KResolved23); sl@0: TestResolveL(KBase,KRelative24,KResolved24); sl@0: TestResolveL(KBase,KRelative25,KResolved25); sl@0: TestResolveL(KBase,KRelative26,KResolved26); sl@0: TestResolveL(KBase,KRelative27,KResolved27); sl@0: TestResolveL(KBase,KRelative28,KResolved28); sl@0: TestResolveL(KBase,KRelative29,KResolved29); sl@0: TestResolveL(KBase,KRelative30,KResolved30); sl@0: sl@0: TestResolveL(KBase,KRelative31,KResolved31); sl@0: TestResolveL(KBase,KRelative32,KResolved32); sl@0: TestResolveL(KBase,KRelative33,KResolved33); sl@0: TestResolveL(KBase,KRelative34,KResolved34); sl@0: TestResolveL(KBase,KRelative35,KResolved35); sl@0: TestResolveL(KBase,KRelative36,KResolved36); sl@0: sl@0: TestResolveL(KBase,KRelative37,KResolved37); sl@0: TestResolveL(KBase,KRelative38,KResolved38); sl@0: TestResolveL(KBase,KRelative39,KResolved39); sl@0: TestResolveL(KBase,KRelative40,KResolved40); sl@0: sl@0: TestResolveL(KBase,KRelative41,KResolved41); sl@0: sl@0: TestResolveL(KBase,KRelative42,KResolved42); sl@0: sl@0: iTestHarness->LogIt(_L("Next Test - Defect EDNMTAN-4H9K6A, CUrlWrap::ResolveL does not parse file Urls properly")); sl@0: TestResolveL(KBaseFile, KRelativeFile1, KResolvedFile1); sl@0: sl@0: iTestHarness->LogIt(_L("Next Test - Defect EDNSTAR-4HTNB4, CUrlWrap::ResolveL panics with zero length aUrlBase")); sl@0: TestResolveL(KNullDesC, KRelativeFile1, KRelativeFile1); sl@0: sl@0: iTestHarness->LogIt(_L("Next Test - Defect EDNPHAD-4J6EUY, CUrlWrap::ResolveL fails when the base and relative URLs both have fragments")); sl@0: TestResolveL(KBaseBug1, KRelativeBug1, KResolvedBug1); sl@0: TestResolveL(KBaseBug2, KRelativeBug2, KResolvedBug2); sl@0: TestResolveL(KBaseBug2, KRelativeBug3, KResolvedBug3); sl@0: sl@0: iTestHarness->LogIt(_L("Next Test - Defect EDNFUDN-4JYFH7, CUrl overflow causes WINS crash during sub-doc fetch")); sl@0: TestResolveL(KBaseBug3, KRelativeBug4, KResolvedBug4); sl@0: sl@0: TestUriCompareL(KUri_Compare0_a, KUri_Compare0_b, KUriMatchFlags0); sl@0: TestUriCompareL(KUri_Compare1_a, KUri_Compare1_b, KUriMatchFlags1); sl@0: sl@0: // IPv6 Test cases for section 2.9.1.1.1 sl@0: TestUriCompareL(KUri_Compare2_a, KUri_Compare2_b, KUriMatchFlags2); sl@0: // and section 2.9.1.1.2 sl@0: TestUriCompareL(KUri_Compare3_a, KUri_Compare3_b, KUriMatchFlags3); sl@0: sl@0: TestAuthorityCompareL(KAuth_Compare0_a, KAuth_Compare0_b, KAuthMatchFlags0); sl@0: TestAuthorityCompareL(KAuth_Compare1_a, KAuth_Compare1_b, KAuthMatchFlags1); sl@0: sl@0: TestUriComponentPresenceL(KUri_Presence0, KUriPresenceFlags0); sl@0: TestUriComponentPresenceL(KUri_Presence1, KUriPresenceFlags1); sl@0: sl@0: TestAuthorityComponentPresenceL(KAuthority_Presence0, KAuthorityPresenceFlags0); sl@0: TestAuthorityComponentPresenceL(KAuthority_Presence1, KAuthorityPresenceFlags1); sl@0: sl@0: TestUriDesL(KUri_Des0); sl@0: sl@0: TestAuthorityDesL(KAuthority_Des0); sl@0: sl@0: TestUriSchemeValidiyL(KUri_SchemeValidation0, KUri_SchemeValidity0); sl@0: TestUriSchemeValidiyL(KUri_SchemeValidation1, KUri_SchemeValidity1); sl@0: sl@0: TestUriWithoutFragmentL(KUri_WithoutFragment0, KUri_WithoutFragment_Result0); sl@0: TestUriWithoutFragmentL(KUri_WithoutFragment1, KUri_WithoutFragment_Result1); sl@0: sl@0: TestUriSetComponentL(KUri_Scheme0, KUri_Host0, KUri_Userinfo0, KUri_Port0, KUri_Path0, KUri_Query0, KUri_Fragment0, sl@0: KUri_SchemeComp0, KUri_HostComp0, KUri_UserinfoComp0, KUri_PortComp0, KUri_PathComp0, KUri_QueryComp0, KUri_FragmentComp0); sl@0: sl@0: TestUriRemoveComponentL(KUri_NoScheme0, KUri_NoHost0, KUri_NoUserinfo0, KUri_NoPort0, KUri_NoPath0, sl@0: KUri_NoQuery0, KUri_NoFragment0, KUri_Whole0); sl@0: sl@0: // Same test as above, but with an IPv6 format host, section 2.9.1.4 sl@0: // Apart from the IPv6 address, the component data from the previous test can be reused sl@0: TestUriSetComponentL(KUri_Scheme0, KUri_IPv6Host0, KUri_IPv6UserInfo0, KUri_IPv6Port0, KUri_IPv6Path0, KUri_IPv6Query0, KUri_IPv6Fragment0, sl@0: KUri_SchemeComp0, KUri_IPv6HostComp0, KUri_UserinfoComp0, KUri_PortComp0, KUri_PathComp0, KUri_QueryComp0, KUri_FragmentComp0); sl@0: sl@0: TestUriRemoveComponentL(KUri_IPv6NoScheme0, KUri_IPv6NoHost0, KUri_IPv6NoUserinfo0, KUri_IPv6NoPort0, KUri_IPv6NoPath0, sl@0: KUri_IPv6NoQuery0, KUri_IPv6NoFragment0, KUri_IPv6Whole0); sl@0: sl@0: TestAuthoritySetComponentL(KAuthority_Host0, KAuthority_Userinfo0, KAuthority_Port0, sl@0: KAuthority_HostComp0, KAuthority_UserinfoComp0, KAuthority_PortComp0); sl@0: sl@0: TestAuthoritySetAndEscapeComponentL(KAuthorityEscaped_Host0, KAuthorityEscaped_Userinfo0, KAuthorityEscaped_Port0, sl@0: KAuthorityEscaped_HostComp0, KAuthorityEscaped_UserinfoComp0, KAuthorityEscaped_PortComp0); sl@0: sl@0: TestAuthorityRemoveComponentL(KAuthority_NoHost0, KAuthority_NoUserinfo0, KAuthority_NoPort0, KAuthority_Whole0); sl@0: sl@0: // Same tests as above but for IPv6, as per section 2.9.1.4 sl@0: TestAuthoritySetComponentL(KAuthority_IPv6Host0, KAuthority_IPv6Userinfo0, KAuthority_IPv6Port0, sl@0: KAuthority_IPv6HostComp0, KAuthority_IPv6UserinfoComp0, KAuthority_IPv6PortComp0); sl@0: sl@0: TestAuthorityRemoveComponentL(KAuthority_IPv6NoHost0, KAuthority_IPv6NoUserinfo0, KAuthority_IPv6NoPort0, KAuthority_IPv6Whole0); sl@0: } sl@0: sl@0: // sl@0: // sl@0: // Uri Tests sl@0: // sl@0: // sl@0: sl@0: void CUriAndAuthorityTest::TestUriComponentExtractionL(const TDesC16& aUri, const TDesC16& aScheme, sl@0: const TDesC16& aUserinfo, const TDesC16& aHost, sl@0: const TDesC16& aPort, const TDesC16& aPath, sl@0: const TDesC16& aQuery, const TDesC16& aFragment) const sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TUriParser Component Extraction (deprecated 16-bit )")); sl@0: iTestHarness->LogIt(_L("Uri - %S"), &aUri); sl@0: sl@0: TInt error = DoUriComponentExtraction(aUri, aScheme, aUserinfo, aHost, aPort, aPath, aQuery, aFragment); sl@0: sl@0: //check for failed Sip test sl@0: if (KErrNotFound!=aPath.Find(_L(",")) && KErrNotFound!=aScheme.Find(_L("sIp"))) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriInvalidMess6); sl@0: error=KErrNone; sl@0: } sl@0: iTestHarness->EndTest(error); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TUriParser Component Extraction")); sl@0: iTestHarness->LogIt(_L("Uri - %S"), &aUri); sl@0: sl@0: sl@0: TRAP( error , DoUriComponentExtractionL(aUri, aScheme, aUserinfo, aHost, aPort, aPath, aQuery, aFragment) ) sl@0: sl@0: //check for failed Sip test sl@0: if (aPath.Find(_L(","))!=KErrNotFound && aScheme.Find(_L("sIp")) != KErrNotFound) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriInvalidMess6); sl@0: error=KErrNone; sl@0: } sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copies sl@0: HBufC8* uriBuf = HBufC8::NewLC(aUri.Length()); sl@0: TPtr8 uri8Bit = uriBuf->Des(); sl@0: uri8Bit.Copy(aUri); sl@0: sl@0: HBufC8* schemeBuf = HBufC8::NewLC(aScheme.Length()); sl@0: TPtr8 scheme8Bit = schemeBuf->Des(); sl@0: scheme8Bit.Copy(aScheme); sl@0: sl@0: HBufC8* userinfoBuf = HBufC8::NewLC(aUserinfo.Length()); sl@0: TPtr8 userinfo8Bit = userinfoBuf->Des(); sl@0: userinfo8Bit.Copy(aUserinfo); sl@0: sl@0: HBufC8* hostBuf = HBufC8::NewLC(aHost.Length()); sl@0: TPtr8 host8Bit = hostBuf->Des(); sl@0: host8Bit.Copy(aHost); sl@0: sl@0: HBufC8* portBuf = HBufC8::NewLC(aPort.Length()); sl@0: TPtr8 port8Bit = portBuf->Des(); sl@0: port8Bit.Copy(aPort); sl@0: sl@0: HBufC8* pathBuf = HBufC8::NewLC(aPath.Length()); sl@0: TPtr8 path8Bit = pathBuf->Des(); sl@0: path8Bit.Copy(aPath); sl@0: sl@0: HBufC8* queryBuf = HBufC8::NewLC(aQuery.Length()); sl@0: TPtr8 query8Bit = queryBuf->Des(); sl@0: query8Bit.Copy(aQuery); sl@0: sl@0: HBufC8* fragmentBuf = HBufC8::NewLC(aFragment.Length()); sl@0: TPtr8 fragment8Bit = fragmentBuf->Des(); sl@0: fragment8Bit.Copy(aFragment); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TUriParser Component Extraction (8-bit)")); sl@0: iTestHarness->LogIt(_L("Uri - %S"), &aUri); sl@0: sl@0: error = DoUriComponentExtraction(uri8Bit, scheme8Bit, userinfo8Bit, host8Bit, port8Bit, path8Bit, query8Bit, fragment8Bit); sl@0: sl@0: //check for failed Sip test sl@0: if (aPath.Find(_L(","))!=KErrNotFound && aScheme.Find(_L("sIp"))!=KErrNotFound) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriInvalidMess6); sl@0: error=KErrNone; sl@0: } sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(8, uriBuf); // uriBuf, schemeBuf, userinfoBuf, hostBuf, portBuf, pathBuf, queryBuf, fragmentBuf sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::TestResolveL(const TDesC& aBase, const TDesC& aReference, const TDesC& aExpected) const sl@0: { sl@0: iTestHarness->StartTestL(_L("Testing Resolving Functionality (16-bit)")); sl@0: iTestHarness->LogIt(_L("Test Resolving %S , %S -> %S"), &aBase, &aReference, &aExpected); sl@0: sl@0: TInt error = DoTestResolve(aBase, aReference, aExpected); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copies sl@0: HBufC8* baseBuf = HBufC8::NewLC(aBase.Length()); sl@0: TPtr8 base8Bit = baseBuf->Des(); sl@0: base8Bit.Copy(aBase); sl@0: sl@0: HBufC8* refBuf = HBufC8::NewLC(aReference.Length()); sl@0: TPtr8 ref8Bit = refBuf->Des(); sl@0: ref8Bit.Copy(aReference); sl@0: sl@0: HBufC8* expectedBuf = HBufC8::NewLC(aExpected.Length()); sl@0: TPtr8 expected8Bit = expectedBuf->Des(); sl@0: expected8Bit.Copy(aExpected); sl@0: sl@0: iTestHarness->StartTestL(_L("Testing Resolving Functionality (8-bit)")); sl@0: sl@0: //Abnormal examples below differs from RFC 2396 to the current implementation of sl@0: //RFC3986. So, the expected output for ResolveL for Uri8 is modified to support sl@0: //section 5.4.2 of RFC 3986. sl@0: sl@0: if( aReference.Compare(KRelative23) == 0 || sl@0: aReference.Compare(KRelative24) == 0 || sl@0: aReference.Compare(KRelative25) == 0 || sl@0: aReference.Compare(KRelative26) == 0 ) sl@0: { sl@0: _LIT8(KRfc3986,"http://a/g"); sl@0: expected8Bit.Copy(KRfc3986); sl@0: _LIT(KRfc3986Bit16,"http://a/g"); sl@0: iTestHarness->LogIt(_L("Test Resolving as per RFC3986 %S , %S -> %S"), &aBase, &aReference, &KRfc3986Bit16); sl@0: } sl@0: else sl@0: { sl@0: iTestHarness->LogIt(_L("Test Resolving %S , %S -> %S"), &aBase, &aReference, &aExpected); sl@0: } sl@0: error = DoTestResolve(base8Bit, ref8Bit, expected8Bit); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(3, baseBuf); // baseBuf, refBuf, expectedBuf sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::TestUriCompareL(const TDesC& aUri1, const TDesC& aUri2, TInt aMatchFlags) const sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TUriC Component Compare (16-bit)")); sl@0: sl@0: TInt error = DoUriCompare(aUri1, aUri2, aMatchFlags); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copies sl@0: HBufC8* uriBuf1 = HBufC8::NewLC(aUri1.Length()); sl@0: TPtr8 uri8Bit1 = uriBuf1->Des(); sl@0: uri8Bit1.Copy(aUri1); sl@0: sl@0: HBufC8* uriBuf2 = HBufC8::NewLC(aUri2.Length()); sl@0: TPtr8 uri8Bit2 = uriBuf2->Des(); sl@0: uri8Bit2.Copy(aUri2); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TUriC Component Compare (8-bit)")); sl@0: sl@0: error = DoUriCompare(uri8Bit1, uri8Bit2, aMatchFlags); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(2, uriBuf1); // uriBuf1, uriBuf2 sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::TestUriComponentPresenceL(const TDesC& aUri, TInt aPresenceFlags) const sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TUriC Component Presence (16-bit)")); sl@0: sl@0: TInt error = DoUriComponentPresence(aUri, aPresenceFlags); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copy sl@0: HBufC8* uriBuf = HBufC8::NewLC(aUri.Length()); sl@0: TPtr8 uri8Bit = uriBuf->Des(); sl@0: uri8Bit.Copy(aUri); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TUriC Component Presence (8-bit)")); sl@0: sl@0: error = DoUriComponentPresence(uri8Bit, aPresenceFlags); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(uriBuf); // uriBuf sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::TestUriDesL(const TDesC& aUri) const sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TUriC UriDes() (16-bit deprecated)")); sl@0: sl@0: TInt error = DoUriDes(aUri); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TUriC UriDes() (16-bit)")); sl@0: sl@0: TRAP( error , DoUriDesL(aUri) ); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copy sl@0: HBufC8* uriBuf = HBufC8::NewLC(aUri.Length()); sl@0: TPtr8 uri8Bit = uriBuf->Des(); sl@0: uri8Bit.Copy(aUri); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TUriC UriDes() (8-bit)")); sl@0: sl@0: error = DoUriDes(uri8Bit); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(uriBuf); // uriBuf sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::TestUriSchemeValidiyL(const TDesC& aUri, TBool aValidScheme) const sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TUriC Scheme Validation (16-bit)")); sl@0: sl@0: TInt error = DoUriSchemeValidation(aUri, aValidScheme); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copy sl@0: HBufC8* uriBuf = HBufC8::NewLC(aUri.Length()); sl@0: TPtr8 uri8Bit = uriBuf->Des(); sl@0: uri8Bit.Copy(aUri); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TUriC Scheme Validation (8-bit)")); sl@0: sl@0: error = DoUriSchemeValidation(uri8Bit, aValidScheme); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(uriBuf); // uriBuf sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::TestUriWithoutFragmentL(const TDesC& aUri, const TDesC& aExpected) sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TUriC Uri Without Fragment (16-bit)")); sl@0: sl@0: TInt error = DoUriWithoutFragment(aUri, aExpected); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copy sl@0: HBufC8* uriBuf = HBufC8::NewLC(aUri.Length()); sl@0: TPtr8 uri8Bit = uriBuf->Des(); sl@0: uri8Bit.Copy(aUri); sl@0: sl@0: HBufC8* expectedBuf = HBufC8::NewLC(aExpected.Length()); sl@0: TPtr8 expected8Bit = expectedBuf->Des(); sl@0: expected8Bit.Copy(aExpected); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TUriC Uri Without Fragment (8-bit)")); sl@0: sl@0: error = DoUriWithoutFragment(uri8Bit, expected8Bit); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(2, uriBuf); // uriBuf, expectedBuf sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::TestUriSetComponentL(const TDesC& aUri_Scheme, const TDesC& aUri_Host, const TDesC& aUri_Userinfo, sl@0: const TDesC& aUri_Port, const TDesC& aUri_Path, const TDesC& aUri_Query, sl@0: const TDesC& aUri_Fragment, const TDesC& aScheme, const TDesC& aHost, sl@0: const TDesC& aUserinfo, const TDesC& aPort, const TDesC& aPath, sl@0: const TDesC& aQuery, const TDesC& aFragment) const sl@0: sl@0: { sl@0: iTestHarness->StartTestL(_L("Test CUri SetComponentL (16-bit)")); sl@0: sl@0: TInt error = DoUriConstruction(aUri_Scheme, aUri_Host, aUri_Userinfo, aUri_Port, aUri_Path, sl@0: aUri_Query, aUri_Fragment, aScheme, aHost, aUserinfo, aPort, aPath, aQuery, aFragment); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copies sl@0: HBufC8* uri_SchemeBuf = HBufC8::NewLC(aUri_Scheme.Length()); sl@0: TPtr8 uri_Scheme8Bit = uri_SchemeBuf->Des(); sl@0: uri_Scheme8Bit.Copy(aUri_Scheme); sl@0: sl@0: HBufC8* uri_HostBuf = HBufC8::NewLC(aUri_Host.Length()); sl@0: TPtr8 uri_Host8Bit = uri_HostBuf->Des(); sl@0: uri_Host8Bit.Copy(aUri_Host); sl@0: sl@0: HBufC8* uri_UserinfoBuf = HBufC8::NewLC(aUri_Userinfo.Length()); sl@0: TPtr8 uri_Userinfo8Bit = uri_UserinfoBuf->Des(); sl@0: uri_Userinfo8Bit.Copy(aUri_Userinfo); sl@0: sl@0: HBufC8* uri_PortBuf = HBufC8::NewLC(aUri_Port.Length()); sl@0: TPtr8 uri_Port8Bit = uri_PortBuf->Des(); sl@0: uri_Port8Bit.Copy(aUri_Port); sl@0: sl@0: HBufC8* uri_PathBuf = HBufC8::NewLC(aUri_Path.Length()); sl@0: TPtr8 uri_Path8Bit = uri_PathBuf->Des(); sl@0: uri_Path8Bit.Copy(aUri_Path); sl@0: sl@0: HBufC8* uri_QueryBuf = HBufC8::NewLC(aUri_Query.Length()); sl@0: TPtr8 uri_Query8Bit = uri_QueryBuf->Des(); sl@0: uri_Query8Bit.Copy(aUri_Query); sl@0: sl@0: HBufC8* uri_FragmentBuf = HBufC8::NewLC(aUri_Fragment.Length()); sl@0: TPtr8 uri_Fragment8Bit = uri_FragmentBuf->Des(); sl@0: uri_Fragment8Bit.Copy(aUri_Fragment); sl@0: sl@0: // And the individual components sl@0: HBufC8* schemeBuf = HBufC8::NewLC(aScheme.Length()); sl@0: TPtr8 scheme8Bit = schemeBuf->Des(); sl@0: scheme8Bit.Copy(aScheme); sl@0: sl@0: HBufC8* userinfoBuf = HBufC8::NewLC(aUserinfo.Length()); sl@0: TPtr8 userinfo8Bit = userinfoBuf->Des(); sl@0: userinfo8Bit.Copy(aUserinfo); sl@0: sl@0: HBufC8* hostBuf = HBufC8::NewLC(aHost.Length()); sl@0: TPtr8 host8Bit = hostBuf->Des(); sl@0: host8Bit.Copy(aHost); sl@0: sl@0: HBufC8* portBuf = HBufC8::NewLC(aPort.Length()); sl@0: TPtr8 port8Bit = portBuf->Des(); sl@0: port8Bit.Copy(aPort); sl@0: sl@0: HBufC8* pathBuf = HBufC8::NewLC(aPath.Length()); sl@0: TPtr8 path8Bit = pathBuf->Des(); sl@0: path8Bit.Copy(aPath); sl@0: sl@0: HBufC8* queryBuf = HBufC8::NewLC(aQuery.Length()); sl@0: TPtr8 query8Bit = queryBuf->Des(); sl@0: query8Bit.Copy(aQuery); sl@0: sl@0: HBufC8* fragmentBuf = HBufC8::NewLC(aFragment.Length()); sl@0: TPtr8 fragment8Bit = fragmentBuf->Des(); sl@0: fragment8Bit.Copy(aFragment); sl@0: sl@0: iTestHarness->StartTestL(_L("Test CUri SetComponentL (8-bit)")); sl@0: sl@0: error = DoUriConstruction(uri_Scheme8Bit, uri_Host8Bit, uri_Userinfo8Bit, uri_Port8Bit, uri_Path8Bit, sl@0: uri_Query8Bit, uri_Fragment8Bit, scheme8Bit, host8Bit, userinfo8Bit, port8Bit, path8Bit, query8Bit, fragment8Bit); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: CleanupStack::PopAndDestroy(14, uri_SchemeBuf); // too many to list! sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::TestUriRemoveComponentL(const TDesC& aUri_NoScheme, const TDesC& aUri_NoHost, const TDesC& aUri_NoUserinfo, sl@0: const TDesC& aUri_NoPort, const TDesC& aUri_NoPath, const TDesC& aUri_NoQuery, sl@0: const TDesC& aUri_NoFragment, const TDesC& aUri_Whole) const sl@0: { sl@0: iTestHarness->StartTestL(_L("Test CUri RemoveComponentL (16-bit)")); sl@0: sl@0: TInt error = DoUriDestruction(aUri_NoScheme, aUri_NoHost, aUri_NoUserinfo, aUri_NoPort, aUri_NoPath, sl@0: aUri_NoQuery, aUri_NoFragment, aUri_Whole); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copies sl@0: HBufC8* uri_NoSchemeBuf = HBufC8::NewLC(aUri_NoScheme.Length()); sl@0: TPtr8 uri_NoScheme8Bit = uri_NoSchemeBuf->Des(); sl@0: uri_NoScheme8Bit.Copy(aUri_NoScheme); sl@0: sl@0: HBufC8* uri_NoHostBuf = HBufC8::NewLC(aUri_NoHost.Length()); sl@0: TPtr8 uri_NoHost8Bit = uri_NoHostBuf->Des(); sl@0: uri_NoHost8Bit.Copy(aUri_NoHost); sl@0: sl@0: HBufC8* uri_NoUserinfoBuf = HBufC8::NewLC(aUri_NoUserinfo.Length()); sl@0: TPtr8 uri_NoUserinfo8Bit = uri_NoUserinfoBuf->Des(); sl@0: uri_NoUserinfo8Bit.Copy(aUri_NoUserinfo); sl@0: sl@0: HBufC8* uri_NoPortBuf = HBufC8::NewLC(aUri_NoPort.Length()); sl@0: TPtr8 uri_NoPort8Bit = uri_NoPortBuf->Des(); sl@0: uri_NoPort8Bit.Copy(aUri_NoPort); sl@0: sl@0: HBufC8* uri_NoPathBuf = HBufC8::NewLC(aUri_NoPath.Length()); sl@0: TPtr8 uri_NoPath8Bit = uri_NoPathBuf->Des(); sl@0: uri_NoPath8Bit.Copy(aUri_NoPath); sl@0: sl@0: HBufC8* uri_NoQueryBuf = HBufC8::NewLC(aUri_NoQuery.Length()); sl@0: TPtr8 uri_NoQuery8Bit = uri_NoQueryBuf->Des(); sl@0: uri_NoQuery8Bit.Copy(aUri_NoQuery); sl@0: sl@0: HBufC8* uri_NoFragmentBuf = HBufC8::NewLC(aUri_NoFragment.Length()); sl@0: TPtr8 uri_NoFragment8Bit = uri_NoFragmentBuf->Des(); sl@0: uri_NoFragment8Bit.Copy(aUri_NoFragment); sl@0: sl@0: HBufC8* uri_WholeBuf = HBufC8::NewLC(aUri_Whole.Length()); sl@0: TPtr8 uri_Whole8Bit = uri_WholeBuf->Des(); sl@0: uri_Whole8Bit.Copy(aUri_Whole); sl@0: sl@0: iTestHarness->StartTestL(_L("Test CUri RemoveComponentL (8-bit)")); sl@0: sl@0: error = DoUriDestruction(uri_NoScheme8Bit, uri_NoHost8Bit, uri_NoUserinfo8Bit, uri_NoPort8Bit, sl@0: uri_NoPath8Bit, uri_NoQuery8Bit, uri_NoFragment8Bit, uri_Whole8Bit); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: CleanupStack::PopAndDestroy(8, uri_NoSchemeBuf); // too many to list! sl@0: } sl@0: sl@0: // sl@0: // sl@0: // Authority Tests sl@0: // sl@0: // sl@0: sl@0: void CUriAndAuthorityTest::TestAuthorityComponentExtractionL(const TDesC16& aAuthority, const TDesC16& aUserinfo, sl@0: const TDesC16& aHost, const TDesC16& aPort) const sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TAuthority Component Extraction (deprecated 16-bit)")); sl@0: iTestHarness->LogIt(_L("Uri - %S"), &aAuthority); sl@0: sl@0: TInt error = DoAuthorityComponentExtraction(aAuthority, aUserinfo, aHost, aPort); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TAuthority Component Extraction (16-bit)")); sl@0: iTestHarness->LogIt(_L("Uri - %S"), &aAuthority); sl@0: sl@0: TRAP(error, DoAuthorityComponentExtractionL(aAuthority, aUserinfo, aHost, aPort) ); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copies sl@0: HBufC8* authorityBuf = HBufC8::NewLC(aAuthority.Length()); sl@0: TPtr8 authority8Bit = authorityBuf->Des(); sl@0: authority8Bit.Copy(aAuthority); sl@0: sl@0: HBufC8* userinfoBuf = HBufC8::NewLC(aUserinfo.Length()); sl@0: TPtr8 userinfo8Bit = userinfoBuf->Des(); sl@0: userinfo8Bit.Copy(aUserinfo); sl@0: sl@0: HBufC8* hostBuf = HBufC8::NewLC(aHost.Length()); sl@0: TPtr8 host8Bit = hostBuf->Des(); sl@0: host8Bit.Copy(aHost); sl@0: sl@0: HBufC8* portBuf = HBufC8::NewLC(aPort.Length()); sl@0: TPtr8 port8Bit = portBuf->Des(); sl@0: port8Bit.Copy(aPort); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TAuthority Component Extraction (8-bit)")); sl@0: iTestHarness->LogIt(_L("Uri - %S"), &aAuthority); sl@0: sl@0: error = DoAuthorityComponentExtraction(authority8Bit, userinfo8Bit, host8Bit, port8Bit); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(4, authorityBuf); // authorityBuf, userInfoBuf, hostBuf, portBuf sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::TestAuthorityCompareL(const TDesC& aAuthority1, const TDesC& aAuthority2, TInt aMatchFlags) const sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TAuthorityC Component Compare (16-bit)")); sl@0: sl@0: TInt error = DoAuthorityCompare(aAuthority1, aAuthority2, aMatchFlags); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copies sl@0: HBufC8* authorityBuf1 = HBufC8::NewLC(aAuthority1.Length()); sl@0: TPtr8 authority8Bit1 = authorityBuf1->Des(); sl@0: authority8Bit1.Copy(aAuthority1); sl@0: sl@0: HBufC8* authorityBuf2 = HBufC8::NewLC(aAuthority2.Length()); sl@0: TPtr8 authority8Bit2 = authorityBuf2->Des(); sl@0: authority8Bit2.Copy(aAuthority2); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TAuthorityC Component Compare (8-bit)")); sl@0: sl@0: error = DoAuthorityCompare(authority8Bit1, authority8Bit2, aMatchFlags); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(2, authorityBuf1); // authorityBuf1, authorityBuf2 sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::TestAuthorityComponentPresenceL(const TDesC& aAuthority, TInt aPresenceFlags) const sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TAuthorityC Component Presence (16-bit)")); sl@0: sl@0: TInt error = DoAuthorityComponentPresence(aAuthority, aPresenceFlags); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copy sl@0: HBufC8* authorityBuf = HBufC8::NewLC(aAuthority.Length()); sl@0: TPtr8 authority8Bit = authorityBuf->Des(); sl@0: authority8Bit.Copy(aAuthority); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TAuthorityC Component Presence (8-bit)")); sl@0: sl@0: error = DoAuthorityComponentPresence(authority8Bit, aPresenceFlags); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(authorityBuf); // authorityBuf sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::TestAuthorityDesL(const TDesC& aAuthority) sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TAuthorityC AuthorityDes() (16-bit deprecated)")); sl@0: sl@0: TInt error = DoAuthorityDes(aAuthority); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TAuthorityC AuthorityDes() (16-bit)")); sl@0: sl@0: TRAP( error , DoAuthorityDesL(aAuthority) ); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copy sl@0: HBufC8* authorityBuf = HBufC8::NewLC(aAuthority.Length()); sl@0: TPtr8 authority8Bit = authorityBuf->Des(); sl@0: authority8Bit.Copy(aAuthority); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TAuthorityC AuthorityDes() (8-bit)")); sl@0: sl@0: error = DoAuthorityDes(authority8Bit); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: CleanupStack::PopAndDestroy(authorityBuf); // authorityBuf sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::TestAuthoritySetComponentL(const TDesC& aAuthority_Host, const TDesC& aAuthority_Userinfo, sl@0: const TDesC& aAuthority_Port, const TDesC& aHost, sl@0: const TDesC& aUserinfo, const TDesC& aPort) sl@0: sl@0: { sl@0: iTestHarness->StartTestL(_L("Test CAuthority SetComponentL (16-bit)")); sl@0: sl@0: TInt error = DoAuthorityConstruction(aAuthority_Host, aAuthority_Userinfo, aAuthority_Port, sl@0: aHost, aUserinfo, aPort); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copies sl@0: HBufC8* authority_HostBuf = HBufC8::NewLC(aAuthority_Host.Length()); sl@0: TPtr8 authority_Host8Bit = authority_HostBuf->Des(); sl@0: authority_Host8Bit.Copy(aAuthority_Host); sl@0: sl@0: HBufC8* authority_UserinfoBuf = HBufC8::NewLC(aAuthority_Userinfo.Length()); sl@0: TPtr8 authority_Userinfo8Bit = authority_UserinfoBuf->Des(); sl@0: authority_Userinfo8Bit.Copy(aAuthority_Userinfo); sl@0: sl@0: HBufC8* authority_PortBuf = HBufC8::NewLC(aAuthority_Port.Length()); sl@0: TPtr8 authority_Port8Bit = authority_PortBuf->Des(); sl@0: authority_Port8Bit.Copy(aAuthority_Port); sl@0: sl@0: // And the individual components sl@0: HBufC8* userinfoBuf = HBufC8::NewLC(aUserinfo.Length()); sl@0: TPtr8 userinfo8Bit = userinfoBuf->Des(); sl@0: userinfo8Bit.Copy(aUserinfo); sl@0: sl@0: HBufC8* hostBuf = HBufC8::NewLC(aHost.Length()); sl@0: TPtr8 host8Bit = hostBuf->Des(); sl@0: host8Bit.Copy(aHost); sl@0: sl@0: HBufC8* portBuf = HBufC8::NewLC(aPort.Length()); sl@0: TPtr8 port8Bit = portBuf->Des(); sl@0: port8Bit.Copy(aPort); sl@0: sl@0: iTestHarness->StartTestL(_L("Test CAuthority SetComponentL (8-bit)")); sl@0: sl@0: error = DoAuthorityConstruction(authority_Host8Bit, authority_Userinfo8Bit, authority_Port8Bit, sl@0: host8Bit, userinfo8Bit, port8Bit); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: CleanupStack::PopAndDestroy(6, authority_HostBuf); // too many to list! sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::TestAuthoritySetAndEscapeComponentL(const TDesC& aAuthority_Host, const TDesC& aAuthority_Userinfo, sl@0: const TDesC& aAuthority_Port, const TDesC& aHost, sl@0: const TDesC& aUserinfo, const TDesC& aPort) const sl@0: sl@0: { sl@0: iTestHarness->StartTestL(_L("Test CAuthority SetAndEscapeComponentL (16-bit)")); sl@0: sl@0: TInt error = DoAuthorityEscapedConstruction(aAuthority_Host, aAuthority_Userinfo, aAuthority_Port, sl@0: aHost, aUserinfo, aPort); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copies sl@0: HBufC8* authority_HostBuf = HBufC8::NewLC(aAuthority_Host.Length()); sl@0: TPtr8 authority_Host8Bit = authority_HostBuf->Des(); sl@0: authority_Host8Bit.Copy(aAuthority_Host); sl@0: sl@0: HBufC8* authority_UserinfoBuf = HBufC8::NewLC(aAuthority_Userinfo.Length()); sl@0: TPtr8 authority_Userinfo8Bit = authority_UserinfoBuf->Des(); sl@0: authority_Userinfo8Bit.Copy(aAuthority_Userinfo); sl@0: sl@0: HBufC8* authority_PortBuf = HBufC8::NewLC(aAuthority_Port.Length()); sl@0: TPtr8 authority_Port8Bit = authority_PortBuf->Des(); sl@0: authority_Port8Bit.Copy(aAuthority_Port); sl@0: sl@0: // And the individual components sl@0: HBufC8* userinfoBuf = HBufC8::NewLC(aUserinfo.Length()); sl@0: TPtr8 userinfo8Bit = userinfoBuf->Des(); sl@0: userinfo8Bit.Copy(aUserinfo); sl@0: sl@0: HBufC8* hostBuf = HBufC8::NewLC(aHost.Length()); sl@0: TPtr8 host8Bit = hostBuf->Des(); sl@0: host8Bit.Copy(aHost); sl@0: sl@0: HBufC8* portBuf = HBufC8::NewLC(aPort.Length()); sl@0: TPtr8 port8Bit = portBuf->Des(); sl@0: port8Bit.Copy(aPort); sl@0: sl@0: iTestHarness->StartTestL(_L("Test CAuthority SetAnsEscapeComponentL (8-bit)")); sl@0: sl@0: error = DoAuthorityEscapedConstruction(authority_Host8Bit, authority_Userinfo8Bit, authority_Port8Bit, sl@0: host8Bit, userinfo8Bit, port8Bit); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: CleanupStack::PopAndDestroy(6, authority_HostBuf); // too many to list! sl@0: } sl@0: sl@0: void CUriAndAuthorityTest::TestAuthorityRemoveComponentL(const TDesC& aAuthority_NoHost, const TDesC& aAuthority_NoUserinfo, sl@0: const TDesC& aAuthority_NoPort, const TDesC& aAuthority_Whole) const sl@0: { sl@0: iTestHarness->StartTestL(_L("Test CAuthority RemoveComponentL (16-bit)")); sl@0: sl@0: TInt error = DoAuthorityDestruction(aAuthority_NoHost, aAuthority_NoUserinfo, sl@0: aAuthority_NoPort, aAuthority_Whole); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: sl@0: // Make 8-bit copies sl@0: HBufC8* authority_NoHostBuf = HBufC8::NewLC(aAuthority_NoHost.Length()); sl@0: TPtr8 authority_NoHost8Bit = authority_NoHostBuf->Des(); sl@0: authority_NoHost8Bit.Copy(aAuthority_NoHost); sl@0: sl@0: HBufC8* authority_NoUserinfoBuf = HBufC8::NewLC(aAuthority_NoUserinfo.Length()); sl@0: TPtr8 authority_NoUserinfo8Bit = authority_NoUserinfoBuf->Des(); sl@0: authority_NoUserinfo8Bit.Copy(aAuthority_NoUserinfo); sl@0: sl@0: HBufC8* authority_NoPortBuf = HBufC8::NewLC(aAuthority_NoPort.Length()); sl@0: TPtr8 authority_NoPort8Bit = authority_NoPortBuf->Des(); sl@0: authority_NoPort8Bit.Copy(aAuthority_NoPort); sl@0: sl@0: HBufC8* authority_WholeBuf = HBufC8::NewLC(aAuthority_Whole.Length()); sl@0: TPtr8 authority_Whole8Bit = authority_WholeBuf->Des(); sl@0: authority_Whole8Bit.Copy(aAuthority_Whole); sl@0: sl@0: iTestHarness->StartTestL(_L("Test CAuthority RemoveComponentL (8-bit)")); sl@0: sl@0: error = DoAuthorityDestruction(authority_NoHost8Bit, authority_NoUserinfo8Bit, sl@0: authority_NoPort8Bit, authority_Whole8Bit); sl@0: sl@0: iTestHarness->EndTest(error); sl@0: CleanupStack::PopAndDestroy(4, authority_NoHostBuf); // too many to list! sl@0: } sl@0: sl@0: // sl@0: // sl@0: // Implementation of LOCAL functions sl@0: // sl@0: // sl@0: sl@0: template sl@0: TInt DoUriComponentExtraction(const TDesCType& aUri, const TDesCType& aScheme, sl@0: const TDesCType& aUserinfo, const TDesCType& aHost, sl@0: const TDesCType& aPort, const TDesCType& aPath, sl@0: const TDesCType& aQuery, const TDesCType& aFragment) sl@0: { sl@0: TUriParserType uriParser; sl@0: TInt error = uriParser.Parse(aUri); sl@0: // Is this a valid Uri? sl@0: if( error == KUriUtilsErrInvalidUri ) sl@0: { sl@0: return error; sl@0: } sl@0: sl@0: // Check scheme... sl@0: if( TestComponent(uriParser, aScheme, EUriScheme) != 0 ) sl@0: { sl@0: return KUriUtilsErrDifferentScheme; sl@0: } sl@0: // Check userinfo... sl@0: if( TestComponent(uriParser, aUserinfo, EUriUserinfo) != 0 ) sl@0: { sl@0: return KUriUtilsErrDifferentUserInfo; sl@0: } sl@0: // Check host... sl@0: if( TestComponent(uriParser, aHost, EUriHost) != 0 ) sl@0: { sl@0: return KUriUtilsErrDifferentHost; sl@0: } sl@0: // Check port... sl@0: if( TestComponent(uriParser, aPort, EUriPort) != 0 ) sl@0: { sl@0: return KUriUtilsErrDifferentPort; sl@0: } sl@0: // Check path... sl@0: if( TestComponent(uriParser, aPath, EUriPath) != 0) sl@0: { sl@0: return KUriUtilsErrDifferentPath; sl@0: } sl@0: // Check query... sl@0: if( TestComponent(uriParser, aQuery, EUriQuery) != 0 ) sl@0: { sl@0: return KUriUtilsErrDifferentQuery; sl@0: } sl@0: // Check fragment... sl@0: if( TestComponent(uriParser, aFragment, EUriFragment) != 0 ) sl@0: { sl@0: return KUriUtilsErrDifferentFragment; sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: sl@0: /** create 8-bit URI from descriptor, compare components*/ sl@0: void DoUriComponentExtractionL(const TDesC& aUri, const TDesC& aScheme, sl@0: const TDesC& aUserinfo, const TDesC& aHost, sl@0: const TDesC& aPort, const TDesC& aPath, sl@0: const TDesC& aQuery, const TDesC& aFragment) sl@0: { sl@0: CUri8* uri = UriUtils::CreateUriL(aUri); sl@0: CleanupStack::PushL(uri); sl@0: sl@0: // Check scheme... sl@0: HBufC* text = uri->Uri().DisplayFormL(EUriScheme); sl@0: TInt error = ( text->Compare(aScheme) == 0 ) ? KErrNone : KUriUtilsErrDifferentScheme; sl@0: delete text; sl@0: User::LeaveIfError(error); sl@0: sl@0: // Check userinfo... sl@0: text = uri->Uri().DisplayFormL(EUriUserinfo); sl@0: error = ( text->Compare(aUserinfo) == 0 ) ? KErrNone : KUriUtilsErrDifferentUserInfo; sl@0: delete text; sl@0: User::LeaveIfError(error); sl@0: sl@0: // Check host... sl@0: text = uri->Uri().DisplayFormL(EUriHost); sl@0: error = ( text->Compare(aHost) == 0 ) ? KErrNone : KUriUtilsErrDifferentHost; sl@0: delete text; sl@0: User::LeaveIfError(error); sl@0: sl@0: // Check port... sl@0: text = uri->Uri().DisplayFormL(EUriPort); sl@0: error = ( text->Compare(aPort) == 0 ) ? KErrNone : KUriUtilsErrDifferentPort; sl@0: delete text; sl@0: User::LeaveIfError(error); sl@0: sl@0: // Check path... sl@0: text = uri->Uri().DisplayFormL(EUriPath); sl@0: error = ( text->Compare(aPath) == 0 ) ? KErrNone : KUriUtilsErrDifferentPath; sl@0: delete text; sl@0: User::LeaveIfError(error); sl@0: sl@0: // Check query... sl@0: text = uri->Uri().DisplayFormL(EUriQuery); sl@0: error = ( text->Compare(aQuery) == 0 ) ? KErrNone : KUriUtilsErrDifferentQuery; sl@0: delete text; sl@0: User::LeaveIfError(error); sl@0: sl@0: // Check fragment... sl@0: text = uri->Uri().DisplayFormL(EUriFragment); sl@0: error = ( text->Compare(aFragment) == 0 ) ? KErrNone : KUriUtilsErrDifferentFragment; sl@0: delete text; sl@0: User::LeaveIfError(error); sl@0: CleanupStack::PopAndDestroy(uri); sl@0: } sl@0: sl@0: sl@0: template sl@0: TInt DoAuthorityComponentExtraction(const TDesCType& aAuthority, const TDesCType& aUserInfo, sl@0: const TDesCType& aHost, const TDesCType& aPort) sl@0: { sl@0: TAuthorityParserType authorityParser; sl@0: TInt error = authorityParser.Parse(aAuthority); sl@0: sl@0: // Check userinfo... sl@0: if( TestComponent(authorityParser, aUserInfo, EAuthorityUserinfo) != 0 ) sl@0: { sl@0: return KUriUtilsErrDifferentUserInfo; sl@0: } sl@0: // Check host... sl@0: if( TestComponent(authorityParser, aHost, EAuthorityHost) != 0 ) sl@0: { sl@0: return KUriUtilsErrDifferentHost; sl@0: } sl@0: // Check port... sl@0: if( TestComponent(authorityParser, aPort, EAuthorityPort) != 0 ) sl@0: { sl@0: return KUriUtilsErrDifferentPort; sl@0: } sl@0: return error; sl@0: } sl@0: sl@0: /** create 8-bit Authority from descriptor, compare components*/ sl@0: void DoAuthorityComponentExtractionL(const TDesC& aAuthority, const TDesC& aUserInfo, sl@0: const TDesC& aHost, const TDesC& aPort) sl@0: { sl@0: CAuthority8* authority = UriUtils::CreateAuthorityL(aAuthority); sl@0: CleanupStack::PushL(authority); sl@0: sl@0: // Check userinfo... sl@0: HBufC* text = authority->Authority().DisplayFormL(EAuthorityUserinfo); sl@0: TInt error = ( text->Compare(aUserInfo) == 0 ) ? KErrNone : KUriUtilsErrDifferentUserInfo; sl@0: delete text; sl@0: User::LeaveIfError(error); sl@0: sl@0: // Check host... sl@0: text = authority->Authority().DisplayFormL(EAuthorityHost); sl@0: error = ( text->Compare(aHost) == 0 ) ? KErrNone : KUriUtilsErrDifferentHost; sl@0: delete text; sl@0: sl@0: // Check port... sl@0: text = authority->Authority().DisplayFormL(EAuthorityPort); sl@0: error = ( text->Compare(aPort) == 0 ) ? KErrNone : KUriUtilsErrDifferentPort; sl@0: delete text; sl@0: sl@0: CleanupStack::PopAndDestroy(authority); sl@0: } sl@0: sl@0: template sl@0: TInt TestComponent(const TParserType& aParser, const TDesCType& aExpected, TComponentType aComponent) sl@0: { sl@0: return aParser.Extract(aComponent).Compare(aExpected); sl@0: } sl@0: sl@0: template sl@0: TInt DoTestResolve(const TDesCType& aBase, const TDesCType& aReference, const TDesCType& aExpected) sl@0: { sl@0: TUriParserType baseUri; sl@0: TInt error = baseUri.Parse(aBase); sl@0: if ( error != KErrNone ) sl@0: { sl@0: return error; sl@0: } sl@0: TUriParserType refUri; sl@0: error = refUri.Parse(aReference); sl@0: if ( error != KErrNone ) sl@0: { sl@0: return error; sl@0: } sl@0: CUriType* resolvedUri = NULL; sl@0: TRAP(error, resolvedUri = CUriType::ResolveL(baseUri, refUri)); sl@0: if( error != KErrNone ) sl@0: { sl@0: return error; sl@0: } sl@0: error = resolvedUri->Uri().UriDes().Compare(aExpected); sl@0: sl@0: delete resolvedUri; sl@0: return error; sl@0: } sl@0: sl@0: template sl@0: TInt DoUriCompare(const TDesCType& aUri1, const TDesCType& aUri2, TInt aMatchFlags) sl@0: { sl@0: TUriParserType uri1; sl@0: TInt error = uri1.Parse(aUri1); sl@0: if( error == KUriUtilsErrInvalidUri ) sl@0: { sl@0: return error; sl@0: } sl@0: TUriParserType uri2; sl@0: error = uri2.Parse(aUri2); sl@0: if( error == KUriUtilsErrInvalidUri ) sl@0: { sl@0: return error; sl@0: } sl@0: // Test compare for fragment sl@0: if( (error = TestCompare(uri1, uri2, EUriFragment, (aMatchFlags & EFragmentFlag))) != 0 ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for query sl@0: if( (error = TestCompare(uri1, uri2, EUriQuery, (aMatchFlags & EQueryFlag))) != 0 ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for path sl@0: if( (error = TestCompare(uri1, uri2, EUriPath, (aMatchFlags & EPathFlag))) != 0 ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for port sl@0: if( (error = TestCompare(uri1, uri2, EUriPort, (aMatchFlags & EPortFlag))) != 0 ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for userinfo sl@0: if( (error = TestCompare(uri1, uri2, EUriUserinfo, (aMatchFlags & EUserinfoFlag))) != 0 ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for host sl@0: if( (error = TestCompare(uri1, uri2, EUriHost, (aMatchFlags & EHostFlag))) != 0 ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for scheme sl@0: if( (error = TestCompare(uri1, uri2, EUriScheme, (aMatchFlags & ESchemeFlag))) != 0 ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return error; sl@0: } sl@0: sl@0: template sl@0: TInt DoAuthorityCompare(const TDesCType& aAuthority1, const TDesCType& aAuthority2, TInt aMatchFlags) sl@0: { sl@0: TAuthorityParserType auth1; sl@0: TInt error = auth1.Parse(aAuthority1); sl@0: TAuthorityParserType auth2; sl@0: error = auth2.Parse(aAuthority2); sl@0: // Test compare for userinfo sl@0: if( (error = TestCompare(auth1, auth2, EAuthorityUserinfo, (aMatchFlags & EUserinfoFlag))) != 0 ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for port sl@0: if( (error = TestCompare(auth1, auth2, EAuthorityPort, (aMatchFlags & EPortFlag))) != 0 ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for host sl@0: if( (error = TestCompare(auth1, auth2, EAuthorityHost, (aMatchFlags & EHostFlag))) != 0 ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return error; sl@0: } sl@0: sl@0: template sl@0: TInt TestCompare(const TParserType& aData1, const TParserType& aData2, TComponentType aComponent, TBool aExpectedMatch) sl@0: { sl@0: TInt error = aData1.Compare(aData2, aComponent); sl@0: TBool match = error == 0; sl@0: if( (!match && aExpectedMatch) | (match && !aExpectedMatch) ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: template sl@0: TInt DoUriComponentPresence(const TDesCType& aUri, TInt aPresenceFlags) sl@0: { sl@0: TUriParserType uri; sl@0: TInt error = uri.Parse(aUri); sl@0: if( error == KUriUtilsErrInvalidUri ) sl@0: { sl@0: return error; sl@0: } sl@0: // Test compare for scheme sl@0: if( (error = TestPresence(uri, EUriScheme, (aPresenceFlags & ESchemeFlag))) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for host sl@0: if( (error = TestPresence(uri, EUriHost, (aPresenceFlags & EHostFlag))) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for userinfo sl@0: if( (error = TestPresence(uri, EUriUserinfo, (aPresenceFlags & EUserinfoFlag))) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for port sl@0: if( (error = TestPresence(uri, EUriPort, (aPresenceFlags & EPortFlag))) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for path sl@0: if( (error = TestPresence(uri, EUriPath, (aPresenceFlags & EPathFlag))) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for query sl@0: if( (error = TestPresence(uri, EUriQuery, (aPresenceFlags & EQueryFlag))) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for fragment sl@0: if( (error = TestPresence(uri, EUriFragment, (aPresenceFlags & EFragmentFlag))) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return error; sl@0: } sl@0: sl@0: template sl@0: TInt DoAuthorityComponentPresence(const TDesCType& aAuthority, TInt aPresenceFlags) sl@0: { sl@0: TAuthorityParserType authority; sl@0: TInt error = authority.Parse(aAuthority); sl@0: // Test compare for host sl@0: if( (error = TestPresence(authority, EAuthorityHost, (aPresenceFlags & EHostFlag))) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for userinfo sl@0: if( (error = TestPresence(authority, EAuthorityUserinfo, (aPresenceFlags & EUserinfoFlag))) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: // Test compare for port sl@0: if( (error = TestPresence(authority, EAuthorityPort, (aPresenceFlags & EPortFlag))) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return error; sl@0: } sl@0: sl@0: template sl@0: TInt TestPresence(const TParserType& aData, TComponentType aComponent, TBool aExpectedPresence) sl@0: { sl@0: TBool present = aData.IsPresent(aComponent); sl@0: if( (!present && aExpectedPresence) | (present && !aExpectedPresence) ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: template sl@0: TInt DoUriDes(const TDesCType& aUri) sl@0: { sl@0: TUriParserType uri; sl@0: TInt error = uri.Parse(aUri); sl@0: if( error == KUriUtilsErrInvalidUri ) sl@0: { sl@0: return error; sl@0: } sl@0: if( uri.UriDes().Compare(aUri) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: void DoUriDesL(const TDesC& aUri) sl@0: { sl@0: CUri8* uri = UriUtils::CreateUriL(aUri); sl@0: CleanupStack::PushL(uri); sl@0: sl@0: HBufC* text = uri->Uri().DisplayFormL(); sl@0: TInt error = ( text->Compare(aUri) == 0 ) ? KErrNone : KErrNotFound; sl@0: delete text; sl@0: User::LeaveIfError(error); sl@0: CleanupStack::PopAndDestroy(uri); sl@0: } sl@0: sl@0: template sl@0: TInt DoAuthorityDes(const TDesCType& aAuthority) sl@0: { sl@0: TAuthorityParserType authority; sl@0: TInt error = authority.Parse(aAuthority); sl@0: if( (error = authority.AuthorityDes().Compare(aAuthority)) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return error; sl@0: } sl@0: sl@0: void DoAuthorityDesL(const TDesC& aAuthority) sl@0: { sl@0: CAuthority8* authority = UriUtils::CreateAuthorityL(aAuthority); sl@0: CleanupStack::PushL(authority); sl@0: sl@0: HBufC* text = authority->Authority().DisplayFormL(); sl@0: TInt error = ( text->Compare(aAuthority) == 0 ) ? KErrNone : KErrNotFound; sl@0: delete text; sl@0: User::LeaveIfError(error); sl@0: sl@0: CleanupStack::PopAndDestroy(authority); sl@0: } sl@0: sl@0: template sl@0: TInt DoUriSchemeValidation(const TDesCType& aUri, TBool aValidScheme) sl@0: { sl@0: TUriParserType uri; sl@0: TInt error = uri.Parse(aUri); sl@0: if( error == KUriUtilsErrInvalidUri ) sl@0: { sl@0: return error; sl@0: } sl@0: TBool valid = uri.IsSchemeValid(); sl@0: if( (!valid && aValidScheme) | (valid && !aValidScheme) ) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: template sl@0: TInt DoUriWithoutFragment(const TDesCType& aUri, const TDesCType& aExpected) sl@0: { sl@0: TUriParserType uri; sl@0: TInt error = uri.Parse(aUri); sl@0: if( error == KUriUtilsErrInvalidUri ) sl@0: { sl@0: return error; sl@0: } sl@0: TPtrCType uriWithoutFragment; sl@0: uri.UriWithoutFragment(uriWithoutFragment); sl@0: if( (error = uriWithoutFragment.Compare(aExpected)) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return error; sl@0: } sl@0: sl@0: template sl@0: TInt DoUriConstruction(const TDesCType& aUri_Scheme, const TDesCType& aUri_Host, const TDesCType& aUri_Userinfo, sl@0: const TDesCType& aUri_Port, const TDesCType& aUri_Path, const TDesCType& aUri_Query, sl@0: const TDesCType& aUri_Fragment, const TDesCType& aScheme, const TDesCType& aHost, sl@0: const TDesCType& aUserinfo, const TDesCType& aPort, const TDesCType& aPath, sl@0: const TDesCType& aQuery, const TDesCType& aFragment) sl@0: { sl@0: // Create the CUriType object sl@0: CUriType* uri = NULL; sl@0: TRAPD(error, uri = CUriType::NewL()); sl@0: if( error != KErrNone ) sl@0: { sl@0: return error; sl@0: } sl@0: CleanupStack::PushL(uri); sl@0: // Add scheme... sl@0: if( DoUriSetAndCompareComponent(uri, EUriScheme, aScheme, aUri_Scheme) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNotFound; sl@0: } sl@0: sl@0: // Add host... sl@0: if( DoUriSetAndCompareComponent(uri, EUriHost, aHost, aUri_Host) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNotFound; sl@0: } sl@0: // Add userinfo... sl@0: if( DoUriSetAndCompareComponent(uri, EUriUserinfo, aUserinfo, aUri_Userinfo) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNotFound; sl@0: } sl@0: // Add port... sl@0: if( DoUriSetAndCompareComponent(uri, EUriPort, aPort, aUri_Port) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNotFound; sl@0: } sl@0: // Add path... sl@0: if( DoUriSetAndCompareComponent(uri, EUriPath, aPath, aUri_Path) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNotFound; sl@0: } sl@0: // Add query... sl@0: if( DoUriSetAndCompareComponent(uri, EUriQuery, aQuery, aUri_Query) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNotFound; sl@0: } sl@0: // Add fragment... sl@0: if( DoUriSetAndCompareComponent(uri, EUriFragment, aFragment, aUri_Fragment) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNotFound; sl@0: } sl@0: // Cleanup and return sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNone; sl@0: } sl@0: sl@0: template sl@0: TInt DoUriSetAndCompareComponent(CUriType* aUri, TUriComponent aComponent, const TDesCType& aData, const TDesCType& aExpected) sl@0: { sl@0: TRAPD(error, aUri->SetComponentL(aData, aComponent)); sl@0: if( error != KErrNone ) sl@0: { sl@0: return error; sl@0: } sl@0: // Compare with expected sl@0: if( aUri->Uri().UriDes().Compare(aExpected) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: template sl@0: TInt DoUriDestruction(const TDesCType& aUri_NoScheme, const TDesCType& aUri_NoHost, const TDesCType& aUri_NoUserinfo, sl@0: const TDesCType& aUri_NoPort, const TDesCType& aUri_NoPath, const TDesCType& aUri_NoQuery, sl@0: const TDesCType& aUri_NoFragment, const TDesCType& aUri_Whole) sl@0: { sl@0: // Create a TUriC-derived objet from whole uri sl@0: TUriParserType parser; sl@0: TInt error = parser.Parse(aUri_Whole); sl@0: if( error == KUriUtilsErrInvalidUri ) sl@0: { sl@0: return error; sl@0: } sl@0: // Create the CUriType object sl@0: CUriType* uri = NULL; sl@0: TRAP(error, uri = CUriType::NewL(parser)); sl@0: if( error != KErrNone ) sl@0: { sl@0: return error; sl@0: } sl@0: CleanupStack::PushL(uri); sl@0: // Remove fragment... sl@0: if( DoUriRemoveAndCompareComponent(uri, EUriFragment, aUri_NoFragment) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNotFound; sl@0: } sl@0: // Remove query... sl@0: if( DoUriRemoveAndCompareComponent(uri, EUriQuery, aUri_NoQuery) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNotFound; sl@0: } sl@0: // Remove path... sl@0: if( DoUriRemoveAndCompareComponent(uri, EUriPath, aUri_NoPath) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNotFound; sl@0: } sl@0: // Remove port... sl@0: if( DoUriRemoveAndCompareComponent(uri, EUriPort, aUri_NoPort) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNotFound; sl@0: } sl@0: // Remove userinfo... sl@0: if( DoUriRemoveAndCompareComponent(uri, EUriUserinfo, aUri_NoUserinfo) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNotFound; sl@0: } sl@0: // Remove host... sl@0: if( DoUriRemoveAndCompareComponent(uri, EUriHost, aUri_NoHost) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNotFound; sl@0: } sl@0: // Remove scheme... sl@0: if( DoUriRemoveAndCompareComponent(uri, EUriScheme, aUri_NoScheme) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNotFound; sl@0: } sl@0: // Cleanup and return sl@0: CleanupStack::PopAndDestroy(uri); // uri sl@0: return KErrNone; sl@0: } sl@0: sl@0: template sl@0: TInt DoUriRemoveAndCompareComponent(CUriType* aUri, TUriComponent aComponent, const TDesCType& aExpected) sl@0: { sl@0: TRAPD(error, aUri->RemoveComponentL(aComponent)); sl@0: if( error != KErrNone ) sl@0: { sl@0: return error; sl@0: } sl@0: // Compare with expected sl@0: if( aUri->Uri().UriDes().Compare(aExpected) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: template sl@0: TInt DoAuthorityConstruction(const TDesCType& aAuthority_Host, const TDesCType& aAuthority_Userinfo, const TDesCType& aAuthority_Port, sl@0: const TDesCType& aHost, const TDesCType& aUserinfo, const TDesCType& aPort) sl@0: { sl@0: // Create the CAuthorityType object sl@0: CAuthorityType* authority = NULL; sl@0: TRAPD(error, authority = CAuthorityType::NewL()); sl@0: if( error != KErrNone ) sl@0: { sl@0: return error; sl@0: } sl@0: CleanupStack::PushL(authority); sl@0: // Add host... sl@0: if( DoAuthoritySetAndCompareComponent(authority, EAuthorityHost, aHost, aAuthority_Host) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(authority); // authority sl@0: return KErrNotFound; sl@0: } sl@0: // Add userinfo... sl@0: if( DoAuthoritySetAndCompareComponent(authority, EAuthorityUserinfo, aUserinfo, aAuthority_Userinfo) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(authority); // authority sl@0: return KErrNotFound; sl@0: } sl@0: // Add port... sl@0: if( DoAuthoritySetAndCompareComponent(authority, EAuthorityPort, aPort, aAuthority_Port) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(authority); // authority sl@0: return KErrNotFound; sl@0: } sl@0: // Cleanup and return sl@0: CleanupStack::PopAndDestroy(authority); // authority sl@0: return KErrNone; sl@0: } sl@0: sl@0: template sl@0: TInt DoAuthoritySetAndCompareComponent(CAuthorityType* aAuthority, TAuthorityComponent aComponent, const TDesCType& aData, const TDesCType& aExpected) sl@0: { sl@0: TRAPD(error, aAuthority->SetComponentL(aData, aComponent)); sl@0: if( error != KErrNone ) sl@0: { sl@0: return error; sl@0: } sl@0: // Compare with expected sl@0: if( aAuthority->Authority().AuthorityDes().Compare(aExpected) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: template sl@0: TInt DoAuthorityEscapedConstruction(const TDesCType& aAuthority_Host, const TDesCType& aAuthority_Userinfo, const TDesCType& aAuthority_Port, sl@0: const TDesCType& aHost, const TDesCType& aUserinfo, const TDesCType& aPort) sl@0: { sl@0: // Create the CAuthorityType object sl@0: CAuthorityType* authority = NULL; sl@0: TRAPD(error, authority = CAuthorityType::NewL()); sl@0: if( error != KErrNone ) sl@0: { sl@0: return error; sl@0: } sl@0: CleanupStack::PushL(authority); sl@0: // Add host... sl@0: if( DoAuthoritySetAndEscapeAndCompareComponent(authority, EAuthorityHost, aHost, aAuthority_Host) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(authority); // authority sl@0: return KErrNotFound; sl@0: } sl@0: // Add userinfo... sl@0: if( DoAuthoritySetAndEscapeAndCompareComponent(authority, EAuthorityUserinfo, aUserinfo, aAuthority_Userinfo) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(authority); // authority sl@0: return KErrNotFound; sl@0: } sl@0: // Add port... sl@0: if( DoAuthoritySetAndEscapeAndCompareComponent(authority, EAuthorityPort, aPort, aAuthority_Port) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(authority); // authority sl@0: return KErrNotFound; sl@0: } sl@0: // Cleanup and return sl@0: CleanupStack::PopAndDestroy(authority); // authority sl@0: return KErrNone; sl@0: } sl@0: sl@0: template sl@0: TInt DoAuthoritySetAndEscapeAndCompareComponent(CAuthorityType* aAuthority, TAuthorityComponent aComponent, const TDesCType& aData, const TDesCType& aExpected) sl@0: { sl@0: TRAPD(error, aAuthority->SetAndEscapeComponentL(aData, aComponent)); sl@0: if( error != KErrNone ) sl@0: { sl@0: return error; sl@0: } sl@0: // Compare with expected sl@0: if( aAuthority->Authority().AuthorityDes().Compare(aExpected) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: template sl@0: TInt DoAuthorityDestruction(const TDesCType& aAuthority_NoHost, const TDesCType& aAuthority_NoUserinfo, sl@0: const TDesCType& aAuthority_NoPort, const TDesCType& aAuthority_Whole) sl@0: { sl@0: // Create a TAuthorityC-derived objet from whole authority sl@0: TAuthorityParserType parser; sl@0: TInt error = parser.Parse(aAuthority_Whole); sl@0: // Create the CAuthorityType object sl@0: CAuthorityType* authority = NULL; sl@0: TRAP(error, authority = CAuthorityType::NewL(parser)); sl@0: if( error != KErrNone ) sl@0: { sl@0: return error; sl@0: } sl@0: CleanupStack::PushL(authority); sl@0: // Remove port... sl@0: if( DoAuthorityRemoveAndCompareComponent(authority, EAuthorityPort, aAuthority_NoPort) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(authority); // authority sl@0: return KErrNotFound; sl@0: } sl@0: // Remove userinfo... sl@0: if( DoAuthorityRemoveAndCompareComponent(authority, EAuthorityUserinfo, aAuthority_NoUserinfo) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(authority); // authority sl@0: return KErrNotFound; sl@0: } sl@0: // Remove host... sl@0: if( DoAuthorityRemoveAndCompareComponent(authority, EAuthorityHost, aAuthority_NoHost) != KErrNone ) sl@0: { sl@0: CleanupStack::PopAndDestroy(authority); // authority sl@0: return KErrNotFound; sl@0: } sl@0: // Cleanup and return sl@0: CleanupStack::PopAndDestroy(authority); // authority sl@0: return KErrNone; sl@0: } sl@0: sl@0: template sl@0: TInt DoAuthorityRemoveAndCompareComponent(CAuthorityType* aAuthority, TAuthorityComponent aComponent, const TDesCType& aExpected) sl@0: { sl@0: TRAPD(error, aAuthority->RemoveComponentL(aComponent)); sl@0: if( error != KErrNone ) sl@0: { sl@0: return error; sl@0: } sl@0: // Compare with expected sl@0: if( aAuthority->Authority().AuthorityDes().Compare(aExpected) != 0) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: return KErrNone; sl@0: }