diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookengines/contactsmodel/tsrc/t_contactat.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/contactsmodel/tsrc/t_contactat.cpp Wed Sep 01 12:29:52 2010 +0100 @@ -0,0 +1,156 @@ +// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include +#include +#include +#include +#include +#include +#include + +_LIT(KTestName, "CContactRemoteView::ContactAtL Tests"); + +_LIT(KTestDbName, "c:contactat.cdb"); + +LOCAL_D RTest test(KTestName); + + +class CTestResources : public CBase , public MContactViewObserver + { +public: + static CTestResources* NewLC(); + void ConstructL(); + void CreateTestContactsL(); + ~CTestResources(); + void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent); + CContactDatabase* iDb; + TContactItemId iAddedContact; + RContactViewSortOrder iViewSortOrder; + CContactRemoteView* iRemoteView; + }; + +CTestResources* CTestResources::NewLC() + { + CTestResources* self = new(ELeave) CTestResources; + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +void CTestResources::ConstructL() + { + iDb = CContactDatabase::ReplaceL(KTestDbName); + + iViewSortOrder.AppendL(KUidContactFieldFamilyName); + iViewSortOrder.AppendL(KUidContactFieldGivenName); + iViewSortOrder.AppendL(KUidContactFieldCompanyName); + + iRemoteView = CContactRemoteView::NewL(*this, *iDb, iViewSortOrder, EContactsOnly); + CreateTestContactsL(); + } + +/** + * Create a test contact with a Euro character name field. + * This bug can be reproduced with most of the cyrillic characters also. + */ +void CTestResources::CreateTestContactsL() + { + const TInt KContacts = 1; + TInt i; + for (i=1; i <= KContacts; ++i) + { + CContactCard* card = CContactCard::NewLC(); + CContactItemField* field = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldFamilyName); + _LIT(KName, "\x20a0"); //Euro character + field->TextStorage()->SetTextL(KName); + card->AddFieldL(*field); + CleanupStack::Pop(field); + iAddedContact = iDb->AddNewContactL(*card); + CleanupStack::PopAndDestroy(card); + } + } + +CTestResources::~CTestResources() + { + if (iRemoteView) + { + iRemoteView->Close(*this); + } + iViewSortOrder.Close(); + delete iDb; + TRAP_IGNORE(CContactDatabase::DeleteDatabaseL(KTestDbName)); + } + +void CTestResources::HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent) + { + if (&aView == iRemoteView && aEvent.iEventType == TContactViewEvent::EItemAdded) + { + TInt index(0); + TRAPD(error, index = iRemoteView->FindL(iAddedContact) ); + test(error == KErrNone); + TRAP(error, iRemoteView->ContactAtL(index)); + test(error == KErrNone); + + __ASSERT_ALWAYS(error==KErrNone,User::Invariant()); + CActiveScheduler::Stop(); + } + } + +/** + +@SYMTestCaseID PIM-T-CONTACTAT-0001 + +*/ + +void DoTestsL() + { + test.Start(_L("@SYMTESTCaseID:PIM-T-CONTACTAT-0001 Test CContactRemoteView::ContactAtL")); + + test.Next(_L("Add a contact with euro sign to db")); + + CTestResources* res = CTestResources::NewLC(); + CActiveScheduler::Start(); + CleanupStack::PopAndDestroy(res); + test.End(); + test.Close(); + } + +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + CTrapCleanup* cleanupStack = CTrapCleanup::New(); + if (!cleanupStack) + { + return KErrNoMemory; + } + + CActiveScheduler* activeScheduler = new CActiveScheduler; + if (!activeScheduler) + { + return KErrNoMemory; + } + CActiveScheduler::Install(activeScheduler); + + // Run the tests + TRAPD(err, DoTestsL()); + + // Cleanup + delete activeScheduler; + delete cleanupStack; + __UHEAP_MARKEND; + return err; + } +