--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendar/tsrc/tCal_UndatedToDo.cpp Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,1040 @@
+// Copyright (c) 2005-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 "caltestlib.h"
+
+#include <calentry.h>
+#include <calentryview.h>
+#include <calinstance.h>
+#include <calinstanceview.h>
+#include <caliterator.h>
+#include <calprogresscallback.h>
+#include <calrrule.h>
+#include <calsession.h>
+#include <e32test.h>
+#include <tz.h>
+
+RTest test(_L("tcal_undatedtodo"));
+
+_LIT(KCalendarFile, "tcal_undatedtodo");
+_LIT(KDateFormat, "%02d:%02d %02d/%02d/%04d\0");
+
+class CTestApp : public CBase
+ {
+public:
+ static CTestApp* NewL();
+ ~CTestApp();
+
+ void DoTestsL();
+
+private:
+ void ConstructL();
+
+ void TestTodoSortOrderL(const CalCommon::TCalTimeRange& aSearchRange);
+ void TestFindInstanceNonRepeatingTodoL();
+ void TestFindInstanceRepeatingTodoL();
+ void TestNextInstanceL();
+
+ void CreateAndTestNonRptTodoL(const TTime& aStartTime, const TTime& aEndTime, const TTime& aCompletedTime, const CalCommon::TCalTimeRange& aTimeRange, TBool aExpected);
+ CCalEntry* CreateTodoLC(const TTime& aStartTime, const TTime& aEndTime, const TTime& aCompletedTime);
+
+ void CreateAndTestRptTodoL(const TTime& aStartTime, const TTime& aEndTime, const TTime& aCompletedTime, TCalRRule::TType aRepeatType, TInt aInterval, TInt aCount, const CalCommon::TCalTimeRange& aTimeRange, RArray<TTime> aExpectedLocalInstanceTimes);
+ CCalEntry* CreateRepeatingTodoLC(const TTime& aStartTime, const TTime& aEndTime, const TTime& aCompletedTime, TCalRRule::TType aRepeatType, TInt aInterval, TInt aCount);
+
+ void PrintDetailsInstancesL(const RPointerArray<CCalInstance>& aInstanceList);
+ HBufC* TimeBufLC(const TTime& aLocalTime);
+
+private: // member data
+ CCalTestLibrary* iTestLib;
+
+ CCalEntryView* iEntryView; // not owned
+ CCalInstanceView* iInstanceView;// not owned
+
+ TTime iToday;
+ };
+
+CTestApp* CTestApp::NewL()
+ {
+ CTestApp* app = new (ELeave) CTestApp();
+ CleanupStack::PushL(app);
+ app->ConstructL();
+ CleanupStack::Pop(app);
+ return app;
+ }
+
+CTestApp::~CTestApp()
+ {
+ delete iTestLib;
+ }
+
+void CTestApp::ConstructL()
+ {
+ iTestLib = CCalTestLibrary::NewL();
+
+ iTestLib->ReplaceFileL(KCalendarFile());
+ iTestLib->OpenFileL(KCalendarFile());
+
+ iInstanceView = &iTestLib->SynCGetInstanceViewL();
+ iEntryView = &iTestLib->SynCGetEntryViewL();
+
+ iToday.HomeTime();
+ }
+
+HBufC* CTestApp::TimeBufLC(const TTime& aLocalTime)
+ {
+ TBuf<17> timeBuf;
+ TDateTime localDateTime = aLocalTime.DateTime();
+ timeBuf.AppendFormat(KDateFormat,
+ localDateTime.Hour(),
+ localDateTime.Minute(),
+ localDateTime.Day() + 1,
+ static_cast<TInt>(localDateTime.Month()) + 1,
+ localDateTime.Year());
+
+ return timeBuf.AllocLC();
+ }
+
+void CTestApp::PrintDetailsInstancesL(const RPointerArray<CCalInstance>& aInstanceList)
+ {
+ const TInt KInstanceCount(aInstanceList.Count());
+
+ if (KInstanceCount == 0)
+ {
+ test.Printf(_L("No instances found!"));
+ }
+ else
+ {
+ test.Printf(_L("%d instances found"), KInstanceCount);
+
+ // print the entry details
+ if (aInstanceList[0]->Entry().EndTimeL().TimeLocalL() != Time::NullTTime())
+ {
+ // get the instance and entry due dates as strings
+ HBufC* entryEndTimeBuf = TimeBufLC(aInstanceList[0]->Entry().EndTimeL().TimeLocalL());
+
+ // does entry have start time?
+ TCalTime entryStartTime = aInstanceList[0]->Entry().StartTimeL();
+ if (entryStartTime.TimeLocalL() == Time::NullTTime())
+ {
+ test.Printf(_L("Entry due date := %s"), entryEndTimeBuf->Ptr());
+ }
+ else
+ {
+ // get the instance and entry start times as strings
+ HBufC* entryStartTimeBuf = TimeBufLC(aInstanceList[0]->Entry().StartTimeL().TimeLocalL());
+
+ test.Printf(_L("Entry start and due date := %s - %s"), entryStartTimeBuf->Ptr(), entryEndTimeBuf->Ptr());
+ CleanupStack::PopAndDestroy(entryStartTimeBuf);
+ }
+
+ CleanupStack::PopAndDestroy(entryEndTimeBuf);
+ }
+ else
+ {
+ test.Printf(_L("undated entry"));
+ }
+ }
+
+ for (TInt i(0) ; i < KInstanceCount ; ++i)
+ {
+ if (aInstanceList[i]->Entry().EndTimeL().TimeLocalL() != Time::NullTTime())
+ {
+ // get the instance and entry due dates as strings
+ HBufC* instanceEndTimeBuf = TimeBufLC(aInstanceList[i]->EndTimeL().TimeLocalL());
+
+ // does entry have start time?
+ TCalTime entryStartTime = aInstanceList[i]->Entry().StartTimeL();
+ if (entryStartTime.TimeLocalL() == Time::NullTTime())
+ {
+ test.Printf(_L("Instance %d due date := %s"), i + 1, instanceEndTimeBuf->Ptr());
+ }
+ else
+ {
+ // get the instance and entry start times as strings
+ HBufC* instanceStartTimeBuf = TimeBufLC(aInstanceList[i]->StartTimeL().TimeLocalL());
+
+ test.Printf(_L("Instance %d start and due date := %s - %s"), i + 1, instanceStartTimeBuf->Ptr(), instanceEndTimeBuf->Ptr());
+ CleanupStack::PopAndDestroy(instanceStartTimeBuf);
+ }
+
+ CleanupStack::PopAndDestroy(instanceEndTimeBuf);
+ }
+ else
+ {
+ test.Printf(_L("undated"));
+ }
+
+ // display the completed time if the is one
+ TTime completedTimeLocal = aInstanceList[i]->Entry().CompletedTimeL().TimeLocalL();
+ if (completedTimeLocal != Time::NullTTime())
+ {
+ HBufC* completedTimeBuf = TimeBufLC(completedTimeLocal);
+ test.Printf(_L("Completed time = %s"), completedTimeBuf->Ptr());
+ CleanupStack::PopAndDestroy(completedTimeBuf);
+ }
+ else
+ {
+ test.Printf(_L("incomplete"));
+ }
+ }
+ }
+
+CCalEntry* CTestApp::CreateTodoLC(const TTime& aStartTime, const TTime& aEndTime, const TTime& aCompletedTime)
+ {
+ HBufC8* guid = NULL;
+ CCalEntry* entry = iTestLib->CreateCalEntryL(CCalEntry::ETodo, guid);
+ CleanupStack::PushL(entry);
+ TCalTime calStartTime;
+ calStartTime.SetTimeLocalL(aStartTime);
+ TCalTime calEndTime;
+ calEndTime.SetTimeLocalL(aEndTime);
+ entry->SetStartAndEndTimeL(calStartTime, calEndTime);
+
+ if (aCompletedTime != Time::NullTTime())
+ {
+ TCalTime calTime;
+ calTime.SetTimeLocalL(aCompletedTime);
+ entry->SetCompletedL(ETrue, calTime);
+ }
+
+ return entry;
+ }
+
+CCalEntry* CTestApp::CreateRepeatingTodoLC(const TTime& aStartTime, const TTime& aEndTime, const TTime& aCompletedTime, TCalRRule::TType aRepeatType, TInt aInterval, TInt aCount)
+ {
+ HBufC8* guid = NULL;
+ CCalEntry* entry = iTestLib->CreateCalEntryL(CCalEntry::ETodo, guid);
+ CleanupStack::PushL(entry);
+ TCalTime calStartTime;
+ calStartTime.SetTimeLocalL(aStartTime);
+ TCalTime calEndTime;
+ calEndTime.SetTimeLocalL(aEndTime);
+ entry->SetStartAndEndTimeL(calStartTime, calEndTime);
+
+ TCalRRule rRule(aRepeatType);
+ rRule.SetDtStart(calEndTime);
+ rRule.SetInterval(aInterval);
+ rRule.SetCount(aCount);
+
+ switch (aRepeatType)
+ {
+ case TCalRRule::EWeekly:
+ {
+ RArray<TDay> days;
+ CleanupClosePushL(days);
+ days.AppendL(aEndTime.DayNoInWeek());
+ rRule.SetByDay(days);
+ CleanupStack::PopAndDestroy(&days);
+ }
+ break;
+ case TCalRRule::EMonthly:
+ {
+ RArray<TInt> monthDays;
+ CleanupClosePushL(monthDays);
+ monthDays.AppendL(aEndTime.DayNoInMonth());
+ rRule.SetByMonthDay(monthDays);
+ CleanupStack::PopAndDestroy(&monthDays);
+ }
+ break;
+ case TCalRRule::EYearly:
+ {
+ RArray<TMonth> months;
+ CleanupClosePushL(months);
+ months.AppendL(aEndTime.DateTime().Month());
+ rRule.SetByMonth(months);
+ CleanupStack::PopAndDestroy(&months);
+ }
+ break;
+ }
+
+ entry->SetRRuleL(rRule);
+
+ if (aCompletedTime != Time::NullTTime())
+ {
+ TCalTime calTime;
+ calTime.SetTimeLocalL(aCompletedTime);
+ entry->SetCompletedL(ETrue, calTime);
+ }
+
+ return entry;
+ }
+
+void CTestApp::TestTodoSortOrderL(const CalCommon::TCalTimeRange& aSearchRange)
+ {
+ RPointerArray<CCalEntry> entryArray;
+ CleanupClosePushL(entryArray);
+
+ // Create 3 TODOs 2 days in the past
+ // with different priorities
+ entryArray.AppendL(CreateTodoLC(iToday - TTimeIntervalDays(2), iToday - TTimeIntervalDays(2), Time::NullTTime()));
+ entryArray[entryArray.Count() - 1]->SetPriorityL(4);
+ entryArray.AppendL(CreateTodoLC(iToday - TTimeIntervalDays(2), iToday - TTimeIntervalDays(2), Time::NullTTime()));
+ entryArray[entryArray.Count() - 1]->SetPriorityL(2);
+ entryArray.AppendL(CreateTodoLC(iToday - TTimeIntervalDays(2), iToday - TTimeIntervalDays(2), Time::NullTTime()));
+ entryArray[entryArray.Count() - 1]->SetPriorityL(3);
+
+ // Create 3 TODOs 1 day in the past
+ // with different completed times
+ entryArray.AppendL(CreateTodoLC(iToday - TTimeIntervalDays(1), iToday - TTimeIntervalDays(1), iToday - TTimeIntervalDays(1) - TTimeIntervalMinutes(4)));
+ entryArray.AppendL(CreateTodoLC(iToday - TTimeIntervalDays(1), iToday - TTimeIntervalDays(1), iToday - TTimeIntervalDays(1) - TTimeIntervalMinutes(2)));
+ entryArray.AppendL(CreateTodoLC(iToday - TTimeIntervalDays(1), iToday - TTimeIntervalDays(1), iToday - TTimeIntervalDays(1) - TTimeIntervalMinutes(7)));
+
+ // Create 2 undated TODOs
+ entryArray.AppendL(CreateTodoLC(Time::NullTTime(), Time::NullTTime(), Time::NullTTime()));
+ entryArray.AppendL(CreateTodoLC(Time::NullTTime(), Time::NullTTime(), Time::NullTTime()));
+ // Create 2 undated TODOs
+ // with completed times
+ entryArray.AppendL(CreateTodoLC(Time::NullTTime(), Time::NullTTime(), iToday - TTimeIntervalMinutes(4)));
+ entryArray.AppendL(CreateTodoLC(Time::NullTTime(), Time::NullTTime(), iToday - TTimeIntervalMinutes(7)));
+
+ // Create a TODO in the future
+ entryArray.AppendL(CreateTodoLC(iToday + TTimeIntervalDays(2), iToday + TTimeIntervalDays(2), Time::NullTTime()));
+
+ TInt success(0);
+ iEntryView->StoreL(entryArray, success);
+ test(success == entryArray.Count());
+
+ CleanupStack::PopAndDestroy(entryArray.Count());
+ CleanupStack::PopAndDestroy(&entryArray);
+ RPointerArray<CCalInstance> instanceArray;
+ CleanupResetAndDestroyPushL(instanceArray);
+
+ iInstanceView->FindInstanceL(instanceArray, CalCommon::EIncludeAll, aSearchRange);
+
+ test.Printf(_L("Test we found the expected number of instances!"));
+ //test(instanceArray.Count() == 11);
+
+ const TInt KInstanceCount(instanceArray.Count());
+ for (TInt i(0) ; i < KInstanceCount ; ++i)
+ {
+ TDateTime dt = instanceArray[i]->Time().TimeLocalL().DateTime();
+ test.Printf(_L("the time of instance [%d] = %d:%d %d/%d/%d: \n"), i, dt.Hour(), dt.Minute(),dt.Day() + 1, dt.Month() + 1, dt.Year());
+ }
+
+ test.Printf(_L("Test the times of the todos"));
+ test(instanceArray[0]->Time().TimeLocalL() == iToday - TTimeIntervalDays(2));
+ test(instanceArray[1]->Time().TimeLocalL() == iToday - TTimeIntervalDays(2));
+ test(instanceArray[2]->Time().TimeLocalL() == iToday - TTimeIntervalDays(2));
+
+ // completed todos are sorted by completed time
+ test(instanceArray[3]->Time().TimeLocalL() == iToday - TTimeIntervalDays(1) - TTimeIntervalMinutes(7));
+ test(instanceArray[4]->Time().TimeLocalL() == iToday - TTimeIntervalDays(1) - TTimeIntervalMinutes(4));
+ test(instanceArray[5]->Time().TimeLocalL() == iToday - TTimeIntervalDays(1) - TTimeIntervalMinutes(2));
+
+ // due date should be Time::NullTTime but instance time should be set to completed time
+ test(instanceArray[6]->Entry().EndTimeL().TimeLocalL() == Time::NullTTime());
+ test(instanceArray[7]->Entry().EndTimeL().TimeLocalL() == Time::NullTTime());
+ test(instanceArray[6]->Time().TimeLocalL() == iToday - TTimeIntervalMinutes(7));
+ test(instanceArray[7]->Time().TimeLocalL() == iToday - TTimeIntervalMinutes(4));
+
+ test(instanceArray[8]->Entry().EndTimeL().TimeLocalL() == Time::NullTTime());
+ test(instanceArray[9]->Entry().EndTimeL().TimeLocalL() == Time::NullTTime());
+
+ test(instanceArray[10]->Time().TimeLocalL() == iToday + TTimeIntervalDays(2));
+
+ test.Printf(_L("Test the priority of the todos"));
+ test(instanceArray[0]->Entry().PriorityL() == 2);
+ test(instanceArray[1]->Entry().PriorityL() == 3);
+ test(instanceArray[2]->Entry().PriorityL() == 4);
+
+ CleanupStack::PopAndDestroy(&instanceArray);
+ }
+
+
+void CTestApp::CreateAndTestNonRptTodoL(const TTime& aStartTime, const TTime& aEndTime, const TTime& aCompletedTime, const CalCommon::TCalTimeRange& aTimeRange, TBool aExpected)
+ {
+ iTestLib->CleanDatabaseL();
+
+ // Create and store entry
+ RPointerArray<CCalEntry> entryArray;
+ CleanupResetAndDestroyPushL(entryArray);
+ CCalEntry* todo = CreateTodoLC(aStartTime, aEndTime, aCompletedTime);
+ entryArray.AppendL(todo);
+ CleanupStack::Pop(todo);
+ TInt numSuc;
+ iTestLib->SynCGetEntryViewL().StoreL(entryArray, numSuc);
+ CleanupStack::PopAndDestroy(&entryArray);
+
+ // find the todo
+ RPointerArray<CCalInstance> instanceList;
+ CleanupResetAndDestroyPushL(instanceList);
+ iTestLib->SynCGetInstanceViewL().FindInstanceL(instanceList, CalCommon::EIncludeAll, aTimeRange);
+ PrintDetailsInstancesL(instanceList);
+
+ if (aExpected)
+ {
+ // We are expecting an instance so test it
+ test(instanceList.Count() == 1);
+
+ // test the entry times
+ if (aEndTime != Time::NullTTime())
+ {
+ // dated
+ test(instanceList[0]->Entry().EndTimeL().TimeLocalL() == aEndTime);
+ }
+ else
+ {
+ // undated
+ test(instanceList[0]->Entry().StartTimeL().TimeLocalL() == Time::NullTTime());
+ test(instanceList[0]->Entry().EndTimeL().TimeLocalL() == Time::NullTTime());
+ }
+
+ // test the instance times
+ if (instanceList[0]->Entry().CompletedTimeL().TimeLocalL() == Time::NullTTime())
+ {
+ // incomplete
+ if (aEndTime != Time::NullTTime())
+ {
+ // the todo is dated
+
+ // the instance due date should always be the same as the entry due date
+ test(instanceList[0]->EndTimeL().TimeLocalL() == aEndTime);
+
+ if (aStartTime != Time::NullTTime())
+ {
+ // The entry has a start time so the instance should have the same start time
+ test(instanceList[0]->StartTimeL().TimeLocalL() == aStartTime);
+ }
+ else
+ {
+ // The entry was not stored with a start time
+ // so the instance start time should be the same as the due date
+ test(instanceList[0]->StartTimeL().TimeLocalL() == instanceList[0]->EndTimeL().TimeLocalL());
+ }
+ }
+ else
+ {
+ // The todo is undated
+ // so test that the start and end times are the same and that they are set as some time today
+ test(instanceList[0]->StartTimeL().TimeLocalL() == instanceList[0]->EndTimeL().TimeLocalL());
+ test(instanceList[0]->StartTimeL().TimeLocalL() != Time::NullTTime());
+ test(instanceList[0]->StartTimeL().TimeLocalL().DaysFrom(iToday).Int() == 0);
+ }
+ }
+ else
+ {
+ // complete
+ test(instanceList[0]->StartTimeL().TimeLocalL() == instanceList[0]->Entry().CompletedTimeL().TimeLocalL());
+ test(instanceList[0]->EndTimeL().TimeLocalL() == instanceList[0]->Entry().CompletedTimeL().TimeLocalL());
+ }
+ }
+ else
+ {
+ test(instanceList.Count() == 0);
+ }
+ CleanupStack::PopAndDestroy(&instanceList);
+ }
+
+void CTestApp::CreateAndTestRptTodoL(const TTime& aStartTime, const TTime& aEndTime, const TTime& aCompletedTime, TCalRRule::TType aRepeatType, TInt aInterval, TInt aCount, const CalCommon::TCalTimeRange& aTimeRange, RArray<TTime> aExpectedLocalInstanceTimes)
+ {
+ iTestLib->CleanDatabaseL();
+
+ // Create and store repeating todo entry
+ RPointerArray<CCalEntry> entryArray;
+ CleanupResetAndDestroyPushL(entryArray);
+ CCalEntry* rptTodo = CreateRepeatingTodoLC(aStartTime, aEndTime, aCompletedTime, aRepeatType, aInterval, aCount);
+ entryArray.AppendL(rptTodo);
+ CleanupStack::Pop(rptTodo);
+ TInt numSuc;
+ iTestLib->SynCGetEntryViewL().StoreL(entryArray, numSuc);
+ CleanupStack::PopAndDestroy(&entryArray);
+
+ // find the todo
+ RPointerArray<CCalInstance> instanceList;
+ CleanupResetAndDestroyPushL(instanceList);
+ iTestLib->SynCGetInstanceViewL().FindInstanceL(instanceList, CalCommon::EIncludeAll, aTimeRange);
+ PrintDetailsInstancesL(instanceList);
+
+ test(instanceList.Count() == aExpectedLocalInstanceTimes.Count());
+
+ for (TInt i(0) ; i < instanceList.Count() ; ++i)
+ {
+ test(instanceList[i]->EndTimeL().TimeLocalL() == aExpectedLocalInstanceTimes[i]);
+ }
+
+ CleanupStack::PopAndDestroy(&instanceList);
+ }
+
+void CTestApp::TestFindInstanceNonRepeatingTodoL()
+ {
+ // set up a search range +- 10 days from now
+ TCalTime startDateTime1;
+ startDateTime1.SetTimeLocalL(iToday - TTimeIntervalDays(10));
+ TCalTime endDateTime1;
+ endDateTime1.SetTimeLocalL(iToday + TTimeIntervalDays(10));
+ CalCommon::TCalTimeRange timeRangeWithToday(startDateTime1, endDateTime1);
+
+ TCalTime startDateTime2;
+ startDateTime2.SetTimeLocalL(iToday + TTimeIntervalDays(1));
+ TCalTime endDateTime2;
+ endDateTime2.SetTimeLocalL(iToday + TTimeIntervalDays(20));
+ CalCommon::TCalTimeRange timeRangeAfterToday(startDateTime2, endDateTime2);
+
+ TCalTime startDateTime3;
+ startDateTime3.SetTimeLocalL(iToday - TTimeIntervalDays(20));
+ TCalTime endDateTime3;
+ endDateTime3.SetTimeLocalL(iToday - TTimeIntervalDays(1));
+ CalCommon::TCalTimeRange timeRangeBeforeToday(startDateTime3, endDateTime3);
+
+ // completed todos
+ test.Printf(_L("\n--Completed todo with completion date before the time range (due before)--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(),
+ timeRangeWithToday.StartTime().TimeLocalL() - TTimeIntervalDays(2), // due before
+ timeRangeWithToday.StartTime().TimeLocalL() - TTimeIntervalDays(2),
+ timeRangeWithToday,
+ EFalse);
+
+ test.Printf(_L("\n--Completed todo with completion date before the time range (due inside)--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(),
+ timeRangeWithToday.StartTime().TimeLocalL() + TTimeIntervalDays(2), // due inside
+ timeRangeWithToday.StartTime().TimeLocalL() - TTimeIntervalDays(2),
+ timeRangeWithToday,
+ EFalse);
+
+ test.Printf(_L("\n--Completed todo with completion date before the time range (due after)--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(),
+ timeRangeWithToday.EndTime().TimeLocalL() + TTimeIntervalDays(2), // due after
+ timeRangeWithToday.StartTime().TimeLocalL() - TTimeIntervalDays(2),
+ timeRangeWithToday,
+ EFalse);
+
+ test.Printf(_L("\n--Completed todo with completion date after the time range (due after)--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(),
+ timeRangeWithToday.EndTime().TimeLocalL() + TTimeIntervalDays(2), // due after
+ timeRangeWithToday.EndTime().TimeLocalL() + TTimeIntervalDays(2),
+ timeRangeWithToday,
+ EFalse);
+
+ test.Printf(_L("\n--Completed todo with completion date after the time range (due inside)--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(),
+ timeRangeWithToday.EndTime().TimeLocalL() - TTimeIntervalDays(2), // due inside
+ timeRangeWithToday.EndTime().TimeLocalL() + TTimeIntervalDays(2),
+ timeRangeWithToday,
+ EFalse);
+
+ test.Printf(_L("\n--Completed todo with completion date after the time range (due inside)--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(),
+ timeRangeWithToday.StartTime().TimeLocalL() - TTimeIntervalDays(2), // due before
+ timeRangeWithToday.EndTime().TimeLocalL() + TTimeIntervalDays(2),
+ timeRangeWithToday,
+ EFalse);
+
+ test.Printf(_L("\n--Completed todo with completion date inside the time range (due before)--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(),
+ timeRangeWithToday.StartTime().TimeLocalL() - TTimeIntervalDays(2), // due before
+ timeRangeWithToday.EndTime().TimeLocalL() - TTimeIntervalDays(2),
+ timeRangeWithToday,
+ ETrue);
+
+ test.Printf(_L("\n--Completed todo with completion date inside the time range (due after)--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(),
+ timeRangeWithToday.EndTime().TimeLocalL() + TTimeIntervalDays(2), // due after
+ timeRangeWithToday.EndTime().TimeLocalL() - TTimeIntervalDays(2),
+ timeRangeWithToday,
+ ETrue);
+
+ test.Printf(_L("\n--Completed todo with completion date inside the time range (due inside)--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(),
+ timeRangeWithToday.EndTime().TimeLocalL() - TTimeIntervalDays(2), // due inside
+ timeRangeWithToday.EndTime().TimeLocalL() - TTimeIntervalDays(2),
+ timeRangeWithToday,
+ ETrue);
+
+ // incomplete todos
+ test.Printf(_L("\n--incomplete dated todo with start and due date before time range--"));
+ CreateAndTestNonRptTodoL(timeRangeWithToday.StartTime().TimeLocalL() - TTimeIntervalDays(2), // before
+ timeRangeWithToday.StartTime().TimeLocalL() - TTimeIntervalDays(2),
+ Time::NullTTime(),
+ timeRangeWithToday,
+ EFalse);
+
+ test.Printf(_L("\n--incomplete dated todo with only due date before time range--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(), // no start date
+ timeRangeWithToday.StartTime().TimeLocalL() - TTimeIntervalDays(2), // only due date before
+ Time::NullTTime(),
+ timeRangeWithToday,
+ EFalse);
+
+ test.Printf(_L("\n--incomplete dated todo crossing the start time of the search range--"));
+ CreateAndTestNonRptTodoL(timeRangeWithToday.StartTime().TimeLocalL() - TTimeIntervalDays(1),
+ timeRangeWithToday.StartTime().TimeLocalL() + TTimeIntervalDays(1), // crossing the start time
+ Time::NullTTime(),
+ timeRangeWithToday,
+ ETrue);
+
+ test.Printf(_L("\n--incomplete dated todo with start and due date inside the search range--"));
+ CreateAndTestNonRptTodoL(timeRangeWithToday.EndTime().TimeLocalL() - TTimeIntervalDays(2),
+ timeRangeWithToday.EndTime().TimeLocalL() - TTimeIntervalDays(2), // totally inside
+ Time::NullTTime(),
+ timeRangeWithToday,
+ ETrue);
+
+ test.Printf(_L("\n--incomplete dated todo with only due date inside the search range--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(), // no start date
+ timeRangeWithToday.EndTime().TimeLocalL() - TTimeIntervalDays(2), // only due date inside
+ Time::NullTTime(),
+ timeRangeWithToday,
+ ETrue);
+
+ test.Printf(_L("\n--incomplete dated todo crossing the end of the search range--"));
+ CreateAndTestNonRptTodoL(timeRangeWithToday.EndTime().TimeLocalL() - TTimeIntervalDays(1),
+ timeRangeWithToday.EndTime().TimeLocalL() + TTimeIntervalDays(1), // crossing the end of the range
+ Time::NullTTime(),
+ timeRangeWithToday,
+ ETrue);
+
+ test.Printf(_L("\n--incomplete dated todo with start and due date after the search range--"));
+ CreateAndTestNonRptTodoL(timeRangeWithToday.EndTime().TimeLocalL() + TTimeIntervalDays(2),
+ timeRangeWithToday.EndTime().TimeLocalL() + TTimeIntervalDays(2), // totally after range
+ Time::NullTTime(),
+ timeRangeWithToday,
+ EFalse);
+
+ test.Printf(_L("\n--incomplete dated todo with only due date after the search range--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(), // no start date
+ timeRangeWithToday.EndTime().TimeLocalL() + TTimeIntervalDays(2), // only due after
+ Time::NullTTime(),
+ timeRangeWithToday,
+ EFalse);
+
+ // undated todos
+ test.Printf(_L("\n--undated todo (completed before search range)--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(),
+ Time::NullTTime(),
+ timeRangeWithToday.StartTime().TimeLocalL() - TTimeIntervalDays(2),// before
+ timeRangeWithToday,
+ EFalse);
+
+ test.Printf(_L("\n--undated todo (completed inside search range)--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(),
+ Time::NullTTime(),
+ timeRangeWithToday.EndTime().TimeLocalL() - TTimeIntervalDays(2), // during
+ timeRangeWithToday,
+ ETrue);
+
+ test.Printf(_L("\n--undated todo (completed after search range)--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(),
+ Time::NullTTime(),
+ timeRangeWithToday.EndTime().TimeLocalL() + TTimeIntervalDays(2), // after
+ timeRangeWithToday,
+ EFalse);
+
+ test.Printf(_L("\n--undated todo (incomplete)--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(),
+ Time::NullTTime(),
+ Time::NullTTime(), // incomplete
+ timeRangeWithToday,
+ ETrue);
+
+ test.Printf(_L("\n----Test undated todos are not found when search range does not include today--"));
+ test.Printf(_L("\n--Search for undated todos after today--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(),
+ Time::NullTTime(),
+ Time::NullTTime(), // incomplete
+ timeRangeAfterToday,
+ EFalse);
+
+ test.Printf(_L("\n--Search for undated todos before today--"));
+ CreateAndTestNonRptTodoL(Time::NullTTime(),
+ Time::NullTTime(),
+ Time::NullTTime(), // incomplete
+ timeRangeBeforeToday,
+ EFalse);
+
+ }
+
+void CTestApp::TestFindInstanceRepeatingTodoL()
+ {
+ RArray<TTime> expectedLocalInstanceTimes;
+ CleanupClosePushL(expectedLocalInstanceTimes);
+
+ const TTime KArbitraryTime(TDateTime(2006, ENovember, 22, 11, 30, 0, 0));
+
+// set up a search range +- 10 days from (11:30 23 November 2006)
+ TCalTime startDateTime;
+ startDateTime.SetTimeLocalL(KArbitraryTime - TTimeIntervalDays(10));
+ TCalTime endDateTime;
+ endDateTime.SetTimeLocalL(KArbitraryTime + TTimeIntervalDays(10));
+ CalCommon::TCalTimeRange timeRange(startDateTime, endDateTime);
+
+// Create repeating todos of all different repeat types
+ // Make sure instances of all repeat types have instances before, after, in and on the time range
+ // 1. With and without a completed date set
+ // 2. With and without a start date
+ test.Printf(_L("\n--Testing Daily Repeats--"));
+ test.Printf(_L("\n--incomplete with start date and due date set--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(1));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(6));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(11));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(16));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(21));
+ CreateAndTestRptTodoL(timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(6), // The middle of the first instance is 5 days before
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(4),
+ Time::NullTTime(), // incomplete
+ TCalRRule::EDaily,
+ 5, // interval
+ 8, // count
+ timeRange,
+ expectedLocalInstanceTimes);
+
+ test.Printf(_L("\n--incomplete with only due date set--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(1));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(6));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(11));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(16));
+ CreateAndTestRptTodoL(Time::NullTTime(), // without start date
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(4),
+ Time::NullTTime(), // incomplete
+ TCalRRule::EDaily,
+ 5,
+ 7,
+ timeRange,
+ expectedLocalInstanceTimes);
+
+ test.Printf(_L("\n--Complete with only due date set--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(1));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(6));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(11));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(16));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(21));
+ CreateAndTestRptTodoL(timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(6),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(4),
+ timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(2), // complete inside
+ TCalRRule::EDaily,
+ 5,
+ 7,
+ timeRange,
+ expectedLocalInstanceTimes);
+
+ test.Printf(_L("\n--Complete with only due date set--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(1));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(6));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(11));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(16));
+ CreateAndTestRptTodoL(Time::NullTTime(), // without start date
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(4),
+ timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(2), // complete outside
+ TCalRRule::EDaily,
+ 5,
+ 7,
+ timeRange,
+ expectedLocalInstanceTimes);
+
+ test.Printf(_L("\n--Testing weekly Repeats--"));
+ test.Printf(_L("\n--Complete with only due date set--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(3));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(10));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(17));
+ CreateAndTestRptTodoL(Time::NullTTime(), // without start date
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(4),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(2), // complete outside
+ TCalRRule::EWeekly,
+ 1,
+ 7,
+ timeRange,
+ expectedLocalInstanceTimes);
+
+ test.Printf(_L("\n--Complete with start and due date set--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(3));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(10));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(17));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(24));
+ CreateAndTestRptTodoL(timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(9),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(4),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(2), // complete outside
+ TCalRRule::EWeekly,
+ 1,
+ 7,
+ timeRange,
+ expectedLocalInstanceTimes);
+ test.Printf(_L("\n--Incomplete with only due date set--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(3));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(10));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(17));
+ CreateAndTestRptTodoL(Time::NullTTime(), // without start date
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(4),
+ Time::NullTTime(), // incomplete
+ TCalRRule::EWeekly,
+ 1,
+ 7,
+ timeRange,
+ expectedLocalInstanceTimes);
+
+ test.Printf(_L("\n--Incomplete with start and due date set--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(3));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(10));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(17));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(24));
+ CreateAndTestRptTodoL(timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(9),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(4),
+ Time::NullTTime(), // incomplete
+ TCalRRule::EWeekly,
+ 1,
+ 7,
+ timeRange,
+ expectedLocalInstanceTimes);
+
+ test.Printf(_L("\n--Testing monthly Repeats--"));
+ test.Printf(_L("\n--Complete with start and due date set--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(2));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(2) + TTimeIntervalMonths(1));
+ CreateAndTestRptTodoL(timeRange.StartTime().TimeLocalL() - TTimeIntervalMonths(1) - TTimeIntervalDays(20),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalMonths(1) + TTimeIntervalDays(2),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(4), // complete before
+ TCalRRule::EMonthly,
+ 1,
+ 4,
+ timeRange,
+ expectedLocalInstanceTimes);
+
+ test.Printf(_L("\n--Complete with only due date set--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(2));
+ CreateAndTestRptTodoL(Time::NullTTime(),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalMonths(1) + TTimeIntervalDays(2),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(4), // complete before
+ TCalRRule::EMonthly,
+ 1,
+ 4,
+ timeRange,
+ expectedLocalInstanceTimes);
+
+ test.Printf(_L("\n--Incomplete with start and due date set--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(2));
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(2) + TTimeIntervalMonths(1));
+ CreateAndTestRptTodoL(timeRange.StartTime().TimeLocalL() - TTimeIntervalMonths(1) - TTimeIntervalDays(20),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalMonths(1) + TTimeIntervalDays(2),
+ Time::NullTTime(), // incomplete
+ TCalRRule::EMonthly,
+ 1,
+ 4,
+ timeRange,
+ expectedLocalInstanceTimes);
+ test.Printf(_L("\n--Incomplete with only due date set--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(2));
+ CreateAndTestRptTodoL(Time::NullTTime(),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalMonths(1) + TTimeIntervalDays(2),
+ Time::NullTTime(), // incomplete
+ TCalRRule::EMonthly,
+ 1,
+ 4,
+ timeRange,
+ expectedLocalInstanceTimes);
+
+ test.Printf(_L("\n--Testing yearly Repeats--"));
+ test.Printf(_L("\n--Complete with only due date set--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(2));
+ CreateAndTestRptTodoL(Time::NullTTime(),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalYears(1) + TTimeIntervalDays(2),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(2), // complete before
+ TCalRRule::EYearly,
+ 1,
+ 3,
+ timeRange,
+ expectedLocalInstanceTimes);
+
+ test.Printf(_L("\n--Complete with start and due date set (across start of range)--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(2));
+ CreateAndTestRptTodoL(timeRange.StartTime().TimeLocalL() - TTimeIntervalYears(1) - TTimeIntervalDays(2),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalYears(1) + TTimeIntervalDays(2),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(2), // complete before
+ TCalRRule::EYearly,
+ 1,
+ 3,
+ timeRange,
+ expectedLocalInstanceTimes);
+
+ test.Printf(_L("\n--Complete with start and due date set (inside range)--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.StartTime().TimeLocalL() + TTimeIntervalDays(4));
+ CreateAndTestRptTodoL(timeRange.StartTime().TimeLocalL() - TTimeIntervalYears(1) + TTimeIntervalDays(2),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalYears(1) + TTimeIntervalDays(4),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(2), // complete before
+ TCalRRule::EYearly,
+ 1,
+ 3,
+ timeRange,
+ expectedLocalInstanceTimes);
+
+ test.Printf(_L("\n--Complete with start and due date set (across end of range)--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.EndTime().TimeLocalL() + TTimeIntervalDays(2));
+ CreateAndTestRptTodoL(timeRange.EndTime().TimeLocalL() - TTimeIntervalYears(1) - TTimeIntervalDays(2),
+ timeRange.EndTime().TimeLocalL() - TTimeIntervalYears(1) + TTimeIntervalDays(2),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(2), // complete before
+ TCalRRule::EYearly,
+ 1,
+ 3,
+ timeRange,
+ expectedLocalInstanceTimes);
+
+ test.Printf(_L("\n--Complete with start and due date set (across whole range)--"));
+ expectedLocalInstanceTimes.Reset();
+ expectedLocalInstanceTimes.AppendL(timeRange.EndTime().TimeLocalL() + TTimeIntervalDays(2));
+ CreateAndTestRptTodoL(timeRange.StartTime().TimeLocalL() - TTimeIntervalYears(1) - TTimeIntervalDays(2),
+ timeRange.EndTime().TimeLocalL() - TTimeIntervalYears(1) + TTimeIntervalDays(2),
+ timeRange.StartTime().TimeLocalL() - TTimeIntervalDays(2), // complete before
+ TCalRRule::EYearly,
+ 1,
+ 3,
+ timeRange,
+ expectedLocalInstanceTimes);
+
+
+ CleanupStack::PopAndDestroy(&expectedLocalInstanceTimes);
+ }
+
+void CTestApp::TestNextInstanceL()
+ {
+ // create TCalTime for a day after today
+ TCalTime today;
+ today.SetTimeLocalL(iToday + TTimeIntervalDays(1));
+
+ RPointerArray<CCalEntry> entryArray;
+ CleanupResetAndDestroyPushL(entryArray);
+
+ // create a todo that is 20 days in the future
+ CCalEntry* entry = CreateTodoLC(iToday + TTimeIntervalDays(20),
+ iToday + TTimeIntervalDays(20),
+ Time::NullTTime());
+
+ HBufC* entryDueTimeBuf = TimeBufLC(entry->EndTimeL().TimeLocalL());
+ test.Printf(_L("Adding an entry with due time := %s"), entryDueTimeBuf->Ptr());
+ CleanupStack::PopAndDestroy(entryDueTimeBuf);
+
+ entryArray.AppendL(entry);
+ CleanupStack::Pop(entry);
+ TInt numSuc;
+ iTestLib->SynCGetEntryViewL().StoreL(entryArray, numSuc);
+ entryArray.ResetAndDestroy();
+
+ TCalTime nextTime = iTestLib->SynCGetInstanceViewL().NextInstanceL(CalCommon::EIncludeAll, today);
+
+ HBufC* nextTimeBuf = TimeBufLC(nextTime.TimeLocalL());
+ test.Printf(_L("Original NextInstanceL(), from tomorrow := %s"), nextTimeBuf->Ptr());
+ CleanupStack::PopAndDestroy(nextTimeBuf);
+
+ CCalEntry* todo = CreateTodoLC(Time::NullTTime(),
+ Time::NullTTime(),
+ Time::NullTTime());
+
+ entryArray.AppendL(todo);
+ CleanupStack::Pop(todo);
+ iTestLib->SynCGetEntryViewL().StoreL(entryArray, numSuc);
+ CleanupStack::PopAndDestroy(&entryArray);
+
+ TCalTime nextTime2 = iTestLib->SynCGetInstanceViewL().NextInstanceL(CalCommon::EIncludeAll, today);
+
+ HBufC* nextTime2Buf = TimeBufLC(nextTime.TimeLocalL());
+ test.Printf(_L("NextInstanceL() with undated todo added, from tomorrow := %s"), nextTime2Buf->Ptr());
+ CleanupStack::PopAndDestroy(nextTime2Buf);
+
+ test(nextTime.TimeLocalL() == nextTime2.TimeLocalL());
+ }
+
+
+
+void CTestApp::DoTestsL()
+ {
+ // Set up time range for +- 10 days
+ TCalTime startDateTime;
+ startDateTime.SetTimeLocalL(iToday - TTimeIntervalDays(10));
+ TCalTime endDateTime;
+ endDateTime.SetTimeLocalL(iToday + TTimeIntervalDays(10));
+ CalCommon::TCalTimeRange timeRange(startDateTime, endDateTime);
+
+ // Set up time range for min max time
+ TCalTime minCalTime;
+ minCalTime.SetTimeUtcL(TCalTime::MinTime());
+ TCalTime maxCalTime;
+ maxCalTime.SetTimeUtcL(TCalTime::MaxTime());
+ CalCommon::TCalTimeRange timeRangeMinToMax(minCalTime, maxCalTime);
+
+
+ test.Next(_L("Test that todos are sorted in the correct order (with time range +- 10 days)"));
+
+ iTestLib->CleanDatabaseL();
+ TestTodoSortOrderL(timeRange);
+
+ test.Next(_L("Test that todos are sorted in the correct order (with time range min at max time)"));
+
+ iTestLib->CleanDatabaseL();
+ TestTodoSortOrderL(timeRangeMinToMax);
+
+
+ test.Next(_L("Test all types of non-repeating todos are returned correctly"));
+
+ iTestLib->CleanDatabaseL();
+ TestFindInstanceNonRepeatingTodoL();
+
+ test.Next(_L("Test all types of repeating todos are returned correctly"));
+
+ iTestLib->CleanDatabaseL();
+ TestFindInstanceRepeatingTodoL();
+
+ test.Next(_L("Test NextInstanceL with and without an undated todo"));
+
+ iTestLib->CleanDatabaseL();
+ TestNextInstanceL();
+ }
+
+static void doMainL()
+ {
+ CTestApp* app = CTestApp::NewL();
+ CleanupStack::PushL(app);
+
+ app->DoTestsL();
+
+ CleanupStack::PopAndDestroy(app);
+ }
+
+/**
+
+@SYMTestCaseID PIM-TCAL-UNDATEDTODO-0001
+
+*/
+
+TInt E32Main()
+ {
+ __UHEAP_MARK;
+ test.Start(_L("@SYMTESTCaseID:PIM-TCAL-UNDATEDTODO-0001 tCal_Instance"));
+
+ test.Title();
+ CTrapCleanup* theCleanup = CTrapCleanup::New();
+ CActiveScheduler* scheduler = new(ELeave)CActiveScheduler;
+ CActiveScheduler::Install(scheduler);
+ TRAPD(ret,doMainL());
+ delete scheduler;
+ test(ret == KErrNone);
+ delete theCleanup;
+ test.End();
+ test.Close();
+ __UHEAP_MARKEND;
+ return(KErrNone);
+ }
+