diff -r ad0f53516d84 -r b922b9936679 contentctrl_plat/adapter_customization_api/tsrc/ContactAdapter/cnsmldummydatastore_test.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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 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