--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/t_contactat.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -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 <e32test.h>
+#include <cntdef.h>
+#include <cntdb.h>
+#include <cntitem.h>
+#include <cntfield.h>
+#include <cntfldst.h>
+#include <cntviewbase.h>
+
+_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;
+ }
+