--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/adapter_customization_api/tsrc/ContactAdapter/cnsmladaptertestutilities.cpp Fri Mar 12 15:41:30 2010 +0200
@@ -0,0 +1,329 @@
+/*
+* Copyright (c) 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: Source code file for contact adapter test utilities.
+*
+*/
+
+#include "CNSmlAdapterTestUtilities.h"
+#include <EUnitMacros.h>
+#include <UTF.H>
+#include <cntitem.h> // CContactCard
+#include <cntfield.h> // CContactItemField
+#include <cntfldst.h> // CContactTextField
+#include <S32MEM.H>
+
+namespace
+ {
+ // EUNIT_PRINT will truncate descriptors longer than 512 characters.
+ const TInt KEunitPrintMaxLength = 512;
+ }
+
+CNSmlAdapterTestUtilities* CNSmlAdapterTestUtilities::NewL()
+ {
+ CNSmlAdapterTestUtilities* self = CNSmlAdapterTestUtilities::NewLC();
+ CleanupStack::Pop();
+ return self;
+ }
+
+CNSmlAdapterTestUtilities* CNSmlAdapterTestUtilities::NewLC()
+ {
+ CNSmlAdapterTestUtilities* self = new( ELeave ) CNSmlAdapterTestUtilities();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+CNSmlAdapterTestUtilities::CNSmlAdapterTestUtilities()
+ {
+ }
+
+CNSmlAdapterTestUtilities::~CNSmlAdapterTestUtilities()
+ {
+ iFs.Close();
+ delete iIdArray;
+ delete iContactDatabase;
+ }
+
+void CNSmlAdapterTestUtilities::ConstructL()
+ {
+ User::LeaveIfError( iFs.Connect() );
+ }
+
+void CNSmlAdapterTestUtilities::OpenVCardFromFileLC( const TDesC& aFileName, RFileReadStream& aReadStream )
+ {
+ TInt err = aReadStream.Open( iFs, aFileName, EFileRead );
+ if (err != KErrNone)
+ {
+ if (err == KErrNotFound)
+ {
+ EUNIT_PRINT( _L("%S ,vCard file not found"), &aFileName );
+ }
+ else if ( err == KErrPathNotFound )
+ {
+ EUNIT_PRINT( _L("%S ,vCard path not found"), &aFileName );
+ }
+ else
+ {
+ EUNIT_PRINT( _L("%S , vCard file cannot be opened. Error code %d"), &aFileName, err );
+ }
+ User::Leave( err );
+ }
+ EUNIT_PRINT( _L("VCard opened") );
+ CleanupClosePushL( aReadStream );
+ }
+
+HBufC* CNSmlAdapterTestUtilities::ReadVCardFromFileLC( const TDesC& aFileName )
+ {
+ HBufC8* vCard8 = ReadVCard8FromFileLC( aFileName );
+ HBufC* vCard = HBufC::NewL( vCard8->Length() );
+ vCard8->Des().Copy( *vCard8 );
+ CleanupStack::PopAndDestroy( vCard8 );
+
+ CleanupStack::PushL( vCard );
+ return vCard;
+ }
+
+HBufC8* CNSmlAdapterTestUtilities::ReadVCard8FromFileLC( const TDesC& aFileName )
+ {
+ RFileReadStream readStream;
+ OpenVCardFromFileLC(aFileName, readStream);
+
+ const TInt fileSize = readStream.Source()->SizeL();
+ CBufFlat* buffer = CBufFlat::NewL( fileSize );
+ CleanupStack::PushL( buffer );
+
+ RBufWriteStream writeStream( *buffer );
+ CleanupClosePushL( writeStream );
+ writeStream.WriteL( readStream );
+ writeStream.CommitL();
+
+ HBufC8* vCard8 = buffer->Ptr(0).AllocL();
+ CleanupStack::PopAndDestroy( 3, &readStream );
+
+ CleanupStack::PushL( vCard8 );
+ return vCard8;
+ }
+
+CBufFlat* CNSmlAdapterTestUtilities::ReadBufFromFileLC( const TDesC& aFileName )
+ {
+ RFileReadStream readStream;
+ OpenVCardFromFileLC(aFileName, readStream);
+
+ const TInt fileSize = readStream.Source()->SizeL();
+ CBufFlat* buffer = CBufFlat::NewL( fileSize );
+ CleanupStack::PushL( buffer );
+
+ RBufWriteStream writeStream( *buffer );
+ CleanupClosePushL( writeStream );
+ writeStream.WriteL( readStream );
+ writeStream.CommitL();
+ CleanupStack::PopAndDestroy( &writeStream );
+ CleanupStack::Pop( buffer );
+ CleanupStack::PopAndDestroy( &readStream );
+ CleanupStack::PushL( buffer );
+ return buffer;
+ }
+
+void CNSmlAdapterTestUtilities::SetupEmptyContactDbL( const TDesC& aDbName )
+ {
+ if( aDbName.Length() > 0 )
+ {
+ iContactDatabase = CContactDatabase::ReplaceL( aDbName );
+ }
+ else
+ {
+ iContactDatabase = CContactDatabase::OpenL(); // Use default contact DB.
+ }
+
+ CContactIdArray* array = iContactDatabase->ContactsChangedSinceL( Time::NullTTime() );
+ CleanupStack::PushL( array );
+ iContactDatabase->DeleteContactsL(*array);
+ CleanupStack::PopAndDestroy( array );
+ }
+
+/**
+ * Setup contact DB with the following contacts
+ * + Tim Tester (id index 0)
+ * + Teddy McTest (id index 1)
+ * + Tod TestHill (id index 2)
+ * + Simon Software (id index 3)
+ * + Cyd Effect (id index 4)
+ * + Nick Name (id index 5)
+ *
+ */
+void CNSmlAdapterTestUtilities::SetupAndPopulateContactDbL( const TDesC& aDbName )
+ {
+ if( aDbName.Length() > 0 )
+ {
+ iContactDatabase = CContactDatabase::ReplaceL( aDbName );
+ }
+ else
+ {
+ iContactDatabase = CContactDatabase::OpenL(); // Use default contact DB.
+ }
+
+ iIdArray = CContactIdArray::NewL();
+
+ // Create test contacts
+ iIdArray->AddL( AddContactL( _L( "Tim" ), _L( "Tester" ), _L( "+358501234567" ) ) );
+ iIdArray->AddL( AddContactL( _L( "Teddy" ), _L("McTest" ), _L( "+358501112222" ) ) );
+ iIdArray->AddL( AddContactL( _L( "Tod" ), _L( "TestHill" ), _L( "+358506666666" ) ) );
+ iIdArray->AddL( AddContactL( _L( "Simon" ), _L( "Software" ), _L( "+3585011223333" ) ) );
+ iIdArray->AddL( AddContactL( _L( "Cyd" ), _L( "Effect" ), _L( "+358503334444" ) ) );
+ iIdArray->AddL( AddContactL( _L( "Nick" ), _L( "Name" ), _L( "+358402223333" ) ) );
+ }
+
+// Helper method to add a simple contact to test contact DB
+TContactItemId CNSmlAdapterTestUtilities::AddContactL(
+ const TDesC& aFirstName,
+ const TDesC& aLastName,
+ const TDesC& aPhoneNumber )
+ {
+ _LIT( KLabelFamilyName, "Last name");
+ _LIT( KLabelGivenName, "First name");
+ _LIT( KLabelPhone, "Phone");
+ //_LIT( KLabelNickname, "X-EPOCSECONDNAME");
+
+ CContactCard* card = CContactCard::NewLC();
+
+ // Family name field
+ CContactItemField* familyNameField =
+ CContactItemField::NewLC( KStorageTypeText, KUidContactFieldFamilyName );
+ familyNameField->SetLabelL( KLabelFamilyName );
+ familyNameField->SetMapping( KUidContactFieldVCardMapUnusedN );
+ familyNameField->TextStorage()->SetTextL( aLastName );
+ card->AddFieldL( *familyNameField ); // Takes ownership
+ CleanupStack::Pop( familyNameField );
+
+ // First name field
+ CContactItemField* nameField =
+ CContactItemField::NewLC( KStorageTypeText, KUidContactFieldGivenName );
+ nameField->SetLabelL( KLabelGivenName );
+ nameField->SetMapping( KUidContactFieldVCardMapUnusedN );
+ nameField->TextStorage()->SetTextL( aFirstName );
+ card->AddFieldL( *nameField );
+ CleanupStack::Pop(nameField);
+
+ // Phone number field
+ CContactItemField* phoneField =
+ CContactItemField::NewLC( KStorageTypeText, KUidContactFieldPhoneNumber );
+ phoneField->SetLabelL( KLabelPhone );
+ phoneField->SetMapping( KUidContactFieldVCardMapTEL );
+ phoneField->TextStorage()->SetTextL( aPhoneNumber );
+ card->AddFieldL( *phoneField );
+ CleanupStack::Pop( phoneField );
+
+ // Nickname field
+ /*if( aNickname.Length() > 0 )
+ {
+ CContactItemField* NicknameField =
+ CContactItemField::NewLC( KStorageTypeText, KUidContactFieldSecondName );
+ NicknameField->SetLabelL( KLabelNickname );
+ NicknameField->SetMapping( KUidContactFieldVCardMapSECONDNAME );
+ NicknameField->TextStorage()->SetTextL( aNickname );
+ card->AddFieldL( *NicknameField );
+ CleanupStack::Pop( NicknameField );
+ }*/
+
+
+ TContactItemId cardId = iContactDatabase->AddNewContactL( *card );
+ CleanupStack::PopAndDestroy( card );
+
+ return cardId;
+ }
+
+/**
+ * Empties the test contact DB to its initial state.
+ */
+void CNSmlAdapterTestUtilities::TeardownAndEmptyContactDbL( const TDesC& aDbName )
+ {
+ iContactDatabase->DeleteContactsL( *iIdArray );
+
+ delete iIdArray;
+ iIdArray = NULL;
+
+ delete iContactDatabase;
+ iContactDatabase = NULL;
+ if( aDbName.Length() > 0 )
+ {
+ TRAP_IGNORE( CContactDatabase::DeleteDatabaseL( aDbName ) );
+ }
+ }
+
+CContactDatabase* CNSmlAdapterTestUtilities::GetDb()
+ {
+ EUNIT_ASSERT( iContactDatabase );
+ return iContactDatabase;
+ }
+
+CContactIdArray* CNSmlAdapterTestUtilities::GetContactArray()
+ {
+ return iIdArray;
+ }
+
+RFs& CNSmlAdapterTestUtilities::FileSession()
+ {
+ return iFs;
+ }
+
+CBufBase* CNSmlAdapterTestUtilities::ExportContactLC( TContactItemId aId )
+ {
+ CContactDatabase* db = CContactDatabase::OpenL(); // Use default contact DB.
+ CleanupStack::PushL( db );
+ CContactIdArray* idArr = CContactIdArray::NewLC();
+ idArr->AddL( aId );
+ CBufFlat* buffer = CBufFlat::NewL( 1024 );
+ CleanupStack::PushL( buffer );
+ RBufWriteStream writeStream( *buffer );
+ CleanupClosePushL( writeStream );
+
+ TRAPD( err, iContactDatabase->ExportSelectedContactsL( TUid::Uid(KVersitEntityUidVCard), *idArr,
+ writeStream, CContactDatabase::EExcludeUid, Versit::EUTF8CharSet ) );
+
+ EUNIT_ASSERT_EQUALS_DESC( err, KErrNone, "ExportSelectedContactsL leave" );
+
+ CleanupStack::PopAndDestroy( &writeStream );
+ CleanupStack::Pop( buffer );
+ CleanupStack::PopAndDestroy( idArr );
+ CleanupStack::PopAndDestroy( db );
+ CleanupStack::PushL( buffer );
+ return buffer;
+ }
+
+void CNSmlAdapterTestUtilities::PrintData( const TDesC& aTitle, CBufBase& aBuf )
+ {
+
+ EUNIT_PRINT( aTitle );
+
+ for (TInt i = 0; i < aBuf.Ptr(0).Length(); i += KEunitPrintMaxLength )
+ {
+ EUNIT_PRINT( aBuf.Ptr(i) );
+ }
+
+ }
+
+void CNSmlAdapterTestUtilities::PrintData( const TDesC8& aTitle, CBufBase& aBuf )
+ {
+
+ EUNIT_PRINT( aTitle );
+
+ for (TInt i = 0; i < aBuf.Ptr(0).Length(); i += KEunitPrintMaxLength )
+ {
+ EUNIT_PRINT( aBuf.Ptr(i) );
+ }
+
+ }
+
+
+