diff -r 4ca382093dae -r 493058e57c8c buildverification/smoketest/contacts/src/TestContact.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/buildverification/smoketest/contacts/src/TestContact.cpp Wed Sep 01 12:30:50 2010 +0100 @@ -0,0 +1,491 @@ +// Copyright (c) 2004-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 contains CTestContact +// +// + +#include + +#include "TestContact.h" + +CTestContact* CTestContact::NewL(CContactItem& aSeedContact) + { + CTestContact* self=CTestContact::NewLC(aSeedContact); + CleanupStack::Pop(); + return self; + } + +CTestContact* CTestContact::NewLC(CContactItem& aSeedContact) + { + CTestContact* self=new(ELeave) CTestContact(); + CleanupStack::PushL(self); + self->ConstructL(aSeedContact); + return self; + } + +CTestContact* CTestContact::NewL(CContactItem* aSeedContact) + { + CTestContact* self=CTestContact::NewLC(aSeedContact); + CleanupStack::Pop(); + return self; + } + +CTestContact* CTestContact::NewLC(CContactItem* aSeedContact) + { + CTestContact* self=new(ELeave) CTestContact(); + CleanupStack::PushL(self); + self->ConstructL(aSeedContact); + return self; + } + +CTestContact::CTestContact() : iDestroyOnExit(EFalse) + { + } + +void CTestContact::ConstructL(CContactItem& aSeedContact) + { + iDestroyOnExit=ETrue; + iContactItem=CContactCard::NewL(&aSeedContact); + } + +void CTestContact::ConstructL(CContactItem* aSeedContact) + { + iDestroyOnExit=EFalse; + iContactItem=aSeedContact; + } + +CTestContact::~CTestContact() + { + if (iDestroyOnExit) + delete iContactItem; + iContactItem=NULL; + } + +CContactItem& CTestContact::ContactItem() + { + return *iContactItem; + } + +const TPtrC CTestContact::FirstNameL() + { + return TextFieldL(KUidContactFieldGivenName); + } + +const TPtrC CTestContact::LastNameL() + { + return TextFieldL(KUidContactFieldFamilyName); + } + +const TPtrC CTestContact::CompanyNameL() + { + return TextFieldL(KUidContactFieldCompanyName); + } + +const TPtrC CTestContact::JobTitleL() + { + return TextFieldL(KUidContactFieldJobTitle); + } + +const TPtrC CTestContact::WorkPhoneL() + { + CContentType* contentType=CContentType::NewL(); + CleanupStack::PushL(contentType); + contentType->AddFieldTypeL(KUidContactFieldPhoneNumber); + contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK); + contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE); + const TPtrC text=TextFieldL(*contentType); + CleanupStack::PopAndDestroy(); // contentType. + return text; + } + +const TPtrC CTestContact::WorkMobileL() + { + CContentType* contentType=CContentType::NewL(); + CleanupStack::PushL(contentType); + contentType->AddFieldTypeL(KUidContactFieldPhoneNumber); + contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK); + contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE); + contentType->AddFieldTypeL(KUidContactFieldVCardMapCELL); + const TPtrC text=TextFieldL(*contentType); + CleanupStack::PopAndDestroy(); // contentType. + return text; + } + +const TPtrC CTestContact::HomePhoneL() + { + CContentType* contentType=CContentType::NewL(); + CleanupStack::PushL(contentType); + contentType->AddFieldTypeL(KUidContactFieldPhoneNumber); + contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME); + contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE); + const TPtrC text=TextFieldL(*contentType); + CleanupStack::PopAndDestroy(); // contentType. + return text; + } + +const TPtrC CTestContact::HomeMobileL() + { + CContentType* contentType=CContentType::NewL(); + CleanupStack::PushL(contentType); + contentType->AddFieldTypeL(KUidContactFieldPhoneNumber); + contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME); + contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE); + contentType->AddFieldTypeL(KUidContactFieldVCardMapCELL); + const TPtrC text=TextFieldL(*contentType); + CleanupStack::PopAndDestroy(); // contentType. + return text; + } + +const TPtrC CTestContact::FaxL() + { + return TextFieldL(KUidContactFieldFax); + } + +const TPtrC CTestContact::EmailAddressL() + { + return TextFieldL(KUidContactFieldEMail); + } + +const TPtrC CTestContact::InternetAddressL() + { + return TextFieldL(KUidContactFieldUrl); + } + +const TPtrC CTestContact::StreetL() + { + return TextFieldL(KUidContactFieldAddress); + } + +const TPtrC CTestContact::TownL() + { + return TextFieldL(KUidContactFieldLocality); + } + +const TPtrC CTestContact::CountyL() + { + return TextFieldL(KUidContactFieldRegion); + } + +const TPtrC CTestContact::PostCodeL() + { + return TextFieldL(KUidContactFieldPostcode); + } + +const TPtrC CTestContact::CountryL() + { + return TextFieldL(KUidContactFieldCountry); + } + +const TPtrC CTestContact::NotesL() + { + return TextFieldL(KUidContactFieldNote); + } + +const TPtrC CTestContact::NickNameL() + { + return TextFieldL(KUidContactFieldSecondName); + } + +const TPtrC CTestContact::PictureL() + { + return TextFieldL(KUidContactFieldPicture); + } + +void CTestContact::SetFirstNameL(const TDesC& aFirstName) + { + SetTextFieldL(KUidContactFieldGivenName, aFirstName, KUidContactFieldVCardMapUnusedN); + } + +void CTestContact::SetLastNameL(const TDesC& aLastName) + { + SetTextFieldL(KUidContactFieldFamilyName, aLastName, KUidContactFieldVCardMapUnusedN); + } + +void CTestContact::SetCompanyNameL(const TDesC& aCompanyName) + { + SetTextFieldL(KUidContactFieldCompanyName, aCompanyName, KUidContactFieldVCardMapORG); + } + +void CTestContact::SetJobTitleL(const TDesC& aJobTitle) + { + SetTextFieldL(KUidContactFieldJobTitle,aJobTitle); + } + +void CTestContact::SetWorkPhoneL(const TDesC& aWorkPhone) + { + CContentType* contentType=CContentType::NewL(); + CleanupStack::PushL(contentType); + contentType->AddFieldTypeL(KUidContactFieldPhoneNumber); + contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK); + contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE); + SetTextFieldL(*contentType,aWorkPhone); + CleanupStack::PopAndDestroy(); // contentType. + } + +void CTestContact::SetWorkMobileL(const TDesC& aWorkMobile) + { + CContentType* contentType=CContentType::NewL(); + CleanupStack::PushL(contentType); + contentType->AddFieldTypeL(KUidContactFieldPhoneNumber); + contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK); + contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE); + contentType->AddFieldTypeL(KUidContactFieldVCardMapCELL); + SetTextFieldL(*contentType,aWorkMobile); + CleanupStack::PopAndDestroy(); // contentType. + } + +void CTestContact::SetHomePhoneL(const TDesC& aHomePhone) + { + CContentType* contentType=CContentType::NewL(); + CleanupStack::PushL(contentType); + contentType->AddFieldTypeL(KUidContactFieldPhoneNumber); + contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME); + contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE); + SetTextFieldL(*contentType,aHomePhone); + CleanupStack::PopAndDestroy(); // contentType. + } + +void CTestContact::SetHomeMobileL(const TDesC& aHomeMobile) + { + CContentType* contentType=CContentType::NewL(); + CleanupStack::PushL(contentType); + contentType->AddFieldTypeL(KUidContactFieldPhoneNumber); + contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME); + contentType->AddFieldTypeL(KUidContactFieldVCardMapVOICE); + contentType->AddFieldTypeL(KUidContactFieldVCardMapCELL); + SetTextFieldL(*contentType,aHomeMobile); + CleanupStack::PopAndDestroy(); // contentType. + } + +void CTestContact::SetFaxL(const TDesC& aFax) + { + SetTextFieldL(KUidContactFieldFax,aFax); + } + +void CTestContact::SetHomeEmailAddressL(const TDesC& aEmailAddress) + { + CContentType* contentType=CContentType::NewL(); + CleanupStack::PushL(contentType); + contentType->AddFieldTypeL(KUidContactFieldEMail); + contentType->AddFieldTypeL(KUidContactFieldVCardMapHOME); + SetTextFieldL(*contentType,aEmailAddress); + CleanupStack::PopAndDestroy(contentType); + } + +void CTestContact::SetWorkEmailAddressL(const TDesC& aEmailAddress) + { + CContentType* contentType=CContentType::NewL(); + CleanupStack::PushL(contentType); + contentType->AddFieldTypeL(KUidContactFieldEMail); + contentType->AddFieldTypeL(KUidContactFieldVCardMapWORK); + SetTextFieldL(*contentType,aEmailAddress); + CleanupStack::PopAndDestroy(contentType); + } + + +void CTestContact::SetInternetAddressL(const TDesC& aInternetAddress) + { + SetTextFieldL(KUidContactFieldUrl,aInternetAddress); + } + +void CTestContact::SetStreetL(const TDesC& aStreet) + { + SetTextFieldL(KUidContactFieldAddress,aStreet); + } + +void CTestContact::SetTownL(const TDesC& aTown) + { + SetTextFieldL(KUidContactFieldLocality,aTown); + } + +void CTestContact::SetCountyL(const TDesC& aCounty) + { + SetTextFieldL(KUidContactFieldRegion,aCounty); + } + +void CTestContact::SetPostCodeL(const TDesC& aPostCode) + { + SetTextFieldL(KUidContactFieldPostcode,aPostCode); + } + +void CTestContact::SetCountryL(const TDesC& aCountry) + { + SetTextFieldL(KUidContactFieldCountry,aCountry); + } + +void CTestContact::SetNotesL(const TDesC& aNotes) + { + SetTextFieldL(KUidContactFieldNote,aNotes); + } + +void CTestContact::SetNickNameL(const TDesC& aNickName) + { + CContentType* contentType=CContentType::NewL(); + CleanupStack::PushL(contentType); + contentType->AddFieldTypeL(KUidContactFieldSecondName); + TRAPD(err, SetTextFieldL(*contentType,aNickName)); + if (!err) { } + CleanupStack::PopAndDestroy(); // contentType. + } + +void CTestContact::SetPictureL(const TDesC8& aPicture) + { + CContentType* contentType=CContentType::NewL(); + CleanupStack::PushL(contentType); + contentType->AddFieldTypeL(KUidContactFieldPicture); + SetPictureFieldL(aPicture); + CleanupStack::PopAndDestroy(contentType); + } + +const TPtrC CTestContact::TextFieldL(TFieldType aFieldType) const + { + CContactItemField& field=FindFieldL(aFieldType); + ASSERT(field.StorageType()==KStorageTypeText); + return STATIC_CAST(CContactTextField*,(field.Storage()))->Text(); + } + +const TPtrC CTestContact::TextFieldL(const CContentType& aTypesToMatch) const + { + CContactItemField& field=FindFieldL(aTypesToMatch); + ASSERT(field.StorageType()==KStorageTypeText); + return STATIC_CAST(CContactTextField*,field.Storage())->Text(); + } + +void CTestContact::InsertTextFieldL(TFieldType aID, const TDesC& aStringOfStuff ) + { + CContactItemField* itemFieldPtr = NULL; + CContactTextField* textStoragePtr = NULL; + + itemFieldPtr = CContactItemField::NewLC( KStorageTypeText, aID ); + textStoragePtr = itemFieldPtr->TextStorage(); // we don't have ownership here, hence no stack. + + textStoragePtr->SetTextL( aStringOfStuff ); + textStoragePtr = NULL; // we've finished with this ptr now. + + iContactItem->AddFieldL( *itemFieldPtr ); // hand ownership over here + CleanupStack::Pop( itemFieldPtr ); // and pop, + } + +void CTestContact::SetTextFieldL(TFieldType aFieldType,const TDesC& aText) + { + TInt fieldIndex=FindField(aFieldType); + + if ( fieldIndex > KErrNotFound ) + { + CContactItemField& field=FindFieldL(aFieldType); + ASSERT(field.StorageType()==KStorageTypeText); + STATIC_CAST(CContactTextField*,field.Storage())->SetText(aText.AllocL()); + } + else + { + InsertTextFieldL(aFieldType, aText); + } + } + +void CTestContact::SetTextFieldL(const CContentType& aTypesToMatch,const TDesC& aText) const + { + CContactItemField& field=FindFieldL(aTypesToMatch); + ASSERT(field.StorageType()==KStorageTypeText); + STATIC_CAST(CContactTextField*,field.Storage())->SetText(aText.AllocL()); + } + +CContactItemField& CTestContact::FindFieldL(TFieldType aFieldType) const + { + CContactItemFieldSet& fields=iContactItem->CardFields(); + TInt index=fields.Find(aFieldType); + User::LeaveIfError(index); + return fields[index]; + } + +void CTestContact::SetTextFieldL(TFieldType aFieldType, const TDesC& aText, TUid aAddOnContentType) + { + CContactItemFieldSet& fields = iContactItem->CardFields(); + CContactTextField* textField = NULL; + TInt fieldIndex = 0; + + fieldIndex = FindField( aFieldType ); + + if (fieldIndex == KErrNotFound ) + { + InsertTextFieldL( aFieldType, aText ); + fieldIndex = FindField( aFieldType ); + CContactItemField& field = fields[ fieldIndex ]; + field.AddFieldTypeL( aAddOnContentType ); + } + else if (fieldIndex >= KErrNone ) + { + CContactItemField& field = fields[ fieldIndex ]; + ASSERT(field.StorageType()==KStorageTypeText); + textField = static_cast(field.Storage()); + textField->SetText( aText.AllocL() ); + field.AddFieldTypeL( aAddOnContentType ); + } + } + +TInt CTestContact::FindField(TFieldType aFieldType) const + { + return iContactItem->CardFields().Find( aFieldType ); + } + +CContactItemField& CTestContact::FindFieldL(const CContentType& aTypesToMatch) const + { + CContactItemFieldSet& fields=iContactItem->CardFields(); + const TInt numTypesToMatch(aTypesToMatch.FieldTypeCount()); + const TFieldType mainFieldType(aTypesToMatch.FieldType(0)); + TInt index=-1; + FOREVER + { + index=fields.FindNext(mainFieldType,index+1); + User::LeaveIfError(index); + + CContactItemField& thisPhoneField=fields[index]; + const CContentType& thisPhoneFieldTypes=thisPhoneField.ContentType(); + const TInt numFieldTypes(thisPhoneFieldTypes.FieldTypeCount()); + + if (numFieldTypes!=numTypesToMatch) + { + continue; + } + + TInt numTypesLeftToMatch=numTypesToMatch; + for (TInt ii=0;iiCardFields(); + TInt pos; + pos=fieldSet.Find(KUidContactFieldPicture); + User::LeaveIfError(pos); + fieldSet[pos].StoreStorage()->SetThingL(aPicture); + + }