pimappsupport/vcardandvcal/tsrc/TVERSIT.CPP
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappsupport/vcardandvcal/tsrc/TVERSIT.CPP	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,890 @@
+// 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 "TVERSIT.H"
+#include <vutil.h>
+#include <charconv.h>
+#include <e32test.h>
+#include <coreappstest/testserver.h>
+
+// Type definitions
+#define UNUSED_VAR(a) a = a
+
+// Currently no tests for multiple VCards in sequence in a stream
+
+CConsoleBase* console;
+CVersitTest* test=NULL;
+TBool automatic=EFalse;
+LOCAL_D CTestRegister* FileRegister;
+#ifdef MANUAL
+#define TheTest  (*console)
+#define Next 	Printf
+#else
+static RTest TheTest(_L("TVersit"));
+#endif
+
+//
+// CVersitTest
+//
+
+CVersitTest::CVersitTest()
+	{}
+
+CVersitTest::~CVersitTest()
+	{
+	delete iParser;
+	delete iStore;
+	}
+
+void CVersitTest::StreamInL()
+//Convert the iVersit into stream format, save it as "VersitIn"
+//and internalize it as a CVersitParser
+	{
+	_LIT(KVersitInFileName, "VersitIn");
+	RFs fsSession; 
+	User::LeaveIfError(fsSession.Connect());
+	CleanupClosePushL(fsSession);
+	TFileName inFile;
+	FileRegister->GetTempPath(inFile);
+	inFile.Append(KVersitInFileName);
+	fsSession.MkDirAll(inFile);
+	FileRegister->RegisterL(inFile);
+	CFileStore* store = CDirectFileStore::ReplaceLC(fsSession, inFile, EFileWrite);
+    	store->SetTypeL(KDirectFileStoreLayoutUid);
+	RStoreWriteStream outstream;
+	TStreamId id = outstream.CreateLC(*store);
+	TInt length=iVersit.Length();
+	for (TInt ii=0; ii<length; ii++)
+		outstream.WriteInt8L(iVersit[ii]);
+	outstream.CommitL();
+	CleanupStack::PopAndDestroy(); // outstream
+	store->SetRootL(id);
+	store->CommitL();
+	CleanupStack::PopAndDestroy(store);
+	store = CDirectFileStore::OpenLC(fsSession, inFile, EFileRead); //retrieve stream
+	RStoreReadStream instream;
+	instream.OpenLC(*store,store->Root());
+	iParser->InternalizeL(instream);
+	CleanupStack::PopAndDestroy(3); //store + stream + fsSession
+	}
+
+void CVersitTest::StreamOutL()
+// externalize the CVersitParser into stream format, save the stream as "VersitOut"
+// and output it to the console
+	{
+	_LIT(KVersitOutFileName, "VersitOut");
+	RFs fsSession; // Save into stream
+	User::LeaveIfError(fsSession.Connect());
+	TFileName outFile;
+	FileRegister->GetTempPath(outFile);
+	outFile.Append(KVersitOutFileName);
+	FileRegister->RegisterL(outFile);
+	fsSession.MkDirAll(outFile);
+	CFileStore* store = CDirectFileStore::ReplaceLC(fsSession, outFile, EFileWrite);
+    store->SetTypeL(KDirectFileStoreLayoutUid);
+	RStoreWriteStream outstream;
+	TStreamId id = outstream.CreateLC(*store);
+	iParser->ExternalizeL(outstream);
+	outstream.CommitL();
+	CleanupStack::PopAndDestroy();
+	store->SetRootL(id);
+	store->CommitL();
+	CleanupStack::PopAndDestroy();
+	
+	store = CDirectFileStore::OpenLC(fsSession, outFile, EFileRead); //retrieve stream
+	RStoreReadStream instream;
+	instream.OpenLC(*store,store->Root());
+	TInt err=0;
+	TChar nextChar=0;
+	iVersit.Zero();
+#ifdef UNICODE
+	CCnvCharacterSetConverter* unicodeConverter=CCnvCharacterSetConverter::NewLC();
+	CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* arrayOfCharacterSetsAvailable=unicodeConverter->CreateArrayOfCharacterSetsAvailableL(fsSession);
+	CleanupStack::PushL(arrayOfCharacterSetsAvailable);
+	unicodeConverter->PrepareToConvertToOrFromL(0x100012b6, *arrayOfCharacterSetsAvailable, fsSession); // Code Page 1252
+	unicodeConverter->SetReplacementForUnconvertibleUnicodeCharactersL(_L8("?"));
+	CleanupStack::PopAndDestroy(); //arrayOfCharacterSetsAvailable
+#endif	
+	while (err==0)
+		{
+		if (nextChar!=CVersitParser::ELineFeed)
+			{
+			TRAP(err,nextChar=instream.ReadUint8L());
+			if (err!=KErrEof)
+				User::LeaveIfError(err);
+			iVersit.Append(nextChar);
+			}
+		else
+			{
+#ifdef UNICODE
+			HBufC16* output=HBufC16::NewLC(iVersit.Length());
+			TInt state;
+			TPtr16 temp = output->Des();
+			TInt error = unicodeConverter->ConvertToUnicode(temp, iVersit, state);
+			if (error!=KErrNone)
+				User::Leave(error);
+			TheTest.Printf(*output);
+			CleanupStack::PopAndDestroy(); //output
+#else
+			TheTest.Printf(iVersit);
+#endif
+			if (!automatic)
+				{
+				TInt character=TheTest.Getch();
+				if (character=='q') // character q quits
+					break;
+				}
+			nextChar=0;
+			iVersit.Zero();
+			}
+		}
+#ifdef UNICODE
+	CleanupStack::PopAndDestroy(); //unicodeConverter
+#endif
+	if (!automatic)
+		{
+		TheTest.Printf(_L("\n [press any key]\n"));
+		TheTest.Getch(); // get and ignore character
+		}
+	CleanupStack::PopAndDestroy(2); //store +stream
+	fsSession.Close();
+	}
+
+		
+void CVersitTest::SaveFileVersitL(/*CVersitParser*/Versit::TVersitCharSet aDefaultCharSet)
+// Save iParser into VersitFile	
+	{
+	if	(!iParser)
+		return;
+
+	RFs fsSession;
+	User::LeaveIfError(fsSession.Connect());
+	fsSession.MkDirAll(_L("C:\\logs\\t_versit\\"));
+	RFile file;
+	// glenn hard code to test round trip
+	iParser->SetDefaultCharSet(aDefaultCharSet);
+	if (file.Replace(fsSession,_L("C:\\logs\\t_versit\\VersitFile"),EFileWrite)==KErrNone)
+		iParser->ExternalizeL(file);
+	file.Close();
+	fsSession.Close();
+	}
+
+void CVersitTest::CheckIsValidLabelL()
+	{
+	TInt pos;
+	if(CVersitParser::IsValidLabel(_L("abcdefghijklmnopqrstuvwxyz"), pos))
+		TheTest.Printf(_L("\n test passed\n"));
+	else
+		TheTest.Printf(_L("\n test failed, pos = %d\n"), pos);
+
+	if(CVersitParser::IsValidLabel(_L("abcd:"), pos))
+		TheTest.Printf(_L("\n test failed, pos = %d\n"), pos);
+	else
+		TheTest.Printf(_L("\n test passed\n"));
+
+	if(CVersitParser::IsValidLabel(_L("ab[c]d"), pos))
+		TheTest.Printf(_L("\n test failed, pos = %d\n"), pos);
+	else
+		TheTest.Printf(_L("\n test passed\n"));
+
+	if(CVersitParser::IsValidLabel(_L("abc]d"), pos))
+		TheTest.Printf(_L("\n test failed, pos = %d\n"), pos);
+	else
+		TheTest.Printf(_L("\n test passed\n"));
+
+	if(CVersitParser::IsValidLabel(_L(",abcd"), pos))
+		TheTest.Printf(_L("\n test failed, pos = %d\n"), pos);
+	else
+		TheTest.Printf(_L("\n test passed\n"));
+	}
+
+//
+// CVCalTest
+//
+
+void CVCalTest::LoadFileVersitL()
+// Read VCalendar.vcs into iVersit	
+	{
+	if (iParser == NULL)
+		iParser = CParserVCal::NewL();
+	RFs fsSession;
+	User::LeaveIfError(fsSession.Connect());
+	RFile file;
+	if (file.Open(fsSession,_L("C:\\VCalendar.vcs"),EFileRead)==KErrNone)
+		{		
+		TInt start=0;
+		iParser->InternalizeL(file,start);
+		}
+	file.Close();
+	fsSession.Close();
+	}
+
+void CVCalTest::BuildVersitL()
+	{
+	iParser = CParserVCal::NewL();
+	iParser->SetDefaultCharSet(Versit::EISO88597CharSet);
+	CParserPropertyValue* value = CParserPropertyValueHBufC::NewL(_L("TEST!!!"));
+	CParserProperty* property = CParserProperty::NewL(*value, KVersitTokenDESCRIPTION, NULL);
+	iParser->AddPropertyL(property); //takes ownership
+	CParserVCalEntity* entity = CParserVCalEntity::NewL();
+	entity->SetEntityNameL(KVersitVarTokenVTODO);
+	CParserPropertyValue* value1 = CParserPropertyValueHBufC::NewL(_L("TEST!!!"));
+	CParserProperty* property1 = CParserProperty::NewL(*value1, KVersitTokenDESCRIPTION, NULL);
+	entity->AddPropertyL(property1);
+	iParser->AddEntityL(entity);
+	CArrayPtr<CVersitParser>* entities = iParser->EntityL(KVersitVarTokenVTODO,EFalse);	
+	if (entities == NULL)
+		User::Leave(KErrNotFound);
+	CArrayPtr<CParserProperty>* properties = (*entities)[0]->PropertyL(/*KVersitVarTokenDESCRIPTION*/KVersitTokenDESCRIPTION, TUid::Uid(KVersitPropertyHBufCUid), EFalse);
+	if (properties == NULL)
+		User::Leave(KErrNotFound);
+	delete entities;
+	delete properties;
+	}
+
+//
+// CVCardTest
+//
+
+void CVCardTest::LoadFileVersitL()
+// Read VCard.vcf into iVersit	
+	{
+	if (iParser == NULL)
+		iParser = CParserVCard::NewL();
+	RFs fsSession;
+	User::LeaveIfError(fsSession.Connect());
+	RFile file;
+	if (file.Open(fsSession,_L("C:\\VCard.vcf"),EFileRead)==KErrNone)
+		{		
+		TInt start=0;
+		iParser->InternalizeL(file,start);
+		}
+	file.Close();
+	fsSession.Close();
+	}
+
+void CVCardTest::BuildVersitL()
+	{
+	iParser = CParserVCard::NewL();
+	iParser->SetDefaultCharSet(Versit::EISO88597CharSet);
+	RFs fsSession;
+	User::LeaveIfError(fsSession.Connect());
+	CParserPropertyValue* value = CParserPropertyValueHBufC::NewL(_L("TEST!!!"));	
+	CParserProperty* property = CParserGroupedProperty::NewL(*value, KVersitTokenFN, NULL, NULL);
+	iParser->AddPropertyL(property); //takes ownership
+	CArrayPtr<CParserProperty>* properties = iParser->PropertyL(KVersitTokenFN, TUid::Uid(KVersitPropertyHBufCUid), EFalse);
+	if (property == NULL)
+		User::Leave(KErrNotFound);
+	delete properties;
+	fsSession.Close();
+	}
+
+//
+// Globals
+//
+
+void Help()
+	{
+	TheTest.Printf(_L("\n\n\nFiles must be placed in:"));
+	TheTest.Printf(_L("\nC: for marm"));
+	TheTest.Printf(_L("\n\\epoc32\\wins\\c for wins"));
+	TheTest.Printf(_L("\n\nc:\\VersitIn file contains stream-internalized sample parse"));
+	TheTest.Printf(_L("\nc:\\VersitOut file contains most recently stream-externalized parse"));
+	TheTest.Printf(_L("\nc:\\VersitFile contains most recently file-externalized parse"));
+	TheTest.Printf(_L("\nRename any sample file to be tested as suggested and choose options 1 and 2"));
+	TheTest.Printf(_L("\nPress any key to scroll line by line through an externalized model"));
+	TheTest.Printf(_L("\n'q' returns to menu"));
+	TheTest.Printf(_L("\n(Press any key)\n\n"));
+	TheTest.Getch();
+	}
+
+TInt Menu()
+	{
+	TheTest.Printf(_L("\n\n\nTest:"));
+	TheTest.Printf(_L("\n\n1. Internalize c:\\vcalendar.vcs"));
+	TheTest.Printf(_L("\n2. Internalize c:\\vcard.vcf"));
+	TheTest.Printf(_L("\n3. Internalize full vcal test"));
+	TheTest.Printf(_L("\n4. Internalize full vcard test"));
+	TheTest.Printf(_L("\n5. Build up vcal dynamically"));
+	TheTest.Printf(_L("\n6. Build up vcard dynamically"));
+	TheTest.Printf(_L("\n7. Externalize current object"));
+	TheTest.Printf(_L("\n8. Externalize object to c:\\VersitFile"));
+	TheTest.Printf(_L("\n9. Externalize object to c:\\VersitFile using ISO-X charset"));
+	TheTest.Printf(_L("\n0. Test IsValidlabel() method"));
+	TheTest.Printf(_L("\na. Timed full vCard internalize x 100"));
+	TheTest.Printf(_L("\nb. Internalize c:\\vcard.vcf (QP encoding, UTF8 charset)"));
+	TheTest.Printf(_L("\nc. Internalize c:\\vcard.vcf (QP encoding, UTF7 charset)"));
+	TheTest.Printf(_L("\nd. Internalize c:\\vcard.vcf (QP encoding, ISO x charsets)"));
+	//
+	//Change 26/01/2001
+	//#001
+	//Insert Start : Character sets for Chinese are added.
+	TheTest.Printf(_L("\ne. Internalize c:\\vcard.vcf     (QP encoding, GBK charsets)"));
+	TheTest.Printf(_L("\nf. Internalize c:\\vcard.vcf     (QP encoding, GB2312 charsets)"));
+	TheTest.Printf(_L("\ng. Internalize c:\\vcard.vcf     (QP encoding, Big5 charsets)"));
+	TheTest.Printf(_L("\ni. Internalize c:\\vcalendar.vcs (QP encoding, GBK charsets)"));
+	TheTest.Printf(_L("\nj. Internalize c:\\vcalendar.vcs (QP encoding, GB2312 charsets)"));
+	TheTest.Printf(_L("\nk. Internalize c:\\vcalendar.vcs (QP encoding, Big5 charsets)"));
+	TheTest.Printf(_L("\nl. Internalize c:\\vcalendar.vcs (QP encoding, UTF8 charset)"));
+	TheTest.Printf(_L("\nm. Internalize c:\\vcalendar.vcs (QP encoding, UTF7 charset)"));
+	TheTest.Printf(_L("\nn. Externalize object to c:\\VersitFile (QP encoding Base64, GBK charset)"));
+	TheTest.Printf(_L("\no. Externalize object to c:\\VersitFile (QP encoding Base64, GB2312 charset)"));
+	TheTest.Printf(_L("\np. Externalize object to c:\\VersitFile (QP encoding Base64, Big5 charset)"));
+	TheTest.Printf(_L("\nr. Externalize object to c:\\VersitFile (QP UTF-8 charset)"));
+	TheTest.Printf(_L("\ns. Externalize object to c:\\VersitFile (QP UTF-7 charset)"));
+	TheTest.Printf(_L("\nt. Externalize object to c:\\VersitFile (SHIFT_JIS charset)"));
+	TheTest.Printf(_L("\nu. Internalize object from c:\\vCard.vcf (SHIFT_JIS charset)"));
+	//Insert End
+	//
+	TheTest.Printf(_L("\nh. Help"));
+	TheTest.Printf(_L("\nq. Quit\n\n"));
+	return (TheTest.Getch());
+	}
+
+TInt DoTestL(TInt aChoice)
+	{
+	TInt error=KErrNone;
+	switch(aChoice)
+		{
+		case 'h':
+		case 'H':
+			Help();
+			break;
+		case '1':
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\nVCalendar.vcs must be in c: in order to internalize it\n"));
+			test=new(ELeave)CVCalTest;
+			CleanupStack::PushL(test);
+			TRAP(error,test->LoadFileVersitL());
+			break;
+		case '2':
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\nVCard.vcf must be in c: in order to internalize it\n"));
+			test=new(ELeave)CVCardTest;
+			CleanupStack::PushL(test);
+			TRAP(error,test->LoadFileVersitL());
+			break;
+		case '3':
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			TheTest.Next(_L("\nCreate a sample vCal in file VersitIn and internalize it\n"));
+			test=new(ELeave)CVCalTest;
+			CleanupStack::PushL(test);
+			test->GetSampleVersitL();
+			TRAP(error,test->StreamInL()); // run tests
+			break;
+		case '4':
+			{
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\nCreate a sample vCard in file VersitIn and internalize it\n"));
+			test = new(ELeave) CVCardTest;
+			CleanupStack::PushL(test);
+			test->GetSampleVersitL();
+			TRAP(error,test->StreamInL()); // run tests
+			break;
+			}
+		case '5':
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\nBuild up vcal dynamically\n"));
+			test=new(ELeave)CVCalTest;
+			CleanupStack::PushL(test);
+			test->BuildVersitL();
+			break;
+		case '6':
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\nBuild up vcard dynamically\n"));
+			test=new(ELeave)CVCardTest;
+			CleanupStack::PushL(test);
+			test->BuildVersitL();
+			
+			
+			TheTest.Next(_L("\nExternalize object\n"));
+			if (test)
+				TRAP(error,test->StreamOutL()); // run tests
+			break;
+		case '7':
+			
+			
+			TheTest.Next(_L("\nExternalize object\n"));
+			if (test)
+				TRAP(error,test->StreamOutL()); // run tests
+			break;
+		case '8':
+			
+			
+			TheTest.Next(_L("\n Externalize object to VersitFile\n"));
+			if (test)
+				TRAP(error,test->SaveFileVersitL()); // run tests
+			break;
+		case '9':
+			
+			
+			TheTest.Next(_L("\n Externalize object to VersitFile using ISO-X charset\n"));
+			if (test)
+				TRAP(error,test->SaveFileVersitL(Versit::EISO88592CharSet)); // run tests
+			break;
+		case '0':
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\n Test IsValidLabel()\n"));
+			test=new(ELeave)CVCalTest;
+			CleanupStack::PushL(test);
+			test->CheckIsValidLabelL(); // run tests
+			break;
+		case 'a':
+		case 'A':
+			{
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\n VCard test internalize x 100\n"));
+			test = new(ELeave) CVCardTest;
+			CleanupStack::PushL(test);
+			TTime start;
+			start.UniversalTime();
+			TTime finish;
+			TInt i;
+			for(i = 0; i < 100 && error ==KErrNone; i++)
+				{
+				test->GetSampleVersitL();
+				TRAP(error, test->StreamInL()); // run tests
+				delete test->iParser;	// delete parser after each test or it gets HUGE and we run out of memory
+				test->iParser=NULL;
+				}
+			finish.UniversalTime();
+			TheTest.Printf(_L("\nTook %d microseconds for %i tests\n"), finish.MicroSecondsFrom(start).Int64(), i);
+			break;
+			}
+
+		case 'b':
+		case 'B':
+			{
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\n VCard.vcf internalize (QP encoding, UTF8 charset)\n"));
+			test = new(ELeave) CVCardTest;
+			CleanupStack::PushL(test);
+			test->iParser = CParserVCard::NewL();
+ 			test->iParser->SetDefaultCharSet(Versit::EUTF8CharSet);
+			TRAP(error,test->LoadFileVersitL());
+			break;
+			}
+		case 'c':
+		case 'C':
+			{
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\n VCard.vcf internalize (QP encoding, UTF7 charset)\n"));
+			test = new(ELeave) CVCardTest;
+			CleanupStack::PushL(test);
+			test->iParser = CParserVCard::NewL();
+ 			test->iParser->SetDefaultCharSet(Versit::EUTF7CharSet);
+			TRAP(error,test->LoadFileVersitL());
+			break;
+			}
+		case 'd':
+		case 'D':
+			{
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\n VCard.vcf internalize (QP encoding, ISO X charset)\n"));
+			test = new(ELeave) CVCardTest;
+			CleanupStack::PushL(test);
+			test->iParser = CParserVCard::NewL();
+			test->iParser->SetDefaultEncoding(Versit::EQuotedPrintableEncoding);
+ 			test->iParser->SetDefaultCharSet(Versit::EISO88592CharSet);
+			TRAP(error,test->LoadFileVersitL());
+			if (error)
+				break;
+
+			test->iParser->SetDefaultCharSet(Versit::EISO88592CharSet);
+			TRAP(error,test->LoadFileVersitL());
+			if (error)
+				break;
+
+			test->iParser->SetDefaultCharSet(Versit::EISO88594CharSet);
+			TRAP(error,test->LoadFileVersitL());
+			if (error)
+				break;
+
+			test->iParser->SetDefaultCharSet(Versit::EISO88595CharSet);
+			TRAP(error,test->LoadFileVersitL());
+			if (error)
+				break;
+
+			test->iParser->SetDefaultCharSet(Versit::EISO88597CharSet);
+			TRAP(error,test->LoadFileVersitL());
+			if (error)
+				break;
+
+			test->iParser->SetDefaultCharSet(Versit::EISO88599CharSet);
+			TRAP(error,test->LoadFileVersitL());
+			break;
+			}
+		//
+		//Change 31/01/2001
+		//#002
+		//Insert Start : Character sets for Chinese are added.
+		// This is to test the default character sets and encodings for decoding non-standard Versit object in vCard.
+		case 'e': //GBK
+		case 'E':
+			{
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			TheTest.Next(_L("\n VCard.vcf internalize (QP encoding, GBK charset)\n"));
+			test = new(ELeave) CVCardTest;
+			CleanupStack::PushL(test);
+			test->iParser = CParserVCard::NewL();
+			test->iParser->SetDefaultEncoding(Versit::ENoEncoding);
+			test->iParser->SetDefaultCharSet(Versit::EGBKCharSet);
+			TRAP(error,test->LoadFileVersitL());
+			break;
+			}
+		case 'f': //GB2312
+		case 'F':
+			{
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\n VCard.vcf internalize (QP encoding, GB2312 charset)\n"));
+			test = new(ELeave) CVCardTest;
+			CleanupStack::PushL(test);
+			test->iParser = CParserVCard::NewL();
+			test->iParser->SetDefaultEncoding(Versit::ENoEncoding);
+ 			test->iParser->SetDefaultCharSet(Versit::EGB231280CharSet);
+			TRAP(error,test->LoadFileVersitL());
+			break;
+			}
+		case 'g': //Big5
+		case 'G':
+			{
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\n VCard.vcf internalize (QP encoding, Big5 charset)\n"));
+			test = new(ELeave) CVCardTest;
+			CleanupStack::PushL(test);
+			test->iParser = CParserVCard::NewL();
+			test->iParser->SetDefaultEncoding(Versit::ENoEncoding);
+ 			test->iParser->SetDefaultCharSet(Versit::EBIG5CharSet);
+			TRAP(error,test->LoadFileVersitL());
+			break;
+			}
+		// This is to test the default character sets and encodings for decoding non-standard Versit object in vCal.
+		case 'i': //GBK
+		case 'I':
+			{
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\nVCalendar.vcs internalize (QP encoding, GBK charset)\n"));
+			test = new(ELeave) CVCalTest;
+			CleanupStack::PushL(test);
+			test->iParser = CParserVCal::NewL();
+			test->iParser->SetDefaultEncoding(Versit::ENoEncoding);
+			test->iParser->SetDefaultCharSet(Versit::EGBKCharSet);
+			TRAP(error,test->LoadFileVersitL());
+			break;
+			}
+		case 'j': //GB2312
+		case 'J':
+			{
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\n VCalendar.vcs internalize (QP encoding, GB2312 charset)\n"));
+			test = new(ELeave) CVCalTest;
+			CleanupStack::PushL(test);
+			test->iParser = CParserVCal::NewL();
+			test->iParser->SetDefaultEncoding(Versit::ENoEncoding);
+ 			test->iParser->SetDefaultCharSet(Versit::EGB231280CharSet);
+			TRAP(error,test->LoadFileVersitL());
+			break;
+			}
+		case 'k': //Big5
+		case 'K':
+			{
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			TheTest.Next(_L("\n@VCalendar.vcs internalize (QP encoding, Big5 charset)\n"));
+			test = new(ELeave) CVCalTest;
+			CleanupStack::PushL(test);
+			test->iParser = CParserVCal::NewL();
+			test->iParser->SetDefaultEncoding(Versit::ENoEncoding);
+ 			test->iParser->SetDefaultCharSet(Versit::EBIG5CharSet);
+			TRAP(error,test->LoadFileVersitL());
+			break;
+			}
+		case 'l':
+		case 'L':
+			{
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\nVCalendar.vcs internalize (QP encoding, UTF8 charset)\n"));
+			test = new(ELeave) CVCalTest;
+			CleanupStack::PushL(test);
+			test->iParser = CParserVCal::NewL();
+			test->iParser->SetDefaultEncoding(Versit::ENoEncoding);
+ 			test->iParser->SetDefaultCharSet(Versit::EUTF8CharSet);
+			TRAP(error,test->LoadFileVersitL());
+			break;
+			}
+		case 'm':
+		case 'M':
+			{
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\nVCalendar.vcs internalize (QP encoding, UTF7 charset)\n"));
+			test = new(ELeave) CVCalTest;
+			CleanupStack::PushL(test);
+			test->iParser = CParserVCal::NewL();
+			test->iParser->SetDefaultEncoding(Versit::ENoEncoding);
+ 			test->iParser->SetDefaultCharSet(Versit::EUTF7CharSet);
+			TRAP(error,test->LoadFileVersitL());
+			break;
+			}
+		// This is to test the default character sets and encodings of GBK/GB2312/Big5 for the encoding versit object.
+		case 'n': //GBK
+		case 'N':
+			{
+			
+			TheTest.Next(_L("\nExternalize object to VersitFile (QP encoding Base64, GBK charset)\n"));
+			if (test)
+				if (test->iParser)
+					{
+					test->iParser->SetDefaultEncoding(Versit::EBase64Encoding);
+					TRAP(error,test->SaveFileVersitL(Versit::EGBKCharSet)); // run tests
+				}
+				break;
+			}
+		case 'o': //GB2312
+		case 'O':
+			{
+				
+			TheTest.Next(_L("\nExternalize object to VersitFile (QP encoding Base64, GB2312 charset)\n"));
+			if (test)
+				if (test->iParser)
+					{
+					test->iParser->SetDefaultEncoding(Versit::EBase64Encoding);
+					TRAP(error,test->SaveFileVersitL(Versit::EGB231280CharSet)); // run tests
+				}
+				break;
+			}
+		case 'p': //Big5
+		case 'P':
+			{
+				
+			TheTest.Next(_L("\nExternalize object to VersitFile (QP encoding Base64, Big5 charset)\n"));
+			if (test)
+				if (test->iParser)
+					{
+					test->iParser->SetDefaultEncoding(Versit::EBase64Encoding);
+					TRAP(error,test->SaveFileVersitL(Versit::EBIG5CharSet)); // run tests
+				}
+				break;
+			}
+		case 'r': //UTF-8
+		case 'R':
+			{
+				
+			TheTest.Next(_L("\nExternalize object to VersitFile (QP UTF-8 charset)\n"));
+			if (test)
+				if (test->iParser)
+					{
+					TRAP(error,test->SaveFileVersitL(Versit::EUTF8CharSet)); // run tests
+				}
+				break;
+			}
+		case 's': //UTF-7
+		case 'S':
+			{
+			
+			TheTest.Next(_L("\nExternalize object to VersitFile (QP UTF-7 charset)\n"));
+			if (test)
+				if (test->iParser)
+					{
+					TRAP(error,test->SaveFileVersitL(Versit::EUTF7CharSet)); // run tests
+				}
+				break;
+			}
+		case 't': //SHIFT_JIS externalize
+		case 'T':
+			{
+			
+			TheTest.Next(_L("\nExternalize object to VersitFile (SHIFT_JIS charset)\n"));
+			if (test)
+				if (test->iParser)
+					{
+					TRAP(error,test->SaveFileVersitL(Versit::EShiftJISCharSet)); // run tests
+				}
+				break;
+			}
+		case 'u': //SHIFT_JIS internalize
+		case 'U':
+			{
+			if (test)
+				CleanupStack::PopAndDestroy(test);
+			
+			
+			TheTest.Next(_L("\nvCard.vcf internalize (SHIFT_JIS charset)\n"));
+			test = new(ELeave) CVCardTest;
+			CleanupStack::PushL(test);
+			test->iParser = CParserVCard::NewL();
+			test->iParser->SetDefaultEncoding(Versit::ENoEncoding);
+			test->iParser->SetDefaultCharSet(Versit::EShiftJISCharSet);
+			TRAP(error,test->LoadFileVersitL());
+			break;
+			}
+		case 'z':
+		case 'Z':
+			{
+			TInt testnumber='0';
+			automatic=ETrue;
+			FOREVER
+				{
+				if (DoTestL(testnumber)!=KErrNone)
+					{
+					_LIT(KContinue,"\n\nFAILED!!!  Test: '%c',   Press a key to continue\n");
+					TheTest.Printf(KContinue, testnumber);
+					TheTest.Getch();
+					}
+				switch (testnumber)
+					{
+				case '9':
+					testnumber='a';
+					break;
+				case 'u':
+					automatic=EFalse;
+					return KErrNone;
+				case 'g':
+				case 'p':
+					++testnumber;
+				default:
+					++testnumber;
+					}
+				}
+			}
+		default:
+			{
+			TheTest.Printf(_L("\nPressing wrong key"));
+			error=KErrGeneral;
+			break;
+			}
+		};
+#ifdef MANUAL
+	if (error) 
+		{
+		TheTest.Printf(_L("\n Failed: leave code=%d\n"), error);
+		User::LeaveIfError(error);
+		}
+	else
+		TheTest.Printf(_L("\nTest passed!"));
+#else		
+	TheTest(error == KErrNone);
+#endif		
+	return error;
+	}
+
+void SetupConsoleL() // initialize and call example code under cleanup stack
+    {
+	console=Console::NewL(_L("VersitTest"),
+		TSize(76,18));
+	CleanupStack::PushL(console);
+	//TInt choice=Menu();
+	DoTestL('z');		//Perform all tests.
+	TInt choice='q';	//And quit
+
+	while (!(choice=='q'||choice=='Q'))
+		{
+		DoTestL(choice);
+		console->Printf(_L("\n\nPress any key to see available options, \ne.g. either quit or performing other testings"));
+		console->Getch();
+		choice=Menu();
+		}
+	if (test)
+		CleanupStack::PopAndDestroy(test);
+	CleanupStack::PopAndDestroy(console);
+    }
+
+
+void DoAllTestsL() // initialize and call all tests
+	{
+	FileRegister = CTestRegister::NewLC();
+
+	DoTestL('z');		//Perform all tests.
+	if (test)
+		{
+		CleanupStack::PopAndDestroy(test);
+		}
+
+	CleanupStack::PopAndDestroy(FileRegister);
+	}
+
+/**
+@SYMTestCaseID PIM-TVERSIT-0001
+*/	
+GLDEF_C TInt E32Main()
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New();
+#ifdef MANUAL
+	TRAPD(error,SetupConsoleL());
+#else
+	TheTest.Start(_L("@SYMTestCaseID PIM-TVERSIT-0001 TVersit"));
+	TRAPD(error,DoAllTestsL());
+	UNUSED_VAR(error); //Used to supress build warnings
+	
+	TheTest.End();
+	TheTest.Close();
+#endif
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return (KErrNone);
+	}