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