phonebookengines_old/contactsmodel/tsrc/t_contactat.cpp
changeset 40 b46a585f6909
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines_old/contactsmodel/tsrc/t_contactat.cpp	Fri Jun 11 13:29:23 2010 +0300
@@ -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;
+    }
+