phonebookengines/contactsmodel/tsrc/Integration/TestImpExvCard/src/TestImpExvCardSuiteStepBase.cpp
changeset 0 e686773b3f54
child 24 0ba2181d7c28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/Integration/TestImpExvCard/src/TestImpExvCardSuiteStepBase.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,363 @@
+// Copyright (c) 2005-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 "TestImpExvCardSuiteStepBase.h"
+#include "TestImpExvCardSuiteDefs.h"
+
+CTestImpExvCardSuiteStepBase::~CTestImpExvCardSuiteStepBase()
+	{
+	}
+
+CTestImpExvCardSuiteStepBase::CTestImpExvCardSuiteStepBase()
+	{
+	}
+
+void CTestImpExvCardSuiteStepBase::OpenVCFAndImportItemL(TBuf<80> aPath, RFs aFsSession, TInt aIndex)
+	{
+	User::LeaveIfError(aFsSession.Connect());
+	CleanupClosePushL(aFsSession);
+	RFileReadStream readVCFStream;
+	
+	// Format buf to hold relevant vcf file
+	TBuf<100> buf;
+	buf.Zero();
+#ifdef __WINS__	
+    buf.Append(_L("c:"));
+#else
+    TFileName processFileName = RProcess().FileName();
+    TParsePtrC parse(processFileName);
+    buf.Append(parse.Drive());
+#endif 
+	buf.Append(aPath);
+	buf.AppendNum(aIndex);
+	buf.Append(_L(".vcf"));
+	
+	// Open vcf file
+	User::LeaveIfError(readVCFStream.Open(aFsSession, buf, EFileRead));
+	
+	TBuf<MAX_TEXT_MESSAGE> message;
+	message.Format(KOpenVCFFile, &buf);
+	INFO_PRINTF1(message);
+	
+	CleanupClosePushL(readVCFStream);
+	
+	// Imports the vCard
+	ImportCardL(readVCFStream);
+	
+	CleanupStack::PopAndDestroy(); // pop readVCFStream
+	aFsSession.Close();
+	CleanupStack::PopAndDestroy(); // pop aFsSession
+	}
+	
+void CTestImpExvCardSuiteStepBase::ImportCardL(RReadStream& aReadStream)
+	{
+	INFO_PRINTF1(_L("Importing vCard....."));
+	
+	CVCardToContactsAppConverter* converter=new(ELeave)	CVCardToContactsAppConverter;
+	CleanupStack::PushL(converter); // converter
+
+	CParserVCard* vCard= CParserVCard::NewL();
+	CleanupStack::PushL(vCard);
+	TInt err = KErrNone;
+	TRAP(err, vCard->InternalizeL(aReadStream));
+	User::LeaveIfError(err);
+	
+	CContactItem* contactItem = NULL;
+		
+	// the CContactVCardConverter::ELocalTime must be used, so the program expects a local time
+	contactItem = converter->GetVCardAsContactItemLC(*vCard, CVCardToContactsAppConverter::EPreserveAllProperties, 0);
+	
+	// the time would be automatically converted to UTC by the production codes
+	iTimeFromImport = (*contactItem).LastModified();
+	
+	CleanupStack::PopAndDestroy(3); // GetVCardAsContactItemLC, vCard & converter
+	INFO_PRINTF1(_L("Imported to Contact Entry"));
+	}
+	
+void CTestImpExvCardSuiteStepBase::OpenBDAYVCFAndImportItemL(TBuf<80> aPath,TInt aIndex)
+	{
+	// Format buf to hold relevant vcf file
+	TFileName fileName;
+#ifdef __WINS__
+	fileName.Append(_L("c:"));
+#else
+	TFileName processFileName = RProcess().FileName();
+	TParsePtrC parse(processFileName);
+	fileName.Append(parse.Drive());
+#endif
+	fileName.Append(aPath);
+	fileName.AppendNum(aIndex);
+	fileName.Append(_L(".vcf"));
+	
+	RFs fs; 
+	User::LeaveIfError(fs.Connect());  // push fs
+	CleanupClosePushL(fs);
+	RFileReadStream readVCFStream;
+	User::LeaveIfError(readVCFStream.Open(fs, fileName, EFileRead)); // opens vcf file
+	
+	TBuf<MAX_TEXT_MESSAGE> message;
+	message.Format(KOpenVCFFile, &fileName);
+	INFO_PRINTF1(message);
+	
+	CleanupClosePushL(readVCFStream);   // readVCFStream
+
+	ImportBDAYCardL(readVCFStream);
+		
+	CleanupStack::PopAndDestroy(); // pop readVCFStream
+	fs.Close();
+	CleanupStack::PopAndDestroy(); // pop fs
+	}
+	
+void CTestImpExvCardSuiteStepBase::ImportBDAYCardL(RReadStream& aReadStream)
+	{
+	INFO_PRINTF1(_L("Importing vCard....."));
+	
+
+	CVCardToContactsAppConverter* converter=new(ELeave)	CVCardToContactsAppConverter;
+	CleanupStack::PushL(converter); // converter
+
+	CParserVCard* vCard= CParserVCard::NewL();
+	CleanupStack::PushL(vCard);
+	TInt err = KErrNone;
+	TRAP(err, vCard->InternalizeL(aReadStream));
+	User::LeaveIfError(err);
+	
+	CContactItem* contactItem = NULL;
+	
+	// set to local time
+	contactItem = converter->GetVCardAsContactItemLC(*vCard, CVCardToContactsAppConverter::EPreserveAllProperties, CContactVCardConverter::ELocalTime);
+	
+	CContactItemFieldSet& cardFields = contactItem->CardFields();
+	
+	INFO_PRINTF1(_L("Looking for Birthday field in Contact entry....."));
+	TInt pos = cardFields.Find(KUidContactFieldBirthday);
+	
+	if (pos==KErrNotFound)
+		{
+		INFO_PRINTF1(_L("Birthday field not found in Contact entry"));
+		iBDayFromImport = NULL;
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Birthday field found in Contact entry"));
+		CContactItemField& itemField = cardFields[pos];
+	
+		CContactDateField* dateTimeField = itemField.DateTimeStorage();
+		CleanupStack::PushL(dateTimeField);
+	
+		iBDayFromImport = dateTimeField->Time();
+		
+		CleanupStack::Pop();
+		}
+	
+	INFO_PRINTF1(_L("Imported to Contact Entry"));
+		
+	CleanupStack::PopAndDestroy(3); 
+	}
+	
+void CTestImpExvCardSuiteStepBase::ExportItemL(TBuf<80> aPath, TBool aAddBDay)
+	{
+	OpenDBL();
+	
+	TContactItemId itemId;
+	RFs fsSession;
+	RFileWriteStream fileStream;
+
+	CContactIdArray* idArray = NULL;
+	CContactCard* contactAdded = NULL;
+	TTime now;
+	
+	User::LeaveIfError(fsSession.Connect());
+	CleanupClosePushL(fsSession);
+	
+	idArray = CContactIdArray::NewL();
+
+	CleanupStack::PushL(idArray);   // idArray
+
+	fsSession.MkDirAll(aPath);
+	User::LeaveIfError(fileStream.Replace(fsSession, aPath, EFileWrite));
+
+	contactAdded = CContactCard::NewL();
+
+	CleanupStack::PushL(contactAdded);   // contactAdded
+	
+	contactAdded->IncAccessCount();
+	
+	// ADD BDAY
+	if (aAddBDay)
+		{
+		CContactItemFieldSet& fieldSet=contactAdded->CardFields();
+		const TInt pos=fieldSet.Find(KUidContactFieldBirthday);
+	
+		if (pos!=KErrNotFound)
+			{
+			fieldSet[pos].DateTimeStorage()->SetTime(iBDayLocal);
+			}
+		else
+			{
+			CContactItemField* field=CContactItemField::NewLC(KStorageTypeDateTime,KUidContactFieldBirthday);
+   			field->SetMapping(KUidContactFieldVCardMapBDAY);
+			field->DateTimeStorage()->SetTime(iBDayLocal);
+			contactAdded->AddFieldL(*field);
+	
+			CleanupStack::Pop(); // field
+			}
+		}
+	
+	SetNameL(*contactAdded, KUidContactFieldGivenName, _L("toby"), ETrue);
+	SetNameL(*contactAdded, KUidContactFieldPhoneNumber, _L("6041233214"), ETrue);
+
+	User::After(3000000);
+
+	// There is no need to call SetLastModifed because
+	// That function will be call by ExportSelectedContactsL below
+	now.UniversalTime();
+	iRecordedTime = now;
+	
+	INFO_PRINTF1(_L("Adding contact to Database....."));
+	itemId = iDb->AddNewContactL(*contactAdded);
+	INFO_PRINTF1(_L("Contact Added to Database"));
+	CleanupStack::PopAndDestroy(contactAdded);  // contactAdded
+	contactAdded = NULL;
+
+	idArray->InsertL(0, itemId);
+
+	INFO_PRINTF1(_L("Exporting Contact....."));
+	iDb->ExportSelectedContactsL(TUid::Uid(KUidVCardConvDefaultImpl), *idArray, fileStream, CContactVCardConverter::EDefault, ETrue);
+	INFO_PRINTF1(_L("Exported Contact"));
+	fileStream.CommitL();
+	fileStream.Close();
+	
+	CleanupStack::PopAndDestroy(idArray);  // idArray
+	fsSession.Close();
+	CleanupStack::PopAndDestroy();  // fsSession
+	CloseDB();
+	}
+	
+void CTestImpExvCardSuiteStepBase::ImportItemL(TBuf<80> aPath, TBool aImportBDay)
+	{
+	RFs fs; 
+	User::LeaveIfError(fs.Connect());  // push fs
+	CleanupClosePushL(fs);
+	RFileReadStream readVCFStream;
+	
+	INFO_PRINTF1(_L("Opening exported vcf file to import, to check REV property"));
+	
+	User::LeaveIfError(readVCFStream.Open(fs, aPath, EFileRead));
+	
+	TBuf<MAX_TEXT_MESSAGE> message;
+	message.Format(KOpenVCFFile, &KExportRevUTCFile);
+	INFO_PRINTF1(message);
+	
+	CleanupClosePushL(readVCFStream);  // readVCFStream
+
+	if (aImportBDay)
+		{
+		ImportBDAYCardL(readVCFStream);
+		}
+	else
+		{
+		ImportCardL(readVCFStream);
+		}
+
+	CleanupStack::PopAndDestroy();  // readVCFStream
+	CleanupStack::PopAndDestroy(); // pop fs
+	}
+
+void CTestImpExvCardSuiteStepBase::OpenDBL()
+	{
+	if(iDb == NULL)
+		{
+		INFO_PRINTF1(_L("Opening Contacts Database....."));
+		iDb = CContactDatabase::ReplaceL();
+		INFO_PRINTF1(_L("Opened Contacts Database"));
+		}
+	}
+	
+void CTestImpExvCardSuiteStepBase::CloseDB()
+	{
+	delete iDb;
+	iDb = NULL;
+	}
+
+void CTestImpExvCardSuiteStepBase::SetNameL(CContactItem& aItem,TUid aType,const TDesC& aName, TBool aAddField)
+//
+// Set the contents of a text field, creating the field if required
+//
+	{
+	CContactItemFieldSet& fieldSet=aItem.CardFields();
+	const TInt pos=fieldSet.Find(aType);
+	if (!aAddField && pos!=KErrNotFound)
+		{
+		fieldSet[pos].TextStorage()->SetTextL(aName);
+		}
+	else
+		{
+		CContactItemField* field=CContactItemField::NewLC(KStorageTypeText,aType);
+   		field->SetMapping(KUidContactFieldVCardMapUnusedN);
+		field->TextStorage()->SetTextL(aName);
+		aItem.AddFieldL(*field);
+		CleanupStack::Pop(); // field
+		}
+	}
+	
+TTime CTestImpExvCardSuiteStepBase::FormatDateTime(const TDesC& aParamString)
+	{
+	// Format of buffer to construct a TTime is YYYYMMDD:HHMMSS (15 characters).
+	// TTime uses zero-based values for month and day - which is confusing for scripting.
+	// In our script, we use actual month and day numbers to make things simpler so we
+	// must modify the string here to take account of this.
+	TBuf<32> buf;
+	TInt m, d;
+
+	buf.Zero();
+	buf.Copy(aParamString.Left(4));		// The year
+	TLex lexMonth = aParamString.Mid(4, 2);
+	lexMonth.Val(m);
+	TLex lexDay = aParamString.Mid(6, 2);
+	lexDay.Val(d);
+	buf.AppendFormat(_L("%02d%02d"), m - 1, d - 1);	// The month and day
+	buf.Append(aParamString.Right(7));
+
+	return TTime(buf);
+	}
+	
+TPtrC CTestImpExvCardSuiteStepBase::GetExpectedUTCFromIniL(TInt numberOfCases,TBuf<80> aConfig, TBool aExpectedBDay)
+	{
+	TPtrC expectedUTC;
+	TPtrC expectedBDAY;
+	
+	TPtrC config = aConfig;
+	HBufC *configval = HBufC::NewLC(config.Length()+2);
+	
+	TPtr configSection = configval->Des();
+	
+	configSection.Append(config);
+	configSection.AppendNum(numberOfCases);
+	
+	if (aExpectedBDay)
+		{
+		GetStringFromConfig(configSection,KExpectedBDay,expectedBDAY);
+		CleanupStack::PopAndDestroy(configval);
+		return expectedBDAY;
+		}
+	else
+		{
+		GetStringFromConfig(configSection,KExpectedUTC,expectedUTC);
+		CleanupStack::PopAndDestroy(configval);
+		return expectedUTC;
+		}
+	}
+