--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendar/tsrc/tcal_finddaywithinstance.cpp Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,363 @@
+// 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 <calsession.h>
+#include <e32test.h>
+#include <caliterator.h>
+#include <caluser.h>
+#include <calrrule.h>
+
+_LIT(KTestName,"tcal_finddaywithinstance");
+
+RTest test(KTestName);
+
+
+class CFindInstanceDayTestManager : public CBase
+ {
+public:
+
+ static CFindInstanceDayTestManager* NewLC();
+ ~CFindInstanceDayTestManager();
+ void StoreEntryL();
+ TInt FindInstanceL();
+ void FindDayWithInstanceL();
+
+private:
+
+ // avoid any method but NewL instancing the class
+ CFindInstanceDayTestManager() { }
+ // no copy constructor and assignment operator
+ CFindInstanceDayTestManager(CFindInstanceDayTestManager& );
+ CFindInstanceDayTestManager& operator = (const CFindInstanceDayTestManager& );
+
+ void ConstructL();
+
+
+private:
+
+ CCalTestLibrary* iTestLibrary;
+ };
+//entry1
+const TTime KEntry1Start(TDateTime(2000, EJune, 0, 1, 1, 0, 0)); //Thursday
+const TTime KEntry1End(TDateTime(2000, EJune, 0, 2, 2, 0, 0));
+//entry2
+const TTime KEntry2Start(TDateTime(2000, EJune, 0, 13, 0, 0, 0)); //Thursday
+const TTime KEntry2End(TDateTime(2000, EJune, 0, 14, 0, 0, 0));
+//entry3 (todo)
+const TTime KEntry3End(TDateTime(2000, EJune, 0, 23, 0, 0, 0)); //Thursday
+
+// Constructor/Destructor
+
+CFindInstanceDayTestManager* CFindInstanceDayTestManager::NewLC()
+ {
+ CFindInstanceDayTestManager* self = new (ELeave) CFindInstanceDayTestManager();
+
+ CleanupStack::PushL(self);
+ self->ConstructL();
+
+ return (self);
+ }
+
+
+void CFindInstanceDayTestManager::ConstructL()
+ {
+ iTestLibrary = CCalTestLibrary::NewL();
+
+ iTestLibrary->ReplaceFileL(KTestName);
+ iTestLibrary->OpenFileL(KTestName);
+ }
+
+
+CFindInstanceDayTestManager::~CFindInstanceDayTestManager()
+ {
+ delete iTestLibrary;
+ }
+
+
+void CFindInstanceDayTestManager::StoreEntryL()
+ {
+ test.Next(_L("Store entries"));
+
+
+ RPointerArray<CCalEntry> entriesToStore;
+ CleanupResetAndDestroyPushL(entriesToStore);
+
+ //Create first entry appt, starting at midnight 1st June 2000 weekly repeating for three weeks
+ _LIT8(KGuidId1, "KGuidId1");
+ HBufC8* guid1 = KGuidId1().AllocLC();
+
+ CCalEntry::TType entryType = CCalEntry::EAppt;
+ CCalEntry* entry1 = iTestLibrary->CreateCalEntryL(entryType, guid1);
+ CleanupStack::Pop(guid1);
+
+ CleanupStack::PushL(entry1);
+
+ TCalTime start;
+ TCalTime end;
+ start.SetTimeLocalL(KEntry1Start);
+ end.SetTimeLocalL(KEntry1End);
+
+ entry1->SetStartAndEndTimeL(start, end);
+ TCalRRule rpt1(TCalRRule::EWeekly);
+ rpt1.SetInterval(1);
+ TCalTime repeatStart;
+ repeatStart.SetTimeLocalL(KEntry1Start);
+ rpt1.SetDtStart(repeatStart);
+
+ RArray<TDay> days1;
+ CleanupClosePushL(days1);
+ days1.AppendL(EThursday);
+ rpt1.SetByDay(days1);
+ CleanupStack::PopAndDestroy(&days1);
+
+ rpt1.SetCount(3);
+ entry1->SetRRuleL(rpt1);
+ entriesToStore.AppendL(entry1);
+ CleanupStack::Pop(entry1);
+
+
+ //Create the second entry appt, starting at mid day 1st June 2000 weekly repeating for three weeks
+ _LIT8(KGuidId2, "KGuidId2");
+ HBufC8* guid2 = KGuidId2().AllocLC();
+
+ entryType = CCalEntry::EAppt;
+ CCalEntry* entry2 = iTestLibrary->CreateCalEntryL(entryType, guid2);
+ CleanupStack::Pop(guid2);
+ CleanupStack::PushL(entry2);
+
+ start.SetTimeLocalL(KEntry2Start);
+ end.SetTimeLocalL(KEntry2End);
+ entry2->SetStartAndEndTimeL(start, end);
+
+ TCalRRule rpt2(TCalRRule::EWeekly);
+ rpt2.SetInterval(1);
+ rpt2.SetDtStart(start);
+ RArray<TDay> days2;
+ CleanupClosePushL(days2);
+ days2.AppendL(EThursday);
+ rpt2.SetByDay(days2);
+ CleanupStack::PopAndDestroy(&days2);
+
+ rpt2.SetCount(3);
+ entry2->SetRRuleL(rpt2);
+ entriesToStore.AppendL(entry2);
+ CleanupStack::Pop(entry2);
+
+ //Create the third entry todo, due date is midnight 2st June 2000 weekly repeating for three weeks
+ _LIT8(KGuidId3, "KGuidId3");
+ HBufC8* guid3 = KGuidId3().AllocLC();
+
+ entryType = CCalEntry::ETodo;
+ CCalEntry* entry3 = iTestLibrary->CreateCalEntryL(entryType, guid3);
+ CleanupStack::Pop(guid3);
+ CleanupStack::PushL(entry3);
+
+ start.SetTimeLocalL(Time::NullTTime());
+ end.SetTimeLocalL(KEntry3End);
+ entry3->SetStartAndEndTimeL(start, end);
+
+ TCalRRule rpt3(TCalRRule::EWeekly);
+ rpt3.SetInterval(1);
+ rpt3.SetDtStart(end);
+ RArray<TDay> days3;
+ CleanupClosePushL(days3);
+ days3.AppendL(EThursday);
+ rpt3.SetByDay(days3);
+ CleanupStack::PopAndDestroy(&days3);
+
+ rpt3.SetCount(3);
+ entry3->SetRRuleL(rpt3);
+ entriesToStore.AppendL(entry3);
+ CleanupStack::Pop(entry3);
+
+ TInt num;
+ iTestLibrary->SynCGetEntryViewL().StoreL(entriesToStore,num);
+ test(num=3);
+ CleanupStack::PopAndDestroy(&entriesToStore);
+ }
+
+
+
+TInt CFindInstanceDayTestManager::FindInstanceL()
+ {
+ test.Next(_L("Find Instance to make sure there are right number of instances"));
+
+
+ TCalTime minTime;
+ minTime.SetTimeLocalL(TCalTime::MinTime());
+ TCalTime maxTime;
+ maxTime.SetTimeLocalL(TCalTime::MaxTime());
+ CalCommon::TCalTimeRange timeRange(minTime, maxTime);
+ CalCommon::TCalViewFilter filter = CalCommon::EIncludeAll;
+
+ RPointerArray<CCalInstance> instances;
+ CleanupResetAndDestroyPushL(instances);
+
+ iTestLibrary->SynCGetInstanceViewL().FindInstanceL(instances, filter, timeRange);
+ TInt instanceNum = instances.Count();
+ for (TInt ii=0; ii<instanceNum; ++ii)
+ {
+ TTime instancetime = (instances[ii])->Time().TimeLocalL();
+
+ TBuf<100> tempBuf;
+ _LIT(KTTimeDateFormat,"Time: %H:%T:%S:%*C3 Date:%*1/%2/%3");
+ instancetime.FormatL(tempBuf,KTTimeDateFormat);
+ RDebug::Print(_L("%S"), &tempBuf);
+ }
+ CleanupStack::PopAndDestroy(&instances);
+ return instanceNum;
+ }
+
+
+
+void CFindInstanceDayTestManager::FindDayWithInstanceL()
+ {
+ test.Next(_L("Find Instance in the expected day"));
+
+
+ CalCommon::TCalViewFilter filter = CalCommon::EIncludeAll;
+
+ const TTime KFirstDayWithInstance(TDateTime(2000, EJune, 0, 1, 1, 0, 0));
+ const TTime KSecondDayWithInstance(TDateTime(2000, EJune, 7, 1,1, 0, 0));
+ const TTime KLastDayWithInstance(TDateTime(2000, EJune, 14, 23, 0, 0, 0));
+
+ TCalTime start;
+ start.SetTimeLocalL(TCalTime::MinTime());
+ TCalTime instanceFind = iTestLibrary->SynCGetInstanceViewL().NextInstanceL(filter, start);
+ TTime instanceFindTTime = instanceFind.TimeLocalL();
+ //The first instance date should be found
+ test (instanceFindTTime == KFirstDayWithInstance);
+
+ RDebug::Print(_L("Min time NextInstanceL"));
+ TBuf<100> tempBuf;
+ _LIT(KTTimeDateFormat,"Time: %H:%T:%S:%*C3 Date:%*1/%2/%3");
+ instanceFindTTime.FormatL(tempBuf,KTTimeDateFormat);
+ RDebug::Print(_L("%S\n\n"), &tempBuf);
+
+ start.SetTimeLocalL(TCalTime::MaxTime());
+ instanceFind = iTestLibrary->SynCGetInstanceViewL().PreviousInstanceL(filter, start);
+ instanceFindTTime = instanceFind.TimeLocalL();
+ // The last instance date should be found
+ test (instanceFindTTime == KLastDayWithInstance);
+
+ RDebug::Print(_L("Max time PreviousInstanceL"));
+ instanceFindTTime.FormatL(tempBuf,KTTimeDateFormat);
+ RDebug::Print(_L("%S\n\n"), &tempBuf);
+
+ start.SetTimeLocalL(KEntry1Start);
+ instanceFind = iTestLibrary->SynCGetInstanceViewL().NextInstanceL(filter, start);
+ instanceFindTTime = instanceFind.TimeLocalL();
+ //The second Thurday should be found
+ test (instanceFindTTime == KSecondDayWithInstance );
+
+ start.TimeLocalL().FormatL(tempBuf,KTTimeDateFormat);
+ RDebug::Print(_L("start NextInstanceL - %S"), &tempBuf);
+ instanceFindTTime.FormatL(tempBuf,KTTimeDateFormat);
+ RDebug::Print(_L("%S\n\n"), &tempBuf);
+
+ start.SetTimeLocalL(KFirstDayWithInstance + TTimeIntervalDays(1));
+ instanceFind = iTestLibrary->SynCGetInstanceViewL().NextInstanceL(filter, start);
+ instanceFindTTime = instanceFind.TimeLocalL();
+ //The second Thurday should be found
+ test (instanceFindTTime == KSecondDayWithInstance );
+
+ start.TimeLocalL().FormatL(tempBuf,KTTimeDateFormat);
+ RDebug::Print(_L("start NextInstanceL- %S"), &tempBuf);
+ instanceFindTTime.FormatL(tempBuf,KTTimeDateFormat);
+ RDebug::Print(_L("%S\n\n"), &tempBuf);
+
+ start.SetTimeLocalL(KEntry1Start);
+ instanceFind=iTestLibrary->SynCGetInstanceViewL().PreviousInstanceL(filter, start);
+ //There is no instance before the first instance
+ test(instanceFind.TimeLocalL() == Time::NullTTime());
+
+ start.TimeLocalL().FormatL(tempBuf,KTTimeDateFormat);
+ RDebug::Print(_L("start PreviousInstanceL- %S"), &tempBuf);
+ instanceFind.TimeLocalL().FormatL(tempBuf,KTTimeDateFormat);
+ RDebug::Print(_L("%S\n\n"), &tempBuf);
+
+ start.SetTimeLocalL(KLastDayWithInstance);
+ instanceFind = iTestLibrary->SynCGetInstanceViewL().NextInstanceL(filter, start);
+ //There is no instances after the Last instance
+ test(instanceFind.TimeLocalL() == Time::NullTTime());
+
+ start.TimeLocalL().FormatL(tempBuf,KTTimeDateFormat);
+ RDebug::Print(_L("start NextInstanceL - %S"), &tempBuf);
+ instanceFind.TimeLocalL().FormatL(tempBuf,KTTimeDateFormat);
+ RDebug::Print(_L("%S\n\n"), &tempBuf);
+ }
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * DoTestL()
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+static void DoTestL()
+ {
+ CFindInstanceDayTestManager* testManager = CFindInstanceDayTestManager::NewLC();
+ //Store 3 entries each of them is weekly repeating for 3 weeks
+ testManager->StoreEntryL();
+ //Make sure there are 9 instances are found
+ test (testManager->FindInstanceL() == 9);
+ testManager->FindDayWithInstanceL();
+ CleanupStack::PopAndDestroy(testManager);
+ }
+
+
+/**
+
+@SYMTestCaseID PIM-TCAL-FINDDAYWITHINSTANCE-0001
+
+*/
+
+TInt E32Main()
+ {
+ __UHEAP_MARK;
+
+ test.Start(_L("@SYMTESTCaseID:PIM-TCAL-FINDDAYWITHINSTANCE-0001 Calendar Interim API finddaywithinstance test suite"));
+
+ test.Title();
+
+ CTrapCleanup* trapCleanup = CTrapCleanup::New();
+ if (!trapCleanup)
+ {
+ return KErrNoMemory;
+ }
+
+ CActiveScheduler* scheduler = new CActiveScheduler();
+ if (!scheduler)
+ {
+ delete trapCleanup;
+ return KErrNoMemory;
+ }
+ CActiveScheduler::Install(scheduler);
+
+ TRAPD(ret, DoTestL());
+ test(ret == KErrNone);
+
+ delete scheduler;
+ delete trapCleanup;
+
+ test.End();
+ test.Close();
+
+ __UHEAP_MARKEND;
+
+ return (KErrNone);
+ }