os/ossrv/genericservices/httputils/Test/t_uriparser/CUriAndAuthorityTest.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 // Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 //
    15 
    16 #include "CUriAndAuthorityTest.h"
    17 
    18 #include <e32base.h>
    19 
    20 #include "UriAndAuthorityTestCommon.h"
    21 #include <uriutilscommon.h>
    22 #include <uriutils.h>
    23 #include "UriAndAuthorityTests.h"
    24 #include "SipUriAndAuthorityTests.h"
    25 
    26 CUriAndAuthorityTest* CUriAndAuthorityTest::NewLC(CIpuTestHarness* aTestHarness)
    27 	{
    28 	CUriAndAuthorityTest* self = new (ELeave) CUriAndAuthorityTest(aTestHarness);
    29 	CleanupStack::PushL(self);
    30 	self->ConstructL();
    31 	return self;
    32 	}
    33 
    34 CUriAndAuthorityTest* CUriAndAuthorityTest::NewL(CIpuTestHarness* aTestHarness)
    35 	{
    36 	CUriAndAuthorityTest* self = CUriAndAuthorityTest::NewLC(aTestHarness);
    37 	CleanupStack::Pop(self);
    38 	return self;
    39 	}
    40 
    41 CUriAndAuthorityTest::CUriAndAuthorityTest(CIpuTestHarness* aTestHarness)
    42 : iTestHarness(aTestHarness)
    43 	{
    44 	}
    45 
    46 void CUriAndAuthorityTest::ConstructL()
    47 	{
    48 	}
    49 
    50 CUriAndAuthorityTest::~CUriAndAuthorityTest()
    51 	{
    52 	}
    53 
    54 void CUriAndAuthorityTest::DoTestsL()
    55 	{
    56 	// Test TUriParser Component Extraction
    57 	TestUriComponentExtractionL(KComps0, KScheme0, KUserInfo0, KHost0, KPort0, KPath0, KQuery0, KFragment0);
    58 	TestUriComponentExtractionL(KComps1, KScheme1, KUserInfo1, KHost1, KPort1, KPath1, KQuery1, KFragment1);
    59 	TestUriComponentExtractionL(KComps2, KScheme2, KUserInfo2, KHost2, KPort2, KPath2, KQuery2, KFragment2);
    60 	TestUriComponentExtractionL(KComps3, KScheme3, KUserInfo3, KHost3, KPort3, KPath3, KQuery3, KFragment3);
    61 	TestUriComponentExtractionL(KComps4, KScheme4, KUserInfo4, KHost4, KPort4, KPath4, KQuery4, KFragment4);
    62 	TestUriComponentExtractionL(KComps5, KScheme5, KUserInfo5, KHost5, KPort5, KPath5, KQuery5, KFragment5);
    63 	TestUriComponentExtractionL(KComps6, KScheme6, KUserInfo6, KHost6, KPort6, KPath6, KQuery6, KFragment6);
    64 	TestUriComponentExtractionL(KComps10, KScheme10, KUserInfo10, KHost10, KPort10, KPath10, KQuery10, KFragment10);
    65 	TestUriComponentExtractionL(KComps11, KScheme11, KUserInfo11, KHost11, KPort11, KPath11, KQuery11, KFragment11);
    66 	TestUriComponentExtractionL(KComps12, KScheme12, KUserInfo12, KHost12, KPort12, KPath12, KQuery12, KFragment12);
    67 	TestUriComponentExtractionL(KComps13, KScheme13, KUserInfo13, KHost13, KPort13, KPath13, KQuery13, KFragment13);
    68 	TestUriComponentExtractionL(KComps14, KScheme14, KUserInfo14, KHost14, KPort14, KPath14, KQuery14, KFragment14);
    69 	TestUriComponentExtractionL(KComps15, KScheme15, KUserInfo15, KHost15, KPort15, KPath15, KQuery15, KFragment15);
    70 	TestUriComponentExtractionL(KComps16, KScheme16, KUserInfo16, KHost16, KPort16, KPath16, KQuery16, KFragment16);
    71 	TestUriComponentExtractionL(KComps17, KScheme17, KUserInfo17, KHost17, KPort17, KPath17, KQuery17, KFragment17);
    72 	TestUriComponentExtractionL(KComps18, KScheme18, KUserInfo18, KHost18, KPort18, KPath18, KQuery18, KFragment18);
    73 	TestUriComponentExtractionL(KComps19, KScheme19, KUserInfo19, KHost19, KPort19, KPath19, KQuery19, KFragment19);
    74 	TestUriComponentExtractionL(KComps20, KScheme20, KUserInfo20, KHost20, KPort20, KPath20, KQuery20, KFragment20);
    75 	TestUriComponentExtractionL(KComps21, KScheme21, KUserInfo21, KHost21, KPort21, KPath21, KQuery21, KFragment21);
    76 	TestUriComponentExtractionL(KComps22, KScheme22, KUserInfo22, KHost22, KPort22, KPath22, KQuery22, KFragment22);
    77 	TestUriComponentExtractionL(KComps23, KScheme23, KUserInfo23, KHost23, KPort23, KPath23, KQuery23, KFragment23);
    78 	TestUriComponentExtractionL(KComps24, KScheme24, KUserInfo24, KHost24, KPort24, KPath24, KQuery24, KFragment24);
    79 	TestUriComponentExtractionL(KComps25, KScheme25, KUserInfo25, KHost25, KPort25, KPath25, KQuery25, KFragment25);
    80 	TestUriComponentExtractionL(KComps26, KScheme26, KUserInfo26, KHost26, KPort26, KPath26, KQuery26, KFragment26);
    81 	TestUriComponentExtractionL(KComps27, KScheme27, KUserInfo27, KHost27, KPort27, KPath27, KQuery27, KFragment27);
    82 	TestUriComponentExtractionL(KComps28, KScheme28, KUserInfo28, KHost28, KPort28, KPath28, KQuery28, KFragment28);
    83 	TestUriComponentExtractionL(KComps29, KScheme29, KUserInfo29, KHost29, KPort29, KPath29, KQuery29, KFragment29);
    84 
    85 	//
    86 	// IPv6 Test cases Section 2.9.1
    87 	TestUriComponentExtractionL(KComps30, KScheme30, KUserInfo30, KHost30, KPort30, KPath30, KQuery30, KFragment30);
    88 	TestUriComponentExtractionL(KComps31, KScheme31, KUserInfo31, KHost31, KPort31, KPath31, KQuery31, KFragment31);
    89 	TestUriComponentExtractionL(KComps32, KScheme32, KUserInfo32, KHost32, KPort32, KPath32, KQuery32, KFragment32);
    90 	TestUriComponentExtractionL(KComps33, KScheme33, KUserInfo33, KHost33, KPort33, KPath33, KQuery33, KFragment33);
    91 	TestUriComponentExtractionL(KComps34, KScheme34, KUserInfo34, KHost34, KPort34, KPath34, KQuery34, KFragment34);
    92 	TestUriComponentExtractionL(KComps35, KScheme35, KUserInfo35, KHost35, KPort35, KPath35, KQuery35, KFragment35);
    93 	TestUriComponentExtractionL(KComps36, KScheme36, KUserInfo36, KHost36, KPort36, KPath36, KQuery36, KFragment36);
    94 
    95 	TestAuthorityComponentExtractionL(KAuthority0, KUserInfo0, KHost0, KPort0);
    96 	TestAuthorityComponentExtractionL(KAuthority1, KUserInfo1, KHost1, KPort1);
    97 	TestAuthorityComponentExtractionL(KAuthority2, KUserInfo2, KHost2, KPort2);
    98 	TestAuthorityComponentExtractionL(KAuthority3, KUserInfo3, KHost3, KPort3);
    99 	TestAuthorityComponentExtractionL(KAuthority4, KUserInfo4, KHost4, KPort4);
   100 	TestAuthorityComponentExtractionL(KAuthority5, KUserInfo5, KHost5, KPort5);
   101 	TestAuthorityComponentExtractionL(KAuthority6, KUserInfo6, KHost6, KPort6);
   102 	TestAuthorityComponentExtractionL(KAuthority10, KUserInfo10, KHost10, KPort10);
   103 	TestAuthorityComponentExtractionL(KAuthority11, KUserInfo11, KHost11, KPort11);
   104 	TestAuthorityComponentExtractionL(KAuthority12, KUserInfo12, KHost12, KPort12);
   105 	TestAuthorityComponentExtractionL(KAuthority13, KUserInfo13, KHost13, KPort13);
   106 	TestAuthorityComponentExtractionL(KAuthority14, KUserInfo14, KHost14, KPort14);
   107 	TestAuthorityComponentExtractionL(KAuthority15, KUserInfo15, KHost15, KPort15);
   108 	TestAuthorityComponentExtractionL(KAuthority16, KUserInfo16, KHost16, KPort16);
   109 	TestAuthorityComponentExtractionL(KAuthority17, KUserInfo17, KHost17, KPort17);
   110 	TestAuthorityComponentExtractionL(KAuthority18, KUserInfo18, KHost18, KPort18);
   111 	TestAuthorityComponentExtractionL(KAuthority19, KUserInfo19, KHost19, KPort19);
   112 	TestAuthorityComponentExtractionL(KAuthority20, KUserInfo20, KHost20, KPort20);
   113 	TestAuthorityComponentExtractionL(KAuthority21, KUserInfo21, KHost21, KPort21);
   114 	TestAuthorityComponentExtractionL(KAuthority22, KUserInfo22, KHost22, KPort22);
   115 	TestAuthorityComponentExtractionL(KAuthority23, KUserInfo23, KHost23, KPort23);
   116 	TestAuthorityComponentExtractionL(KAuthority24, KUserInfo24, KHost24, KPort24);
   117 	TestAuthorityComponentExtractionL(KAuthority25, KUserInfo25, KHost25, KPort25);
   118 	TestAuthorityComponentExtractionL(KAuthority26, KUserInfo26, KHost26, KPort26);
   119 	TestAuthorityComponentExtractionL(KAuthority27, KUserInfo27, KHost27, KPort27);
   120 	TestAuthorityComponentExtractionL(KAuthority28, KUserInfo28, KHost28, KPort28);
   121 	TestAuthorityComponentExtractionL(KAuthority29, KUserInfo29, KHost29, KPort29);
   122 
   123 	// IPv6 Test cases
   124 	TestAuthorityComponentExtractionL(KAuthority30, KUserInfo30, KHost30, KPort30);
   125 	TestAuthorityComponentExtractionL(KAuthority31, KUserInfo31, KHost31, KPort31);
   126 	TestAuthorityComponentExtractionL(KAuthority32, KUserInfo32, KHost32, KPort32);
   127 	TestAuthorityComponentExtractionL(KAuthority33, KUserInfo33, KHost33, KPort33);
   128 	TestAuthorityComponentExtractionL(KAuthority34, KUserInfo34, KHost34, KPort34);
   129 	TestAuthorityComponentExtractionL(KAuthority35, KUserInfo35, KHost35, KPort35);
   130 	TestAuthorityComponentExtractionL(KAuthority36, KUserInfo36, KHost36, KPort36);
   131 
   132 	TestResolveL(KBase,KRelative1,KResolved1);
   133 	TestResolveL(KBase,KRelative2,KResolved2);
   134 	TestResolveL(KBase,KRelative3,KResolved3);
   135 	TestResolveL(KBase,KRelative4,KResolved4);
   136 	TestResolveL(KBase,KRelative5,KResolved5);
   137 	TestResolveL(KBase,KRelative6,KResolved6);
   138 	TestResolveL(KBase,KRelative7,KResolved7);
   139 	TestResolveL(KBase,KRelative8,KResolved8);
   140 	TestResolveL(KBase,KRelative9,KResolved9);
   141 	TestResolveL(KBase,KRelative10,KResolved10);
   142 	TestResolveL(KBase,KRelative11,KResolved11);
   143 	TestResolveL(KBase,KRelative12,KResolved12);
   144 	TestResolveL(KBase,KRelative13,KResolved13);
   145 	TestResolveL(KBase,KRelative14,KResolved14);
   146 	TestResolveL(KBase,KRelative15,KResolved15);
   147 	TestResolveL(KBase,KRelative16,KResolved16);
   148 	TestResolveL(KBase,KRelative17,KResolved17);
   149 	TestResolveL(KBase,KRelative18,KResolved18);
   150 	TestResolveL(KBase,KRelative19,KResolved19);
   151 	TestResolveL(KBase,KRelative20,KResolved20);
   152 	TestResolveL(KBase,KRelative21,KResolved21);
   153 	TestResolveL(KBase,KRelative22,KResolved22);
   154 
   155 	TestResolveL(KBase,KRelative23,KResolved23);
   156 	TestResolveL(KBase,KRelative24,KResolved24);
   157 	TestResolveL(KBase,KRelative25,KResolved25);
   158 	TestResolveL(KBase,KRelative26,KResolved26);
   159 	TestResolveL(KBase,KRelative27,KResolved27);
   160 	TestResolveL(KBase,KRelative28,KResolved28);
   161 	TestResolveL(KBase,KRelative29,KResolved29);
   162 	TestResolveL(KBase,KRelative30,KResolved30);
   163 
   164 	TestResolveL(KBase,KRelative31,KResolved31);
   165 	TestResolveL(KBase,KRelative32,KResolved32);
   166 	TestResolveL(KBase,KRelative33,KResolved33);
   167 	TestResolveL(KBase,KRelative34,KResolved34);
   168 	TestResolveL(KBase,KRelative35,KResolved35);
   169 	TestResolveL(KBase,KRelative36,KResolved36);
   170 
   171 	TestResolveL(KBase,KRelative37,KResolved37);
   172 	TestResolveL(KBase,KRelative38,KResolved38);
   173 	TestResolveL(KBase,KRelative39,KResolved39);
   174 	TestResolveL(KBase,KRelative40,KResolved40);
   175 
   176 	TestResolveL(KBase,KRelative41,KResolved41);
   177 
   178 	TestResolveL(KBase,KRelative42,KResolved42);
   179 
   180 	iTestHarness->LogIt(_L("Next Test - Defect EDNMTAN-4H9K6A, CUrlWrap::ResolveL does not parse file Urls properly"));
   181 	TestResolveL(KBaseFile, KRelativeFile1, KResolvedFile1);
   182 
   183 	iTestHarness->LogIt(_L("Next Test - Defect EDNSTAR-4HTNB4, CUrlWrap::ResolveL panics with zero length aUrlBase"));
   184 	TestResolveL(KNullDesC, KRelativeFile1, KRelativeFile1);
   185 
   186 	iTestHarness->LogIt(_L("Next Test - Defect EDNPHAD-4J6EUY, CUrlWrap::ResolveL fails when the base and relative URLs both have fragments"));
   187 	TestResolveL(KBaseBug1, KRelativeBug1, KResolvedBug1);
   188 	TestResolveL(KBaseBug2, KRelativeBug2, KResolvedBug2);
   189 	TestResolveL(KBaseBug2, KRelativeBug3, KResolvedBug3);
   190 
   191 	iTestHarness->LogIt(_L("Next Test - Defect EDNFUDN-4JYFH7, CUrl overflow causes WINS crash during sub-doc fetch"));
   192 	TestResolveL(KBaseBug3, KRelativeBug4, KResolvedBug4);
   193 	
   194 	TestUriCompareL(KUri_Compare0_a, KUri_Compare0_b, KUriMatchFlags0);
   195 	TestUriCompareL(KUri_Compare1_a, KUri_Compare1_b, KUriMatchFlags1);
   196 
   197 	// IPv6 Test cases for section 2.9.1.1.1
   198 	TestUriCompareL(KUri_Compare2_a, KUri_Compare2_b, KUriMatchFlags2);
   199 	// and section 2.9.1.1.2
   200 	TestUriCompareL(KUri_Compare3_a, KUri_Compare3_b, KUriMatchFlags3);
   201 
   202 	TestAuthorityCompareL(KAuth_Compare0_a, KAuth_Compare0_b, KAuthMatchFlags0);
   203 	TestAuthorityCompareL(KAuth_Compare1_a, KAuth_Compare1_b, KAuthMatchFlags1);
   204 
   205 	TestUriComponentPresenceL(KUri_Presence0, KUriPresenceFlags0);
   206 	TestUriComponentPresenceL(KUri_Presence1, KUriPresenceFlags1);
   207 
   208 	TestAuthorityComponentPresenceL(KAuthority_Presence0, KAuthorityPresenceFlags0);
   209 	TestAuthorityComponentPresenceL(KAuthority_Presence1, KAuthorityPresenceFlags1);
   210 
   211 	TestUriDesL(KUri_Des0);
   212 
   213 	TestAuthorityDesL(KAuthority_Des0);
   214 
   215 	TestUriSchemeValidiyL(KUri_SchemeValidation0, KUri_SchemeValidity0);
   216 	TestUriSchemeValidiyL(KUri_SchemeValidation1, KUri_SchemeValidity1);
   217 
   218 	TestUriWithoutFragmentL(KUri_WithoutFragment0, KUri_WithoutFragment_Result0);
   219 	TestUriWithoutFragmentL(KUri_WithoutFragment1, KUri_WithoutFragment_Result1);
   220 
   221 	TestUriSetComponentL(KUri_Scheme0, KUri_Host0, KUri_Userinfo0, KUri_Port0, KUri_Path0, KUri_Query0, KUri_Fragment0,
   222 		KUri_SchemeComp0, KUri_HostComp0, KUri_UserinfoComp0, KUri_PortComp0, KUri_PathComp0, KUri_QueryComp0, KUri_FragmentComp0);
   223 
   224 	TestUriRemoveComponentL(KUri_NoScheme0, KUri_NoHost0, KUri_NoUserinfo0, KUri_NoPort0, KUri_NoPath0, 
   225 		KUri_NoQuery0, KUri_NoFragment0, KUri_Whole0);	
   226 	
   227 	// Same test as above, but with an IPv6 format host, section 2.9.1.4
   228 	// Apart from the IPv6 address, the component data from the previous test can be reused
   229 	TestUriSetComponentL(KUri_Scheme0, KUri_IPv6Host0, KUri_IPv6UserInfo0, KUri_IPv6Port0, KUri_IPv6Path0, KUri_IPv6Query0, KUri_IPv6Fragment0,
   230 		KUri_SchemeComp0, KUri_IPv6HostComp0, KUri_UserinfoComp0, KUri_PortComp0, KUri_PathComp0, KUri_QueryComp0, KUri_FragmentComp0);
   231 
   232 	TestUriRemoveComponentL(KUri_IPv6NoScheme0, KUri_IPv6NoHost0, KUri_IPv6NoUserinfo0, KUri_IPv6NoPort0, KUri_IPv6NoPath0, 
   233 		KUri_IPv6NoQuery0, KUri_IPv6NoFragment0, KUri_IPv6Whole0);	
   234 	
   235 	TestAuthoritySetComponentL(KAuthority_Host0, KAuthority_Userinfo0, KAuthority_Port0, 
   236 		KAuthority_HostComp0, KAuthority_UserinfoComp0, KAuthority_PortComp0);
   237 
   238 	TestAuthoritySetAndEscapeComponentL(KAuthorityEscaped_Host0, KAuthorityEscaped_Userinfo0, KAuthorityEscaped_Port0, 
   239 		KAuthorityEscaped_HostComp0, KAuthorityEscaped_UserinfoComp0, KAuthorityEscaped_PortComp0);
   240 
   241 	TestAuthorityRemoveComponentL(KAuthority_NoHost0, KAuthority_NoUserinfo0, KAuthority_NoPort0, KAuthority_Whole0);
   242 
   243 	// Same tests as above but for IPv6, as per section 2.9.1.4
   244 	TestAuthoritySetComponentL(KAuthority_IPv6Host0, KAuthority_IPv6Userinfo0, KAuthority_IPv6Port0, 
   245 	KAuthority_IPv6HostComp0, KAuthority_IPv6UserinfoComp0, KAuthority_IPv6PortComp0);
   246 
   247 	TestAuthorityRemoveComponentL(KAuthority_IPv6NoHost0, KAuthority_IPv6NoUserinfo0, KAuthority_IPv6NoPort0, KAuthority_IPv6Whole0);
   248 	}
   249 
   250 //
   251 //
   252 //	Uri Tests
   253 //
   254 //
   255 
   256 void CUriAndAuthorityTest::TestUriComponentExtractionL(const TDesC16& aUri, const TDesC16& aScheme,
   257 										   const TDesC16& aUserinfo, const TDesC16& aHost, 
   258 										   const TDesC16& aPort, const TDesC16& aPath, 
   259 										   const TDesC16& aQuery, const TDesC16& aFragment) const
   260 	{
   261 	iTestHarness->StartTestL(_L("Test TUriParser Component Extraction (deprecated 16-bit )"));
   262 	iTestHarness->LogIt(_L("Uri - %S"), &aUri);
   263 
   264 	TInt error = DoUriComponentExtraction<TUriParser16>(aUri, aScheme, aUserinfo, aHost, aPort, aPath, aQuery, aFragment);
   265 	
   266 	//check for failed Sip test
   267 	if (KErrNotFound!=aPath.Find(_L(",")) && KErrNotFound!=aScheme.Find(_L("sIp")))
   268 		{
   269 		iTestHarness->LogIt(KCompsSipUriInvalidMess6);	
   270 		error=KErrNone;
   271 		}
   272 	iTestHarness->EndTest(error);
   273 
   274 	iTestHarness->StartTestL(_L("Test TUriParser Component Extraction"));
   275 	iTestHarness->LogIt(_L("Uri - %S"), &aUri);
   276 
   277 
   278 	TRAP( error , DoUriComponentExtractionL(aUri, aScheme, aUserinfo, aHost, aPort, aPath, aQuery, aFragment) )
   279 	
   280 	//check for failed Sip test
   281 	if (aPath.Find(_L(","))!=KErrNotFound  && aScheme.Find(_L("sIp")) != KErrNotFound)
   282 		{
   283 		iTestHarness->LogIt(KCompsSipUriInvalidMess6);	
   284 		error=KErrNone;
   285 		}
   286 	iTestHarness->EndTest(error);
   287 
   288 	// Make 8-bit copies
   289 	HBufC8* uriBuf = HBufC8::NewLC(aUri.Length());
   290 	TPtr8 uri8Bit = uriBuf->Des();
   291 	uri8Bit.Copy(aUri);
   292 
   293 	HBufC8* schemeBuf = HBufC8::NewLC(aScheme.Length());
   294 	TPtr8 scheme8Bit = schemeBuf->Des();
   295 	scheme8Bit.Copy(aScheme);
   296 
   297 	HBufC8* userinfoBuf = HBufC8::NewLC(aUserinfo.Length());
   298 	TPtr8 userinfo8Bit = userinfoBuf->Des();
   299 	userinfo8Bit.Copy(aUserinfo);
   300 
   301 	HBufC8* hostBuf = HBufC8::NewLC(aHost.Length());
   302 	TPtr8 host8Bit = hostBuf->Des();
   303 	host8Bit.Copy(aHost);
   304 
   305 	HBufC8* portBuf = HBufC8::NewLC(aPort.Length());
   306 	TPtr8 port8Bit = portBuf->Des();
   307 	port8Bit.Copy(aPort);
   308 
   309 	HBufC8* pathBuf = HBufC8::NewLC(aPath.Length());
   310 	TPtr8 path8Bit = pathBuf->Des();
   311 	path8Bit.Copy(aPath);
   312 
   313 	HBufC8* queryBuf = HBufC8::NewLC(aQuery.Length());
   314 	TPtr8 query8Bit = queryBuf->Des();
   315 	query8Bit.Copy(aQuery);
   316 
   317 	HBufC8* fragmentBuf = HBufC8::NewLC(aFragment.Length());
   318 	TPtr8 fragment8Bit = fragmentBuf->Des();
   319 	fragment8Bit.Copy(aFragment);
   320 
   321 	iTestHarness->StartTestL(_L("Test TUriParser Component Extraction (8-bit)"));
   322 	iTestHarness->LogIt(_L("Uri - %S"), &aUri);
   323 
   324 	error = DoUriComponentExtraction<TUriParser8>(uri8Bit, scheme8Bit, userinfo8Bit, host8Bit, port8Bit, path8Bit, query8Bit, fragment8Bit);
   325 
   326 	//check for failed Sip test
   327 	if (aPath.Find(_L(","))!=KErrNotFound && aScheme.Find(_L("sIp"))!=KErrNotFound)
   328 		{
   329 		iTestHarness->LogIt(KCompsSipUriInvalidMess6);	
   330 		error=KErrNone;
   331 		}
   332 	iTestHarness->EndTest(error);
   333 
   334 	CleanupStack::PopAndDestroy(8, uriBuf);	// uriBuf, schemeBuf, userinfoBuf, hostBuf, portBuf, pathBuf, queryBuf, fragmentBuf
   335 	}
   336 
   337 void CUriAndAuthorityTest::TestResolveL(const TDesC& aBase, const TDesC& aReference, const TDesC& aExpected) const
   338 	{
   339 	iTestHarness->StartTestL(_L("Testing Resolving Functionality (16-bit)"));
   340 	iTestHarness->LogIt(_L("Test Resolving %S , %S -> %S"), &aBase, &aReference, &aExpected);
   341 
   342 	TInt error = DoTestResolve<TUriParser16, CUri16>(aBase, aReference, aExpected);
   343 
   344 	iTestHarness->EndTest(error);
   345 
   346 	// Make 8-bit copies
   347 	HBufC8* baseBuf = HBufC8::NewLC(aBase.Length());
   348 	TPtr8 base8Bit = baseBuf->Des();
   349 	base8Bit.Copy(aBase);
   350 
   351 	HBufC8* refBuf = HBufC8::NewLC(aReference.Length());
   352 	TPtr8 ref8Bit = refBuf->Des();
   353 	ref8Bit.Copy(aReference);
   354 
   355 	HBufC8* expectedBuf = HBufC8::NewLC(aExpected.Length());
   356 	TPtr8 expected8Bit = expectedBuf->Des();
   357 	expected8Bit.Copy(aExpected);
   358 
   359 	iTestHarness->StartTestL(_L("Testing Resolving Functionality (8-bit)"));
   360 		
   361 	//Abnormal examples below differs from RFC 2396 to the current implementation of 
   362 	//RFC3986. So, the expected output for ResolveL for Uri8 is modified to support
   363 	//section 5.4.2 of RFC 3986.
   364 	 
   365 	if( aReference.Compare(KRelative23) == 0 ||
   366 		aReference.Compare(KRelative24) == 0 ||
   367 		aReference.Compare(KRelative25) == 0 ||
   368 		aReference.Compare(KRelative26) == 0 )
   369 		{
   370 		_LIT8(KRfc3986,"http://a/g");
   371 		expected8Bit.Copy(KRfc3986);
   372 		_LIT(KRfc3986Bit16,"http://a/g");
   373 		iTestHarness->LogIt(_L("Test Resolving as per RFC3986 %S , %S -> %S"), &aBase, &aReference, &KRfc3986Bit16);
   374 		}
   375 	else
   376 		{
   377 	iTestHarness->LogIt(_L("Test Resolving %S , %S -> %S"), &aBase, &aReference, &aExpected);
   378 		}
   379 	error = DoTestResolve<TUriParser8, CUri8>(base8Bit, ref8Bit, expected8Bit);
   380 
   381 	iTestHarness->EndTest(error);
   382 
   383 	CleanupStack::PopAndDestroy(3, baseBuf);	// baseBuf, refBuf, expectedBuf
   384 	}
   385 
   386 void CUriAndAuthorityTest::TestUriCompareL(const TDesC& aUri1, const TDesC& aUri2, TInt aMatchFlags) const
   387 	{
   388 	iTestHarness->StartTestL(_L("Test TUriC Component Compare (16-bit)"));
   389 
   390 	TInt error = DoUriCompare<TUriParser16>(aUri1, aUri2, aMatchFlags);
   391 
   392 	iTestHarness->EndTest(error);
   393 
   394 	// Make 8-bit copies
   395 	HBufC8* uriBuf1 = HBufC8::NewLC(aUri1.Length());
   396 	TPtr8 uri8Bit1 = uriBuf1->Des();
   397 	uri8Bit1.Copy(aUri1);
   398 
   399 	HBufC8* uriBuf2 = HBufC8::NewLC(aUri2.Length());
   400 	TPtr8 uri8Bit2 = uriBuf2->Des();
   401 	uri8Bit2.Copy(aUri2);
   402 
   403 	iTestHarness->StartTestL(_L("Test TUriC Component Compare (8-bit)"));
   404 
   405 	error = DoUriCompare<TUriParser8>(uri8Bit1, uri8Bit2, aMatchFlags);
   406 
   407 	iTestHarness->EndTest(error);
   408 
   409 	CleanupStack::PopAndDestroy(2, uriBuf1);	// uriBuf1, uriBuf2
   410 	}
   411 
   412 void CUriAndAuthorityTest::TestUriComponentPresenceL(const TDesC& aUri, TInt aPresenceFlags) const
   413 	{
   414 	iTestHarness->StartTestL(_L("Test TUriC Component Presence (16-bit)"));
   415 
   416 	TInt error = DoUriComponentPresence<TUriParser16>(aUri, aPresenceFlags);
   417 
   418 	iTestHarness->EndTest(error);
   419 
   420 	// Make 8-bit copy
   421 	HBufC8* uriBuf = HBufC8::NewLC(aUri.Length());
   422 	TPtr8 uri8Bit = uriBuf->Des();
   423 	uri8Bit.Copy(aUri);
   424 
   425 	iTestHarness->StartTestL(_L("Test TUriC Component Presence (8-bit)"));
   426 
   427 	error = DoUriComponentPresence<TUriParser8>(uri8Bit, aPresenceFlags);
   428 
   429 	iTestHarness->EndTest(error);
   430 
   431 	CleanupStack::PopAndDestroy(uriBuf);	// uriBuf
   432 	}
   433 
   434 void CUriAndAuthorityTest::TestUriDesL(const TDesC& aUri) const
   435 	{
   436 	iTestHarness->StartTestL(_L("Test TUriC UriDes() (16-bit deprecated)"));
   437 
   438 	TInt error = DoUriDes<TUriParser16>(aUri);
   439 
   440 	iTestHarness->EndTest(error);
   441 	
   442 	iTestHarness->StartTestL(_L("Test TUriC UriDes() (16-bit)"));
   443 
   444 	TRAP( error , DoUriDesL(aUri) );
   445 
   446 	iTestHarness->EndTest(error);
   447 
   448 	// Make 8-bit copy
   449 	HBufC8* uriBuf = HBufC8::NewLC(aUri.Length());
   450 	TPtr8 uri8Bit = uriBuf->Des();
   451 	uri8Bit.Copy(aUri);
   452 
   453 	iTestHarness->StartTestL(_L("Test TUriC UriDes() (8-bit)"));
   454 
   455 	error = DoUriDes<TUriParser8>(uri8Bit);
   456 
   457 	iTestHarness->EndTest(error);
   458 
   459 	CleanupStack::PopAndDestroy(uriBuf);	// uriBuf
   460 	}
   461 
   462 void CUriAndAuthorityTest::TestUriSchemeValidiyL(const TDesC& aUri, TBool aValidScheme) const
   463 	{
   464 	iTestHarness->StartTestL(_L("Test TUriC Scheme Validation (16-bit)"));
   465 
   466 	TInt error = DoUriSchemeValidation<TUriParser16>(aUri, aValidScheme);
   467 
   468 	iTestHarness->EndTest(error);
   469 
   470 	// Make 8-bit copy
   471 	HBufC8* uriBuf = HBufC8::NewLC(aUri.Length());
   472 	TPtr8 uri8Bit = uriBuf->Des();
   473 	uri8Bit.Copy(aUri);
   474 
   475 	iTestHarness->StartTestL(_L("Test TUriC Scheme Validation (8-bit)"));
   476 
   477 	error = DoUriSchemeValidation<TUriParser8>(uri8Bit, aValidScheme);
   478 
   479 	iTestHarness->EndTest(error);
   480 
   481 	CleanupStack::PopAndDestroy(uriBuf);	// uriBuf
   482 	}
   483 
   484 void CUriAndAuthorityTest::TestUriWithoutFragmentL(const TDesC& aUri, const TDesC& aExpected)
   485 	{
   486 	iTestHarness->StartTestL(_L("Test TUriC Uri Without Fragment (16-bit)"));
   487 
   488 	TInt error = DoUriWithoutFragment<TUriParser16, TPtrC16>(aUri, aExpected);
   489 
   490 	iTestHarness->EndTest(error);
   491 
   492 	// Make 8-bit copy
   493 	HBufC8* uriBuf = HBufC8::NewLC(aUri.Length());
   494 	TPtr8 uri8Bit = uriBuf->Des();
   495 	uri8Bit.Copy(aUri);
   496 
   497 	HBufC8* expectedBuf = HBufC8::NewLC(aExpected.Length());
   498 	TPtr8 expected8Bit = expectedBuf->Des();
   499 	expected8Bit.Copy(aExpected);
   500 
   501 	iTestHarness->StartTestL(_L("Test TUriC Uri Without Fragment (8-bit)"));
   502 
   503 	error = DoUriWithoutFragment<TUriParser8, TPtrC8>(uri8Bit, expected8Bit);
   504 
   505 	iTestHarness->EndTest(error);
   506 
   507 	CleanupStack::PopAndDestroy(2, uriBuf);	// uriBuf, expectedBuf
   508 	}
   509 
   510 void CUriAndAuthorityTest::TestUriSetComponentL(const TDesC& aUri_Scheme, const TDesC& aUri_Host, const TDesC& aUri_Userinfo,
   511 									const TDesC& aUri_Port, const TDesC& aUri_Path, const TDesC& aUri_Query, 
   512 									const TDesC& aUri_Fragment, const TDesC& aScheme, const TDesC& aHost, 
   513 									const TDesC& aUserinfo, const TDesC& aPort, const TDesC& aPath, 
   514 									const TDesC& aQuery, const TDesC& aFragment) const
   515 
   516 	{
   517 	iTestHarness->StartTestL(_L("Test CUri SetComponentL (16-bit)"));
   518 
   519 	TInt error = DoUriConstruction<CUri16>(aUri_Scheme, aUri_Host, aUri_Userinfo, aUri_Port, aUri_Path,
   520 		aUri_Query, aUri_Fragment, aScheme, aHost, aUserinfo, aPort, aPath, aQuery, aFragment);
   521 
   522 	iTestHarness->EndTest(error);
   523 
   524 	// Make 8-bit copies
   525 	HBufC8* uri_SchemeBuf = HBufC8::NewLC(aUri_Scheme.Length());
   526 	TPtr8 uri_Scheme8Bit = uri_SchemeBuf->Des();
   527 	uri_Scheme8Bit.Copy(aUri_Scheme);
   528 
   529 	HBufC8* uri_HostBuf = HBufC8::NewLC(aUri_Host.Length());
   530 	TPtr8 uri_Host8Bit = uri_HostBuf->Des();
   531 	uri_Host8Bit.Copy(aUri_Host);
   532 
   533 	HBufC8* uri_UserinfoBuf = HBufC8::NewLC(aUri_Userinfo.Length());
   534 	TPtr8 uri_Userinfo8Bit = uri_UserinfoBuf->Des();
   535 	uri_Userinfo8Bit.Copy(aUri_Userinfo);
   536 
   537 	HBufC8* uri_PortBuf = HBufC8::NewLC(aUri_Port.Length());
   538 	TPtr8 uri_Port8Bit = uri_PortBuf->Des();
   539 	uri_Port8Bit.Copy(aUri_Port);
   540 
   541 	HBufC8* uri_PathBuf = HBufC8::NewLC(aUri_Path.Length());
   542 	TPtr8 uri_Path8Bit = uri_PathBuf->Des();
   543 	uri_Path8Bit.Copy(aUri_Path);
   544 
   545 	HBufC8* uri_QueryBuf = HBufC8::NewLC(aUri_Query.Length());
   546 	TPtr8 uri_Query8Bit = uri_QueryBuf->Des();
   547 	uri_Query8Bit.Copy(aUri_Query);
   548 
   549 	HBufC8* uri_FragmentBuf = HBufC8::NewLC(aUri_Fragment.Length());
   550 	TPtr8 uri_Fragment8Bit = uri_FragmentBuf->Des();
   551 	uri_Fragment8Bit.Copy(aUri_Fragment);
   552 
   553 	// And the individual components
   554 	HBufC8* schemeBuf = HBufC8::NewLC(aScheme.Length());
   555 	TPtr8 scheme8Bit = schemeBuf->Des();
   556 	scheme8Bit.Copy(aScheme);
   557 
   558 	HBufC8* userinfoBuf = HBufC8::NewLC(aUserinfo.Length());
   559 	TPtr8 userinfo8Bit = userinfoBuf->Des();
   560 	userinfo8Bit.Copy(aUserinfo);
   561 
   562 	HBufC8* hostBuf = HBufC8::NewLC(aHost.Length());
   563 	TPtr8 host8Bit = hostBuf->Des();
   564 	host8Bit.Copy(aHost);
   565 
   566 	HBufC8* portBuf = HBufC8::NewLC(aPort.Length());
   567 	TPtr8 port8Bit = portBuf->Des();
   568 	port8Bit.Copy(aPort);
   569 
   570 	HBufC8* pathBuf = HBufC8::NewLC(aPath.Length());
   571 	TPtr8 path8Bit = pathBuf->Des();
   572 	path8Bit.Copy(aPath);
   573 
   574 	HBufC8* queryBuf = HBufC8::NewLC(aQuery.Length());
   575 	TPtr8 query8Bit = queryBuf->Des();
   576 	query8Bit.Copy(aQuery);
   577 
   578 	HBufC8* fragmentBuf = HBufC8::NewLC(aFragment.Length());
   579 	TPtr8 fragment8Bit = fragmentBuf->Des();
   580 	fragment8Bit.Copy(aFragment);
   581 
   582 	iTestHarness->StartTestL(_L("Test CUri SetComponentL (8-bit)"));
   583 
   584 	error = DoUriConstruction<CUri8>(uri_Scheme8Bit, uri_Host8Bit, uri_Userinfo8Bit, uri_Port8Bit, uri_Path8Bit,
   585 		uri_Query8Bit, uri_Fragment8Bit, scheme8Bit, host8Bit, userinfo8Bit, port8Bit, path8Bit, query8Bit, fragment8Bit);
   586 
   587 	iTestHarness->EndTest(error);
   588 	CleanupStack::PopAndDestroy(14, uri_SchemeBuf);	// too many to list!
   589 	}
   590 						   
   591 void CUriAndAuthorityTest::TestUriRemoveComponentL(const TDesC& aUri_NoScheme, const TDesC& aUri_NoHost, const TDesC& aUri_NoUserinfo, 
   592 									   const TDesC& aUri_NoPort, const TDesC& aUri_NoPath, const TDesC& aUri_NoQuery, 
   593 									   const TDesC& aUri_NoFragment, const TDesC& aUri_Whole) const
   594 	{
   595 	iTestHarness->StartTestL(_L("Test CUri RemoveComponentL (16-bit)"));
   596 
   597 	TInt error = DoUriDestruction<CUri16, TUriParser16>(aUri_NoScheme, aUri_NoHost, aUri_NoUserinfo, aUri_NoPort, aUri_NoPath,
   598 		aUri_NoQuery, aUri_NoFragment, aUri_Whole);
   599 
   600 	iTestHarness->EndTest(error);
   601 
   602 	// Make 8-bit copies
   603 	HBufC8* uri_NoSchemeBuf = HBufC8::NewLC(aUri_NoScheme.Length());
   604 	TPtr8 uri_NoScheme8Bit = uri_NoSchemeBuf->Des();
   605 	uri_NoScheme8Bit.Copy(aUri_NoScheme);
   606 
   607 	HBufC8* uri_NoHostBuf = HBufC8::NewLC(aUri_NoHost.Length());
   608 	TPtr8 uri_NoHost8Bit = uri_NoHostBuf->Des();
   609 	uri_NoHost8Bit.Copy(aUri_NoHost);
   610 
   611 	HBufC8* uri_NoUserinfoBuf = HBufC8::NewLC(aUri_NoUserinfo.Length());
   612 	TPtr8 uri_NoUserinfo8Bit = uri_NoUserinfoBuf->Des();
   613 	uri_NoUserinfo8Bit.Copy(aUri_NoUserinfo);
   614 
   615 	HBufC8* uri_NoPortBuf = HBufC8::NewLC(aUri_NoPort.Length());
   616 	TPtr8 uri_NoPort8Bit = uri_NoPortBuf->Des();
   617 	uri_NoPort8Bit.Copy(aUri_NoPort);
   618 
   619 	HBufC8* uri_NoPathBuf = HBufC8::NewLC(aUri_NoPath.Length());
   620 	TPtr8 uri_NoPath8Bit = uri_NoPathBuf->Des();
   621 	uri_NoPath8Bit.Copy(aUri_NoPath);
   622 
   623 	HBufC8* uri_NoQueryBuf = HBufC8::NewLC(aUri_NoQuery.Length());
   624 	TPtr8 uri_NoQuery8Bit = uri_NoQueryBuf->Des();
   625 	uri_NoQuery8Bit.Copy(aUri_NoQuery);
   626 
   627 	HBufC8* uri_NoFragmentBuf = HBufC8::NewLC(aUri_NoFragment.Length());
   628 	TPtr8 uri_NoFragment8Bit = uri_NoFragmentBuf->Des();
   629 	uri_NoFragment8Bit.Copy(aUri_NoFragment);
   630 
   631 	HBufC8* uri_WholeBuf = HBufC8::NewLC(aUri_Whole.Length());
   632 	TPtr8 uri_Whole8Bit = uri_WholeBuf->Des();
   633 	uri_Whole8Bit.Copy(aUri_Whole);
   634 
   635 	iTestHarness->StartTestL(_L("Test CUri RemoveComponentL (8-bit)"));
   636 
   637 	error = DoUriDestruction<CUri8, TUriParser8>(uri_NoScheme8Bit, uri_NoHost8Bit, uri_NoUserinfo8Bit, uri_NoPort8Bit, 
   638 		uri_NoPath8Bit, uri_NoQuery8Bit, uri_NoFragment8Bit, uri_Whole8Bit);
   639 
   640 	iTestHarness->EndTest(error);
   641 	CleanupStack::PopAndDestroy(8, uri_NoSchemeBuf);	// too many to list!
   642 	}
   643 
   644 //
   645 //
   646 //	Authority Tests
   647 //
   648 //
   649 
   650 void CUriAndAuthorityTest::TestAuthorityComponentExtractionL(const TDesC16& aAuthority, const TDesC16& aUserinfo, 
   651 												 const TDesC16& aHost, const TDesC16& aPort) const
   652 	{
   653 	iTestHarness->StartTestL(_L("Test TAuthority Component Extraction (deprecated 16-bit)"));
   654 	iTestHarness->LogIt(_L("Uri - %S"), &aAuthority);
   655 
   656 	TInt error = DoAuthorityComponentExtraction<TAuthorityParser16>(aAuthority, aUserinfo, aHost, aPort);
   657 
   658 	iTestHarness->EndTest(error);
   659 	
   660 	iTestHarness->StartTestL(_L("Test TAuthority Component Extraction (16-bit)"));
   661 	iTestHarness->LogIt(_L("Uri - %S"), &aAuthority);
   662 
   663 	TRAP(error, DoAuthorityComponentExtractionL(aAuthority, aUserinfo, aHost, aPort) );
   664 
   665 	iTestHarness->EndTest(error);
   666 
   667 	// Make 8-bit copies
   668 	HBufC8* authorityBuf = HBufC8::NewLC(aAuthority.Length());
   669 	TPtr8 authority8Bit = authorityBuf->Des();
   670 	authority8Bit.Copy(aAuthority);
   671 
   672 	HBufC8* userinfoBuf = HBufC8::NewLC(aUserinfo.Length());
   673 	TPtr8 userinfo8Bit = userinfoBuf->Des();
   674 	userinfo8Bit.Copy(aUserinfo);
   675 
   676 	HBufC8* hostBuf = HBufC8::NewLC(aHost.Length());
   677 	TPtr8 host8Bit = hostBuf->Des();
   678 	host8Bit.Copy(aHost);
   679 
   680 	HBufC8* portBuf = HBufC8::NewLC(aPort.Length());
   681 	TPtr8 port8Bit = portBuf->Des();
   682 	port8Bit.Copy(aPort);
   683 
   684 	iTestHarness->StartTestL(_L("Test TAuthority Component Extraction (8-bit)"));
   685 	iTestHarness->LogIt(_L("Uri - %S"), &aAuthority);
   686 
   687 	error = DoAuthorityComponentExtraction<TAuthorityParser8>(authority8Bit, userinfo8Bit, host8Bit, port8Bit);
   688 
   689 	iTestHarness->EndTest(error);
   690 
   691 	CleanupStack::PopAndDestroy(4, authorityBuf);	// authorityBuf, userInfoBuf, hostBuf, portBuf
   692 	}
   693 
   694 void CUriAndAuthorityTest::TestAuthorityCompareL(const TDesC& aAuthority1, const TDesC& aAuthority2, TInt aMatchFlags) const
   695 	{
   696 	iTestHarness->StartTestL(_L("Test TAuthorityC Component Compare (16-bit)"));
   697 
   698 	TInt error = DoAuthorityCompare<TAuthorityParser16>(aAuthority1, aAuthority2, aMatchFlags);
   699 
   700 	iTestHarness->EndTest(error);
   701 
   702 	// Make 8-bit copies
   703 	HBufC8* authorityBuf1 = HBufC8::NewLC(aAuthority1.Length());
   704 	TPtr8 authority8Bit1 = authorityBuf1->Des();
   705 	authority8Bit1.Copy(aAuthority1);
   706 
   707 	HBufC8* authorityBuf2 = HBufC8::NewLC(aAuthority2.Length());
   708 	TPtr8 authority8Bit2 = authorityBuf2->Des();
   709 	authority8Bit2.Copy(aAuthority2);
   710 
   711 	iTestHarness->StartTestL(_L("Test TAuthorityC Component Compare (8-bit)"));
   712 
   713 	error = DoAuthorityCompare<TAuthorityParser8>(authority8Bit1, authority8Bit2, aMatchFlags);
   714 
   715 	iTestHarness->EndTest(error);
   716 
   717 	CleanupStack::PopAndDestroy(2, authorityBuf1);	// authorityBuf1, authorityBuf2
   718 	}
   719 
   720 void CUriAndAuthorityTest::TestAuthorityComponentPresenceL(const TDesC& aAuthority, TInt aPresenceFlags) const
   721 	{
   722 	iTestHarness->StartTestL(_L("Test TAuthorityC Component Presence (16-bit)"));
   723 
   724 	TInt error = DoAuthorityComponentPresence<TAuthorityParser16>(aAuthority, aPresenceFlags);
   725 
   726 	iTestHarness->EndTest(error);
   727 
   728 	// Make 8-bit copy
   729 	HBufC8* authorityBuf = HBufC8::NewLC(aAuthority.Length());
   730 	TPtr8 authority8Bit = authorityBuf->Des();
   731 	authority8Bit.Copy(aAuthority);
   732 
   733 	iTestHarness->StartTestL(_L("Test TAuthorityC Component Presence (8-bit)"));
   734 
   735 	error = DoAuthorityComponentPresence<TAuthorityParser8>(authority8Bit, aPresenceFlags);
   736 
   737 	iTestHarness->EndTest(error);
   738 
   739 	CleanupStack::PopAndDestroy(authorityBuf);	// authorityBuf
   740 	}
   741 
   742 void CUriAndAuthorityTest::TestAuthorityDesL(const TDesC& aAuthority)
   743 	{
   744 	iTestHarness->StartTestL(_L("Test TAuthorityC AuthorityDes() (16-bit deprecated)"));
   745 
   746 	TInt error = DoAuthorityDes<TAuthorityParser16>(aAuthority);
   747 
   748 	iTestHarness->EndTest(error);
   749 	
   750 	iTestHarness->StartTestL(_L("Test TAuthorityC AuthorityDes() (16-bit)"));
   751 
   752 	TRAP( error , DoAuthorityDesL(aAuthority) );
   753 
   754 	iTestHarness->EndTest(error);
   755 
   756 	// Make 8-bit copy
   757 	HBufC8* authorityBuf = HBufC8::NewLC(aAuthority.Length());
   758 	TPtr8 authority8Bit = authorityBuf->Des();
   759 	authority8Bit.Copy(aAuthority);
   760 
   761 	iTestHarness->StartTestL(_L("Test TAuthorityC AuthorityDes() (8-bit)"));
   762 
   763 	error = DoAuthorityDes<TAuthorityParser8>(authority8Bit);
   764 
   765 	iTestHarness->EndTest(error);
   766 
   767 	CleanupStack::PopAndDestroy(authorityBuf);	// authorityBuf
   768 	}
   769 
   770 void CUriAndAuthorityTest::TestAuthoritySetComponentL(const TDesC& aAuthority_Host, const TDesC& aAuthority_Userinfo, 
   771 										  const TDesC& aAuthority_Port, const TDesC& aHost, 
   772 										  const TDesC& aUserinfo, const TDesC& aPort)
   773 
   774 	{
   775 	iTestHarness->StartTestL(_L("Test CAuthority SetComponentL (16-bit)"));
   776 
   777 	TInt error = DoAuthorityConstruction<CAuthority16>(aAuthority_Host, aAuthority_Userinfo, aAuthority_Port, 
   778 		aHost, aUserinfo, aPort);
   779 
   780 	iTestHarness->EndTest(error);
   781 
   782 	// Make 8-bit copies
   783 	HBufC8* authority_HostBuf = HBufC8::NewLC(aAuthority_Host.Length());
   784 	TPtr8 authority_Host8Bit = authority_HostBuf->Des();
   785 	authority_Host8Bit.Copy(aAuthority_Host);
   786 
   787 	HBufC8* authority_UserinfoBuf = HBufC8::NewLC(aAuthority_Userinfo.Length());
   788 	TPtr8 authority_Userinfo8Bit = authority_UserinfoBuf->Des();
   789 	authority_Userinfo8Bit.Copy(aAuthority_Userinfo);
   790 
   791 	HBufC8* authority_PortBuf = HBufC8::NewLC(aAuthority_Port.Length());
   792 	TPtr8 authority_Port8Bit = authority_PortBuf->Des();
   793 	authority_Port8Bit.Copy(aAuthority_Port);
   794 
   795 	// And the individual components
   796 	HBufC8* userinfoBuf = HBufC8::NewLC(aUserinfo.Length());
   797 	TPtr8 userinfo8Bit = userinfoBuf->Des();
   798 	userinfo8Bit.Copy(aUserinfo);
   799 
   800 	HBufC8* hostBuf = HBufC8::NewLC(aHost.Length());
   801 	TPtr8 host8Bit = hostBuf->Des();
   802 	host8Bit.Copy(aHost);
   803 
   804 	HBufC8* portBuf = HBufC8::NewLC(aPort.Length());
   805 	TPtr8 port8Bit = portBuf->Des();
   806 	port8Bit.Copy(aPort);
   807 
   808 	iTestHarness->StartTestL(_L("Test CAuthority SetComponentL (8-bit)"));
   809 
   810 	error = DoAuthorityConstruction<CAuthority8>(authority_Host8Bit, authority_Userinfo8Bit, authority_Port8Bit,
   811 		host8Bit, userinfo8Bit, port8Bit);
   812 
   813 	iTestHarness->EndTest(error);
   814 	CleanupStack::PopAndDestroy(6, authority_HostBuf);	// too many to list!
   815 	}
   816 
   817 void CUriAndAuthorityTest::TestAuthoritySetAndEscapeComponentL(const TDesC& aAuthority_Host, const TDesC& aAuthority_Userinfo, 
   818 												   const TDesC& aAuthority_Port, const TDesC& aHost, 
   819 												   const TDesC& aUserinfo, const TDesC& aPort) const
   820 
   821 	{
   822 	iTestHarness->StartTestL(_L("Test CAuthority SetAndEscapeComponentL (16-bit)"));
   823 
   824 	TInt error = DoAuthorityEscapedConstruction<CAuthority16>(aAuthority_Host, aAuthority_Userinfo, aAuthority_Port, 
   825 		aHost, aUserinfo, aPort);
   826 
   827 	iTestHarness->EndTest(error);
   828 
   829 	// Make 8-bit copies
   830 	HBufC8* authority_HostBuf = HBufC8::NewLC(aAuthority_Host.Length());
   831 	TPtr8 authority_Host8Bit = authority_HostBuf->Des();
   832 	authority_Host8Bit.Copy(aAuthority_Host);
   833 
   834 	HBufC8* authority_UserinfoBuf = HBufC8::NewLC(aAuthority_Userinfo.Length());
   835 	TPtr8 authority_Userinfo8Bit = authority_UserinfoBuf->Des();
   836 	authority_Userinfo8Bit.Copy(aAuthority_Userinfo);
   837 
   838 	HBufC8* authority_PortBuf = HBufC8::NewLC(aAuthority_Port.Length());
   839 	TPtr8 authority_Port8Bit = authority_PortBuf->Des();
   840 	authority_Port8Bit.Copy(aAuthority_Port);
   841 
   842 	// And the individual components
   843 	HBufC8* userinfoBuf = HBufC8::NewLC(aUserinfo.Length());
   844 	TPtr8 userinfo8Bit = userinfoBuf->Des();
   845 	userinfo8Bit.Copy(aUserinfo);
   846 
   847 	HBufC8* hostBuf = HBufC8::NewLC(aHost.Length());
   848 	TPtr8 host8Bit = hostBuf->Des();
   849 	host8Bit.Copy(aHost);
   850 
   851 	HBufC8* portBuf = HBufC8::NewLC(aPort.Length());
   852 	TPtr8 port8Bit = portBuf->Des();
   853 	port8Bit.Copy(aPort);
   854 
   855 	iTestHarness->StartTestL(_L("Test CAuthority SetAnsEscapeComponentL (8-bit)"));
   856 
   857 	error = DoAuthorityEscapedConstruction<CAuthority8>(authority_Host8Bit, authority_Userinfo8Bit, authority_Port8Bit,
   858 		host8Bit, userinfo8Bit, port8Bit);
   859 
   860 	iTestHarness->EndTest(error);
   861 	CleanupStack::PopAndDestroy(6, authority_HostBuf);	// too many to list!
   862 	}
   863 
   864 void CUriAndAuthorityTest::TestAuthorityRemoveComponentL(const TDesC& aAuthority_NoHost, const TDesC& aAuthority_NoUserinfo, 
   865 									   const TDesC& aAuthority_NoPort, const TDesC& aAuthority_Whole) const
   866 	{
   867 	iTestHarness->StartTestL(_L("Test CAuthority RemoveComponentL (16-bit)"));
   868 
   869 	TInt error = DoAuthorityDestruction<CAuthority16, TAuthorityParser16>(aAuthority_NoHost, aAuthority_NoUserinfo, 
   870 		aAuthority_NoPort, aAuthority_Whole);
   871 
   872 	iTestHarness->EndTest(error);
   873 
   874 	// Make 8-bit copies
   875 	HBufC8* authority_NoHostBuf = HBufC8::NewLC(aAuthority_NoHost.Length());
   876 	TPtr8 authority_NoHost8Bit = authority_NoHostBuf->Des();
   877 	authority_NoHost8Bit.Copy(aAuthority_NoHost);
   878 
   879 	HBufC8* authority_NoUserinfoBuf = HBufC8::NewLC(aAuthority_NoUserinfo.Length());
   880 	TPtr8 authority_NoUserinfo8Bit = authority_NoUserinfoBuf->Des();
   881 	authority_NoUserinfo8Bit.Copy(aAuthority_NoUserinfo);
   882 
   883 	HBufC8* authority_NoPortBuf = HBufC8::NewLC(aAuthority_NoPort.Length());
   884 	TPtr8 authority_NoPort8Bit = authority_NoPortBuf->Des();
   885 	authority_NoPort8Bit.Copy(aAuthority_NoPort);
   886 
   887 	HBufC8* authority_WholeBuf = HBufC8::NewLC(aAuthority_Whole.Length());
   888 	TPtr8 authority_Whole8Bit = authority_WholeBuf->Des();
   889 	authority_Whole8Bit.Copy(aAuthority_Whole);
   890 
   891 	iTestHarness->StartTestL(_L("Test CAuthority RemoveComponentL (8-bit)"));
   892 
   893 	error = DoAuthorityDestruction<CAuthority8, TAuthorityParser8>(authority_NoHost8Bit, authority_NoUserinfo8Bit, 
   894 		authority_NoPort8Bit, authority_Whole8Bit);
   895 
   896 	iTestHarness->EndTest(error);
   897 	CleanupStack::PopAndDestroy(4, authority_NoHostBuf);	// too many to list!
   898 	}
   899 
   900 //
   901 //
   902 //	Implementation of LOCAL functions
   903 //
   904 //
   905 
   906 template<class TUriParserType, class TDesCType>
   907 TInt DoUriComponentExtraction(const TDesCType& aUri, const TDesCType& aScheme,
   908 										 const TDesCType& aUserinfo, const TDesCType& aHost,
   909 										 const TDesCType& aPort, const TDesCType& aPath,
   910 										 const TDesCType& aQuery, const TDesCType& aFragment)
   911 	{
   912 	TUriParserType uriParser;
   913 	TInt error = uriParser.Parse(aUri);
   914 	// Is this a valid Uri?
   915 	if( error == KUriUtilsErrInvalidUri )
   916 		{
   917 		return error;
   918 		}
   919 
   920 	// Check scheme...
   921 	if( TestComponent(uriParser, aScheme, EUriScheme) != 0 )
   922 		{
   923 		return KUriUtilsErrDifferentScheme;
   924 		}
   925 	// Check userinfo...
   926 	if( TestComponent(uriParser, aUserinfo, EUriUserinfo) != 0 )
   927 		{
   928 		return KUriUtilsErrDifferentUserInfo;
   929 		}
   930 	// Check host...
   931 	if( TestComponent(uriParser, aHost, EUriHost) != 0 )
   932 		{
   933 		return KUriUtilsErrDifferentHost;
   934 		}
   935 	// Check port...
   936 	if( TestComponent(uriParser, aPort, EUriPort) != 0 )
   937 		{
   938 		return KUriUtilsErrDifferentPort;
   939 		}
   940 	// Check path...
   941 	if( TestComponent(uriParser, aPath, EUriPath) != 0)
   942 		{
   943 		return KUriUtilsErrDifferentPath;
   944 		}
   945 	// Check query...
   946 	if( TestComponent(uriParser, aQuery, EUriQuery) != 0 )
   947 		{
   948 		return KUriUtilsErrDifferentQuery;
   949 		}
   950 	// Check fragment...
   951 	if( TestComponent(uriParser, aFragment, EUriFragment) != 0 )
   952 		{
   953 		return KUriUtilsErrDifferentFragment;
   954 		}
   955 	return KErrNone;
   956 	}
   957 
   958 
   959 /** create 8-bit URI from descriptor, compare components*/
   960 void DoUriComponentExtractionL(const TDesC& aUri, const TDesC& aScheme,
   961 										 const TDesC& aUserinfo, const TDesC& aHost,
   962 										 const TDesC& aPort, const TDesC& aPath,
   963 										 const TDesC& aQuery, const TDesC& aFragment)
   964 	{
   965 	CUri8* uri = UriUtils::CreateUriL(aUri);
   966 	CleanupStack::PushL(uri);
   967 
   968 	// Check scheme...
   969 	HBufC* text = uri->Uri().DisplayFormL(EUriScheme);
   970 	TInt error = ( text->Compare(aScheme) == 0 ) ? KErrNone : KUriUtilsErrDifferentScheme;
   971 	delete text;
   972 	User::LeaveIfError(error);
   973 	
   974 	// Check userinfo...
   975 	text = uri->Uri().DisplayFormL(EUriUserinfo);
   976 	error = ( text->Compare(aUserinfo) == 0 ) ? KErrNone : KUriUtilsErrDifferentUserInfo;
   977 	delete text;
   978 	User::LeaveIfError(error);
   979 	
   980 	// Check host...
   981 	text = uri->Uri().DisplayFormL(EUriHost);
   982 	error = ( text->Compare(aHost) == 0 ) ? KErrNone : KUriUtilsErrDifferentHost;
   983 	delete text;
   984 	User::LeaveIfError(error);
   985 	
   986 	// Check port...
   987 	text = uri->Uri().DisplayFormL(EUriPort);
   988 	error = ( text->Compare(aPort) == 0 ) ? KErrNone : KUriUtilsErrDifferentPort;
   989 	delete text;
   990 	User::LeaveIfError(error);
   991 	
   992 	// Check path...
   993 	text = uri->Uri().DisplayFormL(EUriPath);
   994 	error = ( text->Compare(aPath) == 0 ) ? KErrNone : KUriUtilsErrDifferentPath;
   995 	delete text;
   996 	User::LeaveIfError(error);
   997 
   998 	// Check query...
   999 	text = uri->Uri().DisplayFormL(EUriQuery);
  1000 	error = ( text->Compare(aQuery) == 0 ) ? KErrNone : KUriUtilsErrDifferentQuery;
  1001 	delete text;
  1002 	User::LeaveIfError(error);
  1003 
  1004 	// Check fragment...
  1005 	text = uri->Uri().DisplayFormL(EUriFragment);
  1006 	error = ( text->Compare(aFragment) == 0 ) ? KErrNone : KUriUtilsErrDifferentFragment;
  1007 	delete text;
  1008 	User::LeaveIfError(error);
  1009 	CleanupStack::PopAndDestroy(uri);
  1010 	}
  1011 	
  1012 	
  1013 template<class TAuthorityParserType, class TDesCType>
  1014 TInt DoAuthorityComponentExtraction(const TDesCType& aAuthority, const TDesCType& aUserInfo, 
  1015 											 const TDesCType& aHost, const TDesCType& aPort)
  1016 	{
  1017 	TAuthorityParserType authorityParser;
  1018 	TInt error = authorityParser.Parse(aAuthority);
  1019 
  1020 	// Check userinfo...
  1021 	if( TestComponent(authorityParser, aUserInfo, EAuthorityUserinfo) != 0 )
  1022 		{
  1023 		return KUriUtilsErrDifferentUserInfo;
  1024 		}
  1025 	// Check host...
  1026 	if( TestComponent(authorityParser, aHost, EAuthorityHost) != 0 )
  1027 		{
  1028 		return KUriUtilsErrDifferentHost;
  1029 		}
  1030 	// Check port...
  1031 	if( TestComponent(authorityParser, aPort, EAuthorityPort) != 0 )
  1032 		{
  1033 		return KUriUtilsErrDifferentPort;
  1034 		}
  1035 	return error;
  1036 	}
  1037 
  1038 /** create 8-bit Authority from descriptor, compare components*/
  1039 void DoAuthorityComponentExtractionL(const TDesC& aAuthority, const TDesC& aUserInfo, 
  1040 											 const TDesC& aHost, const TDesC& aPort)
  1041 	{
  1042 	CAuthority8* authority = UriUtils::CreateAuthorityL(aAuthority);
  1043 	CleanupStack::PushL(authority);
  1044 
  1045 	// Check userinfo...
  1046 	HBufC* text = authority->Authority().DisplayFormL(EAuthorityUserinfo);
  1047 	TInt error = ( text->Compare(aUserInfo) == 0 ) ? KErrNone : KUriUtilsErrDifferentUserInfo;
  1048 	delete text;
  1049 	User::LeaveIfError(error);
  1050 
  1051 	// Check host...
  1052 	text = authority->Authority().DisplayFormL(EAuthorityHost);
  1053 	error = ( text->Compare(aHost) == 0 ) ? KErrNone : KUriUtilsErrDifferentHost;
  1054 	delete text;
  1055 
  1056 	// Check port...
  1057 	text = authority->Authority().DisplayFormL(EAuthorityPort);
  1058 	error = ( text->Compare(aPort) == 0 ) ? KErrNone : KUriUtilsErrDifferentPort;
  1059 	delete text;
  1060 	
  1061 	CleanupStack::PopAndDestroy(authority);
  1062 	}
  1063 
  1064 template<class TParserType, class TDesCType, class TComponentType>
  1065 TInt TestComponent(const TParserType& aParser, const TDesCType& aExpected, TComponentType aComponent)
  1066 	{
  1067 	return aParser.Extract(aComponent).Compare(aExpected);
  1068 	}
  1069 
  1070 template<class TUriParserType, class CUriType, class TDesCType>
  1071 TInt DoTestResolve(const TDesCType& aBase, const TDesCType& aReference, const TDesCType& aExpected)
  1072 	{
  1073 	TUriParserType baseUri;
  1074 	TInt error = baseUri.Parse(aBase);
  1075 	if ( error != KErrNone )
  1076 		{
  1077 		return error;
  1078 		}
  1079 	TUriParserType refUri;
  1080 	error = refUri.Parse(aReference);
  1081 	if ( error != KErrNone )
  1082 		{
  1083 		return error;
  1084 		}
  1085 	CUriType* resolvedUri = NULL;
  1086 	TRAP(error, resolvedUri = CUriType::ResolveL(baseUri, refUri));
  1087 	if( error != KErrNone )
  1088 		{
  1089 		return error;
  1090 		}
  1091 	error = resolvedUri->Uri().UriDes().Compare(aExpected);
  1092 	
  1093 	delete resolvedUri;
  1094 	return error;
  1095 	}
  1096 
  1097 template<class TUriParserType, class TDesCType>
  1098 TInt DoUriCompare(const TDesCType& aUri1, const TDesCType& aUri2, TInt aMatchFlags)
  1099 	{
  1100 	TUriParserType uri1;
  1101 	TInt error = uri1.Parse(aUri1);
  1102 	if( error == KUriUtilsErrInvalidUri )
  1103 		{
  1104 		return error;
  1105 		}
  1106 	TUriParserType uri2;
  1107 	error = uri2.Parse(aUri2);
  1108 	if( error == KUriUtilsErrInvalidUri )
  1109 		{
  1110 		return error;
  1111 		}
  1112 	// Test compare for fragment
  1113 	if( (error = TestCompare(uri1, uri2, EUriFragment, (aMatchFlags & EFragmentFlag))) != 0 )
  1114 		{
  1115 		return KErrNotFound;
  1116 		}
  1117 	// Test compare for query
  1118 	if( (error = TestCompare(uri1, uri2, EUriQuery, (aMatchFlags & EQueryFlag))) != 0 )
  1119 		{
  1120 		return KErrNotFound;
  1121 		}
  1122 	// Test compare for path
  1123 	if( (error = TestCompare(uri1, uri2, EUriPath, (aMatchFlags & EPathFlag))) != 0 )
  1124 		{
  1125 		return KErrNotFound;
  1126 		}
  1127 	// Test compare for port
  1128 	if( (error = TestCompare(uri1, uri2, EUriPort, (aMatchFlags & EPortFlag))) != 0 )
  1129 		{
  1130 		return KErrNotFound;
  1131 		}
  1132 	// Test compare for userinfo
  1133 	if( (error = TestCompare(uri1, uri2, EUriUserinfo, (aMatchFlags & EUserinfoFlag))) != 0 )
  1134 		{
  1135 		return KErrNotFound;
  1136 		}
  1137 	// Test compare for host
  1138 	if( (error = TestCompare(uri1, uri2, EUriHost, (aMatchFlags & EHostFlag))) != 0 )
  1139 		{
  1140 		return KErrNotFound;
  1141 		}
  1142 	// Test compare for scheme
  1143 	if( (error = TestCompare(uri1, uri2, EUriScheme, (aMatchFlags & ESchemeFlag))) != 0 )
  1144 		{
  1145 		return KErrNotFound;
  1146 		}
  1147 	return error;
  1148 	}
  1149 
  1150 template<class TAuthorityParserType, class TDesCType>
  1151 TInt DoAuthorityCompare(const TDesCType& aAuthority1, const TDesCType& aAuthority2, TInt aMatchFlags)
  1152 	{
  1153 	TAuthorityParserType auth1;
  1154 	TInt error = auth1.Parse(aAuthority1);
  1155 	TAuthorityParserType auth2;
  1156 	error = auth2.Parse(aAuthority2);
  1157 	// Test compare for userinfo
  1158 	if( (error = TestCompare(auth1, auth2, EAuthorityUserinfo, (aMatchFlags & EUserinfoFlag))) != 0 )
  1159 		{
  1160 		return KErrNotFound;
  1161 		}
  1162 	// Test compare for port
  1163 	if( (error = TestCompare(auth1, auth2, EAuthorityPort, (aMatchFlags & EPortFlag))) != 0 )
  1164 		{
  1165 		return KErrNotFound;
  1166 		}
  1167 	// Test compare for host
  1168 	if( (error = TestCompare(auth1, auth2, EAuthorityHost, (aMatchFlags & EHostFlag))) != 0 )
  1169 		{
  1170 		return KErrNotFound;
  1171 		}
  1172 	return error;
  1173 	}
  1174 
  1175 template<class TParserType, class TComponentType>
  1176 TInt TestCompare(const TParserType& aData1, const TParserType& aData2, TComponentType aComponent, TBool aExpectedMatch)
  1177 	{
  1178 	TInt error = aData1.Compare(aData2, aComponent);
  1179 	TBool match = error == 0;
  1180 	if( (!match && aExpectedMatch) | (match && !aExpectedMatch) ) 
  1181 		{
  1182 		return KErrNotFound;
  1183 		}
  1184 	return KErrNone;
  1185 	}
  1186 
  1187 template<class TUriParserType, class TDesCType>
  1188 TInt DoUriComponentPresence(const TDesCType& aUri, TInt aPresenceFlags)
  1189 	{
  1190 	TUriParserType uri;
  1191 	TInt error = uri.Parse(aUri);
  1192 	if( error == KUriUtilsErrInvalidUri )
  1193 		{
  1194 		return error;
  1195 		}
  1196 	// Test compare for scheme
  1197 	if( (error = TestPresence(uri, EUriScheme, (aPresenceFlags & ESchemeFlag))) != 0)
  1198 		{
  1199 		return KErrNotFound;
  1200 		}
  1201 	// Test compare for host
  1202 	if( (error = TestPresence(uri, EUriHost, (aPresenceFlags & EHostFlag))) != 0)
  1203 		{
  1204 		return KErrNotFound;
  1205 		}
  1206 	// Test compare for userinfo
  1207 	if( (error = TestPresence(uri, EUriUserinfo, (aPresenceFlags & EUserinfoFlag))) != 0)
  1208 		{
  1209 		return KErrNotFound;
  1210 		}
  1211 	// Test compare for port
  1212 	if( (error = TestPresence(uri, EUriPort, (aPresenceFlags & EPortFlag))) != 0)
  1213 		{
  1214 		return KErrNotFound;
  1215 		}
  1216 	// Test compare for path
  1217 	if( (error = TestPresence(uri, EUriPath, (aPresenceFlags & EPathFlag))) != 0)
  1218 		{
  1219 		return KErrNotFound;
  1220 		}
  1221 	// Test compare for query
  1222 	if( (error = TestPresence(uri, EUriQuery, (aPresenceFlags & EQueryFlag))) != 0)
  1223 		{
  1224 		return KErrNotFound;
  1225 		}
  1226 	// Test compare for fragment
  1227 	if( (error = TestPresence(uri, EUriFragment, (aPresenceFlags & EFragmentFlag))) != 0)
  1228 		{
  1229 		return KErrNotFound;
  1230 		}
  1231 	return error;
  1232 	}
  1233 
  1234 template<class TAuthorityParserType, class TDesCType>
  1235 TInt DoAuthorityComponentPresence(const TDesCType& aAuthority, TInt aPresenceFlags)
  1236 	{
  1237 	TAuthorityParserType authority;
  1238 	TInt error = authority.Parse(aAuthority);
  1239 	// Test compare for host
  1240 	if( (error = TestPresence(authority, EAuthorityHost, (aPresenceFlags & EHostFlag))) != 0)
  1241 		{
  1242 		return KErrNotFound;
  1243 		}
  1244 	// Test compare for userinfo
  1245 	if( (error = TestPresence(authority, EAuthorityUserinfo, (aPresenceFlags & EUserinfoFlag))) != 0)
  1246 		{
  1247 		return KErrNotFound;
  1248 		}
  1249 	// Test compare for port
  1250 	if( (error = TestPresence(authority, EAuthorityPort, (aPresenceFlags & EPortFlag))) != 0)
  1251 		{
  1252 		return KErrNotFound;
  1253 		}
  1254 	return error;
  1255 	}
  1256 
  1257 template<class TParserType, class TComponentType>
  1258 TInt TestPresence(const TParserType& aData, TComponentType aComponent, TBool aExpectedPresence)
  1259 	{
  1260 	TBool present = aData.IsPresent(aComponent);
  1261 	if( (!present && aExpectedPresence) | (present && !aExpectedPresence) ) 
  1262 		{
  1263 		return KErrNotFound;
  1264 		}
  1265 	return KErrNone;
  1266 	}
  1267 
  1268 template<class TUriParserType, class TDesCType>
  1269 TInt DoUriDes(const TDesCType& aUri)
  1270 	{
  1271 	TUriParserType uri;
  1272 	TInt error = uri.Parse(aUri);
  1273 	if( error == KUriUtilsErrInvalidUri )
  1274 		{
  1275 		return error;
  1276 		}
  1277 	if( uri.UriDes().Compare(aUri) != 0)
  1278 		{
  1279 		return KErrNotFound;
  1280 		}
  1281 	return KErrNone;
  1282 	}
  1283 
  1284 void DoUriDesL(const TDesC& aUri)
  1285 	{
  1286 	CUri8* uri = UriUtils::CreateUriL(aUri);
  1287 	CleanupStack::PushL(uri);
  1288 	
  1289 	HBufC* text = uri->Uri().DisplayFormL();
  1290 	TInt error = ( text->Compare(aUri) == 0 ) ? KErrNone : KErrNotFound;
  1291 	delete text;
  1292 	User::LeaveIfError(error);		
  1293 	CleanupStack::PopAndDestroy(uri);
  1294 	}
  1295 	
  1296 template<class TAuthorityParserType, class TDesCType>
  1297 TInt DoAuthorityDes(const TDesCType& aAuthority)
  1298 	{
  1299 	TAuthorityParserType authority;
  1300 	TInt error = authority.Parse(aAuthority);
  1301 	if( (error = authority.AuthorityDes().Compare(aAuthority)) != 0)
  1302 		{
  1303 		return KErrNotFound;
  1304 		}
  1305 	return error;
  1306 	}
  1307 
  1308 void DoAuthorityDesL(const TDesC& aAuthority)
  1309 	{
  1310 	CAuthority8* authority = UriUtils::CreateAuthorityL(aAuthority);
  1311 	CleanupStack::PushL(authority);
  1312 	
  1313 	HBufC* text = authority->Authority().DisplayFormL();
  1314 	TInt error = ( text->Compare(aAuthority) == 0 ) ? KErrNone : KErrNotFound;
  1315 	delete text;
  1316 	User::LeaveIfError(error);
  1317 
  1318 	CleanupStack::PopAndDestroy(authority);
  1319 	}
  1320 
  1321 template<class TUriParserType, class TDesCType>
  1322 TInt DoUriSchemeValidation(const TDesCType& aUri, TBool aValidScheme)
  1323 	{
  1324 	TUriParserType uri;
  1325 	TInt error = uri.Parse(aUri);
  1326 	if( error == KUriUtilsErrInvalidUri )
  1327 		{
  1328 		return error;
  1329 		}
  1330 	TBool valid = uri.IsSchemeValid();
  1331 	if( (!valid && aValidScheme) | (valid && !aValidScheme) ) 
  1332 		{
  1333 		return KErrNotFound;
  1334 		}
  1335 	return KErrNone;
  1336 	}
  1337 
  1338 template<class TUriParserType, class TPtrCType, class TDesCType>
  1339 TInt DoUriWithoutFragment(const TDesCType& aUri, const TDesCType& aExpected)
  1340 	{
  1341 	TUriParserType uri;
  1342 	TInt error = uri.Parse(aUri);
  1343 	if( error == KUriUtilsErrInvalidUri )
  1344 		{
  1345 		return error;
  1346 		}
  1347 	TPtrCType uriWithoutFragment;
  1348 	uri.UriWithoutFragment(uriWithoutFragment);
  1349 	if( (error = uriWithoutFragment.Compare(aExpected)) != 0)
  1350 		{
  1351 		return KErrNotFound;
  1352 		}
  1353 	return error;
  1354 	}
  1355 
  1356 template<class CUriType, class TDesCType>
  1357 TInt DoUriConstruction(const TDesCType& aUri_Scheme, const TDesCType& aUri_Host, const TDesCType& aUri_Userinfo, 
  1358 							   const TDesCType& aUri_Port, const TDesCType& aUri_Path, const TDesCType& aUri_Query, 
  1359 							   const TDesCType& aUri_Fragment, const TDesCType& aScheme, const TDesCType& aHost, 
  1360 							   const TDesCType& aUserinfo, const TDesCType& aPort, const TDesCType& aPath, 
  1361 							   const TDesCType& aQuery, const TDesCType& aFragment)
  1362 	{
  1363 	// Create the CUriType object
  1364 	CUriType* uri = NULL;
  1365 	TRAPD(error, uri = CUriType::NewL());
  1366 	if( error != KErrNone )
  1367 		{
  1368 		return error;
  1369 		}
  1370 	CleanupStack::PushL(uri);
  1371 	// Add scheme...
  1372 	if( DoUriSetAndCompareComponent<CUriType>(uri, EUriScheme, aScheme, aUri_Scheme) != KErrNone )
  1373 		{
  1374 		CleanupStack::PopAndDestroy(uri);	// uri
  1375 		return KErrNotFound;
  1376 		}
  1377 
  1378 	// Add host...
  1379 	if( DoUriSetAndCompareComponent<CUriType>(uri, EUriHost, aHost, aUri_Host) != KErrNone )
  1380 		{
  1381 		CleanupStack::PopAndDestroy(uri);	// uri
  1382 		return KErrNotFound;
  1383 		}
  1384 	// Add userinfo...
  1385 	if( DoUriSetAndCompareComponent<CUriType>(uri, EUriUserinfo, aUserinfo, aUri_Userinfo) != KErrNone )
  1386 		{
  1387 		CleanupStack::PopAndDestroy(uri);	// uri
  1388 		return KErrNotFound;
  1389 		}
  1390 	// Add port...
  1391 	if( DoUriSetAndCompareComponent<CUriType>(uri, EUriPort, aPort, aUri_Port) != KErrNone )
  1392 		{
  1393 		CleanupStack::PopAndDestroy(uri);	// uri
  1394 		return KErrNotFound;
  1395 		}
  1396 	// Add path...
  1397 	if( DoUriSetAndCompareComponent<CUriType>(uri, EUriPath, aPath, aUri_Path) != KErrNone )
  1398 		{
  1399 		CleanupStack::PopAndDestroy(uri);	// uri
  1400 		return KErrNotFound;
  1401 		}
  1402 	// Add query...
  1403 	if( DoUriSetAndCompareComponent<CUriType>(uri, EUriQuery, aQuery, aUri_Query) != KErrNone )
  1404 		{
  1405 		CleanupStack::PopAndDestroy(uri);	// uri
  1406 		return KErrNotFound;
  1407 		}
  1408 	// Add fragment...
  1409 	if( DoUriSetAndCompareComponent<CUriType>(uri, EUriFragment, aFragment, aUri_Fragment) != KErrNone )
  1410 		{
  1411 		CleanupStack::PopAndDestroy(uri);	// uri
  1412 		return KErrNotFound;
  1413 		}
  1414 	// Cleanup and return
  1415 	CleanupStack::PopAndDestroy(uri);	// uri
  1416 	return KErrNone;
  1417 	}
  1418 
  1419 template<class CUriType, class TDesCType>
  1420 TInt DoUriSetAndCompareComponent(CUriType* aUri, TUriComponent aComponent, const TDesCType& aData, const TDesCType& aExpected)
  1421 	{
  1422 	TRAPD(error, aUri->SetComponentL(aData, aComponent));
  1423 	if( error != KErrNone )
  1424 		{
  1425 		return error;
  1426 		}
  1427 	// Compare with expected
  1428 	if( aUri->Uri().UriDes().Compare(aExpected) != 0)
  1429 		{
  1430 		return KErrNotFound;
  1431 		}
  1432 	return KErrNone;
  1433 	}
  1434 
  1435 template<class CUriType, class TUriParserType, class TDesCType>
  1436 TInt DoUriDestruction(const TDesCType& aUri_NoScheme, const TDesCType& aUri_NoHost, const TDesCType& aUri_NoUserinfo, 
  1437 							  const TDesCType& aUri_NoPort, const TDesCType& aUri_NoPath, const TDesCType& aUri_NoQuery, 
  1438 							  const TDesCType& aUri_NoFragment, const TDesCType& aUri_Whole)
  1439 	{
  1440 	// Create a TUriC-derived objet from whole uri
  1441 	TUriParserType parser;
  1442 	TInt error = parser.Parse(aUri_Whole);
  1443 	if( error == KUriUtilsErrInvalidUri )
  1444 		{
  1445 		return error;
  1446 		}
  1447 	// Create the CUriType object
  1448 	CUriType* uri = NULL;
  1449 	TRAP(error, uri = CUriType::NewL(parser));
  1450 	if( error != KErrNone )
  1451 		{
  1452 		return error;
  1453 		}
  1454 	CleanupStack::PushL(uri);
  1455 	// Remove fragment...
  1456 	if( DoUriRemoveAndCompareComponent<CUriType>(uri, EUriFragment, aUri_NoFragment) != KErrNone )
  1457 		{
  1458 		CleanupStack::PopAndDestroy(uri);	// uri
  1459 		return KErrNotFound;
  1460 		}
  1461 	// Remove query...
  1462 	if( DoUriRemoveAndCompareComponent<CUriType>(uri, EUriQuery, aUri_NoQuery) != KErrNone )
  1463 		{
  1464 		CleanupStack::PopAndDestroy(uri);	// uri
  1465 		return KErrNotFound;
  1466 		}
  1467 	// Remove path...
  1468 	if( DoUriRemoveAndCompareComponent<CUriType>(uri, EUriPath, aUri_NoPath) != KErrNone )
  1469 		{
  1470 		CleanupStack::PopAndDestroy(uri);	// uri
  1471 		return KErrNotFound;
  1472 		}
  1473 	// Remove port...
  1474 	if( DoUriRemoveAndCompareComponent<CUriType>(uri, EUriPort, aUri_NoPort) != KErrNone )
  1475 		{
  1476 		CleanupStack::PopAndDestroy(uri);	// uri
  1477 		return KErrNotFound;
  1478 		}
  1479 	// Remove userinfo...
  1480 	if( DoUriRemoveAndCompareComponent<CUriType>(uri, EUriUserinfo, aUri_NoUserinfo) != KErrNone )
  1481 		{
  1482 		CleanupStack::PopAndDestroy(uri);	// uri
  1483 		return KErrNotFound;
  1484 		}
  1485 	// Remove host...
  1486 	if( DoUriRemoveAndCompareComponent<CUriType>(uri, EUriHost, aUri_NoHost) != KErrNone )
  1487 		{
  1488 		CleanupStack::PopAndDestroy(uri);	// uri
  1489 		return KErrNotFound;
  1490 		}
  1491 	// Remove scheme...
  1492 	if( DoUriRemoveAndCompareComponent<CUriType>(uri, EUriScheme, aUri_NoScheme) != KErrNone )
  1493 		{
  1494 		CleanupStack::PopAndDestroy(uri);	// uri
  1495 		return KErrNotFound;
  1496 		}
  1497 	// Cleanup and return
  1498 	CleanupStack::PopAndDestroy(uri);	// uri
  1499 	return KErrNone;
  1500 	}
  1501 
  1502 template<class CUriType, class TDesCType>
  1503 TInt DoUriRemoveAndCompareComponent(CUriType* aUri, TUriComponent aComponent, const TDesCType& aExpected)
  1504 	{
  1505 	TRAPD(error, aUri->RemoveComponentL(aComponent));
  1506 	if( error != KErrNone )
  1507 		{
  1508 		return error;
  1509 		}
  1510 	// Compare with expected
  1511 	if( aUri->Uri().UriDes().Compare(aExpected) != 0)
  1512 		{
  1513 		return KErrNotFound;
  1514 		}
  1515 	return KErrNone;
  1516 	}
  1517 
  1518 template<class CAuthorityType, class TDesCType>
  1519 TInt DoAuthorityConstruction(const TDesCType& aAuthority_Host, const TDesCType& aAuthority_Userinfo, const TDesCType& aAuthority_Port, 
  1520 							   const TDesCType& aHost, const TDesCType& aUserinfo, const TDesCType& aPort)
  1521 	{
  1522 	// Create the CAuthorityType object
  1523 	CAuthorityType* authority = NULL;
  1524 	TRAPD(error, authority = CAuthorityType::NewL());
  1525 	if( error != KErrNone )
  1526 		{
  1527 		return error;
  1528 		}
  1529 	CleanupStack::PushL(authority);
  1530 	// Add host...
  1531 	if( DoAuthoritySetAndCompareComponent<CAuthorityType>(authority, EAuthorityHost, aHost, aAuthority_Host) != KErrNone )
  1532 		{
  1533 		CleanupStack::PopAndDestroy(authority);	// authority
  1534 		return KErrNotFound;
  1535 		}
  1536 	// Add userinfo...
  1537 	if( DoAuthoritySetAndCompareComponent<CAuthorityType>(authority, EAuthorityUserinfo, aUserinfo, aAuthority_Userinfo) != KErrNone )
  1538 		{
  1539 		CleanupStack::PopAndDestroy(authority);	// authority
  1540 		return KErrNotFound;
  1541 		}
  1542 	// Add port...
  1543 	if( DoAuthoritySetAndCompareComponent<CAuthorityType>(authority, EAuthorityPort, aPort, aAuthority_Port) != KErrNone )
  1544 		{
  1545 		CleanupStack::PopAndDestroy(authority);	// authority
  1546 		return KErrNotFound;
  1547 		}
  1548 	// Cleanup and return
  1549 	CleanupStack::PopAndDestroy(authority);	// authority
  1550 	return KErrNone;
  1551 	}
  1552 
  1553 template<class CAuthorityType, class TDesCType>
  1554 TInt DoAuthoritySetAndCompareComponent(CAuthorityType* aAuthority, TAuthorityComponent aComponent, const TDesCType& aData, const TDesCType& aExpected)
  1555 	{
  1556 	TRAPD(error, aAuthority->SetComponentL(aData, aComponent));
  1557 	if( error != KErrNone )
  1558 		{
  1559 		return error;
  1560 		}
  1561 	// Compare with expected
  1562 	if( aAuthority->Authority().AuthorityDes().Compare(aExpected) != 0)
  1563 		{
  1564 		return KErrNotFound;
  1565 		}
  1566 	return KErrNone;
  1567 	}
  1568 
  1569 template<class CAuthorityType, class TDesCType>
  1570 TInt DoAuthorityEscapedConstruction(const TDesCType& aAuthority_Host, const TDesCType& aAuthority_Userinfo, const TDesCType& aAuthority_Port, 
  1571 											const TDesCType& aHost, const TDesCType& aUserinfo, const TDesCType& aPort)
  1572 	{
  1573 	// Create the CAuthorityType object
  1574 	CAuthorityType* authority = NULL;
  1575 	TRAPD(error, authority = CAuthorityType::NewL());
  1576 	if( error != KErrNone )
  1577 		{
  1578 		return error;
  1579 		}
  1580 	CleanupStack::PushL(authority);
  1581 	// Add host...
  1582 	if( DoAuthoritySetAndEscapeAndCompareComponent<CAuthorityType>(authority, EAuthorityHost, aHost, aAuthority_Host) != KErrNone )
  1583 		{
  1584 		CleanupStack::PopAndDestroy(authority);	// authority
  1585 		return KErrNotFound;
  1586 		}
  1587 	// Add userinfo...
  1588 	if( DoAuthoritySetAndEscapeAndCompareComponent<CAuthorityType>(authority, EAuthorityUserinfo, aUserinfo, aAuthority_Userinfo) != KErrNone )
  1589 		{
  1590 		CleanupStack::PopAndDestroy(authority);	// authority
  1591 		return KErrNotFound;
  1592 		}
  1593 	// Add port...
  1594 	if( DoAuthoritySetAndEscapeAndCompareComponent<CAuthorityType>(authority, EAuthorityPort, aPort, aAuthority_Port) != KErrNone )
  1595 		{
  1596 		CleanupStack::PopAndDestroy(authority);	// authority
  1597 		return KErrNotFound;
  1598 		}
  1599 	// Cleanup and return
  1600 	CleanupStack::PopAndDestroy(authority);	// authority
  1601 	return KErrNone;
  1602 	}
  1603 
  1604 template<class CAuthorityType, class TDesCType>
  1605 TInt DoAuthoritySetAndEscapeAndCompareComponent(CAuthorityType* aAuthority, TAuthorityComponent aComponent, const TDesCType& aData, const TDesCType& aExpected)
  1606 	{
  1607 	TRAPD(error, aAuthority->SetAndEscapeComponentL(aData, aComponent));
  1608 	if( error != KErrNone )
  1609 		{
  1610 		return error;
  1611 		}
  1612 	// Compare with expected
  1613 	if( aAuthority->Authority().AuthorityDes().Compare(aExpected) != 0)
  1614 		{
  1615 		return KErrNotFound;
  1616 		}
  1617 	return KErrNone;
  1618 	}
  1619 
  1620 template<class CAuthorityType, class TAuthorityParserType, class TDesCType>
  1621 TInt DoAuthorityDestruction(const TDesCType& aAuthority_NoHost, const TDesCType& aAuthority_NoUserinfo, 
  1622 									const TDesCType& aAuthority_NoPort, const TDesCType& aAuthority_Whole)
  1623 	{
  1624 	// Create a TAuthorityC-derived objet from whole authority
  1625 	TAuthorityParserType parser;
  1626 	TInt error = parser.Parse(aAuthority_Whole);
  1627 	// Create the CAuthorityType object
  1628 	CAuthorityType* authority = NULL;
  1629 	TRAP(error, authority = CAuthorityType::NewL(parser));
  1630 	if( error != KErrNone )
  1631 		{
  1632 		return error;
  1633 		}
  1634 	CleanupStack::PushL(authority);
  1635 	// Remove port...
  1636 	if( DoAuthorityRemoveAndCompareComponent<CAuthorityType>(authority, EAuthorityPort, aAuthority_NoPort) != KErrNone )
  1637 		{
  1638 		CleanupStack::PopAndDestroy(authority);	// authority
  1639 		return KErrNotFound;
  1640 		}
  1641 	// Remove userinfo...
  1642 	if( DoAuthorityRemoveAndCompareComponent<CAuthorityType>(authority, EAuthorityUserinfo, aAuthority_NoUserinfo) != KErrNone )
  1643 		{
  1644 		CleanupStack::PopAndDestroy(authority);	// authority
  1645 		return KErrNotFound;
  1646 		}
  1647 	// Remove host...
  1648 	if( DoAuthorityRemoveAndCompareComponent<CAuthorityType>(authority, EAuthorityHost, aAuthority_NoHost) != KErrNone )
  1649 		{
  1650 		CleanupStack::PopAndDestroy(authority);	// authority
  1651 		return KErrNotFound;
  1652 		}
  1653 	// Cleanup and return
  1654 	CleanupStack::PopAndDestroy(authority);	// authority
  1655 	return KErrNone;
  1656 	}
  1657 
  1658 template<class CAuthorityType, class TDesCType>
  1659 TInt DoAuthorityRemoveAndCompareComponent(CAuthorityType* aAuthority, TAuthorityComponent aComponent, const TDesCType& aExpected)
  1660 	{
  1661 	TRAPD(error, aAuthority->RemoveComponentL(aComponent));
  1662 	if( error != KErrNone )
  1663 		{
  1664 		return error;
  1665 		}
  1666 	// Compare with expected
  1667 	if( aAuthority->Authority().AuthorityDes().Compare(aExpected) != 0)
  1668 		{
  1669 		return KErrNotFound;
  1670 		}
  1671 	return KErrNone;
  1672 	}