sl@0: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // Unit tests for PREQ748 - Adding support for the SIP scheme in URIs. sl@0: // Plus adding two new methods validate and equivalent sl@0: // sl@0: // sl@0: sl@0: sl@0: #include sl@0: #include sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include "t_UnitSipUri.h" sl@0: sl@0: TBuf16<256> gFullUri16; sl@0: TBuf16<256> gFullUriRhs16; sl@0: TBuf16<256> gUriComponent16; sl@0: sl@0: _LIT(KTestName,"SIP Uri Unit Tests"); sl@0: LOCAL_D RTest test(KTestName); sl@0: sl@0: void ParseUriTests16BitL() sl@0: { sl@0: test.Next(_L("Parsing 16 bit URIs")); sl@0: gFullUri16.Copy(KUri0); sl@0: CUri8* uri = UriUtils::CreateUriL(gFullUri16); sl@0: CleanupStack::PushL(uri); sl@0: sl@0: gUriComponent16.Copy(KScheme0); sl@0: HBufC* text = uri->Uri().DisplayFormL(EUriScheme); sl@0: TInt result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentScheme; sl@0: delete text; sl@0: User::LeaveIfError(result); sl@0: sl@0: gUriComponent16.Copy(KUserInfo0); sl@0: text = uri->Uri().DisplayFormL(EUriUserinfo); sl@0: result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentUserInfo; sl@0: delete text; sl@0: User::LeaveIfError(result); sl@0: sl@0: gUriComponent16.Copy(KHost0); sl@0: text = uri->Uri().DisplayFormL(EUriHost); sl@0: result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentHost; sl@0: delete text; sl@0: User::LeaveIfError(result); sl@0: sl@0: gUriComponent16.Copy(KPort0); sl@0: text = uri->Uri().DisplayFormL(EUriPort); sl@0: result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentPort; sl@0: delete text; sl@0: User::LeaveIfError(result); sl@0: sl@0: gUriComponent16.Copy(KParams0); sl@0: text = uri->Uri().DisplayFormL(EUriPath); sl@0: result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentPath; sl@0: delete text; sl@0: User::LeaveIfError(result); sl@0: sl@0: gUriComponent16.Copy(KHeaders0); sl@0: text = uri->Uri().DisplayFormL(EUriQuery); sl@0: result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentQuery; sl@0: delete text; sl@0: User::LeaveIfError(result); sl@0: CleanupStack::PopAndDestroy(uri); sl@0: } sl@0: sl@0: void ParseUriTestsDeprecated() sl@0: { sl@0: test.Next(_L("Parsing 16 bit URIs (deprecated)")); sl@0: gFullUri16.Copy(KUri0); sl@0: TUriParser16 parser16; sl@0: parser16.Parse(gFullUri16); sl@0: gUriComponent16.Copy(KScheme0); sl@0: TInt result = parser16.Extract(EUriScheme).Compare(gUriComponent16); sl@0: test(!result); sl@0: gUriComponent16.Copy(KUserInfo0); sl@0: result = parser16.Extract(EUriUserinfo).Compare(gUriComponent16); sl@0: test(!result); sl@0: gUriComponent16.Copy(KHost0); sl@0: result = parser16.Extract(EUriHost).Compare(gUriComponent16); sl@0: test(!result); sl@0: gUriComponent16.Copy(KPort0); sl@0: result = parser16.Extract(EUriPort).Compare(gUriComponent16); sl@0: test(!result); sl@0: gUriComponent16.Copy(KParams0); sl@0: result = parser16.Extract(EUriPath).Compare(gUriComponent16); sl@0: test(!result); sl@0: gUriComponent16.Copy(KHeaders0); sl@0: result = parser16.Extract(EUriQuery).Compare(gUriComponent16); sl@0: test(!result); sl@0: } sl@0: sl@0: void ParseUriTests() sl@0: { sl@0: test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0001 Parsing 8 bit URIs")); sl@0: TUriParser8 parser8; sl@0: parser8.Parse(KUri0); sl@0: TInt result = parser8.Extract(EUriScheme).Compare(KScheme0); sl@0: test(!result); sl@0: result = parser8.Extract(EUriUserinfo).Compare(KUserInfo0); sl@0: test(!result); sl@0: result = parser8.Extract(EUriHost).Compare(KHost0); sl@0: test(!result); sl@0: result = parser8.Extract(EUriPort).Compare(KPort0); sl@0: test(!result); sl@0: result = parser8.Extract(EUriPath).Compare(KParams0); sl@0: test(!result); sl@0: result = parser8.Extract(EUriQuery).Compare(KHeaders0); sl@0: test(!result); sl@0: result =parser8.Parse(KParseUri); sl@0: test(!result); sl@0: ParseUriTestsDeprecated(); sl@0: TRAP (result ,ParseUriTests16BitL()); sl@0: test(result == KErrNone); sl@0: } sl@0: sl@0: void GenarateUriTestsL() sl@0: { sl@0: test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0002 Generating 8 bit URIs")); sl@0: CUri8* uri8 = CUri8::NewLC(); sl@0: uri8->SetComponentL(KScheme0, EUriScheme); sl@0: uri8->SetComponentL(KHost0, EUriHost); sl@0: uri8->SetComponentL(KUserInfo0, EUriUserinfo); sl@0: uri8->SetComponentL(KPort0, EUriPort); sl@0: uri8->SetComponentL(KParams0, EUriPath); sl@0: uri8->SetComponentL(KHeaders0, EUriQuery); sl@0: const TDesC8& des8 = uri8->Uri().UriDes(); sl@0: TInt result = des8.Compare(KUri0); sl@0: test(!result); sl@0: CleanupStack::PopAndDestroy(uri8); sl@0: sl@0: test.Next(_L("Generating 16 bit URIs")); sl@0: CUri16* uri16 = CUri16::NewLC(); sl@0: gUriComponent16.Copy(KScheme0); sl@0: uri16->SetComponentL(gUriComponent16, EUriScheme); sl@0: gUriComponent16.Copy(KHost0); sl@0: uri16->SetComponentL(gUriComponent16, EUriHost); sl@0: gUriComponent16.Copy(KUserInfo0); sl@0: uri16->SetComponentL(gUriComponent16, EUriUserinfo); sl@0: gUriComponent16.Copy(KPort0); sl@0: uri16->SetComponentL(gUriComponent16, EUriPort); sl@0: gUriComponent16.Copy(KParams0); sl@0: uri16->SetComponentL(gUriComponent16, EUriPath); sl@0: gUriComponent16.Copy(KHeaders0); sl@0: uri16->SetComponentL(gUriComponent16, EUriQuery); sl@0: const TDesC16& des16 = uri16->Uri().UriDes(); sl@0: gFullUri16.Copy(KUri0); sl@0: result = des16.Compare(gFullUri16); sl@0: test(!result); sl@0: CleanupStack::PopAndDestroy(uri16); sl@0: } sl@0: sl@0: void ValidateTest(const TDesC8& aUri, TInt aErrorToAssert) sl@0: { sl@0: TUriParser8 parser8; sl@0: TUriParser16 parser16; sl@0: parser8.Parse(aUri); sl@0: TInt result = parser8.Validate(); sl@0: test(result == aErrorToAssert); sl@0: gFullUri16.Copy(aUri); sl@0: parser16.Parse(gFullUri16); sl@0: result = parser16.Validate(); sl@0: test(result == aErrorToAssert); sl@0: } sl@0: sl@0: void ValidateSip8Test(const TDesC8& aUri, TInt aErrorToAssert) sl@0: { sl@0: TUriParser8 parser8; sl@0: parser8.Parse(aUri); sl@0: TInt result = parser8.Validate(); sl@0: test(result == aErrorToAssert); sl@0: } sl@0: sl@0: void ValidateUriTests() sl@0: { sl@0: test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0003 Validate URIs 8 and 16 bit")); sl@0: sl@0: test.Next(_L("[Validate] Check full correct URI")); sl@0: ValidateTest(KVldUri0, KErrNone); sl@0: sl@0: test.Next(_L("[Validate] Check unsupported scheme")); sl@0: ValidateTest(KVldNotSupported, KErrNotSupported); sl@0: sl@0: test.Next(_L("[Validate] Check invalid hosts")); sl@0: ValidateTest(KVldInvalidHost0, KUriUtilsErrInvalidHost); sl@0: ValidateTest(KVldInvalidHost1, KUriUtilsErrInvalidHost); sl@0: ValidateTest(KVldInvalidHost2, KUriUtilsErrInvalidHost); sl@0: ValidateTest(KVldInvalidHost3, KUriUtilsErrInvalidHost); sl@0: ValidateTest(KVldInvalidHost4, KUriUtilsErrInvalidHost); sl@0: ValidateSip8Test(KVldInvalidHost5, KUriUtilsErrInvalidHost ); sl@0: sl@0: test.Next(_L("[Validate] Check valid hosts")); sl@0: ValidateTest(KVldValidHost0, KErrNone); sl@0: ValidateTest(KVldValidHost1, KErrNone); sl@0: ValidateTest(KVldValidHost2, KErrNone); sl@0: sl@0: test.Next(_L("[Validate] Check invalid ports")); sl@0: ValidateTest(KVldInvalidPort0, KUriUtilsErrInvalidPort); sl@0: ValidateTest(KVldInvalidNoPort, KUriUtilsErrInvalidPort); sl@0: test.Next(_L("[Validate] Check valid ports")); sl@0: ValidateTest(KVldValidPort0, KErrNone); sl@0: sl@0: test.Next(_L("[Validate] Check invalid usernames and passwords")); sl@0: ValidateTest(KVldInvalidUserInfo0, KUriUtilsErrInvalidUserInfo); sl@0: ValidateTest(KVldInvalidUserInfo1, KUriUtilsErrInvalidUserInfo); sl@0: ValidateTest(KVldInvalidUserInfo2, KUriUtilsErrInvalidUserInfo); sl@0: ValidateTest(KVldInvalidUserInfo3, KUriUtilsErrInvalidUserInfo); sl@0: test.Next(_L("[Validate] Check valid usernames and passwords")); sl@0: ValidateTest(KVldValidUserInfo0, KErrNone); sl@0: ValidateTest(KVldValidUserInfo1, KErrNone); sl@0: ValidateTest(KVldValidUserInfo2, KErrNone); sl@0: ValidateTest(KVldValidUserInfo3, KErrNone); sl@0: sl@0: test.Next(_L("[Validate] Check invalid parameters")); sl@0: ValidateTest(KVldInvalidParams0, KUriUtilsErrInvalidParam); sl@0: ValidateTest(KVldInvalidParams1, KUriUtilsErrInvalidParam); sl@0: ValidateTest(KVldInvalidParams2, KUriUtilsErrInvalidParam); sl@0: ValidateTest(KVldInvalidParams3, KUriUtilsErrInvalidParam); sl@0: ValidateTest(KVldInvalidParams4, KUriUtilsErrInvalidParam); sl@0: ValidateTest(KVldInvalidParams5, KUriUtilsErrInvalidParam); sl@0: test.Next(_L("[Validate] Check valid parameters")); sl@0: ValidateTest(KVldValidParams0, KErrNone); sl@0: ValidateTest(KVldValidParams1, KErrNone); sl@0: ValidateTest(KVldValidParams2, KErrNone); sl@0: sl@0: test.Next(_L("[Validate] Check invalid headers")); sl@0: ValidateTest(KVldInvalidHeaders0, KUriUtilsErrInvalidHeaders); sl@0: ValidateTest(KVldInvalidHeaders1, KUriUtilsErrInvalidHeaders); sl@0: ValidateTest(KVldInvalidHeaders2, KUriUtilsErrInvalidHeaders); sl@0: test.Next(_L("[Validate] Check valid headers")); sl@0: ValidateTest(KVldValidHeaders0, KErrNone); sl@0: ValidateTest(KVldValidHeaders1, KErrNone); sl@0: ValidateTest(KVldValidHeaders2, KErrNone); sl@0: ValidateTest(KVldValidHeaders3, KErrNone); sl@0: sl@0: test.Next(_L("[Validate] General tests")); sl@0: ValidateTest(KVldInvalidGeneral1, KUriUtilsErrInvalidPort); sl@0: ValidateTest(KVldInvalidGeneral2, KUriUtilsErrInvalidHost); sl@0: ValidateTest(KVldValidGeneral1, KErrNone); sl@0: } sl@0: sl@0: void EquivalenceTest(const TDesC8& aLhs, const TDesC8& aRhs, TInt aExpected) sl@0: { sl@0: TUriParser8 lhs8; sl@0: lhs8.Parse(aLhs); sl@0: TUriParser8 rhs8; sl@0: rhs8.Parse(aRhs); sl@0: TInt result = lhs8.Equivalent(rhs8); sl@0: test(result == aExpected); sl@0: sl@0: TUriParser16 lhs16; sl@0: gFullUri16.Copy(aLhs); sl@0: lhs16.Parse(gFullUri16); sl@0: TUriParser16 rhs16; sl@0: gFullUriRhs16.Copy(aRhs); sl@0: rhs16.Parse(gFullUriRhs16); sl@0: sl@0: result = lhs16.Equivalent(rhs16); sl@0: test(result == aExpected); sl@0: } sl@0: sl@0: void EquivalenceUriTests() sl@0: { sl@0: test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0004 Equivalent URIs 8 and 16 bit")); sl@0: EquivalenceTest(KEquivUri0, KEquivUri0, KErrNone); sl@0: EquivalenceTest(KEquivUri0, KEquivScheme0, KErrNone); sl@0: sl@0: test.Next(_L("[Equivalent] Compare user names and passwords")); sl@0: EquivalenceTest(KEquivUri0, KEquivUserInfo0, KUriUtilsErrDifferentUserInfo); sl@0: EquivalenceTest(KEquivUri0, KEquivUserInfo1, KUriUtilsErrDifferentUserInfo); sl@0: sl@0: test.Next(_L("[Equivalent] Compare hosts")); sl@0: EquivalenceTest(KEquivUri0, KEquivHost0, KErrNone); sl@0: EquivalenceTest(KEquivUri1, KEquivHost0, KUriUtilsErrDifferentHost); sl@0: EquivalenceTest(KEquivUri1, KEquivHost1, KErrNone); sl@0: sl@0: test.Next(_L("[Equivalent] Compare hosts")); sl@0: EquivalenceTest(KEquivUri0, KEquivPort0, KUriUtilsErrDifferentPort); sl@0: sl@0: test.Next(_L("[Equivalent] Compare parameters")); sl@0: EquivalenceTest(KEquivUri0, KEquivParam0, KErrNone); sl@0: EquivalenceTest(KEquivUri0, KEquivParam1, KErrNone); sl@0: EquivalenceTest(KEquivUri0, KEquivParam2, KUriUtilsErrDifferentPath); sl@0: EquivalenceTest(KEquivUri0, KEquivParam3, KUriUtilsErrDifferentPath); sl@0: EquivalenceTest(KEquivParam4, KEquivParam5, KErrNone); sl@0: EquivalenceTest(KEquivParam4, KEquivParam6, KErrNone); sl@0: EquivalenceTest(KEquivParam4, KEquivParam7, KUriUtilsErrDifferentPath); sl@0: EquivalenceTest(KEquivParam4, KEquivParam8, KUriUtilsErrDifferentPath); sl@0: EquivalenceTest(KEquivParam4, KEquivParam9, KUriUtilsErrDifferentPath); sl@0: EquivalenceTest(KEquivParam7, KEquivParam4, KUriUtilsErrDifferentPath); sl@0: EquivalenceTest(KEquivParam4, KEquivParam10, KErrNone); sl@0: EquivalenceTest(KEquivParam4, KEquivParam11, KUriUtilsErrDifferentPath); sl@0: EquivalenceTest(KEquivParam12, KEquivParam13, KUriUtilsErrDifferentPath); sl@0: EquivalenceTest(KEquivParam4, KEquivParam14, KUriUtilsErrDifferentPath); sl@0: EquivalenceTest(KEquivParam14, KEquivParam4, KUriUtilsErrDifferentPath); sl@0: sl@0: test.Next(_L("[Equivalent] Compare headers")); sl@0: EquivalenceTest(KEquivHeader0, KEquivHeader1, KErrNone); sl@0: EquivalenceTest(KEquivHeader0, KEquivHeader2, KUriUtilsErrDifferentQuery); sl@0: EquivalenceTest(KEquivHeader2, KEquivHeader0, KUriUtilsErrDifferentQuery); sl@0: EquivalenceTest(KEquivHeader2, KEquivHeader3, KErrNone); sl@0: EquivalenceTest(KEquivHeader3, KEquivHeader2, KErrNone); sl@0: EquivalenceTest(KEquivHeader4, KEquivHeader5, KErrNone); sl@0: EquivalenceTest(KEquivHeader4, KEquivHeader6, KErrNone); sl@0: EquivalenceTest(KEquivHeader4, KEquivHeader7, KUriUtilsErrDifferentQuery); sl@0: sl@0: test.Next(_L("[Equivalent] Expanded URIs")); sl@0: EquivalenceTest(KEquivUri0, KEquivExpand0, KErrNone); sl@0: EquivalenceTest(KEquivExpand0, KEquivUri0, KErrNone); sl@0: EquivalenceTest(KEquivUri0, KEquivExpand1, KErrNone); sl@0: EquivalenceTest(KEquivUri0, KEquivExpand2, KUriUtilsErrDifferentUserInfo); sl@0: EquivalenceTest(KEquivExpand3, KEquivExpand4, KErrNone); sl@0: EquivalenceTest(KEquivExpand4, KEquivExpand3, KErrNone); sl@0: sl@0: test.Next(_L("[Equivalent] General tests")); sl@0: EquivalenceTest(KEquivGeneral1, KEquivGeneral2, KUriUtilsErrDifferentPort); sl@0: } sl@0: sl@0: void doMainL() sl@0: { sl@0: test.Start(_L("Starting unit tests")); sl@0: sl@0: ParseUriTests(); sl@0: GenarateUriTestsL(); sl@0: ValidateUriTests(); sl@0: EquivalenceUriTests(); sl@0: sl@0: test.End(); sl@0: test.Close(); sl@0: } sl@0: sl@0: GLDEF_C TInt E32Main() sl@0: // sl@0: // Main function sl@0: { sl@0: __UHEAP_MARK; sl@0: sl@0: CTrapCleanup* theCleanup=CTrapCleanup::New(); sl@0: TRAPD(ret,doMainL()); sl@0: test(ret==KErrNone); sl@0: delete theCleanup; sl@0: sl@0: __UHEAP_MARKEND; sl@0: sl@0: return KErrNone; sl@0: } sl@0: