--- /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 <e32std.h>
+#include <e32test.h>
+
+#include <versit.h>
+#include <vcal.h>
+#include <vcard.h>
+
+#include <coreappstest/testserver.h>
+
+_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<CVersitParser>* array=REINTERPRET_CAST(CArrayPtr<CVersitParser>*,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<CVersitParser>* entities = aVCalParser.EntityL(KVersitVarTokenVTODO,EFalse);
+ test(entities != NULL);
+ CleanupStack::PushL(entities);
+ CArrayPtr<CParserProperty>* 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);
+ }
+