pimappsupport/vcardandvcal/tsrc/toom.cpp
changeset 0 f979ecb2b13e
--- /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);
+	}
+