phonebookengines_old/contactsmodel/tsrc/T_VExportType.cpp
changeset 40 b46a585f6909
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines_old/contactsmodel/tsrc/T_VExportType.cpp	Fri Jun 11 13:29:23 2010 +0300
@@ -0,0 +1,209 @@
+// Copyright (c) 2006-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:
+// This tests the versit export when the TYPE parameter name is missing.
+// E.g PHOTO;GIF;BASE64: is present in the vcf file instead of PHOTO;TYPE=GIF;BASE64:
+// which the vcard specifications states is acceptable
+// 
+//
+
+#include <e32test.h>
+#include <e32debug.h>
+#include <f32file.h>
+#include <s32file.h>
+#include "T_UTILS.H"
+
+LOCAL_D CCntTest* CntTest=NULL;
+LOCAL_D const TPtrC KDatabaseFileName=_L("C:VTypeDb.cdb");
+LOCAL_D RTest test(_L("T_VExportType"));
+LOCAL_D RFs fsSession;
+
+_LIT8(KTypePattern, "TYPE=GIF");
+
+
+_LIT(KVImportFileName, "Z:\\t_cntvcard\\T_VExportTypeWithGif.vcf");
+_LIT(KVExportFileName, "C:\\vTypeExport.vcf");
+_LIT(KVReExportedFileName, "C:\\vTypeRe-export.vcf");
+
+
+
+void DeleteVcardFilesL()
+    {
+    User::LeaveIfError(fsSession.Connect());
+	CleanupClosePushL(fsSession);
+	
+	fsSession.Delete(KVExportFileName);
+	fsSession.Delete(KVReExportedFileName);
+	
+	fsSession.Close();
+    CleanupStack::PopAndDestroy(&fsSession);
+    }
+
+void EmptyDatabase()
+	{
+	TContactItemId theid;
+	TContactIter iter(*CntTest->Db());
+	theid=iter.FirstL();
+	while(theid!=KNullContactId )
+		{
+		CntTest->Db()->DeleteContactL(theid);
+		theid=iter.NextL();
+		}
+	}
+	
+void VersitImportContactL(const TDesC& aImportFileName)
+{
+    RFileReadStream readStream;
+		
+	//Import aImportFileName
+	User::LeaveIfError(readStream.Open(fsSession, aImportFileName, EFileRead));
+	CleanupClosePushL(readStream);
+	
+	TBool success=EFalse;
+	CArrayPtr<CContactItem>* contactItems=CntTest->Db()->ImportContactsL(TUid::Uid(KUidVCardConvDefaultImpl),
+	                                                                     readStream, success,
+	                                                                     CContactDatabase::EImportSingleContact+CContactDatabase::ETTFormat);
+	                                                                     
+	                                                                     
+    //Should be the only contact in the database at this point
+	TInt count = CntTest->Db()->CountL();
+	test(count == 1);
+	
+	//Store the id of the new contact - we need this later
+	TContactItemId contactId = (*contactItems)[0]->Id();
+	CntTest->Db()->SetCurrentItem(contactId);
+	
+	readStream.Close();                                                                
+	CleanupStack::PopAndDestroy(); //readStream.Close()
+    contactItems->ResetAndDestroy();
+    delete contactItems;
+	
+}
+
+void VersitExportContactL(const TDesC& aExportFileName)
+{
+    RFileWriteStream writeStream;
+    User::LeaveIfError(writeStream.Replace(fsSession, aExportFileName, EFileWrite));
+    CleanupClosePushL(writeStream);
+    
+    CContactIdArray* idArray = CContactIdArray::NewLC();
+    TInt count = CntTest->Db()->CountL();
+	test(count == 1);
+    TContactItemId contactId = CntTest->Db()->GetCurrentItem();
+    
+    idArray->InsertL(0, contactId);
+    
+    CntTest->Db()->ExportSelectedContactsL(TUid::Uid(KUidVCardConvDefaultImpl), *idArray, writeStream,0);
+    writeStream.Close();
+    
+	CleanupStack::PopAndDestroy(2); //idArray, writeStream
+	                                                                     
+    	
+}
+
+TBool VersitCheckPatternL(const TDesC& aExportFileName, const TDesC8& aExportedPattern)
+{
+	RFile fileHandle;
+	TBool patternFound = EFalse;
+	fileHandle.Open(fsSession, aExportFileName, EFileRead|EFileStreamText);
+	CleanupClosePushL(fileHandle);
+	
+//	TFileText exportedfile; //Bug in TFileText so not used at the moment
+//	exportedfile.Set(fileHandle);
+//	exportedfile.Seek(ESeekStart);
+	TBuf8<256> line;
+	
+	while(fileHandle.Read(line) == KErrNone && line.Length() != 0)
+	{
+		if (line.Find(aExportedPattern) != KErrNotFound)
+		{
+		    patternFound = ETrue;
+		    break;	
+		}	
+	}
+	
+	CleanupStack::PopAndDestroy(&fileHandle);
+	return patternFound;
+}
+
+
+
+void TestImportExportTypeL(const TDesC& aImportFileName,const TDesC& aExportFileName, const TDesC8& aExportedPattern)
+    {
+    VersitImportContactL(aImportFileName);
+    
+    VersitExportContactL(aExportFileName);
+    
+    test(VersitCheckPatternL(aExportFileName, aExportedPattern));
+    }
+
+/**
+
+@SYMTestCaseID     PIM-T-VEXPORTTYPE-0001
+
+*/
+
+void TestTypeL()
+    {
+	test.Start(_L("@SYMTESTCaseID:PIM-T-VEXPORTTYPE-0001 Test Versit export of Type line"));
+
+	
+	User::LeaveIfError(fsSession.Connect());
+	CleanupClosePushL(fsSession);
+	
+	CntTest->CreateDatabaseL();
+	
+	test.Next(_L("PHOTO;GIF;BASE64:"));
+
+	
+	TestImportExportTypeL(KVImportFileName, KVExportFileName, KTypePattern);
+	
+	EmptyDatabase();
+	
+	test.Next(_L("PHOTO;TYPE=GIF;BASE64:"));
+
+	
+	TestImportExportTypeL(KVExportFileName, KVReExportedFileName, KTypePattern);
+	
+	EmptyDatabase();
+	
+	fsSession.Close();
+    CleanupStack::PopAndDestroy(&fsSession);
+	
+	CntTest->CloseDatabase();
+	
+	CntTest->DeleteDatabaseL();
+    }
+
+GLDEF_C TInt E32Main()
+    {
+	__UHEAP_MARK;
+	CntTest = new CCntTest;
+	if (!CntTest)
+		{
+		return KErrNoMemory;
+		}
+
+	TRAPD(err, CntTest->ConstructL(test,KDatabaseFileName) );
+	test(err == KErrNone);
+		
+	TRAP(err, TestTypeL() );
+	test(err == KErrNone);
+	
+	TRAP_IGNORE(DeleteVcardFilesL()); //Tidy up the exported files
+	
+	CntTest->EndTestLib(err);
+	
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }