--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendar/tsrc/t_recurrence.CPP Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,171 @@
+// 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 <f32file.h>
+#include <s32file.h>
+
+#include <calentry.h>
+#include <caldataexchange.h>
+#include <caldataformat.h>
+#include <calrrule.h>
+
+#include "caltestlib.h"
+#include "t_recurrence.h"
+
+_LIT(KTestFile, "c:t_recurrence");
+
+static RTest test(_L("t_recurrence"));
+
+CTestApp* CTestApp::NewL()
+ {
+ CTestApp* self = new(ELeave) CTestApp;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+void CTestApp::ConstructL()
+ {
+ iCalTestLib = CCalTestLibrary::NewL();
+ iCalTestLib->ReplaceFileL(KTestFile());
+ iCalTestLib->OpenFileL(KTestFile());
+ }
+
+CTestApp::~CTestApp()
+ {
+ delete iCalTestLib;
+ }
+
+
+void CTestApp::RunTestL(const TDesC8& aVCalFile, TInt aNumberOfOccurences, TTime aEndTime, TBool aExpectedImport)
+ {
+ test.Next(_L("Import repeat rule test"));
+
+ RPointerArray<CCalEntry> entryArray;
+ CleanupResetAndDestroyPushL(entryArray);
+ iCalTestLib->ImportL(aVCalFile, entryArray);//31 Jan, 31 Mar, 31 May, 31 July, 31 Jan 5 matched months but last 7 months to reach the end so agnmodel returns 7
+
+ if (aExpectedImport)
+ {
+ test.Printf(_L("Impoted %d entries\n"), entryArray.Count());
+ test(entryArray.Count() == 1);
+
+ test.Printf(entryArray[0]->SummaryL());
+
+ TCalRRule rRule;
+
+ if (aNumberOfOccurences == 0)
+ {
+ test (entryArray[0]->GetRRuleL(rRule));
+ test(rRule.Count() == 0);
+ test(rRule.Until().TimeLocalL() == TCalTime::MaxTime());
+ }
+ else if (aNumberOfOccurences > 1)
+ {
+ test (entryArray[0]->GetRRuleL(rRule));
+ TInt instances = rRule.Count();
+
+ test.Printf( _L("Instances found %d\n"), instances);
+ test(instances == aNumberOfOccurences);
+
+ TDateTime dt(rRule.Until().TimeLocalL().DateTime());
+
+ test.Printf(_L("The end time of the repeat rule is %d:%d %d/%d/%d \n"), dt.Hour(), dt.Minute(), dt.Day(), dt.Month(), dt.Year());
+
+ if(aEndTime != Time::NullTTime())
+ {
+ test(rRule.Until().TimeLocalL() == aEndTime);
+ }
+ }
+ else
+ {
+ test(!entryArray[0]->GetRRuleL(rRule));
+ test.Printf(_L("The repeat was not added because the second instance was passed max date.\n"));
+ }
+
+ }
+ else
+ {
+ test(entryArray.Count() == 0);
+ }
+
+ CleanupStack::PopAndDestroy(&entryArray);
+ }
+
+static void RunTestsL()
+ {
+ CTestApp* testApp = CTestApp::NewL();
+ CleanupStack::PushL(testApp);
+
+ testApp->RunTestL(KWeekly, KWeeklyCount, Time::NullTTime(), 1);
+ testApp->RunTestL(KMonthlyByDate1, KMonthlyByDateCount1, Time::NullTTime(), 1);
+ testApp->RunTestL(KMonthlyByDate2, KMonthlyByDateCount2, Time::NullTTime(), 1);
+ testApp->RunTestL(KMonthlyByDate3, KMonthlyByDateCount3, Time::NullTTime(), 1);
+ testApp->RunTestL(KMonthlyByDays1, KMonthlyByDaysCount1, Time::NullTTime(), 1);
+ testApp->RunTestL(KMonthlyByDays2, KMonthlyByDaysCount2, Time::NullTTime(), 1);
+ testApp->RunTestL(KMonthlyByDays3, KMonthlyByDaysCount3, Time::NullTTime(), 1);
+ testApp->RunTestL(KYearlyByDate1, KYearlyByDateCount1, Time::NullTTime(), 1);
+ testApp->RunTestL(KYearlyByDate2, KYearlyByDateCount2, Time::NullTTime(), 1);
+ testApp->RunTestL(KYearlyByDate3, KYearlyByDateCount3, Time::NullTTime(), 1);
+ testApp->RunTestL(KMonthlyByDates31, KMonthlyByDates31Count, Time::NullTTime(), 1);
+
+ // Test importing repeats that pass the agenda max time
+ testApp->RunTestL(KDailyOver1, KDailyOverCount1, Time::NullTTime(), 1);
+ testApp->RunTestL(KDailyOver2, KDailyOverCount2, Time::NullTTime(), 0);
+ testApp->RunTestL(KMonthlyByDateOver1, KMonthlyByDateOverCount1, KMonthlyByDateOverEndDay1, 1);
+ testApp->RunTestL(KMonthlyByDateOver2, KMonthlyByDateOverCount2, Time::NullTTime(), 1);
+ testApp->RunTestL(KYearlyByDateOver1, KYearlyByDateOverCount1, Time::NullTTime(), 1);
+ testApp->RunTestL(KYearlyByDateOver2, KYearlyByDateOverCount2, Time::NullTTime(), 1);
+ testApp->RunTestL(KWeeklyOver1, KWeeklyOverCount1, Time::NullTTime(), 1);
+ testApp->RunTestL(KWeeklyOver2, KWeeklyOverCount2, Time::NullTTime(), 1);
+ testApp->RunTestL(KAfterMaxDate, KAfterMaxDateCount, Time::NullTTime(), 0);
+
+ CleanupStack::PopAndDestroy(testApp);
+ }
+
+
+/**
+
+@SYMTestCaseID PIM-T-RECURRENCE-0001
+
+*/
+
+TInt E32Main()
+ {
+ __UHEAP_MARK;
+ test.Start(_L("@SYMTESTCaseID:PIM-T-RECURRENCE-0001 t_recurrence"));
+
+ test.Title();
+ CActiveScheduler* scheduler = new CActiveScheduler;
+ CActiveScheduler::Install(scheduler);
+
+ CTrapCleanup* cleanupTrap = CTrapCleanup::New();
+
+ TRAPD(ret, RunTestsL());
+ test(ret==KErrNone);
+
+ delete cleanupTrap;
+ delete scheduler;
+
+ test.End();
+ test.Close();
+
+ __UHEAP_MARKEND;
+ return KErrNone;
+ }
+
+