diff -r 000000000000 -r f979ecb2b13e pimappsupport/vcardandvcal/tsrc/toom.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pimappsupport/vcardandvcal/tsrc/toom.cpp Tue Feb 02 10:12:19 2010 +0200 @@ -0,0 +1,490 @@ +// Copyright (c) 2001-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 + +_LIT(KTestName,"Versit OOM Tests"); + +LOCAL_D RFs fs; + +LOCAL_D RTest test(KTestName); + +_LIT8(KVCalendarAllMandatoryProperties, +"BEGIN:VCALENDAR\r\n" +"VERSION:1.0\r\n" +"BEGIN:VEVENT\r\n" +"CATEGORIES:APPOINTMENT;MEETING\r\n" +"SUMMARY:Meeting with SyncML team\r\n" +"DESCRIPTION:Check mandatory vCalendar compliance\r\n" +"DTSTART:20010316T170000Z\r\n" +"DTEND:20010316T180000Z\r\n" +"STATUS:NEEDS ACTION\r\n" +"X-EPOCAGENDAENTRYTYPE:APPOINTMENT\r\n" +//"AALARM:\r\n" +"AALARM:20010607T084500\r\n" +"AALARM;TYPE=X-EPOCSOUND:20000110T084500Z;;0;Chimes\r\n" +"END:VEVENT\r\n" +"BEGIN:VTODO\r\n" +"DESCRIPTION:To-do item\r\n" +"PRIORITY:1\r\n" +"DUE:20010316T000000Z\r\n" +"COMPLETED:20010314T000000Z\r\n" +//"RRULE:\r\n" Standard leave +"RRULE:D1 #0\r\n" +"RRULE:MD1 10+ #0\r\n" +"RRULE:MP1 2+ MO #0\r\n" +"RRULE:MP12 2+ MO #0\r\n" +"RRULE:W1 MO #0\r\n" +"RRULE:YM1 1 #0\r\n" +"RRULE:W2 SU TU TH SA 19991130T000000\r\n" +"RRULE:M1 19990821T000000\r\n" //invalid format from 9110 +"CLASS:PUBLIC\r\n" +//"PRIORITY:\r\n" KErrNotFound +"PRIORITY:9\r\n" +"DCREATED:20000113T000000Z\r\n" +"LAST-MODIFIED:20000113T122400Z\r\n" +"UID:28\r\n" +"PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN\r\n" +"TRANSP:1\r\n" +"END:VTODO\r\n" +"END:VCALENDAR\r\n"); + +_LIT8(KVCardAllMandatoryProperties, +"BEGIN:VCARD\r\n" +"VERSION:2.1\r\n" +"REV:20010608T125751Z\r\n" +"TEL;CAR:\r\n" +"TEL;HOME;VOICE:\r\n" +"TEL;WORK;VOICE:\r\n" +"N:Contact;Starfish;;\r\n" +"NOTE:\r\n" +"TEL;PAGER:\r\n" +//"BDAY:\r\n" standard leave +"ADR;WORK:;;;;;;\r\n" +"ADR;HOME:;;;;;;\r\n" +"URL:\r\n" +"TEL;CELL:\r\n" +"TEL;FAX;HOME:\r\n" +"ORG:\r\n" +"EMAIL;INTERNET:\r\n" +"TEL;FAX;WORK:\r\n" +"END:VCARD\r\n"); + +_LIT(KVCalImportFileName,"c:\\oomvcal.vcs"); +_LIT(KVCalExportFileName,"c:\\oomvcal2.vcs"); +_LIT(KVCardImportFileName,"c:\\oomvcard.vcf"); +_LIT(KVCardExportFileName,"c:\\oomvcard2.vcf"); + +/** Defines an interface for Versit OOM tests */ +class MVersitOOMTest + { +public: + virtual void DoTestL() = 0; + }; + +/** versit alarm creation OOM test */ +class CVersitAlarmCreateTest: public CBase, public MVersitOOMTest + { +public: + static CVersitAlarmCreateTest* NewLC(); + ~CVersitAlarmCreateTest(); +public: //From MVersitOOMTest + void DoTestL(); +private: + CVersitAlarmCreateTest(); + }; + +/** vCalendar import OOM test */ +class CVersitVCalImportTest : public CBase, public MVersitOOMTest + { +public: + static CVersitVCalImportTest* NewLC(); + ~CVersitVCalImportTest(); +public: //From MVersitOOMTest + void DoTestL(); +private: + void CheckingImportResultL(CParserVCal& aVCalParser); + CVersitVCalImportTest(); + }; + + +/** vCalendar export OOM test */ +class CVersitVCalExportTest : public CBase, public MVersitOOMTest + { +public: + static CVersitVCalExportTest* NewLC(); + ~CVersitVCalExportTest(); +public: //From MVersitOOMTest + void DoTestL(); +private: + CVersitVCalExportTest(); + }; + + +/** vCard import OOM test */ +class CVersitVCardImportTest : public CBase, public MVersitOOMTest + { +public: + static CVersitVCardImportTest* NewLC(); + ~CVersitVCardImportTest(); +public: //From MVersitOOMTest + void DoTestL(); +private: + CVersitVCardImportTest(); + }; + +/** vCard export OOM test */ +class CVersitVCardExportTest : public CBase, public MVersitOOMTest + { +public: + static CVersitVCardExportTest* NewLC(); + ~CVersitVCardExportTest(); +public: //From MVersitOOMTest + void DoTestL(); +private: + CVersitVCardExportTest(); + }; + +// Cleanup callback for versit entities. +GLREF_C void ResetAndDestroyArrayOfEntities(TAny* aObject) + { + CArrayPtr* array=REINTERPRET_CAST(CArrayPtr*,aObject); + if (array) + array->ResetAndDestroy(); + delete array; + } + +CVersitAlarmCreateTest* CVersitAlarmCreateTest::NewLC() + { + CVersitAlarmCreateTest* self = new(ELeave) CVersitAlarmCreateTest; + CleanupStack::PushL(self); + return self; + } + +void CVersitAlarmCreateTest::DoTestL() + { + TDateTime date(2001,ENovember,1,0,15,0,0); + TVersitDateTime* runtime = new(ELeave) TVersitDateTime(date, TVersitDateTime::EIsMachineLocal); + CleanupStack::PushL(runtime); + CVersitAlarm* alarm = CVersitAlarm::NewL(runtime,0,0,_L("Fanfare"),KNullDesC); + CleanupStack::Pop(runtime); + delete alarm; + } + +CVersitAlarmCreateTest::~CVersitAlarmCreateTest() + { + } + +CVersitAlarmCreateTest::CVersitAlarmCreateTest() + { + } + +CVersitVCalImportTest* CVersitVCalImportTest::NewLC() + { + CVersitVCalImportTest* self = new(ELeave) CVersitVCalImportTest; + CleanupStack::PushL(self); + return self; + } + +void CVersitVCalImportTest::DoTestL() + { + CParserVCal* parser = CParserVCal::NewL(); + CleanupStack::PushL(parser); + RFile infile; + User::LeaveIfError(infile.Open(fs,KVCalImportFileName,EFileRead)); + CleanupClosePushL(infile); + RFileReadStream readStream(infile); + CleanupClosePushL(readStream); + parser->InternalizeL(readStream); + CheckingImportResultL(*parser); + CleanupStack::PopAndDestroy(3); + } + +void CVersitVCalImportTest::CheckingImportResultL(CParserVCal& aVCalParser) + { + //Test get entities and properties without taking ownership + CArrayPtr* entities = aVCalParser.EntityL(KVersitVarTokenVTODO,EFalse); + test(entities != NULL); + CleanupStack::PushL(entities); + CArrayPtr* properties = (*entities)[0]->PropertyL(KVersitTokenRRULE, TUid::Uid(KVCalPropertyRecurrenceUid), EFalse); + test(properties != NULL); + delete properties; + CleanupStack::PopAndDestroy(entities); + + //Test get entities and properties with taking ownership + entities = aVCalParser.EntityL(KVersitVarTokenVEVENT,ETrue); + test(entities != NULL); + CleanupStack::PushL(TCleanupItem(ResetAndDestroyArrayOfEntities, entities)); + properties = (*entities)[0]->PropertyL(KVersitTokenCATEGORIES, TUid::Uid(KVersitPropertyCDesCArrayUid), ETrue); + test(properties != NULL); + properties->ResetAndDestroy(); + delete properties; + CleanupStack::PopAndDestroy(entities); + } + +CVersitVCalImportTest::CVersitVCalImportTest() + { + } + +CVersitVCalImportTest::~CVersitVCalImportTest() + { + } + +CVersitVCalExportTest* CVersitVCalExportTest::NewLC() + { + CVersitVCalExportTest* self = new(ELeave) CVersitVCalExportTest; + CleanupStack::PushL(self); + return self; + } + +CVersitVCalExportTest::~CVersitVCalExportTest() + { + } + +void CVersitVCalExportTest::DoTestL() + { + CParserVCal* parser = CParserVCal::NewL(); + CleanupStack::PushL(parser); + CParserVCalEntity* entity = CParserVCalEntity::NewL(); + CleanupStack::PushL(entity); + entity->SetEntityNameL(KVersitVarTokenVEVENT); + + TInt KUidValue=0; + CParserPropertyValueInt* intValue= new(ELeave) CParserPropertyValueInt(KUidValue); + CleanupStack::PushL(intValue); + CParserProperty* UIDprop = CParserProperty::NewL(*intValue, KVersitTokenUID, NULL); + CleanupStack::Pop(intValue); + entity->AddPropertyL(UIDprop); + + _LIT(KVCalDescription,"Small devices come in many shapes and sizes"); + CParserPropertyValueHBufC* hbufValue = CParserPropertyValueHBufC::NewL(KVCalDescription); + CleanupStack::PushL(hbufValue); + CParserProperty* DESCRIPTIONprop = CParserProperty::NewL(*hbufValue, KVersitTokenDESCRIPTION, NULL); + CleanupStack::Pop(hbufValue); + entity->AddPropertyL(DESCRIPTIONprop); + + CleanupStack::Pop(entity); + parser->AddEntityL(entity); + + RFile outfile; + User::LeaveIfError(outfile.Replace(fs,KVCardExportFileName,EFileWrite)); + CleanupClosePushL(outfile); + RFileWriteStream writeStream(outfile); + CleanupClosePushL(writeStream); + parser->ExternalizeL(writeStream); + CleanupStack::PopAndDestroy(3); + } + +CVersitVCalExportTest::CVersitVCalExportTest() + { + } + +CVersitVCardImportTest* CVersitVCardImportTest::NewLC() + { + CVersitVCardImportTest* self = new(ELeave) CVersitVCardImportTest; + CleanupStack::PushL(self); + return self; + } + +void CVersitVCardImportTest::DoTestL() + { + CParserVCard* parser = CParserVCard::NewL(); + CleanupStack::PushL(parser); + RFile infile; + User::LeaveIfError(infile.Open(fs,KVCardImportFileName,EFileRead)); + CleanupClosePushL(infile); + RFileReadStream readStream(infile); + CleanupClosePushL(readStream); + parser->InternalizeL(readStream); + CleanupStack::PopAndDestroy(3); + } + +CVersitVCardImportTest::CVersitVCardImportTest() + { + } + +CVersitVCardImportTest::~CVersitVCardImportTest() + { + } + +CVersitVCardExportTest* CVersitVCardExportTest::NewLC() + { + CVersitVCardExportTest* self = new(ELeave) CVersitVCardExportTest; + CleanupStack::PushL(self); + return self; + } + +CVersitVCardExportTest::~CVersitVCardExportTest() + { + } + +void CVersitVCardExportTest::DoTestL() + { + CParserVCard* parser = CParserVCard::NewL(); + CleanupStack::PushL(parser); + + TTime lastModified; + lastModified.UniversalTime(); + TVersitDateTime* dateTime=new(ELeave)TVersitDateTime(lastModified.DateTime(),TVersitDateTime::EIsMachineLocal); + CleanupStack::PushL(dateTime); + CParserPropertyValueDateTime* valueDateTime=new(ELeave) CParserPropertyValueDateTime(dateTime); + CleanupStack::Pop(dateTime); + CleanupStack::PushL(valueDateTime); + CParserGroupedProperty* property=CParserGroupedProperty::NewL(*valueDateTime,KVersitTokenREV,NULL,NULL); + CleanupStack::Pop(valueDateTime); + parser->AddPropertyL(property); + + RFile outfile; + User::LeaveIfError(outfile.Replace(fs,KVCalExportFileName,EFileWrite)); + CleanupClosePushL(outfile); + RFileWriteStream writeStream(outfile); + CleanupClosePushL(writeStream); + parser->ExternalizeL(writeStream); + CleanupStack::PopAndDestroy(3); + } + +CVersitVCardExportTest::CVersitVCardExportTest() + { + } + +void runOOMTestL(MVersitOOMTest& aTest) + { + TInt ret=KErrNoMemory; + TInt failAt=0; + while (ret!=KErrNone) + { + failAt++; + TBuf<200>indicator; + indicator.Format(_L("Memory fail at \t%d\x0d\x0a"),failAt); + if(failAt%100==0) + test.Printf(indicator); + __UHEAP_SETFAIL(RHeap::EDeterministic,failAt); + __UHEAP_MARK; + TRAP(ret, aTest.DoTestL()); + __UHEAP_MARKEND; + __UHEAP_RESET; + if (ret!=KErrNoMemory&&ret!=KErrNone) + { + test.Printf(_L("Non standard error: %d\n"),ret); + test.Getch(); + } + test(ret==KErrNoMemory||ret==KErrNone); + } + } + +LOCAL_C void ExpandCleanupStackL() + { + // reserve some space on the cleanup stack: + {for (TInt ii=0;ii<1000;++ii) + CleanupStack::PushL(&ii);} + CleanupStack::Pop(1000); + } +void createTestFilesL() + { + RFile file; + TInt err=file.Replace(fs,KVCalImportFileName, EFileWrite+EFileShareAny+EFileStreamText); + User::LeaveIfError(err); + file.Write(KVCalendarAllMandatoryProperties); + file.Close(); + + err=file.Replace(fs,KVCardImportFileName, EFileWrite+EFileShareAny+EFileStreamText); + User::LeaveIfError(err); + file.Write(KVCardAllMandatoryProperties); + file.Close(); + } + +/** +@SYMTestCaseID PIM-TOOM-0001 +*/ +void runOOMTestsL() + { + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + + CTestRegister* TempFiles = CTestRegister::NewLC(); + TempFiles->RegisterL(KVCalImportFileName); + TempFiles->RegisterL(KVCalExportFileName); + TempFiles->RegisterL(KVCardImportFileName); + TempFiles->RegisterL(KVCardExportFileName); + + test.Start(_L("@SYMTestCaseID PIM-TOOM-0001 Test One")); + createTestFilesL(); + ExpandCleanupStackL(); + + _LIT(KTestvCalImport,"vCal Import Test\n"); + test.Printf(KTestvCalImport); + CVersitVCalImportTest* oomtest1 = CVersitVCalImportTest::NewLC(); + runOOMTestL(*oomtest1); + CleanupStack::PopAndDestroy(oomtest1); + + _LIT(KTestvCardImport,"vCard Import Test\n"); + test.Printf(KTestvCardImport); + CVersitVCardImportTest* oomtest2 = CVersitVCardImportTest::NewLC(); + runOOMTestL(*oomtest2); + CleanupStack::PopAndDestroy(oomtest2); + + _LIT(KTestvCalExport,"vCal Export Test\n"); + test.Printf(KTestvCalExport); + CVersitVCalExportTest* oomtest3 = CVersitVCalExportTest::NewLC(); + runOOMTestL(*oomtest3); + CleanupStack::PopAndDestroy(oomtest3); + + _LIT(KTestvCardExport,"vCard Export Test\n"); + test.Printf(KTestvCardExport); + CVersitVCardExportTest* oomtest4 = CVersitVCardExportTest::NewLC(); + runOOMTestL(*oomtest4); + CleanupStack::PopAndDestroy(oomtest4); + + _LIT(KTestVersitAlarm,"Versit Alarm OOM Test\n"); + test.Printf(KTestVersitAlarm); + CVersitAlarmCreateTest* oomtest5 = CVersitAlarmCreateTest::NewLC(); + runOOMTestL(*oomtest5); + CleanupStack::PopAndDestroy(oomtest5); + + test.End(); + test.Close(); + CleanupStack::PopAndDestroy(2); // TempFiles, fs + } + +GLDEF_C TInt E32Main() + { + + TTime startTime; + startTime.UniversalTime(); + + __UHEAP_MARK; + + CTrapCleanup* theCleanup=CTrapCleanup::New(); + TRAPD(ret,runOOMTestsL()); + test(ret==KErrNone); + delete theCleanup; + + __UHEAP_MARKEND; + + TTime finishTime; + finishTime.UniversalTime(); + TReal elapsed = (TReal)finishTime.MicroSecondsFrom(startTime).Int64(); + test.Printf(_L("Elapsed time: %.4f\n"), elapsed/1000000); + + return(KErrNone); + } +