pimappservices/calendar/tsrc/TestCalIndexFile/src/TestCalIndexFileModifyEntryStep.cpp
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendar/tsrc/TestCalIndexFile/src/TestCalIndexFileModifyEntryStep.cpp	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,259 @@
+// Copyright (c) 2006-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 "TestCalIndexFileModifyEntryStep.h"
+#include "TestCalIndexFileDefs.h"
+#include <fbs.h>
+#include <e32math.h>
+#include <calcategory.h>
+#include <caldataexchange.h>
+#include <caldataformat.h>
+#include <calsession.h>
+#include <s32file.h>
+#include <calinstance.h>
+#include <calinstanceview.h>
+#include <calentry.h>
+#include <calentryview.h>
+#include "caltestlib.h"
+
+
+CTestCalIndexFileModifyEntryStep::~CTestCalIndexFileModifyEntryStep()
+/**
+ * Destructor
+ */
+	{
+	}
+
+CTestCalIndexFileModifyEntryStep::CTestCalIndexFileModifyEntryStep()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KTestCalIndexFileModifyEntryStep);
+	}
+
+TVerdict CTestCalIndexFileModifyEntryStep::doTestStepPostambleL()
+	{
+	return TestStepResult();
+	}
+
+TVerdict CTestCalIndexFileModifyEntryStep::doTestStepL()
+	{
+	// this method assumes a pass. Checks that fail will stop
+	// the test step
+	
+	SetUpCalDirL();
+	
+	AddCalendarFileL();
+	AddIndexFileL();
+	OpenAgendaL();
+	
+	// use the base class version of ValidateDbContentsL as 
+	// we have not deleted the entry yet
+	if (!CTestCalIndexFileStepBase::ValidateDbContentsL())
+		{
+		INFO_PRINTF1(_L("Modify Entry Step Failed validating DB contents before entry modification"));
+		CloseAgendaL();
+		SetTestStepResult(EFail);
+		return EFail;
+		}
+		
+	ModifyEntryL();
+	// The index file should be deleted as it is now out of date.
+	// It will be rebuilt when the session closes.
+	if (CheckIndexFilePresentL())
+		{
+		INFO_PRINTF1(_L("Modify Entry Step Failed - index file present when dirty"));
+		CloseAgendaL();
+		SetTestStepResult(EFail);
+		return EFail;
+		}
+		
+	CloseAgendaL();
+	if (!CheckIndexFilePresentL())
+		{
+		INFO_PRINTF1(_L("Modify Entry Step Failed - no index file created after modify and close"));
+		SetTestStepResult(EFail);
+		return EFail;
+		}
+		
+	// make sure the added entry is still there
+	OpenAgendaL();
+	if (!ValidateDbContentsL())
+		{
+		INFO_PRINTF1(_L("Modify Entry Step Failed validating DB contents after modification"));
+		CloseAgendaL();
+		SetTestStepResult(EFail);
+		return EFail;
+		}	
+	CloseAgendaL();
+
+	SetTestStepResult(EPass);
+	return EPass;
+	}
+
+void CTestCalIndexFileModifyEntryStep::ModifyEntryL()
+	{
+	TPtrC entryString;
+	TBool readRes = EFalse;
+	readRes = GetStringFromConfig(ConfigSection(), KModifyEntry, entryString);
+	if (!readRes)
+		{
+		INFO_PRINTF1(_L("Error in CTestCalIndexFileModifyEntryStep::ModifyEntryL - entrytomodify not found in config file"));
+		User::Leave(KErrNotFound);
+		}
+	CConfigTestEntryInfo* inf = new(ELeave)CConfigTestEntryInfo();
+	CleanupStack::PushL(inf);
+	ParseEntryStringL(*inf, entryString);
+				
+	//  see if we can find a match in the database using an instance view
+		
+		CCalProgress* progress = new(ELeave)CCalProgress;
+		CleanupStack::PushL(progress);  
+	
+		CCalInstanceView* view = CCalInstanceView::NewL(*iSession, *progress);
+		CleanupStack::PushL(view);
+		
+		CActiveScheduler::Start();
+		
+		CalCommon::TCalViewFilter filter = CalCommon::EIncludeAppts;
+		switch (inf->iType)
+			{
+			case (CCalEntry::EAppt):
+				filter = CalCommon::EIncludeAppts;
+				break;
+			case (CCalEntry::ETodo):
+				filter = CalCommon::EIncludeCompletedTodos | CalCommon::EIncludeIncompletedTodos;
+				break;
+			case (CCalEntry::EEvent):
+				filter = CalCommon::EIncludeEvents;
+				break;
+			case (CCalEntry::EReminder):
+				filter = CalCommon::EIncludeReminder;
+				break;
+			case (CCalEntry::EAnniv):
+				filter = CalCommon::EIncludeAnnivs;
+				break;
+			default:
+				User::Leave(KErrCorrupt);
+				break;
+			}
+		RPointerArray<CCalInstance> instances;
+		CleanupClosePushL(instances);
+
+		// look for instances between (startdate -1 day) and
+		// (enddate + 1 day)
+		TTimeIntervalDays oneDay(1);
+		TTime beginTTime = (inf->iStartTime) - oneDay;
+		TTime endTTime = (inf->iEndTime) + oneDay;
+		TCalTime begin;
+		begin.SetTimeUtcL(beginTTime);
+		TCalTime end;
+		end.SetTimeUtcL(endTTime);
+		CalCommon::TCalTimeRange timerange(begin, end);	
+		
+		view->FindInstanceL(instances, filter, timerange);
+		
+		TInt counter = 0;
+		TInt max = instances.Count();
+		INFO_PRINTF2(_L("%d instances to compare against"),max);
+		TBool found = EFalse;
+		while ((found == EFalse) && (counter < max))
+			{
+			INFO_PRINTF2(_L("compare modify info to entry %d"), (counter+1));
+			if (inf->CompareToEntryL((instances[counter])->Entry()))
+				{
+				INFO_PRINTF2(_L("Entry info matched instance %d"), (counter+1));
+				found = ETrue;
+				
+				CCalProgress* progress1 = new(ELeave)CCalProgress;
+				CleanupStack::PushL(progress1);  
+				
+				CCalEntryView* eView = CCalEntryView::NewL(*iSession, *progress);
+				CleanupStack::PushL(eView);
+				
+				CActiveScheduler::Start();
+
+				CCalEntry* eEntry = &((instances[counter])->Entry());
+				eEntry->SetDescriptionL(KTCIModifiedText());
+				RPointerArray<CCalEntry> eList;
+				CleanupResetAndDestroyPushL(eList);
+				eList.Reset();
+				TInt numChanged = 0;
+				eList.Append(eEntry);
+				eView->UpdateL(eList, numChanged);
+				if (numChanged != 1)
+					{
+					INFO_PRINTF1(_L("Error modifiying entry"));
+					User::Leave(KErrGeneral);
+					}
+				CleanupStack::PopAndDestroy(&eList);
+				CleanupStack::PopAndDestroy(2);
+				}
+			else
+				{
+				counter++;
+				}
+			}
+		CleanupStack::PopAndDestroy(&instances);
+		CleanupStack::PopAndDestroy(view);
+		CleanupStack::PopAndDestroy(progress);
+	
+	CleanupStack::PopAndDestroy(inf);
+	
+	if (!found)
+		{
+		INFO_PRINTF1(_L("Could not find entrytomodify in database"));
+		User::Leave(KErrNotFound);
+		}
+	}
+	
+
+void CTestCalIndexFileModifyEntryStep::GetEntryInfoFromConfigL(RPointerArray<CConfigTestEntryInfo>& aEntriesInfo, TInt& aNumEntries, TBool aPerformCrudOps)
+	{
+	// first get the default entries from the file
+	CTestCalIndexFileStepBase::GetEntryInfoFromConfigL(aEntriesInfo, aNumEntries, aPerformCrudOps);
+	
+	if (aPerformCrudOps)
+		{
+		TInt entryToMod;
+		TBool readRes = EFalse;
+		readRes = GetIntFromConfig(ConfigSection(), KNumModifyEntry, entryToMod);
+		if (!readRes)
+			{
+			INFO_PRINTF1(_L("Error in CTestCalIndexFileModifyEntryStep::GetEntryInfoFromConfigL - entrynumtomodify not found in config file"));
+			User::Leave(KErrNotFound);
+			}
+			
+		if (entryToMod >= aNumEntries)
+			{
+			INFO_PRINTF1(_L("Error in CTestCalIndexFileDeleteEntryStep::GetEntryInfoFromConfigL - entrynumtomodify too big"));
+			User::Leave(KErrTooBig);
+			}
+
+		iEntryNumToMod = entryToMod-1;
+		CConfigTestEntryInfo* entryInfo = aEntriesInfo[iEntryNumToMod];
+		
+		TInt len = KTCIModifiedText().Length();
+		if (entryInfo->iDescription)
+			{
+			delete entryInfo->iDescription;
+			entryInfo->iDescription = NULL;
+			}
+		entryInfo->iDescription = HBufC::NewL(len);
+		*(entryInfo->iDescription) = KTCIModifiedText();
+
+		}
+	}