diff -r 8e7494275d3a -r 4f0867e42d62 contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmldummydatastore_test.cpp --- a/contentctrl_plat/ds_contact_adapter_customization_api/tsrc/ContactsAdapter/cnsmldummydatastore_test.cpp Tue Aug 31 15:05:37 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1020 +0,0 @@ -/* -* 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. -* -*/ - -// CLASS HEADER -#include "cnsmldummydatastore_test.h" - -// EXTERNAL INCLUDES -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// INTERNAL INCLUDES -#include "cnsmladaptertestutilities.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" ); - } - -// - 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; - } - -// - Setup & teardown --------------------------------------------------------- - -// ++++++++++++ SETUP METHODS ++++++++++++ - -void CNSmlDummyDataStore_Test::SetupL( ) - { - iCNSmlDummyDataStore = CNSmlDummyDataStore::NewL(); - iTestUtilities = CNSmlAdapterTestUtilities::NewL(); - } - -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; - } - -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; - } - - -// - Test methods ------------------------------------------------------------- - -// 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() - { - TInt returnCode = KErrNone; - TRAPD( err, returnCode = iStoreWaiter->DoResetChangeInfoL() ); - - // 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(), LdoAddItemL()) -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 -// (LdoAddItemsL()) -void CNSmlDummyDataStore_Test::AddItemBatchL() - { - 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"); - - // Commit batch - RArray array; - EUNIT_PRINT( _L("Calling DoCommitBatchL(), STEP 5") ); - 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() == 1, "Wrong number of contacts added" ); - EUNIT_PRINT( _L("Item 1 ID = %d"), iItemUid ); - - // Cleanup - array.Reset(); - array.Close(); - - CContactIdArray* tmpArray = CContactIdArray::NewLC(); - tmpArray->AddL( iItemUid ); - 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()) -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(); - } - -// Update a standard contact -// (DoReplaceItemL(), ExecuteBufferL()...) -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 - } - -// DoDeleteItemL() -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"); - - // 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() -void CNSmlDummyDataStore_Test::DeleteAllItemsL() - { - // Temporarily remove ChangeFinder from Store to prevent leaves - // when reseting ChangeFinder 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 ); - } - -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::GetDataMod() - { - CNSmlDataModBase& dataMod = iCNSmlDummyDataStore->GetDataMod(); - } - -void CNSmlDummyDataStore_Test::DoBeginTransactionL() - { - TRAPD( err, iCNSmlDummyDataStore->DoBeginTransactionL() ); - EUNIT_ASSERT( err == KErrNotSupported ); - } - -void CNSmlDummyDataStore_Test::DoCommitTransactionL() - { - TRequestStatus status; - iCNSmlDummyDataStore->DoCommitTransactionL( status ); - User::WaitForRequest( status ); - EUNIT_ASSERT_DESC( status.Int() == KErrNotSupported, "DoCommitTransactionL fail" ) - } - -void CNSmlDummyDataStore_Test::DoRevertTransaction() - { - TRequestStatus status; - iCNSmlDummyDataStore->DoRevertTransaction( status ); - User::WaitForRequest( 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 ); - User::WaitForRequest( status ); - - TRequestStatus status2; - iDataStore->SoftDeleteItemL( uid, status2 ); - User::WaitForRequest( status2 ); - - DeleteDataStoreL(); - } - -void CNSmlDummyDataStore_Test::DoSetRemoteMaxObjectSize() - { - iCNSmlDummyDataStore->DoSetRemoteMaxObjectSize( 100000 ); - } - -void CNSmlDummyDataStore_Test::DoMaxObjectSize() - { - TInt size = iCNSmlDummyDataStore->DoMaxObjectSize(); - EUNIT_ASSERT( size == 102400 ); - } - - -// --------------- 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; - } - -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; - } - -// - 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) - -// The following unit test cases fail because of mis-match in -// heap cell count & thread handle count. This is caused by -// DataStoreExtension component. -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, LdoAddItem", - "FUNCTIONALITY", - SetupAndOpenStoreL, AddSingleItemL, TeardownAndCloseStore ) - -EUNIT_TEST( - "Add item in batch mode", - "CNSmlContactsDataStore", - "DoBeginBatchL, DoCommitBatchL", - "FUNCTIONALITY", - SetupAndOpenStoreL, AddItemBatchL, TeardownAndCloseStore ) - -EUNIT_TEST( - "CancelBatchL", - "CNSmlContactsDataStore", - "DoCancelBatch", - "FUNCTIONALITY", - SetupAndOpenStoreL, CancelBatchL, TeardownAndCloseStore ) - -EUNIT_TEST( - "Fetch/read normal contact", - "CNSmlContactsDataStore", - "LdoFetchItemL", - "FUNCTIONALITY", - SetupPopulateDbAndOpenStoreL, FetchItemL, TeardownCloseAndEmptyContactDb ) - -EUNIT_TEST( - "Update normal contact", - "CNSmlContactsDataStore", - "LdoUpdateItemL", - "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 ) -// End of failing test cases - -EUNIT_TEST( - "Test for GetStoreFormatResourceFileL function", - "CNSmlContactsDataStore", - "", - "FUNCTIONALITY", - SetupL, GetStoreFormatResourceFileLL, 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( - "DoSetRemoteMaxObjectSize", - "CNSmlContactsDataStore", - "", - "FUNCTIONALITY", - SetupL, DoSetRemoteMaxObjectSize, Teardown ) - -EUNIT_TEST( - "DoMaxObjectSize", - "CNSmlContactsDataStore", - "", - "FUNCTIONALITY", - SetupL, DoMaxObjectSize, Teardown ) - -EUNIT_END_TEST_TABLE