diff -r 000000000000 -r f979ecb2b13e pimappservices/calendar/tsrc/t_vcal5OOM.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pimappservices/calendar/tsrc/t_vcal5OOM.cpp Tue Feb 02 10:12:19 2010 +0200 @@ -0,0 +1,412 @@ +// 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 +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "caltestlib.h" +#include "caltestoom.h" + +LOCAL_D RTest test(_L("T_VCAL5OOM")); +_LIT8(KOOMEntryGuid, "OOM_Entry_Guid"); + +_LIT(KTestCalendarFile, "c:t_vcal5oom"); +_LIT(KVCalFile, "c:\\t_vcal5oom.vcs"); + +class CTestApp : public CBase, public MCalTestOomCallBack + { +public: + enum TOOMTestCase + { + ETestAllEntry, + ETestTemporaryEntry, + EAmountTestCases + }; +public: + static CTestApp* NewL(); + ~CTestApp(); + + void CreateAppointmentL(); + void CreateAnniversaryEntryL(); + void CreateTimedAlarmedApptEntryL(); + + CCalEntry* CreateTodoLC(TBool isOOMTest); + + void ExportAsVCalendarL(const TDesC& aVCalendarFile); + void ExportAsVCalendarL(const TDesC& aVCalendarFile, CCalEntry* aEntry); + + void DoOomTestL(); + + +public: // from MCalOomTestCallBack + void OomTestL(TType aType, TInt aFailAt); + +private: + void ConstructL(); + +private: + CCalTestLibrary* iCalTestLib; //owned + + TInt iOOMTestCase; + }; + +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(KTestCalendarFile); + iCalTestLib->OpenFileL(KTestCalendarFile); + } + +CTestApp::~CTestApp() + { + delete iCalTestLib; + } + +void CTestApp::DoOomTestL() + { + CCalSession& calSession = iCalTestLib->GetSession(); + + for (iOOMTestCase = 0 ; iOOMTestCase < EAmountTestCases; ++iOOMTestCase) + { + test.Printf(_L("Starting oom test %d\n"), iOOMTestCase); + CalTestOom::OutOfMemoryTestL(*this, EClient, calSession); + CalTestOom::OutOfMemoryTestL(*this, EServer, calSession); + } + } + +void CTestApp::OomTestL(TType /*aType*/, TInt /*aFailAt*/) + { + test.Printf(_L(".")); + + switch (iOOMTestCase) + { + case ETestAllEntry: + { + ExportAsVCalendarL(KVCalFile); + } + break; + case ETestTemporaryEntry: + { + CCalEntry* entry = CreateTodoLC(ETrue); + ExportAsVCalendarL(KVCalFile, entry); + CleanupStack::PopAndDestroy(entry); + } + break; + default: + { + User::Leave(KErrGeneral); + } + } + } + +// Create an appointment with Unicode text +// +void CTestApp::CreateAppointmentL() + { + TTime today; + today.HomeTime(); + TCalTime startTime; + startTime.SetTimeLocalL(TDateTime(today.DateTime().Year(),today.DateTime().Month(),today.DateTime().Day(),9,0,0,0)); + TCalTime endTime; + endTime.SetTimeLocalL(startTime.TimeLocalL() + TTimeIntervalMinutes(60)); + HBufC8* guid = NULL; + CCalEntry* entry = iCalTestLib->CreateCalEntryL(CCalEntry::EAppt, guid); + CleanupStack::PushL(entry); + entry->SetStartAndEndTimeL(startTime, endTime); + TBuf16<60> apptSummary; + apptSummary.AppendFormat(_L16("Here are some European letters: %c%c%c%c%c%c%c%c%c%c. "), 0x0117, 0x010d, 0x00f1, 0x00df, 0x00d8, 0x0142, 0x0151, 0x016f, 0x0131, 0x00c9); + entry->SetSummaryL(apptSummary); + + RPointerArray entryArray; + CleanupClosePushL(entryArray); + entryArray.AppendL(entry); + TInt numSuc; + iCalTestLib->SynCGetEntryViewL().StoreL(entryArray, numSuc); + CleanupStack::PopAndDestroy(); // entryArray.Close() + CleanupStack::PopAndDestroy(entry); + } + +// Create a repeating entry. +// The repeat is set for yearly on June 24th starting in 1998, with the exception of 24/06/2000 +// +void CTestApp::CreateAnniversaryEntryL() + { + HBufC8* guid = NULL; + CCalEntry* entry = iCalTestLib->CreateCalEntryL(CCalEntry::EAnniv, guid); + CleanupStack::PushL(entry); + TBuf16<60> text; + text.AppendFormat(_L16("Here are some Han characters: %c%c%c%c%c%c%c%c%c%c. "), 0x7f0c, 0x7a92, 0x6d90, 0x6272, 0x5934, 0x5973, 0x55ce, 0x516c, 0x4ec0, 0x4e00); + entry->SetSummaryL(text); + TCalTime annivTime; + annivTime.SetTimeLocalL(TTime(TDateTime(1998,EJune,24,0,0,0,0))); + + entry->SetStartAndEndTimeL(annivTime, annivTime); + + TCalRRule rRule(TCalRRule::EYearly); + + rRule.SetDtStart(annivTime); + TCalTime maxTime; + maxTime.SetTimeUtcL(TCalTime::MaxTime()); + rRule.SetUntil(maxTime); + rRule.SetInterval(1); + entry->SetRRuleL(rRule); + + TCalTime exception; + exception.SetTimeLocalL(TTime(TDateTime(2000,EJune,24,0,0,0,0))); + RArray exceptions; + CleanupClosePushL(exceptions); + exceptions.AppendL(exception); + entry->SetExceptionDatesL(exceptions); + CleanupStack::PopAndDestroy(&exceptions); + + RPointerArray entryArray; + CleanupClosePushL(entryArray); + entryArray.AppendL(entry); + TInt numSuc; + iCalTestLib->SynCGetEntryViewL().StoreL(entryArray, numSuc); + + CleanupStack::PopAndDestroy(); // entryArray.Close() + CleanupStack::PopAndDestroy(entry); //entry + } + + +// Create an alarmed appointment +// +void CTestApp::CreateTimedAlarmedApptEntryL() + { + TTime today; + today.HomeTime(); + TCalTime startTime; + startTime.SetTimeLocalL(TDateTime(today.DateTime().Year(),today.DateTime().Month(),today.DateTime().Day(),10,0,0,0)); + TCalTime endTime; + endTime.SetTimeLocalL(startTime.TimeLocalL() + TTimeIntervalMinutes(90)); + HBufC8* guid = NULL; + CCalEntry* entry = iCalTestLib->CreateCalEntryL(CCalEntry::EAppt, guid); + CleanupStack::PushL(entry); + entry->SetStartAndEndTimeL(startTime, endTime); + TBuf16<60> text; + text.AppendFormat(_L16("Here are some Japanese kana: %c%c%c%c%c%c%c%c%c%c. "), 0x30a2, 0x30c0, 0x30d5, 0x30b7, 0x30ba, 0x3091, 0x3093, 0x3055, 0x3074, 0x3080); + entry->SetSummaryL(text); + + CCalAlarm* alarm = CCalAlarm::NewL(); + CleanupStack::PushL(alarm); + alarm->SetTimeOffset(TTimeIntervalMinutes(15)); + TBuf16<30> alarmName; + alarmName.AppendFormat(_L16("%c%c%c%c%c%c%c%c%c%c. "), 0x03a3, 0x03bf, 0x03bc, 0x03b4, 0x03b5, 0x0345, 0x03a9, 0x0392, 0x0395, 0x03a1); + alarm->SetAlarmSoundNameL(alarmName); + entry->SetAlarmL(alarm); + CleanupStack::PopAndDestroy(alarm); + + RPointerArray entryArray; + CleanupClosePushL(entryArray); + entryArray.AppendL(entry); + TInt numSuc; + + iCalTestLib->SynCGetEntryViewL().StoreL(entryArray, numSuc); + + CleanupStack::PopAndDestroy(); // entryArray.Close() + CleanupStack::PopAndDestroy(entry); + } + +CCalEntry* CTestApp::CreateTodoLC(TBool isOOMTest) + { + HBufC8* guid = NULL; + + CCalEntry* todo = NULL; + if(isOOMTest) + { + guid = KOOMEntryGuid().AllocLC(); + todo = CCalEntry::NewL(CCalEntry::ETodo, guid, CCalEntry::EMethodAdd, 0); + CleanupStack::Pop(guid); + } + else + { + todo = iCalTestLib->CreateCalEntryL(CCalEntry::ETodo, guid); + } + + CleanupStack::PushL(todo); + TTime now; + now.UniversalTime(); + + TCalTime startTime; + startTime.SetTimeLocalL(now + TTimeIntervalDays(5)); + TCalTime endTime; + endTime.SetTimeLocalL(now + TTimeIntervalDays(5) + TTimeIntervalMinutes(500)); + + todo->SetStartAndEndTimeL(startTime, endTime); + + TBuf16<60> text; + text.AppendFormat(_L16("A Selection of Dingbats: %c%c%c%c%c%c%c%c%c "), 0x2780, 0x270d, 0x27ab, 0x2704, 0x2706, 0x2707, 0x272d, 0x2729, 0x270f, 0x278b); + todo->SetSummaryL(text); + TCalTime now2; + now2.SetTimeLocalL(now); + todo->SetCompletedL(ETrue, now2); + + return todo; + } + +void CTestApp::ExportAsVCalendarL(const TDesC& aVCalendarFile) + { + RPointerArray entryArray; + CleanupResetAndDestroyPushL(entryArray); + + CCalIter* calIter = NULL; + calIter = CCalIter::NewL(iCalTestLib->GetSession()); + CleanupStack::PushL(calIter); + + for (TDesC8* guid = const_cast(&calIter->FirstL()); + guid->CompareF(KNullDesC8) != 0; + guid = const_cast(&calIter->NextL())) + { + iCalTestLib->SynCGetEntryViewL().FetchL(*guid, entryArray); + } + + CleanupStack::PopAndDestroy(calIter); + + RFile outFile; + CleanupClosePushL(outFile); + + User::LeaveIfError(outFile.Replace(iCalTestLib->FileSession(), aVCalendarFile, EFileWrite)); + + + RFileWriteStream writeStream(outFile); + CleanupClosePushL(writeStream); + + CCalDataExchange* dataExchange = NULL; + dataExchange = CCalDataExchange::NewL(iCalTestLib->GetSession()); + CleanupStack::PushL(dataExchange); + + dataExchange->ExportL(KUidVCalendar, writeStream, entryArray); + + CleanupStack::PopAndDestroy(dataExchange); + CleanupStack::PopAndDestroy(); // writeStream.Close() + CleanupStack::PopAndDestroy(); // outFile.Close() + CleanupStack::PopAndDestroy(); // entryArray.Close() + } + +void CTestApp::ExportAsVCalendarL(const TDesC& aVCalendarStream, CCalEntry* aEntry) + { + RFile outfile; + CleanupClosePushL(outfile); + User::LeaveIfError(outfile.Replace(iCalTestLib->FileSession(),aVCalendarStream,EFileWrite)); + + RFileWriteStream writeStream(outfile); + CleanupClosePushL(writeStream); + + RPointerArray entryArray; + CleanupClosePushL(entryArray); + entryArray.AppendL(aEntry); + + CCalDataExchange* dataExchange = NULL; + dataExchange = CCalDataExchange::NewL(iCalTestLib->GetSession()); + + CleanupStack::PushL(dataExchange); + dataExchange->ExportL(KUidVCalendar, writeStream, entryArray); + + writeStream.CommitL(); + + CleanupStack::PopAndDestroy(dataExchange); + CleanupStack::PopAndDestroy(); // entryArray.Close(); + CleanupStack::PopAndDestroy(); // writeStream.Close(); + CleanupStack::PopAndDestroy(); // outfile.Close(); + } + + + +static void doMainL() + { + CTestApp* testApp = CTestApp::NewL(); + CleanupStack::PushL(testApp); + + // create entries + testApp->CreateAppointmentL(); + testApp->CreateAnniversaryEntryL(); + testApp->CreateTimedAlarmedApptEntryL(); + + // export a vCalendar stream + + test.Next(_L("Exporting all entries")); + + testApp->ExportAsVCalendarL(KVCalFile); + + // export a single vCalendar object + + test.Next(_L("Exporting a single vTodo object")); + + CCalEntry* todo = testApp->CreateTodoLC(EFalse); + testApp->ExportAsVCalendarL(KVCalFile, todo); + CleanupStack::PopAndDestroy(todo); + + // Start the oom tests + + test.Next(_L("Starting the oom tests")); + + testApp->DoOomTestL(); + + CleanupStack::PopAndDestroy(testApp); + } + +static void CleanupFilesL() + { + CCalTestLibrary* testLibrary = CCalTestLibrary::NewL(EFalse); + CleanupStack::PushL(testLibrary); + testLibrary->DeleteFileL(KVCalFile, EFalse); + + CleanupStack::PopAndDestroy(testLibrary); + } + +/** + +@SYMTestCaseID PIM-T-VCAL5OOM-0001 + +*/ + +TInt E32Main() + { + __UHEAP_MARK; + test.Start(_L("@SYMTESTCaseID:PIM-T-VCAL5OOM-0001 T_VCAL5OOM")); + + test.Title(); + CActiveScheduler* scheduler = new CActiveScheduler; + CActiveScheduler::Install(scheduler); + CTrapCleanup* theCleanup = CTrapCleanup::New(); + TRAPD(ret,doMainL()); + test(ret==KErrNone); + TRAP_IGNORE(CleanupFilesL()); + delete theCleanup; + delete scheduler; + test.End(); + test.Close(); + __UHEAP_MARKEND; + return(KErrNone); + }