phonebookengines_old/contactsmodel/tsrc/t_groupviewmodifiedContact.cpp
changeset 40 b46a585f6909
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines_old/contactsmodel/tsrc/t_groupviewmodifiedContact.cpp	Fri Jun 11 13:29:23 2010 +0300
@@ -0,0 +1,361 @@
+// Copyright (c) 2000-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 <e32std.h>
+#include <e32math.h>
+#include <e32test.h>
+#include <cntdb.h>
+#include <cntitem.h>
+#include <cntfldst.h>
+#include "t_utils2.h"
+#include <cntview.h>
+#include <cntviewbase.h>
+
+#include "t_groupviewmodifiedContact.h"
+
+// Test Macro
+LOCAL_D RTest test(_L("T_GROUPVIEWMODIFIEDCONTACT"));
+
+//
+// Constants.
+//
+_LIT(KTestName,"@SYMTESTCaseID:PIM-T-GROUPVIEWMODIFIEDCONTACT-0001 t_groupviewmodifiedcontact");
+_LIT(KLogFileName,"t_groupviewmodifiedcontact.log");
+
+_LIT(KDbFileName,"c:t_groupview.cdb");
+
+_LIT(KGroupOneName,"GroupOne");
+
+
+//
+// CTestConductor.
+//
+
+CTestConductor* CTestConductor::NewL()
+	{
+	CTestConductor* self=new(ELeave) CTestConductor();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	self->RunTestsL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+CTestConductor::~CTestConductor()
+	{
+	delete iLog;
+	delete iDb;
+    TRAP_IGNORE(CContactDatabase::DeleteDatabaseL(KDbFileName));
+	iFs.Close();
+	}
+
+CTestConductor::CTestConductor()
+	{
+	}
+
+void CTestConductor::ConstructL()
+	{
+	User::LeaveIfError(iFs.Connect());
+	iLog=CLog::NewL(test,KLogFileName);
+	iDb=CContactDatabase::ReplaceL(KDbFileName);
+	}
+
+
+void CTestConductor::RunTestsL()
+	{
+	CGroupViewTester* tester=CGroupViewTester::NewL(*iLog, this, *iDb);
+	CleanupStack::PushL(tester);
+	CActiveScheduler::Start();
+	CleanupStack::Pop(tester);
+	// error from CGroupViewTester?
+	User::LeaveIfError(iTestError);
+	}
+
+void CTestConductor::SetTestError(TInt aTestError)
+	{
+	iTestError = aTestError;
+	}
+
+
+//
+// CGroupViewTester.
+//
+
+CGroupViewTester* CGroupViewTester::NewL(CLog& aLog, CTestConductor* aTestConductor, CContactDatabase& aDb)
+	{
+	CGroupViewTester* self=new(ELeave) CGroupViewTester(aLog, aTestConductor, aDb);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+CGroupViewTester::~CGroupViewTester()
+	{
+	iGroupViewOne->Close(*this);
+
+	iLocalView->Close(*this);
+	iSortOrder_1.Close();
+
+	delete iGroupOne;
+	}
+
+CGroupViewTester::CGroupViewTester(CLog& aLog, CTestConductor* aTestConductor, CContactDatabase& aDb)
+	: CActive(EPriorityStandard),iLog(aLog),iTestConductor(aTestConductor),iDb(aDb),iCurrentTest(-1)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CGroupViewTester::ConstructL()
+	{
+	iSortOrder_1.AppendL(KUidContactFieldGivenName);
+	iSortOrder_1.AppendL(KUidContactFieldFamilyName);
+	iSortOrder_1.AppendL(KUidContactFieldCompanyName);
+	NextTest();
+	}
+
+
+void CGroupViewTester::RunL()
+	{
+	switch (iCurrentTest)
+		{
+		case ECreateLocalView:
+			iLog.LogLine(_L("=== Create local view"));
+			iLocalView=CContactLocalView::NewL(*this,iDb,iSortOrder_1,EContactAndGroups/*EContactsOnly*/);
+			break;
+
+		case ECreateGroupOne:
+			iLog.LogLine(_L("==== Create Group \n"));
+			iGroupOne = STATIC_CAST(CContactGroup*,iDb.CreateContactGroupL(KGroupOneName));
+			iGroupOneId = iGroupOne->Id();
+			delete iGroupOne;
+			iGroupOne = NULL;
+			iGroupOne = STATIC_CAST(CContactGroup*,iDb.ReadContactL(iGroupOneId));
+
+			break;
+
+		case ECreateGroupOneView:
+			{
+			iLog.LogLine(_L("=== GroupOneView"));
+			iGroupViewOne=CContactGroupView::NewL(iDb,*iLocalView,*this,iGroupOne->Id(),CContactGroupView::EShowContactsInGroup);
+			}
+			break;
+
+
+		case EAddContact:
+			{
+			iLog.LogLine(_L("==== Add Contact \n"));
+			CContactTemplate* templateContact=STATIC_CAST(CContactTemplate*,iDb.ReadContactL(iDb.TemplateId()));
+			CleanupStack::PushL(templateContact);
+			CTestContact* contact=CTestContact::NewLC(*templateContact);
+
+			contact->SetFirstNameL(_L("FirstName"));
+
+			contact->SetLastNameL(_L("LastName"));
+
+			contact->SetCompanyNameL(_L("CompanyName"));
+
+			contact->SetWorkPhoneL(_L("02079460090"));
+
+			contact->SetWorkMobileL(_L("02079460789"));
+
+			contact->SetHomePhoneL(_L("02079460987"));
+
+			contact->SetWorkEmailAddressL(_L("work@email.com"));
+
+			iSingleContactId = iDb.AddNewContactL(contact->ContactItem());
+
+			CleanupStack::PopAndDestroy(contact);
+			CleanupStack::PopAndDestroy(templateContact);
+			iNumNotificationExpected = 2; // Once for the total view, one for the group view.
+			}
+
+		break;
+
+		case EAddContactToGroupOne: // since we've only one contact anyway - we can be sure it's id will be 1.
+			iLog.LogLine(_L("==== Assign contact to Group \n"));
+			iDb.AddContactToGroupL(iSingleContactId,iGroupOne->Id());
+			iNumNotificationExpected = 6;
+		break;
+
+		case EModifyContactInGroupOne:
+			{
+			iLog.LogLine(_L("==== Modify Contact \n"));
+			CContactItem* contactToModify = iDb.OpenContactL(iSingleContactId);
+			CleanupStack::PushL(contactToModify);
+			CTestContact* testContactToModify = CTestContact::NewLC(*contactToModify);
+
+			CContactItemFieldSet& fields = contactToModify->CardFields();
+			CContactItemField& lastNameField = fields[fields.Find(KUidContactFieldFamilyName)];
+			CContactTextField* lastNameTextField = static_cast<CContactTextField*>(lastNameField.Storage());
+			lastNameTextField->SetText(_L("modified_lastname").AllocL());
+
+			iDb.CommitContactL(*contactToModify);
+			iDb.CloseContactL(1);
+			CleanupStack::PopAndDestroy(testContactToModify);
+			CleanupStack::PopAndDestroy(contactToModify);
+			iNumNotificationExpected = 4;
+			}
+
+		break;
+
+		case ENumTests:
+			iLog.LogLine(_L("==== Group View Modified Contact Tests Finished, All Passed...\n"));
+			CActiveScheduler::Stop();
+			delete this;
+			break;
+		default:
+			ASSERT(EFalse);
+			break;
+		}
+	}
+
+TInt CGroupViewTester::RunError(TInt aError)
+	{
+	// propagate error
+	iTestConductor->SetTestError(aError);
+
+	switch (iCurrentTest)
+		{
+		case ECreateLocalView: test.Printf(_L("Test failed at step CreateLocalView (%i) with error %i"), iCurrentTest, aError); break;
+		case ECreateGroupOne: test.Printf(_L("Test failed at step CreateGroupOne (%i) with error %i"), iCurrentTest, aError); break;
+		case ECreateGroupOneView: test.Printf(_L("Test failed at step CreateGroupOneView (%i) with error %i"), iCurrentTest, aError); break;
+		case EAddContact: test.Printf(_L("Test failed at step AddContact (%i) with error %i"), iCurrentTest, aError); break;
+		case EAddContactToGroupOne: test.Printf(_L("Test failed at step AddContactToGroupOne (%i) with error %i"), iCurrentTest, aError); break;
+		case EModifyContactInGroupOne: test.Printf(_L("Test failed at step ModifyContactInGroupOne (%i) with error %i"), iCurrentTest, aError); break;
+
+		case ENumTests: test.Printf(_L("Test failed at step NumTests (%i) with error %i"), iCurrentTest, aError); break;
+
+		default: test.Printf(_L("Test failed at step %i with error %i"), iCurrentTest, aError); break;
+		}
+
+	CActiveScheduler::Stop();
+	return KErrNone;
+	}
+
+void CGroupViewTester::HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent)
+	{
+	switch (iCurrentTest)
+		{
+		case ECreateLocalView:
+			iLog.LogLine(_L("==== Handling the local view creation \n"));
+			test(iLocalView==&aView);
+			test(aEvent.iEventType==TContactViewEvent::EReady);
+			break;
+
+		case ECreateGroupOne:
+			iLog.LogLine(_L("==== Handling the group creation \n"));
+		break;
+
+		case ECreateGroupOneView:
+			iLog.LogLine(_L("==== Handling the group view creation \n"));
+			test(iGroupViewOne==&aView);
+			test(aEvent.iEventType==TContactViewEvent::EReady);
+		break;
+
+		case EAddContactToGroupOne:
+			iLog.LogLine(_L("==== Handling the addition of a contact to the group \n"));
+		break;
+
+		case EAddContact:
+			iLog.LogLine(_L("==== Handling the addition of a contact \n"));
+		break;
+
+		case EModifyContactInGroupOne:
+		iLog.LogLine(_L("==== Handling Contact being modified. \n"));
+
+			switch (aEvent.iEventType)
+			{
+				case TContactViewEvent::EItemRemoved:
+					iLog.LogLine(_L("==== Contact Is removed for modify \n"));
+				break;
+
+				case TContactViewEvent::EItemAdded:
+					iLog.LogLine(_L("==== Contact Is added for modify \n"));
+					{
+					TInt numberOfEntries = 0;
+					TRAPD(err, numberOfEntries = aView.CountL() );
+					test(err == KErrNone && numberOfEntries != 0);
+					}
+				break;
+				default:
+					break;
+			}
+		break;
+
+		case ENumTests:
+		default:
+			test(EFalse);
+			break;
+		}
+	if (--iNumNotificationExpected<=0)
+		{
+		NextTest();
+		iNumNotificationExpected=0;
+		}
+	}
+
+void CGroupViewTester::NextTest()
+	{
+	++iCurrentTest;
+	TRequestStatus *pS=&iStatus;
+	User::RequestComplete(pS,KErrNone);
+	SetActive();
+	}
+
+
+
+
+
+
+void CGroupViewTester::DoCancel()
+	{
+	}
+
+//
+// Main.
+//
+
+/**
+
+@SYMTestCaseID     PIM-T-GROUPVIEWMODIFIEDCONTACT-0001
+
+*/
+
+GLDEF_C TInt E32Main()
+	{
+	__UHEAP_MARK;
+	CActiveScheduler* scheduler=new CActiveScheduler;
+	if (scheduler)
+		{
+		CActiveScheduler::Install(scheduler);
+		CTrapCleanup* cleanup=CTrapCleanup::New();
+		if (cleanup)
+			{
+			CTestConductor* testConductor=NULL;
+			test.Start(KTestName);
+
+			TRAPD(err,testConductor=CTestConductor::NewL());
+			test(err == KErrNone);
+			test.End();
+			test.Close();
+			delete testConductor;
+			delete cleanup;
+			}
+		delete scheduler;
+		}
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }