--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/adapter_customization_api/tsrc/ContactAdapter/cnsmldummydatastore_test.cpp Fri Mar 12 15:41:30 2010 +0200
@@ -0,0 +1,1320 @@
+/*
+* 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's datastore unit tests.
+*
+*/
+
+#include "CNSmlDummyDataStore_Test.h"
+#include "CNSmlAdapterTestUtilities.h"
+#include <EUnitMacros.h>
+#include <EUnitDecorators.h>
+#include <cntdb.h>
+#include <cntitem.h>
+#include <cntfield.h>
+#include <cntfldst.h>
+#include <s32mem.h>
+#include <BAUTILS.H>
+#include <SmlDataFormat.h>
+#include <CVPbkContactViewDefinition.h>
+#include <CVPbkContactStoreUriArray.h>
+#include <tvpbkcontactstoreuriptr.h>
+#include <VPbkContactStoreUris.h>
+#include "nsmldummydatastore.h"
+#include "cnsmldummydatastorewaiter.h"
+
+namespace
+ {
+ // "abld test export" will export test data.
+ _LIT( KVCardStandard, "c:\\Data\\TestData\\standard.vcf" );
+ _LIT( KVCardBasic, "c:\\Data\\TestData\\basic.vcf" );
+ _LIT( KVCardBasicInvalid, "c:\\Data\\TestData\\basicInvalid.vcf" );
+ _LIT( KVCardMultiOccurence, "c:\\Data\\TestData\\multioccurence.vcf" );
+ }
+
+
+// - Construction -----------------------------------------------------------
+
+CNSmlDummyDataStore_Test* CNSmlDummyDataStore_Test::NewL()
+ {
+ CNSmlDummyDataStore_Test* self = CNSmlDummyDataStore_Test::NewLC();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+CNSmlDummyDataStore_Test* CNSmlDummyDataStore_Test::NewLC()
+ {
+ CNSmlDummyDataStore_Test* self = new( ELeave ) CNSmlDummyDataStore_Test();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+CNSmlDummyDataStore_Test::~CNSmlDummyDataStore_Test()
+ {
+ iWriteStream.Close();
+ iFsSession.Close();
+ delete iCNSmlDummyDataStore;
+ delete iTestUtilities;
+ delete iContactDatabase;
+ delete iIdArray;
+ delete iStoreWaiter;
+ }
+
+CNSmlDummyDataStore_Test::CNSmlDummyDataStore_Test()
+ {
+ }
+
+void CNSmlDummyDataStore_Test::ConstructL()
+ {
+ CEUnitTestSuiteClass::ConstructL();
+ User::LeaveIfError( iFsSession.Connect() );
+ }
+
+// from MSmlSyncRelationship
+TSmlSyncTaskKey CNSmlDummyDataStore_Test::SyncTaskKey() const
+ {
+ TSmlSyncTaskKey key = 0;
+ return key;
+ }
+
+void CNSmlDummyDataStore_Test::OpenReadStreamLC(
+ RReadStream& /*aReadStream*/, TUid /*aStreamUid*/)
+ {
+ }
+
+void CNSmlDummyDataStore_Test::OpenWriteStreamLC(
+ RWriteStream& aWriteStream, TUid /*aStreamUid*/ )
+ {
+ User::LeaveIfError(
+ iWriteStream.Replace( iFsSession, _L("store.test"), EFileWrite ) );
+ aWriteStream = iWriteStream;
+ CleanupClosePushL( aWriteStream );
+ }
+
+TBool CNSmlDummyDataStore_Test::IsStreamPresentL(TUid /*aStreamUid*/) const
+ {
+ return EFalse;
+ }
+
+// - Test methods -----------------------------------------------------------
+
+// ++++++++++++ SETUP METHODS ++++++++++++
+
+void CNSmlDummyDataStore_Test::SetupL( )
+ {
+ iCNSmlDummyDataStore = CNSmlDummyDataStore::NewL();
+ iTestUtilities = CNSmlAdapterTestUtilities::NewL();
+ // Create contact manager
+ CVPbkContactStoreUriArray* uriArray = CVPbkContactStoreUriArray::NewLC();
+ uriArray->AppendL( TVPbkContactStoreUriPtr( VPbkContactStoreUris::DefaultCntDbUri() ) );
+ iContactManager = CVPbkContactManager::NewL(*uriArray);
+ CleanupStack::PopAndDestroy(uriArray);
+ }
+
+void CNSmlDummyDataStore_Test::SetupAndOpenStoreL( )
+ {
+ SetupL();
+
+ iStoreWaiter =
+ CNSmlDummyDataStoreWaiter::NewL( *iCNSmlDummyDataStore );
+ iStoreWaiter->OpenStoreL( *this );
+
+ iContactDatabase = CContactDatabase::OpenL();
+ }
+
+void CNSmlDummyDataStore_Test::SetupPopulateDbAndOpenStoreL()
+ {
+ SetupAndPopulateContactDbL();
+
+ EUNIT_ASSERT_NO_LEAVE(
+ iCNSmlDummyDataStore = CNSmlDummyDataStore::NewL() );
+
+ iStoreWaiter =
+ CNSmlDummyDataStoreWaiter::NewL( *iCNSmlDummyDataStore );
+ iStoreWaiter->OpenStoreL( *this );
+ }
+
+/**
+ * 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)
+ *
+ */
+void CNSmlDummyDataStore_Test::SetupAndPopulateContactDbL()
+ {
+ if( !iContactDatabase )
+ {
+ iContactDatabase = CContactDatabase::OpenL();
+ }
+ if( !iTestUtilities )
+ {
+ iTestUtilities = CNSmlAdapterTestUtilities::NewL();
+ }
+
+ 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" ) ) );
+ }
+
+//// ++++++++++++ TEARDOWN METHODS ++++++++++++
+//
+void CNSmlDummyDataStore_Test::Teardown()
+ {
+ delete iCNSmlDummyDataStore;
+ iCNSmlDummyDataStore = NULL;
+
+ delete iTestUtilities;
+ iTestUtilities = NULL;
+ delete iContactManager;
+ iContactManager = NULL;
+ }
+
+void CNSmlDummyDataStore_Test::TeardownAndCloseStore()
+ {
+ delete iStoreWaiter;
+ iStoreWaiter = NULL;
+
+ delete iContactDatabase;
+ iContactDatabase = NULL;
+
+ Teardown();
+ }
+
+void CNSmlDummyDataStore_Test::TeardownCloseAndEmptyContactDb()
+ {
+ delete iStoreWaiter;
+ iStoreWaiter = NULL;
+
+ delete iCNSmlDummyDataStore;
+ iCNSmlDummyDataStore = NULL;
+
+ TeardownAndEmptyContactDb();
+ }
+
+void CNSmlDummyDataStore_Test::TeardownAndEmptyContactDb()
+ {
+ if (iContactDatabase && iIdArray)
+ {
+ TRAP_IGNORE( iContactDatabase->DeleteContactsL( *iIdArray ) );
+ }
+
+ delete iIdArray;
+ iIdArray = NULL;
+ delete iContactDatabase;
+ iContactDatabase = NULL;
+ delete iTestUtilities;
+ iTestUtilities = NULL;
+ }
+
+// ++++++++++++ UNIT TEST METHODS ++++++++++++
+
+// ====================== CNSmlDummyDataStore ===========================
+
+// MEMORY ALLOCATION FOR DATASTORE
+void CNSmlDummyDataStore_Test::NewLL( )
+ {
+ CNSmlDummyDataStore* dataStore = NULL;
+ EUNIT_ASSERT_NO_LEAVE( dataStore = CNSmlDummyDataStore::NewL() );
+ EUNIT_ASSERT( dataStore );
+ delete dataStore;
+ }
+
+// DoOpenL()
+void CNSmlDummyDataStore_Test::DoOpenLL()
+ {
+ CNSmlDummyDataStoreWaiter* storeWaiter =
+ CNSmlDummyDataStoreWaiter::NewLC( *iCNSmlDummyDataStore );
+
+ TRAPD( err, storeWaiter->OpenStoreL( *this ) );
+
+ // Check for leave
+ EUNIT_PRINT( _L( "Leave code: %d" ), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoOpenL() leave" );
+ CleanupStack::PopAndDestroy( storeWaiter );
+ }
+
+// DoHasSyncHistory()
+void CNSmlDummyDataStore_Test::DoHasSyncHistoryL()
+ {
+ TBool ret = iCNSmlDummyDataStore->DoHasSyncHistory();
+ EUNIT_ASSERT_DESC( ret == EFalse, "DoHasSyncHistory returns faulty value");
+ }
+
+// DoModifiedItems(), DoCommitChangeInfoL()
+void CNSmlDummyDataStore_Test::DoModifiedItemsL()
+ {
+ const MSmlDataItemUidSet& uiSet = iCNSmlDummyDataStore->DoModifiedItems();
+ EUNIT_ASSERT_DESC( uiSet.ItemCount() == 0, "DoModifiedItems returns faulty uid set");
+
+ TInt returnCode = KErrNone;
+
+ TRAPD( err, returnCode = iStoreWaiter->DoCommitChangeInfoL( uiSet ) );
+
+ // Check for leave
+ EUNIT_PRINT( _L( "Leave code: %d" ), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCommitChangeInfoL() leave" );
+
+ // Check for return code
+ EUNIT_PRINT( _L( "Return code: %d" ), returnCode );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCommitChangeInfoL returns error");
+ }
+
+
+// DoResetChangeInfoL()
+void CNSmlDummyDataStore_Test::DoResetChangeInfoLL()
+ {
+ // Temporarily remove ChangeFinders from Store to prevent leaves
+ // when reseting ChangeFinders in code under test.
+ CNSmlChangeFinder* cF = iCNSmlDummyDataStore->iChangeFinder;
+ iCNSmlDummyDataStore->iChangeFinder = NULL;
+
+ TInt returnCode = KErrNone;
+ TRAPD( err, returnCode = iStoreWaiter->DoResetChangeInfoL() );
+
+ // Return ChangeFinders
+ iCNSmlDummyDataStore->iChangeFinder = cF;
+
+ // Check for leave
+ EUNIT_PRINT( _L( "Leave code: %d" ), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoResetChangeInfoL() leave" );
+
+ // Check for return code
+ EUNIT_PRINT( _L( "Return code: %d" ), returnCode );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoResetChangeInfoL returns error");
+ }
+
+// DoCommitChangeInfoL()
+void CNSmlDummyDataStore_Test::DoCommitChangeInfoLL()
+ {
+ TInt returnCode = KErrNone;
+ TRAPD( err, returnCode = iStoreWaiter->DoCommitChangeInfoL() );
+
+ // Check for leave
+ EUNIT_PRINT( _L( "Leave code: %d" ), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCommitChangeInfoL() leave" );
+
+ // Check for return code
+ EUNIT_PRINT( _L( "Return code: %d" ), returnCode );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCommitChangeInfoL returns error");
+ }
+
+// Item addition - "Normal" (non-batch) mode
+// (DoCreateItemL(), DoWriteItemL(), DoCommitItemL())
+void CNSmlDummyDataStore_Test::AddSingleItemL()
+ {
+ TBuf8< 20 > type;
+ TBuf8< 20 > ver = KNSmlvCard21Ver();
+ TInt returnCode = KErrNone;
+ iItemUid = KNullContactId;
+
+ // Try creating contact with illegal MIME type
+ EUNIT_PRINT( _L("Calling DoCreateItemL(), STEP 1") );
+ TRAPD( err, returnCode = iStoreWaiter->DoCreateItemL(
+ iItemUid, 0, type, ver ) );
+
+ EUNIT_PRINT( _L( "DoCreateItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( returnCode == KErrNotSupported,
+ "DoCreateItemL() accepts illegal MIME" );
+
+ // Create legal contact
+ type = KNSmlvCard21Name();
+ EUNIT_PRINT( _L("Calling DoCreateItemL(), STEP 2") );
+ TRAP( err, returnCode = iStoreWaiter->DoCreateItemL(
+ iItemUid, 512, type, ver ) );
+
+ EUNIT_PRINT( _L( "DoCreateItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCreateItemL returns error");
+
+ // Perform item writing to data store
+ HBufC8* vCard = iTestUtilities->ReadVCard8FromFileLC( KVCardBasic() );
+ EUNIT_PRINT( _L("Calling DoWriteItemL(), STEP 3") );
+ // Non-async call (no need for iStoreWaiter usage)
+ TRAP( err, iCNSmlDummyDataStore->DoWriteItemL( *vCard ) );
+ EUNIT_PRINT( _L( "DoWriteItemL(): leave code: %d" ), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+ CleanupStack::PopAndDestroy( vCard );
+
+ // Commit the contact to be created
+ EUNIT_PRINT( _L("Calling DoCommmitItemL(), STEP 4") );
+ TRAP( err, returnCode = iStoreWaiter->DoCommitItemL() );
+
+ EUNIT_PRINT( _L( "DoCommitItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCommitItemL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCommitItemL returns error");
+
+ // Check the imported item
+ EUNIT_ASSERT_DESC( iItemUid != KNullContactId, "Illegal UID for imported contact" );
+ EUNIT_PRINT( _L("Item ID: %d"), iItemUid );
+
+ // Print out the imported vCard
+ CContactIdArray* idArr = CContactIdArray::NewLC();
+ idArr->AddL( iItemUid );
+ CBufFlat* buffer = CBufFlat::NewL( 1024 );
+ CleanupStack::PushL( buffer );
+ RBufWriteStream writeStream( *buffer );
+ CleanupClosePushL( writeStream );
+
+ TRAP( err, iContactDatabase->ExportSelectedContactsL( TUid::Uid(KVersitEntityUidVCard), *idArr,
+ writeStream, CContactDatabase::EExcludeUid, Versit::EUTF8CharSet ) );
+
+ EUNIT_ASSERT_EQUALS_DESC( err, KErrNone, "ExportSelectedContactsL leave" );
+
+ CleanupStack::PopAndDestroy( &writeStream );
+
+ EUNIT_PRINT( buffer->Ptr( 0 ) );
+
+ // Do some asserts
+ EUNIT_ASSERT( buffer->Ptr( 0 ).Find( _L8("N:Smith;John") ) != KErrNotFound );
+ EUNIT_ASSERT( buffer->Ptr( 0 ).Find( _L8("TITLE:Boss") ) != KErrNotFound );
+
+ CleanupStack::PopAndDestroy( 2, idArr ); // buffer, idArr
+
+ // Do cleanup (remove added contact)
+ CContactIdArray* tmpArray = CContactIdArray::NewLC();
+ tmpArray->AddL( iItemUid );
+ TRAP_IGNORE( iContactDatabase->DeleteContactsL( *tmpArray ) );
+ CleanupStack::PopAndDestroy( tmpArray );
+ }
+
+
+// Item addition - Batch mode, empty batch
+// (DoBeginBatchL(), DoCommitBatchL())
+void CNSmlDummyDataStore_Test::AddEmptyBatchL()
+ {
+ // DoBeginBatchL()
+ TRAPD( err, iCNSmlDummyDataStore->DoBeginBatchL() );
+ EUNIT_PRINT( _L( "DoBeginBatchL(): leave code: %d" ), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoBeginBatchL() leave" );
+
+ // DoCommitBatchL()
+ TInt returnCode = KErrNone;
+ RArray< TInt > array;
+ TRAP( err, returnCode = iStoreWaiter->DoCommitBatchL( array ) );
+
+ EUNIT_PRINT( _L( "DoCommitBatchL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCommitBatchL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCommitBatchL returns error");
+ }
+
+// Item addition - Batch mode with two contacts
+void CNSmlDummyDataStore_Test::AddTwoItemBatchL()
+ {
+ TBuf8<20> type = KNSmlvCard21Name();
+ TBuf8<20> ver = KNSmlvCard21Ver();
+ TInt returnCode = KErrNone;
+ HBufC8* vCard = NULL;
+
+ // DoBeginBatchL()
+ EUNIT_PRINT( _L("Calling DoCreateItemL(), STEP 1") );
+ TRAPD( err, iCNSmlDummyDataStore->DoBeginBatchL() );
+ EUNIT_PRINT( _L( "DoBeginBatchL(): leave code: %d" ), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoBeginBatchL() leave" );
+
+ // == == CONTACT ITEM NO 1 == ==
+ vCard = iTestUtilities->ReadVCard8FromFileLC( KVCardBasic() );
+ EUNIT_PRINT( _L("Calling DoCreateItemL(), STEP 2") );
+ TRAP( err, returnCode = iStoreWaiter->DoCreateItemL(
+ iItemUid, vCard->Size(), type, ver ) );
+
+ EUNIT_PRINT( _L( "DoCreateItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCreateItemL returns error");
+
+ // Perform item writing to data store
+ EUNIT_PRINT( _L("Calling DoWriteItemL(), STEP 3") );
+ // Non-async call (no need for iStoreWaiter usage)
+ TRAP( err, iCNSmlDummyDataStore->DoWriteItemL( *vCard ) );
+ EUNIT_PRINT( _L( "DoWriteItemL(): leave code: %d" ), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+ CleanupStack::PopAndDestroy( vCard );
+ vCard = NULL;
+
+ // Commit the contact to be created
+ EUNIT_PRINT( _L("Calling DoCommitItemL(), STEP 4") );
+ TRAP( err, returnCode = iStoreWaiter->DoCommitItemL() );
+
+ EUNIT_PRINT( _L( "DoCommitItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCommitItemL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCommitItemL returns error");
+
+ // == == CONTACT ITEM NO 2 == ==
+ vCard = iTestUtilities->ReadVCard8FromFileLC( KVCardStandard() );
+
+ EUNIT_PRINT( _L("Calling DoCreateItemL(), STEP 5") );
+ TRAP( err, returnCode = iStoreWaiter->DoCreateItemL(
+ iItemUid2, vCard->Size(), type, ver ) );
+ EUNIT_PRINT( _L( "DoCreateItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCreateItemL returns error" );
+
+ // Perform item writing to data store
+ EUNIT_PRINT( _L("Calling DoWriteItemL(), STEP 6") );
+ // Non-async call (no need for iStoreWaiter usage)
+ TRAP( err, iCNSmlDummyDataStore->DoWriteItemL( *vCard ) );
+ EUNIT_PRINT( _L( "DoWriteItemL(): leave code: %d" ), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+ CleanupStack::PopAndDestroy( vCard );
+
+ // Commit the contact to be created
+ EUNIT_PRINT( _L("Calling DoCommitItemL(), STEP 7") );
+ TRAP( err, returnCode = iStoreWaiter->DoCommitItemL() );
+ EUNIT_PRINT( _L( "DoCommitItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCommitItemL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCommitItemL returns error" );
+
+ // Commit batch
+ RArray<TInt> array;
+ EUNIT_PRINT( _L("Calling DoCommitBatchL(), STEP 8") );
+ TRAP( err, returnCode = iStoreWaiter->DoCommitBatchL( array ) );
+
+ EUNIT_PRINT( _L( "DoCommitBatchL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCommitBatchL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCommitBatchL returns error" );
+
+ // Verify results
+ for( TInt i = 0; i < array.Count(); i++ )
+ {
+ EUNIT_PRINT( _L( "Contact: %d, Error code: %d "), i, array[ i ] );
+ EUNIT_ASSERT( array[ i ] == KErrNone );
+ }
+ EUNIT_ASSERT_DESC( array.Count() == 2, "Wrong number of contacts added" );
+ EUNIT_PRINT( _L("Item 1 ID = %d"), iItemUid );
+ EUNIT_PRINT( _L("Item 2 ID = %d"), iItemUid2 );
+
+ // Cleanup
+ array.Reset();
+ array.Close();
+
+ CContactIdArray* tmpArray = CContactIdArray::NewLC();
+ tmpArray->AddL( iItemUid );
+ tmpArray->AddL( iItemUid2 );
+ TRAP_IGNORE( iContactDatabase->DeleteContactsL( *tmpArray ) );
+ CleanupStack::PopAndDestroy( tmpArray );
+ }
+
+// Item addition - cancel Batch mode
+void CNSmlDummyDataStore_Test::CancelBatchL()
+ {
+ TBuf8<20> type = KNSmlvCard21Name();
+ TBuf8<20> ver = KNSmlvCard21Ver();
+ TInt returnCode = KErrNone;
+ HBufC8* vCard = NULL;
+
+ // DoBeginBatchL()
+ EUNIT_PRINT( _L("Calling DoCreateItemL(), STEP 1") );
+ TRAPD( err, iCNSmlDummyDataStore->DoBeginBatchL() );
+ EUNIT_PRINT( _L( "DoBeginBatchL(): leave code: %d" ), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoBeginBatchL() leave" );
+
+ // == == CONTACT ITEM NO 1 == ==
+ vCard = iTestUtilities->ReadVCard8FromFileLC( KVCardBasic() );
+ EUNIT_PRINT( _L("Calling DoCreateItemL(), STEP 2") );
+ TRAP( err, returnCode = iStoreWaiter->DoCreateItemL(
+ iItemUid, vCard->Size(), type, ver ) );
+
+ EUNIT_PRINT( _L( "DoCreateItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCreateItemL returns error");
+
+ // Perform item writing to data store
+ EUNIT_PRINT( _L("Calling DoWriteItemL(), STEP 3") );
+ // Non-async call (no need for iStoreWaiter usage)
+ TRAP( err, iCNSmlDummyDataStore->DoWriteItemL( *vCard ) );
+ EUNIT_PRINT( _L( "DoWriteItemL(): leave code: %d" ), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+ CleanupStack::PopAndDestroy( vCard );
+ vCard = NULL;
+
+ // Cancel Batch
+ EUNIT_PRINT( _L("Calling DoCancelBatch(), STEP 4") );
+ iStoreWaiter->DoCancelBatch();
+ }
+
+// DoOpenItemL(), DoReadItemL(), DoCloseItemL()
+// (LdoFetchItemL(), SingleContactOperationCompleteL())
+void CNSmlDummyDataStore_Test::FetchItemL()
+ {
+ TBuf8<20> type;
+ TBuf8<20> ver;
+ TInt returnCode = KErrNone;
+ TInt size = 0;
+ TSmlDbItemUid parentId = KNullContactId;
+ TBool fieldChange = EFalse;
+
+ // Open item ("Tim Tester") for reading
+ EUNIT_PRINT( _L("Calling DoOpenItemL()") );
+
+ //Make some preparations:
+ // (a) Set remote store format; needed by StripTxL()
+ // - Otherwise we get access violation
+ EUNIT_ASSERT( iCNSmlDummyDataStore->iStoreFormat );
+ iCNSmlDummyDataStore->DoSetRemoteStoreFormatL(
+ *(iCNSmlDummyDataStore->iStoreFormat) );
+
+ TRAPD( err, returnCode = iStoreWaiter->DoOpenItemL(
+ ( *iIdArray )[ 0 ], fieldChange, size, parentId, type, ver ) );
+
+ EUNIT_PRINT( _L( "DoOpenItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoOpenItemL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoOpenItemL returns error");
+
+ // Execute some asserts to verify functionality
+ EUNIT_PRINT( _L( "DoOpenItemL(): size: %d" ),
+ size );
+ EUNIT_ASSERT_DESC( size != 0, "Illegal size value" );
+ EUNIT_ASSERT_DESC( parentId == KNullDataItemId, "Wrong parent ID" );
+ EUNIT_ASSERT_DESC( type.Compare( KNSmlvCard21Name() ) == 0,
+ "Illegal MIME type" );
+ EUNIT_ASSERT_DESC( ver.Compare( KNSmlvCard21Ver() ) == 0,
+ "Illegal MIME version" );
+
+ // Read the item contents (i.e. vCard)
+ HBufC8* vCard = HBufC8::NewLC( 86 );
+ TPtr8 vCardPtr = vCard->Des();
+ EUNIT_ASSERT_NO_LEAVE( iCNSmlDummyDataStore->DoReadItemL( vCardPtr ) );
+
+ EUNIT_PRINT( *vCard );
+ EUNIT_ASSERT( vCard->Find( _L8("N:Tester;Tim") ) != KErrNotFound );
+ EUNIT_ASSERT( vCard->Find( _L8("TEL:+358501234567") ) != KErrNotFound );
+
+ CleanupStack::PopAndDestroy( vCard );
+
+ // Close the contact item
+ iCNSmlDummyDataStore->DoCloseItem();
+ }
+
+void CNSmlDummyDataStore_Test::FetchItem2L()
+ {
+ TBuf8<20> type;
+ TBuf8<20> ver;
+ TInt returnCode = KErrNone;
+ TInt size = 0;
+ TSmlDbItemUid parentId = KNullContactId;
+ TBool fieldChange = EFalse;
+
+ TRAPD( err, returnCode = iStoreWaiter->DoOpenItemL(
+ 10000, fieldChange, size, parentId, type, ver ) );
+
+ EUNIT_PRINT( _L( "DoOpenItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoOpenItemL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone || returnCode == KErrNotFound, "DoOpenItemL returns error");
+ }
+
+// Update a standard contact
+// (DoReplaceItemL(), ExecuteBufferL(), ExecuteUpdateL(), ...)
+void CNSmlDummyDataStore_Test::UpdateItemL()
+ {
+ TInt returnCode = KErrNone;
+ TSmlDbItemUid parentId = KNullContactId;
+ TBool fieldChange = EFalse;
+
+ HBufC8* vCard = iTestUtilities->ReadVCard8FromFileLC( KVCardStandard() );
+
+ // Update "Tim Tester" contact
+ TRAPD( err, returnCode = iStoreWaiter->DoReplaceItemL(
+ ( *iIdArray )[ 0 ], vCard->Size(), parentId, fieldChange ) );
+
+ EUNIT_PRINT( _L( "DoReplaceItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoReplaceItemL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoReplaceItemL returns error");
+
+ // Perform item writing to data store
+ EUNIT_PRINT( _L("Calling DoWriteItemL()") );
+ TRAP( err, iCNSmlDummyDataStore->DoWriteItemL( *vCard ) );
+ EUNIT_PRINT( _L( "DoWriteItemL(): leave code: %d" ), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoWriteItemL() leave" );
+ CleanupStack::PopAndDestroy( vCard );
+
+ // Commit the contact to be created
+ EUNIT_PRINT( _L("Calling DoCommmitItemL()") );
+ TRAP( err, returnCode = iStoreWaiter->DoCommitItemL() );
+
+ EUNIT_PRINT( _L( "DoCommitItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCommitItemL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCommitItemL returns error");
+
+ // Print out the imported vCard
+ CContactIdArray* idArr = CContactIdArray::NewLC();
+ idArr->AddL( ( *iIdArray )[ 0 ] );
+ CBufFlat* buffer = CBufFlat::NewL( 1024 );
+ CleanupStack::PushL( buffer );
+ RBufWriteStream writeStream( *buffer );
+ CleanupClosePushL( writeStream );
+
+ TRAP( err, iContactDatabase->ExportSelectedContactsL(
+ TUid::Uid(KVersitEntityUidVCard), *idArr,
+ writeStream, CContactDatabase::EExcludeUid, Versit::EUTF8CharSet ) );
+
+ EUNIT_ASSERT_EQUALS_DESC( err, KErrNone, "ExportSelectedContactsL leave" );
+
+ CleanupStack::PopAndDestroy( &writeStream );
+
+ EUNIT_PRINT( buffer->Ptr( 0 ) );
+
+ // Do some asserts
+ EUNIT_ASSERT( buffer->Ptr( 0 ).Find( _L8("N:Smith;John") ) != KErrNotFound );
+ EUNIT_ASSERT( buffer->Ptr( 0 ).Find( _L8("TITLE:Boss") ) != KErrNotFound );
+
+ CleanupStack::PopAndDestroy( 2, idArr ); // buffer, idArr
+ }
+
+// Not working - memory leak: Heap cell count, 61, 73, Request count, 0, 1
+// The test case never receives OpetionComplete() callback from VPbk. Therefore
+// the request count & heap allocation do not match.
+// DoDeleteItemL(), StepComplete()
+void CNSmlDummyDataStore_Test::DeleteItemL()
+ {
+ // Delete item
+ TInt returnCode = KErrNone;
+ EUNIT_PRINT( _L("Calling DoDeleteItemL()") );
+ TRAPD( err, returnCode = iStoreWaiter->DoDeleteItemL( ( *iIdArray )[ 0 ] ) );
+
+ EUNIT_PRINT( _L( "DoDeleteItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoDeleteItemL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoDeleteItemL returns error");
+ iCNSmlDummyDataStore->ExecuteDeleteL();
+ // Check that the contact does not exist any more
+ CContactItem* item = NULL;
+ CContactDatabase* cntDb = NULL;
+ TRAP( err, cntDb = CContactDatabase::OpenL() );
+ TRAP( err, item = cntDb->ReadMinimalContactL(
+ ( *iIdArray )[ 0 ] ) );
+ EUNIT_ASSERT( !item );
+ EUNIT_PRINT( _L("Error=%d"), err );
+ EUNIT_ASSERT_EQUALS_DESC( err, KErrNotFound, "Deleted item found" );
+ delete item;
+ item = NULL;
+
+ if( cntDb )
+ {
+ delete cntDb;
+ }
+
+ iIdArray->Remove( 0 );
+ }
+
+// DoDeleteAllItemsL(), DoDeleteAllContactsL(), ...
+void CNSmlDummyDataStore_Test::DeleteAllItemsL()
+ {
+ // Temporarily remove ChangeFinders from Store to prevent leaves
+ // when reseting ChangeFinders in code under test.
+ CNSmlChangeFinder* cF = iCNSmlDummyDataStore->iChangeFinder;
+ CleanupStack::PushL( cF );
+ iCNSmlDummyDataStore->iChangeFinder = NULL;
+
+ TInt returnCode = KErrNone;
+ EUNIT_PRINT( _L("Calling DoDeleteAllItemsL()") );
+ TRAPD( err, returnCode = iStoreWaiter->DoDeleteAllItemsL() );
+
+ // Return ChangeFinders
+ CleanupStack::Pop( cF );
+ iCNSmlDummyDataStore->iChangeFinder = cF;
+
+ EUNIT_PRINT( _L( "DoDeleteAllItemsL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoDeleteAllItemsL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoDeleteAllItemsL returns error");
+
+ // Check that all normal contacts are removed
+ TContactItemId ownCardId = iContactDatabase->OwnCardId();
+
+ TInt contactCount = 0;
+ TInt groupCount = iContactDatabase->GroupCount();
+ TContactIter iter( *iContactDatabase );
+ for( TContactItemId id = iter.FirstL(); id != KNullContactId; id = iter.NextL() )
+ {
+ // KUidContactGroup
+ if( id != ownCardId )
+ {
+ contactCount++;
+ }
+ }
+ EUNIT_PRINT( _L("Number of items in DB=%d"), contactCount );
+ EUNIT_PRINT( _L("Number of groups in DB=%d"), groupCount );
+ EUNIT_ASSERT_DESC( contactCount - groupCount == 0, "All contacts not deleted");
+ }
+
+// GetStoreFormatResourceFileL()
+void CNSmlDummyDataStore_Test::GetStoreFormatResourceFileLL()
+ {
+ const TDesC& resourceFile = iCNSmlDummyDataStore->GetStoreFormatResourceFileL();
+ EUNIT_PRINT( resourceFile );
+ }
+
+
+// VCARD IMPORT TEST CASES
+
+void CNSmlDummyDataStore_Test::RemoveItemFromAddBatchL()
+ {
+ // Test case:
+ // - Run RemoveItemFromAddBatch() and verify its functionality
+
+ if( !iCNSmlDummyDataStore->iItemDataAddBatch )
+ {
+ iCNSmlDummyDataStore->iItemDataAddBatch =
+ CBufFlat::NewL( KNSmlItemDataExpandSize );
+ }
+
+ HBufC8* vCard = NULL;
+ // Test material: basic vCard
+ vCard = iTestUtilities->ReadVCard8FromFileLC( KVCardBasic );
+ iCNSmlDummyDataStore->iItemDataAddBatch->InsertL(
+ iCNSmlDummyDataStore->iItemDataAddBatch->Size(),
+ *vCard, vCard->Size() );
+ iCNSmlDummyDataStore->iItemDataAddBatch->InsertL(
+ iCNSmlDummyDataStore->iItemDataAddBatch->Size(),
+ KVersitTokenCRLF() );
+ CleanupStack::PopAndDestroy( vCard );
+
+ // Test material 2: vCard with multiple TEL fields
+ vCard = iTestUtilities->ReadVCard8FromFileLC( KVCardMultiOccurence );
+ iCNSmlDummyDataStore->iItemDataAddBatch->InsertL(
+ iCNSmlDummyDataStore->iItemDataAddBatch->Size(),
+ *vCard, vCard->Size() );
+ iCNSmlDummyDataStore->iItemDataAddBatch->InsertL(
+ iCNSmlDummyDataStore->iItemDataAddBatch->Size(),
+ KVersitTokenCRLF() );
+ CleanupStack::PopAndDestroy( vCard );
+
+// iTestUtilities->PrintData( _L8("Buffer contents"),
+// *iCNSmlDummyDataStore->iItemDataAddBatch ); // DEBUG PRINT
+
+ TInt count = 0;
+
+ // ASSERTS
+ count = CountItemsLeftInBatchL(
+ *iCNSmlDummyDataStore->iItemDataAddBatch );
+ EUNIT_PRINT( _L("Items left %d"), count ); // DEBUG PRINT
+ EUNIT_ASSERT_DESC( count == 2, "Wrong initial item count in batch.")
+// EUNIT_PRINT( _L("Items left %d"), count ); // DEBUG PRINT
+ }
+
+
+void CNSmlDummyDataStore_Test::TestStoreSupportMimeTypeL()
+ {
+ EUNIT_ASSERT( iCNSmlDummyDataStore->iStoreFormat );
+ EUNIT_ASSERT_EQUALS( iCNSmlDummyDataStore->iStoreFormat->MimeFormatCount() ,1 );
+ EUNIT_ASSERT_EQUALS(
+ iCNSmlDummyDataStore->iStoreFormat->MimeFormat(0).MimeType().DesC(),
+ KNSmlvCard21Name() );
+ EUNIT_ASSERT_EQUALS(
+ iCNSmlDummyDataStore->iStoreFormat->MimeFormat(0).MimeVersion().DesC(),
+ KNSmlvCard21Ver() );
+ }
+
+void CNSmlDummyDataStore_Test::DoBeginTransactionL()
+ {
+ TRAPD( err, iCNSmlDummyDataStore->DoBeginTransactionL() );
+ EUNIT_ASSERT( err == KErrNotSupported );
+ }
+
+void CNSmlDummyDataStore_Test::DoCommitTransactionL()
+ {
+ TRequestStatus status;
+ iCNSmlDummyDataStore->DoCommitTransactionL( status );
+ EUNIT_ASSERT_DESC( status.Int() == KErrNotSupported, "DoCommitTransactionL fail" )
+ }
+
+void CNSmlDummyDataStore_Test::DoRevertTransaction()
+ {
+ TRequestStatus status;
+ iCNSmlDummyDataStore->DoRevertTransaction( status );
+ EUNIT_ASSERT_DESC( status.Int() == KErrNotSupported, "DoRevertTransaction fail" )
+ }
+
+void CNSmlDummyDataStore_Test::StoreNameL()
+ {
+ CreateDataStoreL();
+ EUNIT_PRINT( iDataStore->StoreName() );
+ iDataStore->CancelRequest();
+ DeleteDataStoreL();
+ }
+
+void CNSmlDummyDataStore_Test::FindChangedItemsL()
+ {
+ CreateDataStoreL();
+ const MSmlDataItemUidSet& added = iDataStore->AddedItems();
+ EUNIT_ASSERT_DESC( added.ItemCount() == 0, "AddedItems returns faulty uid set");
+ const MSmlDataItemUidSet& deleted = iDataStore->DeletedItems();
+ EUNIT_ASSERT_DESC( deleted.ItemCount() == 0, "DeletedItems returns faulty uid set");
+ const MSmlDataItemUidSet& softDeleted = iDataStore->SoftDeletedItems();
+ EUNIT_ASSERT_DESC( softDeleted.ItemCount() == 0, "SoftDeletedItems returns faulty uid set");
+ const MSmlDataItemUidSet& moved = iDataStore->MovedItems();
+ EUNIT_ASSERT_DESC( moved.ItemCount() == 0, "MovedItems returns faulty uid set");
+ DeleteDataStoreL();
+ }
+
+void CNSmlDummyDataStore_Test::MoveAndDeleteL()
+ {
+ CreateDataStoreL();
+ TSmlDbItemUid uid = 1;
+ TSmlDbItemUid parent = 0;
+ TRequestStatus status;
+ iDataStore->MoveItemL( uid, parent, status );
+
+ TRequestStatus status2;
+ iDataStore->SoftDeleteItemL( uid, status2 );
+
+ DeleteDataStoreL();
+ }
+
+void CNSmlDummyDataStore_Test::ExecuteMoveL()
+ {
+ iCNSmlDummyDataStore->ExecuteMoveL();
+ }
+
+void CNSmlDummyDataStore_Test::DoSetRemoteMaxObjectSize()
+ {
+ iCNSmlDummyDataStore->DoSetRemoteMaxObjectSize( 100000 );
+ }
+
+void CNSmlDummyDataStore_Test::DoMaxObjectSize()
+ {
+ TInt size = iCNSmlDummyDataStore->DoMaxObjectSize();
+ EUNIT_ASSERT( size == 102400 );
+ }
+
+void CNSmlDummyDataStore_Test::ContactsSavingFailedL()
+ {
+ TBuf8< 20 > type= KNSmlvCard21Name();
+ TBuf8< 20 > ver = KNSmlvCard21Ver();
+ TInt returnCode = KErrNone;
+ iItemUid = KNullContactId;
+ // Create legal contact
+ EUNIT_PRINT( _L("Calling DoCreateItemL(), STEP 1") );
+ TRAPD( err, returnCode = iStoreWaiter->DoCreateItemL(
+ iItemUid, 512, type, ver ) );
+
+ EUNIT_PRINT( _L( "DoCreateItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNone, "DoCreateItemL returns error");
+
+ // Perform item writing to data store
+ HBufC8* vCard = iTestUtilities->ReadVCard8FromFileLC( KVCardBasicInvalid() );
+ EUNIT_PRINT( _L("Calling DoWriteItemL(), STEP 2") );
+ // Non-async call (no need for iStoreWaiter usage)
+ TRAP( err, iCNSmlDummyDataStore->DoWriteItemL( *vCard ) );
+ EUNIT_PRINT( _L( "DoWriteItemL(): leave code: %d" ), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCreateItemL() leave" );
+ CleanupStack::PopAndDestroy( vCard );
+
+ // Commit the contact to be created
+ EUNIT_PRINT( _L("Calling DoCommmitItemL(), STEP 3") );
+ TRAP( err, returnCode = iStoreWaiter->DoCommitItemL() );
+
+ EUNIT_PRINT( _L( "DoCommitItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ EUNIT_ASSERT_DESC( err == KErrNone, "DoCommitItemL() leave" );
+ EUNIT_ASSERT_DESC( returnCode == KErrNotFound, "DoCommitItemL returns error");
+ }
+
+void CNSmlDummyDataStore_Test::StepFailed()
+ {
+ TInt returnCode = KErrNone;
+ // delete contact which not exist
+ EUNIT_PRINT( _L("Calling DoDeleteItemL()") );
+ TRAPD( err, returnCode = iStoreWaiter->DoDeleteItemL( 10000 ) );
+ EUNIT_PRINT( _L( "DoDeleteItemL(): leave code: %d, return code: %d" ),
+ err, returnCode );
+ }
+
+void CNSmlDummyDataStore_Test::GetDataMod()
+ {
+ CNSmlDataModBase& dataMod = iCNSmlDummyDataStore->GetDataMod();
+ }
+
+
+// --------------- Helper methods --------------
+
+// Helper method to add a simple contact to test contact DB
+TContactItemId CNSmlDummyDataStore_Test::AddContactL(
+ const TDesC& aFirstName,
+ const TDesC& aLastName,
+ const TDesC& aPhoneNumber )
+ {
+ _LIT( KLabelFamilyName, "Last name");
+ _LIT( KLabelGivenName, "First name");
+ _LIT( KLabelPhone, "Phone");
+
+ 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 );
+
+ TContactItemId cardId = iContactDatabase->AddNewContactL( *card );
+ CleanupStack::PopAndDestroy( card );
+
+ return cardId;
+ }
+
+TInt CNSmlDummyDataStore_Test::CountItemsLeftInBatchL( CBufBase& aItems )
+ {
+ _LIT8( KVCardBeginTag, "BEGIN:VCARD\r\n");
+ _LIT8( KVCardEndTag, "\r\nEND:VCARD\r\n");
+
+ TInt vCardCount = 0;
+ TBool processed = EFalse;
+
+ HBufC8* tmpBuf = HBufC8::NewLC( aItems.Size() );
+ TPtr8 ptr = tmpBuf->Des();
+ aItems.Read( 0, ptr, aItems.Size() );
+
+ while( !processed )
+ {
+ TInt offsetBegin = ptr.FindF( KVCardBeginTag );
+ TInt offsetEnd = ptr.FindF( KVCardEndTag );
+
+ if( offsetBegin != KErrNotFound && offsetEnd != KErrNotFound )
+ {
+ offsetEnd += KVCardEndTag().Length();
+ vCardCount++;
+ ptr = ptr.MidTPtr( offsetEnd );
+ }
+ else
+ {
+ processed = ETrue;
+ }
+ }
+ CleanupStack::PopAndDestroy( tmpBuf );
+ return vCardCount;
+ }
+
+void CNSmlDummyDataStore_Test::CreateDataStoreL()
+ {
+ TSmlDataProviderId id = {0x101F6DDD};// Contact Adapter Uid
+ CSmlDataProvider* dp = CSmlDataProvider::NewL( id );
+ iDataStore = dp->NewStoreInstanceLC();
+ CleanupStack::Pop( iDataStore );
+ delete dp;
+ }
+
+void CNSmlDummyDataStore_Test::DeleteDataStoreL()
+ {
+ delete iDataStore;
+ iDataStore = NULL;
+ }
+
+void CNSmlDummyDataStore_Test::CreateViewL()
+ {
+ CVPbkContactViewDefinition* viewDef = CVPbkContactViewDefinition::NewL();
+ CleanupStack::PushL( viewDef );
+ viewDef->SetType( EVPbkContactsView );
+
+ iContactViewBase = iContactManager->CreateContactViewLC(
+ *this,
+ *viewDef,
+ iContactManager->FieldTypes() );
+ CleanupStack::Pop();// iContactViewBase
+ CleanupStack::PopAndDestroy( viewDef );
+ }
+
+// ------------------ From MVPbkContactViewObserver ---------------------
+void CNSmlDummyDataStore_Test::ContactViewReady( MVPbkContactViewBase& /*aView*/ )
+ {
+ }
+
+void CNSmlDummyDataStore_Test::ContactViewUnavailable(
+ MVPbkContactViewBase& /*aView*/ )
+ {
+ }
+
+void CNSmlDummyDataStore_Test::ContactAddedToView(
+ MVPbkContactViewBase& /*aView*/,
+ TInt /*aIndex*/,
+ const MVPbkContactLink& /*aContactLink*/ )
+ {
+ }
+
+void CNSmlDummyDataStore_Test::ContactRemovedFromView(
+ MVPbkContactViewBase& /*aView*/,
+ TInt /*aIndex*/,
+ const MVPbkContactLink& /*aContactLink*/ )
+ {
+ }
+
+void CNSmlDummyDataStore_Test::ContactViewError(
+ MVPbkContactViewBase& /*aView*/,
+ TInt /*aError*/,
+ TBool /*aErrorNotified*/ )
+ {
+ }
+
+// - EUnit test table -------------------------------------------------------
+
+EUNIT_BEGIN_TEST_TABLE(
+ CNSmlDummyDataStore_Test,
+ "Unit tests Contact adapter datastore",
+ "UNIT" )
+
+EUNIT_TEST(
+ "Test to verify memory allocation for the object",
+ "CNSmlContactsDataStore",
+ "NewL",
+ "FUNCTIONALITY",
+ Empty, NewLL, Empty)
+
+EUNIT_TEST(
+ "Open data store",
+ "CNSmlContactsDataStore",
+ "DoOpenL",
+ "FUNCTIONALITY",
+ SetupL, DoOpenLL, Teardown )
+
+EUNIT_TEST(
+ "DoHasSyncHistory",
+ "CNSmlContactsDataStore",
+ "DoHasSyncHistory",
+ "FUNCTIONALITY",
+ SetupAndOpenStoreL, DoHasSyncHistoryL, TeardownAndCloseStore )
+
+EUNIT_TEST(
+ "DoModifiedItems & DoCommitChangeInfoL",
+ "CNSmlContactsDataStore",
+ "DoModifiedItems",
+ "FUNCTIONALITY",
+ SetupAndOpenStoreL, DoModifiedItemsL, TeardownAndCloseStore )
+
+EUNIT_TEST(
+ "DoResetChangeInfoL",
+ "CNSmlContactsDataStore",
+ "DoResetChangeInfoL",
+ "FUNCTIONALITY",
+ SetupAndOpenStoreL, DoResetChangeInfoLL, TeardownAndCloseStore )
+
+EUNIT_TEST(
+ "DoCommitChangeInfoL",
+ "CNSmlContactsDataStore",
+ "DoCommitChangeInfoL",
+ "FUNCTIONALITY",
+ SetupAndOpenStoreL, DoCommitChangeInfoLL, TeardownAndCloseStore )
+
+EUNIT_TEST(
+ "Add single item (normal mode)",
+ "CNSmlContactsDataStore",
+ "DoCreateItemL, DoCommitItemL, ExecuteAddL, LdoAddItem",
+ "FUNCTIONALITY",
+ SetupAndOpenStoreL, AddSingleItemL, TeardownAndCloseStore )
+
+/* TIMEOUT error
+EUNIT_TEST(
+ "Add items in batch mode (empty batch)",
+ "CNSmlContactsDataStore",
+ "DoBeginBatchL, DoCommitBatchL",
+ "FUNCTIONALITY",
+ SetupAndOpenStoreL, AddEmptyBatchL, TeardownAndCloseStore )*/
+
+EUNIT_TEST(
+ "Add items in batch mode (2 contacts)",
+ "CNSmlContactsDataStore",
+ "DoBeginBatchL, DoCommitBatchL",
+ "FUNCTIONALITY",
+ SetupAndOpenStoreL, AddTwoItemBatchL, TeardownAndCloseStore )
+
+EUNIT_TEST(
+ "CancelBatchL",
+ "CNSmlContactsDataStore",
+ "DoCancelBatch",
+ "FUNCTIONALITY",
+ SetupAndOpenStoreL, CancelBatchL, TeardownAndCloseStore )
+
+EUNIT_TEST(
+ "Fetch/read normal contact",
+ "CNSmlContactsDataStore",
+ "LdoFetchItemL",
+ "FUNCTIONALITY",
+ SetupPopulateDbAndOpenStoreL, FetchItemL, TeardownCloseAndEmptyContactDb )
+
+EUNIT_TEST(
+ "Fail fetch",
+ "CNSmlContactsDataStore",
+ "LdoFetchItemL",
+ "FUNCTIONALITY",
+ SetupPopulateDbAndOpenStoreL, FetchItem2L, TeardownCloseAndEmptyContactDb )
+
+EUNIT_TEST(
+ "Update normal contact",
+ "CNSmlContactsDataStore",
+ "ExecuteUpdateL",
+ "FUNCTIONALITY",
+ SetupPopulateDbAndOpenStoreL, UpdateItemL, TeardownCloseAndEmptyContactDb )
+
+EUNIT_TEST(
+ "Delete normal contact",
+ "CNSmlContactsDataStore",
+ "DoDeleteItemL",
+ "FUNCTIONALITY",
+ SetupPopulateDbAndOpenStoreL, DeleteItemL, TeardownCloseAndEmptyContactDb )
+
+EUNIT_TEST(
+ "Delete all contacts",
+ "CNSmlContactsDataStore",
+ "DoDeleteItemL",
+ "FUNCTIONALITY",
+ SetupPopulateDbAndOpenStoreL, DeleteAllItemsL, TeardownCloseAndEmptyContactDb )
+
+EUNIT_TEST(
+ "Test for GetStoreFormatResourceFileL function",
+ "CNSmlContactsDataStore",
+ "",
+ "FUNCTIONALITY",
+ SetupL, GetStoreFormatResourceFileLL, Teardown )
+
+EUNIT_TEST(
+ "RemoveItemFromAddBatch",
+ "CNSmlContactsDataStore",
+ "RemoveItemFromAddBatch",
+ "FUNCTIONALITY",
+ SetupL, RemoveItemFromAddBatchL, Teardown )
+
+EUNIT_TEST(
+ "Verify operator specific MIME type",
+ "CNSmlContactsDataStore",
+ "",
+ "FUNCTIONALITY",
+ SetupL, TestStoreSupportMimeTypeL, Teardown )
+
+EUNIT_TEST(
+ "GetDataMod",
+ "CNSmlContactsDataStore",
+ "",
+ "FUNCTIONALITY",
+ SetupL, GetDataMod, Teardown )
+
+EUNIT_TEST(
+ "DoBeginTransactionL",
+ "CNSmlContactsDataStore",
+ "",
+ "FUNCTIONALITY",
+ SetupL, DoBeginTransactionL, Teardown )
+
+EUNIT_TEST(
+ "DoCommitTransactionL",
+ "CNSmlContactsDataStore",
+ "",
+ "FUNCTIONALITY",
+ SetupL, DoCommitTransactionL, Teardown )
+
+EUNIT_TEST(
+ "DoRevertTransaction",
+ "CNSmlContactsDataStore",
+ "",
+ "FUNCTIONALITY",
+ SetupL, DoRevertTransaction, Teardown )
+
+EUNIT_TEST(
+ "StoreNameL",
+ "CNSmlContactsDataStore",
+ "",
+ "FUNCTIONALITY",
+ SetupL, StoreNameL, Teardown )
+
+EUNIT_TEST(
+ "FindChangedItemsL",
+ "CNSmlContactsDataStore",
+ "",
+ "FUNCTIONALITY",
+ SetupL, FindChangedItemsL, Teardown )
+
+EUNIT_TEST(
+ "MoveAndDeleteL",
+ "CNSmlContactsDataStore",
+ "",
+ "FUNCTIONALITY",
+ SetupL, MoveAndDeleteL, Teardown )
+
+EUNIT_TEST(
+ "ExecuteMoveL (move command is not supported)",
+ "CNSmlContactsDataStore",
+ "",
+ "FUNCTIONALITY",
+ SetupL, ExecuteMoveL, Teardown )
+
+EUNIT_TEST(
+ "DoSetRemoteMaxObjectSize",
+ "CNSmlContactsDataStore",
+ "",
+ "FUNCTIONALITY",
+ SetupL, DoSetRemoteMaxObjectSize, Teardown )
+
+EUNIT_TEST(
+ "DoMaxObjectSize",
+ "CNSmlContactsDataStore",
+ "",
+ "FUNCTIONALITY",
+ SetupL, DoMaxObjectSize, Teardown )
+
+EUNIT_TEST(
+ "ContactsSavingFailedL",
+ "CNSmlContactsDataStore",
+ "",
+ "FUNCTIONALITY",
+ SetupAndOpenStoreL, ContactsSavingFailedL, TeardownAndCloseStore )
+
+EUNIT_TEST(
+ "StepFailed",
+ "CNSmlContactsDataStore",
+ "",
+ "FUNCTIONALITY",
+ SetupPopulateDbAndOpenStoreL, StepFailed, TeardownCloseAndEmptyContactDb )
+
+EUNIT_END_TEST_TABLE