--- /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;
+ }
+ }
+