mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaContactAvailability.cpp
branchRCL_3
changeset 33 bc78a40cd63c
parent 32 73a1feb507fb
--- a/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaContactAvailability.cpp	Tue Aug 31 15:12:07 2010 +0300
+++ b/mmsharing/mmshavailability/tsrc/ut_availability/src/UT_CMusAvaContactAvailability.cpp	Wed Sep 01 12:31:01 2010 +0100
@@ -30,8 +30,13 @@
 
 //  EXTERNAL INCLUDES
 #include <digia/eunit/eunitmacros.h>
+#include <CPbkContactItem.h>
+#include <CPbkContactEngine.h>
+#include <CPbkFieldInfo.h>
 #include <cntfldst.h>
 #include <cntfield.h>
+#include <PbkFields.hrh>
+#include <CPbkFieldsInfo.h>
 #include <cntfilt.h>
 #include <digia/eunit/eunitdecorators.h>
 
@@ -47,6 +52,7 @@
 _LIT(KLastName,"Meikalainen");
 _LIT(KFirstLastName,"Matti Meikalainen");
 _LIT(KLastFirstName,"Meikalainen Matti");
+_LIT( KTelNumber, "12345" );
 
 // CONSTRUCTION
 UT_CMusAvaContactAvailability* UT_CMusAvaContactAvailability::NewL()
@@ -174,11 +180,73 @@
     
 void UT_CMusAvaContactAvailability::UT_CMusAvaController_DoExecuteL1_L()
     {
+    CContactIdArray* contactIdArray = NULL;
+    CPbkContactItem*  contactItem = NULL;
+    CPbkContactItem*  contactItemTmp = NULL;
+    
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    CPbkContactEngine* contactEngine = CPbkContactEngine::NewL();
+    CleanupStack::PushL( contactEngine );
+
+    // dummy initialization, other ways CPbkContactEngine leaks memory
+    CPbkContactItem* pbkItem = NULL;
+    TRAP_IGNORE( pbkItem = contactEngine->ReadContactL( 1 ) );
+    delete pbkItem;
+    
+    contactItem= contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+        
+     //contact  
+    TPbkContactItemField* fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL( KPlusNumber() );
+    
+    contactEngine->AddNewContactL( *contactItem );
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+    
+    iConcreteSettings->SetTelNumberL( KPlusNumber() );
+    
+    TRAPD( error, iContactAvailability->DoExecuteL() );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    TInt count;
+    EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count );
+    if ( count > 0 && error != KErrNone )
+        {
+        User::Leave( KErrNoMemory );
+        }
+    CleanupStack::PopAndDestroy( contactItem );
+    CleanupStack::PopAndDestroy( contactEngine );
     }
     
     
 void UT_CMusAvaContactAvailability::UT_CMusAvaController_DoExecuteL2_L()
     {
+    CContactIdArray* contactIdArray = NULL;
+    CPbkContactItem*  contactItem = NULL;
+    CPbkContactItem*  contactItemTmp = NULL;
+    
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    CPbkContactEngine* contactEngine = CPbkContactEngine::NewL();
+    CleanupStack::PushL( contactEngine );
+
+    // dummy initialization, other ways CPbkContactEngine leaks memory
+    CPbkContactItem* pbkItem = NULL;
+    TRAP_IGNORE( pbkItem = contactEngine->ReadContactL( 1 ) );
+    delete pbkItem;
+    
+    contactItem= contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+        
+    CContactTextField* urlAtSignField = 
+    EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdSIPID );
+    if ( urlAtSignField )
+        {
+        urlAtSignField->SetTextL( _L("sip:test@10.21.30.50") );
+        }
+    else
+        {
+        EUNIT_ASSERT( !urlAtSignField );
+        }
+    EUNIT_ENABLE_ALLOC_DECORATOR;
 
     iConcreteSettings->SetTelNumberL( KPlusNumber );
     
@@ -201,35 +269,20 @@
         {
         User::Leave( KErrNoMemory );
         }
+    
+    CleanupStack::PopAndDestroy( contactItem );
+    CleanupStack::PopAndDestroy( contactEngine );
     }
-    
-void UT_CMusAvaContactAvailability::UT_CMusAvaController_DoExecuteL3_L()
+void UT_CMusAvaContactAvailability::UT_CMusAvaController_CallConnectedLL()
     {
-    iConcreteSettings->SetTelNumberL( KPlusNumber );
-    
-    TRAPD( error, iContactAvailability->DoExecuteL() );
-    EUNIT_ASSERT( error == KErrNoMemory || error == KErrNone );
-    if ( error == KErrNoMemory ) User::Leave( error );
-    TInt count;
-    EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count );
-    if ( count > 0 && error != KErrNone )
-        {
-        User::Leave( KErrNoMemory );
-        }
-    
-    iConcreteSettings->SetTelNumberL( KPlusNumber );
-        
-    TRAP( error, iContactAvailability->DoExecuteL() );
-    if ( error == KErrNoMemory ) User::Leave( error );
-    EUNIT_GET_ALLOC_DECORATOR_FAILCOUNT( count );
-    if ( count > 0 && error != KErrNone )
-        {
-        User::Leave( KErrNoMemory );
-        }
-    
+    TRAPD( error,  iContactAvailability->CallConnectedL( KTelNumber ) );
+    if ( error == KErrNone )
+    	{
+    	EUNIT_ASSERT_EQUALS( iContactAvailability->State(), 
+                         MMusAvaObserver::EMusAvaStatusAvailable );
+    	EUNIT_ASSERT_EQUALS( iConcreteSettings->TelNumber(), KTelNumber ); 
+    	}
     }
-
-    
 void UT_CMusAvaContactAvailability::UT_CMusAvaController_NameL()
     {
     EUNIT_ASSERT( iContactAvailability->Name() == MMusAvaObserver::EMusAvaNameContactStatus );
@@ -296,52 +349,1138 @@
     
 void UT_CMusAvaContactAvailability::UT_CMusAvaController_ContactLL()
     {
+    CContactIdArray* contactIdArray = NULL;
+    CPbkContactItem*  contactItem = NULL;
+
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    CPbkContactEngine* contactEngine = CPbkContactEngine::NewL();
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+    CleanupStack::PushL( contactEngine );
+    
+    // Non cont or phone number added to contact DB
+    TBool ret;
+    TRAPD( error, ret = iContactAvailability->ContactL( contactIdArray, *contactEngine ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT( !ret );
+    EUNIT_ASSERT( contactIdArray == NULL );
+    
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    contactItem= contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+        
+     //contact  
+    TPbkContactItemField* fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL( KPlusNumber() );
+    
+    contactEngine->AddNewContactL( *contactItem );
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+    
+    iConcreteSettings->SetTelNumberL( KPlusNumber );
+    
+    TRAP( error, ret = iContactAvailability->ContactL( contactIdArray, *contactEngine ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT( ret );
+    EUNIT_ASSERT( contactIdArray != NULL );
+
+    delete contactIdArray;
+    contactIdArray = NULL;    
+    
+    CleanupStack::PopAndDestroy( contactItem );
+    CleanupStack::PopAndDestroy( contactEngine );
+    
     }
-
 void UT_CMusAvaContactAvailability::UT_CMusAvaController_ContactArrayLL()
     {
+    CContactIdArray* array = NULL;
+    
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    CPbkContactEngine* pbkContactEngine = CPbkContactEngine::NewL();
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+    CleanupStack::PushL( pbkContactEngine );
+    
+    //No number found
+    TInt ret = NULL;
+    TRAPD( error, ret = iContactAvailability->ContactArrayL( array, 
+        *pbkContactEngine ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT( error == KErrNone );
+    EUNIT_ASSERT( ret == KErrNotFound );
+    EUNIT_ASSERT( array == NULL );
+    //Number length 0
+    iConcreteSettings->SetTelNumberL( _L("") );
+    TRAP( error, ret = iContactAvailability->ContactArrayL( array, 
+        *pbkContactEngine ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT( error == KErrNone );
+    EUNIT_ASSERT( ret == KErrNotFound );
+    EUNIT_ASSERT( array == NULL );
+    //Number found
+    iConcreteSettings->SetTelNumberL( KNumber );
+    TRAP( error, ret = iContactAvailability->ContactArrayL( array, 
+        *pbkContactEngine ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT( ret == KErrNone );
+    EUNIT_ASSERT( array != NULL );
+    EUNIT_ASSERT( array->Count() > 0 );
+
+    CleanupStack::PopAndDestroy( pbkContactEngine );
+
+    delete array;
+    array = NULL;
     }
-
 void UT_CMusAvaContactAvailability::UT_CMusAvaController_ContactItemL()   
     {
+    CPbkContactItem* tmpItem = NULL;
+    CContactIdArray* tmpContactIdArray = NULL;
+    
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    CPbkContactEngine* contactEngine = CPbkContactEngine::NewL();
+    CleanupStack::PushL( contactEngine );
+    
+    CPbkContactItem* contactItem= contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+    
+    // CContactIdArray == 0
+    //tmpContactIdArray = CContactIdArray::NewLC();
+    //EUNIT_ASSERT_EQUALS( KErrNotFound, iContactAvailability->ContactItem( 
+    //*tmpContactIdArray, tmpItem ) ); 
+    //CleanupStack::PopAndDestroy( ); 
+    
+    
+    // CContactIdArray  > 0
+    TPbkContactItemField* fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL( KPlusNumber() );
+    contactEngine->AddNewContactL( *contactItem );
+
+    CContactDatabase* contactDatabase = CContactDatabase::OpenL(); 
+    CleanupStack::PushL( contactDatabase );  
+    CCntFilter* newFilter = CCntFilter::NewL();
+    CleanupStack::PushL( newFilter );
+    newFilter->Reset();
+    newFilter->SetContactFilterTypeALL( ETrue );
+    contactDatabase->FilterDatabaseL( *newFilter );
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+    
+    //CContactIdArray* tmpaArray = newFilter->iIds;
+    //Item found
+    
+    TInt err = iContactAvailability->ContactItem( *( newFilter->iIds ), tmpItem, *contactEngine );
+    // NOTE: Multiple contact id's could be in database and KErrNotSupported is 
+    // returned if more than one. Maybe first run could get result KErrNone and 
+    // then KErrNotSupported
+    EUNIT_ASSERT( ( KErrNotSupported == err ) || ( KErrNone == err ) );  
+
+    //EUNIT_ASSERT( tmpItem != NULL );
+    //delete tmpaArray;
+    //contactDatabase->CommitContactL( *tmpItem );
+    delete tmpItem;
+    //tmpItem = NULL;   
+    //End test
+  
+    CleanupStack::PopAndDestroy( newFilter );
+    
+    contactDatabase->CloseTables();
+    
+    CleanupStack::PopAndDestroy( contactDatabase );
+    CleanupStack::PopAndDestroy( contactItem );
+    CleanupStack::PopAndDestroy( contactEngine );
+    
+
+    
     }
-
 void UT_CMusAvaContactAvailability::UT_CMusAvaController_PhoneResulutionLL()         
     {   
+    CDesCArrayFlat* array = new ( ELeave ) CDesCArrayFlat( 10 );
+    CleanupStack::PushL( array ); 
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    CPbkContactEngine* contactEngine = CPbkContactEngine::NewL();
+    CleanupStack::PushL( contactEngine );
+    CPbkContactItem* contactItem = contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+
+    // dummy initialization, other ways CPbkContactEngine leaks memory
+    CPbkContactItem* pbkItem = NULL;
+    TRAP_IGNORE( pbkItem = contactEngine->ReadContactL( 1 ) );
+    delete pbkItem;
+
+     //No prefix
+    contactItem->RemoveDefaultPhoneNumberField();
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+    iConcreteSettings->SetTelNumberL( KNumber );    
+    TBool ret; 
+    TRAPD( error, ret = iContactAvailability->PhoneResolutionL( *contactItem, array ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT ( !ret );
+    
+    EUNIT_ASSERT( array->MdcaCount() == 0);
+   
+    //Prefix
+    iConcreteSettings->SetTelNumberL( KPlusNumber );
+        
+    TRAP( error, ret = iContactAvailability->PhoneResolutionL( *contactItem, array ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT ( ret );
+    EUNIT_ASSERT( array->MdcaCount() > 0 );
+    //remove object from the array
+    array->Reset();
+    
+    ///Number plan is in national mode
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    TPbkContactItemField* fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL( KNumber() );
+    contactEngine->AddNewContactL( *contactItem );
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+
+    iConcreteSettings->ReleseTelNumberL();
+    TRAP( error, ret = iContactAvailability->PhoneResolutionL( *contactItem, array ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT ( !ret );
+    EUNIT_ASSERT( array->MdcaCount() == 0 );
+
+
+    //Number plan is in internatiolan mode 
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    contactItem->RemoveDefaultPhoneNumberField();
+    fieldMobile = contactItem->FindField( EPbkFieldIdPhoneNumberMobile );
+    fieldMobile->TextStorage()->SetTextL( KPlusNumber() );
+    contactEngine->AddNewContactL( *contactItem );
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+    iConcreteSettings->ReleseTelNumberL();
+    TRAP( error, ret = iContactAvailability->PhoneResolutionL( *contactItem, array ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT ( ret );
+    EUNIT_ASSERT( array->MdcaCount() > 0 );
+  
+    CleanupStack::PopAndDestroy( contactItem );
+    CleanupStack::PopAndDestroy( contactEngine ); 
+    CleanupStack::PopAndDestroy( array );                                               
     }   
+
+    
+
+    
     
 void UT_CMusAvaContactAvailability::UT_CMusAvaController_ContactIdL()
     {
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    CPbkContactEngine* contactEngine = CPbkContactEngine::NewL();
+    CleanupStack::PushL( contactEngine ); 
+    
+    CPbkContactItem* contactItem = NULL;
+    
+    // dummy initialization, other ways CPbkContactEngine leaks memory
+    TRAP_IGNORE( contactItem = contactEngine->ReadContactL( 1 ) );
+    delete contactItem;
+    
+    contactItem = contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+    
+    //Contact field not created
+    EUNIT_ASSERT( !iContactAvailability->ContactId( *contactItem, EPbkFieldIdSIPID ) );
+    
+    //Contact URi not defined
+    CContactTextField* urlFieldNotDefined = 
+    EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdShareView );
+    if ( urlFieldNotDefined )
+        {
+        urlFieldNotDefined->SetTextL( _L("sip:10.21.32.51") );
+        }
+    else
+        {
+        EUNIT_ASSERT( !urlFieldNotDefined );
+        }
+        
+    EUNIT_ASSERT( !iContactAvailability->ContactId( *contactItem, EPbkFieldIdShareView ) );
+     
+    //Contact field not found
+    CContactTextField* urlField = 
+    EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdShareView );
+    if ( urlField )
+        {
+        urlField->SetTextL( _L("test@10.21.32.51") );
+        }
+    else
+        {
+        EUNIT_ASSERT( !urlField );
+        }
+        
+    EUNIT_ASSERT( !iContactAvailability->ContactId( *contactItem, EPbkFieldIdSIPID ) );
+    
+    //Contact field found
+    EUNIT_ASSERT( iContactAvailability->ContactId( *contactItem, EPbkFieldIdShareView ) );
+        
+    CleanupStack::PopAndDestroy( contactItem );
+    CleanupStack::PopAndDestroy( contactEngine );
     }
 
 void UT_CMusAvaContactAvailability::UT_CMusAvaController_ContactIdSearchL()
     {
+    CPbkContactItem* contactItem = NULL;
+    CContactIdArray* contactIdArray = NULL;
+    CContactTextField* phoneNumberMobiled = NULL;
+    CContactTextField* country = NULL;
+    CContactTextField* urlFieldNotDefined = NULL;
+    CPbkContactEngine* contactEngine = NULL;
+    
+    
+     //No contact //////////////////////////////////////////////////////////////
+    //General info
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    contactEngine = CPbkContactEngine::NewL();
+    CleanupStack::PushL( contactEngine ); 
+    
+    //Clear contacts 
+    contactIdArray = contactEngine->MatchPhoneNumberL(
+                                              KNumber(),
+                                             KNumberMatchingDigitsRequired );                                       
+    CleanupStack::PushL( contactIdArray );                                          
+    contactEngine->DeleteContactsL( *contactIdArray );                                        
+
+    CleanupStack::PopAndDestroy( contactIdArray );
+
+    
+    // dummy initialization, other ways CPbkContactEngine leaks memory
+    TRAP_IGNORE( contactItem = contactEngine->ReadContactL( 1 ) );
+    delete contactItem; 
+    
+    AddToMyContact( *contactEngine,
+                    KNumber(), 
+                    EPbkFieldIdPhoneNumberMobile,
+                    _L("nokia"), 
+                    EPbkFieldIdCompanyName );    
+                      
+    contactIdArray = contactEngine->MatchPhoneNumberL(
+                                              KNumber(),
+                                             KNumberMatchingDigitsRequired );   
+    CleanupStack::PushL( contactIdArray );                                          
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+                                             
+    EUNIT_ASSERT( 
+        iContactAvailability->ContactIdSearch( *contactIdArray, *contactEngine ) == 
+        EPbkFieldIdNone );
+    
+    contactEngine->DeleteContactsL( *contactIdArray );  
+    CleanupStack::PopAndDestroy( contactIdArray );
+    
+    // Field Phone number general found /////////////////////////////////////////////////////////
+     
+    //Clear contacts 
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    contactIdArray = contactEngine->MatchPhoneNumberL(
+                                              KNumber(),
+                                             KNumberMatchingDigitsRequired );                                       
+    CleanupStack::PushL( contactIdArray );                                          
+    contactEngine->DeleteContactsL( *contactIdArray );                                        
+
+    CleanupStack::PopAndDestroy( contactIdArray );
+    
+    AddToMyContact( *contactEngine,
+                    KNumber(), 
+                    EPbkFieldIdPhoneNumberMobile,
+                    _L("+35805123456789"), 
+                    EPbkFieldIdPhoneNumberGeneral );    
+        
+    contactIdArray = contactEngine->MatchPhoneNumberL(
+                                              KNumber(),
+                                             KNumberMatchingDigitsRequired );
+        
+    CleanupStack::PushL( contactIdArray );                                          
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+                                             
+    EUNIT_ASSERT( 
+        iContactAvailability->ContactIdSearch( *contactIdArray, *contactEngine ) == 
+        EPbkFieldIdNone );
+    //EUNIT_ASSERT( ret == EPbkFieldIdPhoneNumberGeneral );
+    contactEngine->DeleteContactsL( *contactIdArray );  
+    CleanupStack::PopAndDestroy( contactIdArray );
+ 
+    // Field SIP id found /////////////////////////////////////////////////////////
+     
+    //Clear contacts 
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    contactIdArray = contactEngine->MatchPhoneNumberL(
+                                              KNumber(),
+                                             KNumberMatchingDigitsRequired );                                       
+    CleanupStack::PushL( contactIdArray );                                          
+    contactEngine->DeleteContactsL( *contactIdArray );                                        
+
+    CleanupStack::PopAndDestroy( contactIdArray );
+    
+    AddToMyContact( *contactEngine,
+                    KNumber(), 
+                    EPbkFieldIdPhoneNumberMobile,
+                    _L("test@10.21.32.51"), 
+                    EPbkFieldIdSIPID );    
+        
+    contactIdArray = contactEngine->MatchPhoneNumberL(
+                                              KNumber(),
+                                             KNumberMatchingDigitsRequired );
+        
+    CleanupStack::PushL( contactIdArray );                                          
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+                                             
+    TPbkFieldId ret = iContactAvailability->ContactIdSearch( *contactIdArray, *contactEngine );
+    if ( ret == EPbkFieldIdNone )
+        {
+        User::Leave( KErrNoMemory );
+        }
+    EUNIT_ASSERT( ret == EPbkFieldIdSIPID );
+    contactEngine->DeleteContactsL( *contactIdArray );  
+    CleanupStack::PopAndDestroy( contactIdArray );
+ 
+    // Share View found 
+    //Clear contacts 
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    contactIdArray = contactEngine->MatchPhoneNumberL(
+                                              KNumber(),
+                                             KNumberMatchingDigitsRequired );                                       
+    CleanupStack::PushL( contactIdArray );                                          
+    contactEngine->DeleteContactsL( *contactIdArray );                                        
+
+    CleanupStack::PopAndDestroy( contactIdArray );
+
+    AddToMyContact( *contactEngine,
+                    KNumber(), 
+                    EPbkFieldIdPhoneNumberMobile,
+                    _L("test@10.21.32.51"), 
+                    EPbkFieldIdShareView );    
+        
+    contactIdArray = contactEngine->MatchPhoneNumberL(
+                                              KNumber(),
+                                             KNumberMatchingDigitsRequired );
+        
+    CleanupStack::PushL( contactIdArray );                                          
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+                                             
+    ret = iContactAvailability->ContactIdSearch( *contactIdArray, *contactEngine );
+    if ( ret == EPbkFieldIdNone )
+        {
+        User::Leave( KErrNoMemory );
+        }
+    EUNIT_ASSERT( ret == EPbkFieldIdShareView );
+    
+    contactEngine->DeleteContactsL( *contactIdArray );  
+    CleanupStack::PopAndDestroy( contactIdArray );
+    CleanupStack::PopAndDestroy( contactEngine );
     }
 
 void UT_CMusAvaContactAvailability::UT_CMusAvaController_ResolveAddressesLL()
     {
+    CDesCArrayFlat* array = new ( ELeave ) CDesCArrayFlat( 10 );
+    CleanupStack::PushL( array ); 
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    CPbkContactEngine* contactEngine = CPbkContactEngine::NewL();
+    CleanupStack::PushL( contactEngine ); 
+    
+    // dummy initialization, other ways CPbkContactEngine leaks memory
+    CPbkContactItem* pbkItem = NULL;
+    TRAP_IGNORE( pbkItem = contactEngine->ReadContactL( 1 ) );
+    delete pbkItem;
+    
+    CPbkContactItem* contactItem= contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+    
+    //Test cases
+     //Sip Uri without At sign
+    CContactTextField* urlSipField = 
+    EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdSIPID );
+  
+    
+     if ( urlSipField )
+        {
+        urlSipField->SetTextL( _L("sip:10.21.32.51") );
+        }
+    else
+        {
+        EUNIT_ASSERT( !urlSipField );
+        }
+  
+    TBool ret;
+    TRAPD( error, ret = iContactAvailability->ResolveAddressesL( *contactItem, 
+                                             array,
+                                             EPbkFieldIdSIPID  ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT ( !ret );
+    EUNIT_ASSERT( array->Count() == 0 );
+   
+    
+    //Undefined Uri
+    CContactTextField* urlUndefinedField = 
+    EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdPushToTalk );
+    if ( urlUndefinedField )
+        {
+        urlUndefinedField->SetTextL( _L("test@10.21.32.51") );
+        }
+    else
+        {
+        EUNIT_ASSERT( !urlUndefinedField );
+        }
+    contactEngine->AddNewContactL( *contactItem );
+    TRAP( error, ret = iContactAvailability->ResolveAddressesL( *contactItem, 
+                                             array,
+                                             EPbkFieldIdSIPID ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT ( !ret );
+                                                 
+    EUNIT_ASSERT( array->Count() == 0 );
+    
+      //Sip Uri
+    CContactTextField* urlAtSignField = 
+    EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdSIPID );
+    if ( urlAtSignField )
+        {
+        urlAtSignField->SetTextL( _L("sip:test@10.21.32.51") );
+        }
+    else
+        {
+        EUNIT_ASSERT( !urlAtSignField );
+        }
+    contactEngine->AddNewContactL( *contactItem );
+    TRAP( error, ret = iContactAvailability->ResolveAddressesL( *contactItem, 
+                                             array,
+                                             EPbkFieldIdSIPID ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT ( ret );
+    EUNIT_ASSERT( array->Count() > 0 );
+    
+    //Clear array
+    array->Reset();
+    
+    //ShareView Uri
+    CContactTextField* urlShareViewField = 
+    EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdShareView );
+    if ( urlShareViewField )
+        {
+        urlShareViewField->SetTextL( _L("test@10.21.32.51") );
+        }
+    else
+        {
+        EUNIT_ASSERT( !urlShareViewField );
+        }
+  
+    TRAP( error, ret = iContactAvailability->ResolveAddressesL( *contactItem, 
+                                             array,
+                                             EPbkFieldIdShareView ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT ( ret );
+    EUNIT_ASSERT( array != NULL );
+    EUNIT_ASSERT( array->Count() > 0 );
+    array->Reset();  
+  
+ 
+    //End test
+    CleanupStack::PopAndDestroy( contactItem );
+    CleanupStack::PopAndDestroy( contactEngine );
+    CleanupStack::PopAndDestroy( array );
+    
     }
     
 void UT_CMusAvaContactAvailability::UT_CMusAvaController_ResolveAddressesLOpSpecificL()
     {
+    CDesCArrayFlat* array = new ( ELeave ) CDesCArrayFlat( 10 );
+    CleanupStack::PushL( array ); 
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    CPbkContactEngine* contactEngine = CPbkContactEngine::NewL();
+    CleanupStack::PushL( contactEngine ); 
+    
+    // dummy initialization, other ways CPbkContactEngine leaks memory
+    CPbkContactItem* pbkItem = NULL;
+    TRAP_IGNORE( pbkItem = contactEngine->ReadContactL( 1 ) );
+    delete pbkItem;
+    
+    CPbkContactItem* contactItem= contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+    
+    //Test cases
+    //Sip Uri without test string
+    CContactTextField* urlAtSignField = 
+            EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdSIPID );
+    if ( urlAtSignField )
+        {
+        urlAtSignField->SetTextL( _L("sip:test@10.21.32.51") );
+        }
+    else
+        {
+        EUNIT_ASSERT( !urlAtSignField );
+        }
+    contactEngine->AddNewContactL( *contactItem );
+    TBool ret;
+    TRAPD( error, ret = iContactAvailability->ResolveAddressesL( *contactItem, 
+                                             array,
+                                             EPbkFieldIdSIPID ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT ( !ret );
+    EUNIT_ASSERT_EQUALS( array->Count(), 0 );
+    
+    //Clear array
+    array->Reset();
+    
+    //Sip Uri with test string (*#)
+    urlAtSignField = 
+            EditableContactFieldL( *contactEngine, *contactItem, EPbkFieldIdSIPID );
+    if ( urlAtSignField )
+        {
+        urlAtSignField->SetTextL( _L("sip:test*#@10.21.32.51") );
+        }
+    else
+        {
+        EUNIT_ASSERT( !urlAtSignField );
+        }
+    contactEngine->AddNewContactL( *contactItem );
+    TRAP( error, ret = iContactAvailability->ResolveAddressesL( *contactItem, 
+                                             array,
+                                             EPbkFieldIdSIPID ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT ( ret );
+    EUNIT_ASSERT( array->Count() > 0 );
+    
+    //Clear array
+    array->Reset();    
+
+    //End test
+    CleanupStack::PopAndDestroy( contactItem );
+    CleanupStack::PopAndDestroy( contactEngine );
+    CleanupStack::PopAndDestroy( array );
+    
     }
     
 void UT_CMusAvaContactAvailability::UT_CMusAvaController_ResolvePhoneContactLL()  
     {
+    CDesCArrayFlat* array = new ( ELeave ) CDesCArrayFlat( 10 );
+    CleanupStack::PushL( array );
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    CPbkContactEngine* contactEngine = CPbkContactEngine::NewL();
+    CleanupStack::PushL( contactEngine );
+
+    CPbkContactItem* contactItem= contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+     ///Number plan is in national mode
+    TPbkContactItemField* fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL(_L("0401234567"));
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+
+    iContactAvailability->ResolvePhoneContactL( *contactItem, array );
+    EUNIT_ASSERT( array->MdcaCount() == 0 );
+    //Number plan is in internatiolan mode 
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    contactItem->RemoveDefaultPhoneNumberField();
+    fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL(_L("+358401234567"));
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+    iContactAvailability->ResolvePhoneContactL( *contactItem, array );
+    EUNIT_ASSERT( array->MdcaCount() > 0 );
+    array->Reset();
+   
+    //tel uri
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    contactItem->RemoveDefaultPhoneNumberField();
+    fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL(_L("tel:+358401234567"));
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+    iContactAvailability->ResolvePhoneContactL( *contactItem, array );
+    EUNIT_ASSERT( array->Count() == 0 );
+    
+    //End test
+    CleanupStack::PopAndDestroy( contactItem );
+    CleanupStack::PopAndDestroy( contactEngine );
+    CleanupStack::PopAndDestroy( array );
     }
     
 void UT_CMusAvaContactAvailability::UT_CMusAvaController_ResolvePhoneContactLOpSpecificL()  
     {
+    CDesCArrayFlat* array = new ( ELeave ) CDesCArrayFlat( 10 );
+    CleanupStack::PushL( array );
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    CPbkContactEngine* contactEngine = CPbkContactEngine::NewL();
+    CleanupStack::PushL( contactEngine );
+
+    CPbkContactItem* contactItem= contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+     ///Number plan is in national mode
+    TPbkContactItemField* fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL(_L("0401234567"));
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+
+    iContactAvailability->ResolvePhoneContactL( *contactItem, array );
+    EUNIT_ASSERT( array->MdcaCount() > 0  );
+    //Number plan is in internatiolan mode 
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    contactItem->RemoveDefaultPhoneNumberField();
+    fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL(_L("+358401234567"));
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+    iContactAvailability->ResolvePhoneContactL( *contactItem, array );
+    EUNIT_ASSERT( array->MdcaCount() > 0 );
+    array->Reset();
+   
+    //tel uri
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    contactItem->RemoveDefaultPhoneNumberField();
+    fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL(_L("tel:+358401234567"));
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+    iContactAvailability->ResolvePhoneContactL( *contactItem, array );
+    EUNIT_ASSERT( array->Count() > 0 );
+    
+    //End test
+    CleanupStack::PopAndDestroy( contactItem );
+    CleanupStack::PopAndDestroy( contactEngine );
+    CleanupStack::PopAndDestroy( array );
+    }    
+    
+CContactTextField* UT_CMusAvaContactAvailability::EditableContactFieldL(
+        CPbkContactEngine& aContactEngine, 
+        CPbkContactItem& aContact, 
+        TPbkFieldId aFieldId )
+    {
+   /* CContactDatabase* contactDatabase = NULL;
+    contactDatabase = CContactDatabase::OpenL(); 
+    CleanupStack::PushL( contactDatabase );  
+    CCntFilter* newFilter = CCntFilter::NewLC();
+    newFilter->Reset();
+    newFilter->SetContactFilterTypeALL( ETrue );
+    contactDatabase->FilterDatabaseL( *newFilter );
+    
+    CContactIdArray* contactsId = newFilter->iIds;
+    if ( contactsId->Count() )
+        {
+        aContactEngine.DeleteContactsL( *contactsId );
+        }
+    //contactDatabase->CommitContactL():
+
+    CleanupStack::PopAndDestroy( 2 );
+    CleanupStack::PopAndDestroy( contactDatabase );*/
+    
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    const CPbkFieldsInfo& fieldsInfo = aContactEngine.FieldsInfo();
+    // Try to get the SIP URI storage field for this contact
+    TPbkContactItemField* itemField = aContact.FindField( aFieldId );
+
+    if ( !itemField )
+        {
+        CPbkFieldInfo* fieldInfo = fieldsInfo.Find( aFieldId );
+        // Add field to this contact
+        if ( fieldInfo )
+            {
+            CleanupStack::PushL( fieldInfo );
+            // Contact takes ownership of the field.
+            aContact.AddFieldL( *fieldInfo );
+            CleanupStack::Pop( fieldInfo );
+            itemField = aContact.FindField( aFieldId );
+            if ( itemField )
+                {
+                return itemField->TextStorage();
+                }
+            else
+                {
+                EUNIT_ASSERT( !itemField );
+                }
+            }
+        else
+            {
+            EUNIT_ASSERT( !fieldInfo );
+            }
+        }
+    else
+        {
+        return itemField->TextStorage();
+        }
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+    return NULL; // Should never reach here, just to avoid warnings.
     }
 
+void UT_CMusAvaContactAvailability::AddFields( CPbkContactEngine& aContactEngine,
+                                               CPbkContactItem& contact,
+                                               const TDesC& aText, 
+                                               TPbkFieldId aFieldId )
+    {
+    const CPbkFieldsInfo& fieldsInfo = aContactEngine.FieldsInfo();
+    // Try to get the storage field for this contact
+    TPbkContactItemField* itemField = contact.FindField( aFieldId );
+
+    if ( itemField == NULL )
+        {
+        CPbkFieldInfo* fieldInfo = fieldsInfo.Find( aFieldId );
+        // Add field to this contact
+        if ( fieldInfo )
+            {
+            CleanupStack::PushL( fieldInfo );
+            // Contact takes ownership of the field.
+            contact.AddFieldL( *fieldInfo );
+            CleanupStack::Pop( fieldInfo );
+            itemField = contact.FindField( aFieldId );
+            if ( itemField )
+                {
+                itemField->TextStorage()->SetTextL( aText );
+                }
+            else
+                {
+                EUNIT_ASSERT( !itemField );
+                }
+            }
+        else
+            {
+            EUNIT_ASSERT( !fieldInfo );
+            }
+        }
+    else
+        {
+        // Set some default fields
+        itemField->TextStorage()->SetTextL(aText );
+        }
+    } 
+    
+void UT_CMusAvaContactAvailability::AddToMyContact( CPbkContactEngine& aContactEngine,
+                                                    const TDesC& aText, 
+                                                    TPbkFieldId aFieldId,
+                                                    const TDesC& aText2, 
+                                                    TPbkFieldId aFieldId2 )
+    {
+    // Create a contact with few default fields
+    // All the default fields are empty and won't be displayed
+    // until some information is stored in them
+    /*CPbkContactItem* contact = aContactEngine.CreateEmptyContactL();
+    CleanupStack::PushL( contact );
+
+    // Set some default fields
+    contact->FindField( aFieldId )->TextStorage()->SetTextL(aText );
+     // Set some default fields
+    contact->FindField( aFieldId2 )->TextStorage()->SetTextL(aText2 );
+     
+    // Store the contact to the phonebook
+    aContactEngine.AddNewContactL( *contact );
+    CleanupStack::PopAndDestroy( contact );*/
+    
+    /*CPbkContactItem* contact = aContactEngine.CreateEmptyContactL();
+    CleanupStack::PushL( contact );
+        
+    const CPbkFieldsInfo& fieldsInfo = aContactEngine.FieldsInfo();
+    // Try to get the storage field for this contact
+    TPbkContactItemField* itemField = contact->FindField( aFieldId );
+
+    if ( itemField == NULL )
+        {
+        CPbkFieldInfo* fieldInfo = fieldsInfo.Find( aFieldId );
+        // Add field to this contact
+        if ( fieldInfo )
+            {
+            CleanupStack::PushL( fieldInfo );
+            // Contact takes ownership of the field.
+            contact->AddFieldL( *fieldInfo );
+            CleanupStack::Pop( fieldInfo );
+            itemField = contact->FindField( aFieldId );
+            if ( itemField )
+                {
+                itemField->TextStorage()->SetTextL( aText );
+                }
+            else
+                {
+                EUNIT_ASSERT( !itemField );
+                }
+            }
+        else
+            {
+            EUNIT_ASSERT( !fieldInfo );
+            }
+        }
+    else
+        {
+        // Set some default fields
+        itemField->TextStorage()->SetTextL(aText );
+        }
+    // Store the contact to the phonebook
+    aContactEngine.AddNewContactL( *contact );
+    CleanupStack::PopAndDestroy( contact );*/
+    
+    CPbkContactItem* contact = aContactEngine.CreateEmptyContactL();
+    CleanupStack::PushL( contact );
+        
+    AddFields( aContactEngine, *contact, aText, aFieldId );
+    AddFields( aContactEngine, *contact, aText2, aFieldId2 );
+    // Store the contact to the phonebook
+    aContactEngine.AddNewContactL( *contact );
+    CleanupStack::PopAndDestroy( contact );
+    
+    } 
+
 void UT_CMusAvaContactAvailability::UT_CMusAvaController_IsExistAlreadyL()
     {
+    _LIT( KTestUri1, "sip:1@test.net");
+    _LIT( KTestUri2, "sip:2@test.net");
+    _LIT( KTestUri3, "sip:3@test.net");
+    _LIT( KTestUri5, "sip:5@test.net");
+    
+    TBufC16<16> str1(KTestUri1);
+    HBufC16* ptr1;
+    ptr1 = str1.AllocLC(); 
+    
+    TBufC16<16> str2(KTestUri2);
+    HBufC16* ptr2;
+    ptr2 = str2.AllocLC(); 
+    
+    TBufC16<16> str3(KTestUri3);
+    HBufC16* ptr3;
+    ptr3 = str3.AllocLC(); 
+    
+    CDesCArrayFlat* array = new( ELeave ) CDesCArrayFlat(1);
+    CleanupStack::PushL(array);
+    array->AppendL(*ptr1);
+    array->AppendL(*ptr2);
+    array->AppendL(*ptr3);
+    
+    TBool exist = EFalse;
+
+    // Test 1 :
+    exist = iContactAvailability->IsExistAlready(*array,KTestUri1);
+    EUNIT_ASSERT(exist);
+    // Test 2 :
+    exist = iContactAvailability->IsExistAlready(*array,KTestUri5);
+    EUNIT_ASSERT(!exist);  
+
+    array->Reset();
+    CleanupStack::PopAndDestroy(array);
+    CleanupStack::PopAndDestroy(ptr3);
+    CleanupStack::PopAndDestroy(ptr2);
+    CleanupStack::PopAndDestroy(ptr1);
     }
 
 void UT_CMusAvaContactAvailability::UT_CMusAvaController_UpdateContactNameLL()
     {
+    CPbkContactItem*  contactItem = NULL;
+
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    CPbkContactEngine* contactEngine = CPbkContactEngine::NewL();
+    CleanupStack::PushL( contactEngine );
+
+    // dummy initialization, other ways CPbkContactEngine leaks memory
+    CPbkContactItem* pbkItem = NULL;
+    TRAP_IGNORE( pbkItem = contactEngine->ReadContactL( 1 ) );
+    delete pbkItem;
+    
+    contactItem= contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+
+    //contact firstname  && iBeginWithFirstName = ETrue
+    TPbkContactItemField* fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL( KPlusNumber() );
+    
+    TPbkContactItemField* fieldMobile1 = contactItem->FindField(EPbkFieldIdFirstName);
+    fieldMobile1->TextStorage()->SetTextL( KFirstName() );
+    
+    contactEngine->AddNewContactL( *contactItem );
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+
+    iConcreteSettings->SetTelNumberL( KPlusNumber() );
+        
+    iContactAvailability->iBeginWithFirstName = ETrue;
+    TRAPD( error, 
+        iContactAvailability->UpdateContactNameL( contactItem->ContactItem() ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT( error == KErrNone );
+    EUNIT_ASSERT( iContactAvailability->iContactName->Compare( KFirstName ) == NULL );
+
+    CleanupStack::PopAndDestroy( contactItem );
+    CContactIdArray* array = NULL;
+    iContactAvailability->ContactArrayL( array, *contactEngine );
+    CleanupStack::PushL( array );
+    contactEngine->DeleteContactsL( *array, ETrue );
+    CleanupStack::PopAndDestroy( array );
+    
+    //contact firstname  && iBeginWithFirstName = EFalse
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    contactItem= contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+
+    fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL( KPlusNumber() );
+    
+    fieldMobile1 = contactItem->FindField(EPbkFieldIdFirstName);
+    fieldMobile1->TextStorage()->SetTextL( KFirstName() );
+    
+    contactEngine->AddNewContactL( *contactItem );
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+
+    iConcreteSettings->SetTelNumberL( KPlusNumber() );
+        
+    iContactAvailability->iBeginWithFirstName = EFalse;
+    TRAP( error, 
+        iContactAvailability->UpdateContactNameL( contactItem->ContactItem() ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT( error == KErrNone );
+    EUNIT_ASSERT( iContactAvailability->iContactName->Compare( KFirstName ) == NULL );
+
+    CleanupStack::PopAndDestroy( contactItem );
+    array = NULL;
+    iContactAvailability->ContactArrayL( array, *contactEngine );
+    CleanupStack::PushL( array );
+    contactEngine->DeleteContactsL( *array, ETrue );
+    CleanupStack::PopAndDestroy( array );
+    
+    //contact lastname && iBeginWithFirstName = ETrue
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    contactItem= contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+
+    fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL( KPlusNumber() );
+    
+    fieldMobile1 = contactItem->FindField(EPbkFieldIdLastName);
+    fieldMobile1->TextStorage()->SetTextL( KLastName() );
+    
+    contactEngine->AddNewContactL( *contactItem );
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+
+    iConcreteSettings->SetTelNumberL( KPlusNumber() );
+        
+    iContactAvailability->iBeginWithFirstName = ETrue;
+    TRAP( error, 
+        iContactAvailability->UpdateContactNameL( contactItem->ContactItem() ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT( error == KErrNone );
+    EUNIT_ASSERT( iContactAvailability->iContactName->Compare( KLastName ) == NULL );
+
+    CleanupStack::PopAndDestroy( contactItem );
+    array = NULL;
+    iContactAvailability->ContactArrayL( array, *contactEngine );
+    CleanupStack::PushL( array );
+    contactEngine->DeleteContactsL( *array, ETrue );
+    CleanupStack::PopAndDestroy( array );
+    
+    //contact lastname && iBeginWithFirstName = EFalse
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    contactItem= contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+ 
+    fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL( KPlusNumber() );
+    
+    fieldMobile1 = contactItem->FindField(EPbkFieldIdLastName);
+    fieldMobile1->TextStorage()->SetTextL( KLastName() );
+    
+    contactEngine->AddNewContactL( *contactItem );
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+
+    iConcreteSettings->SetTelNumberL( KPlusNumber() );
+        
+    iContactAvailability->iBeginWithFirstName = EFalse;
+    TRAP( error, 
+         iContactAvailability->UpdateContactNameL( contactItem->ContactItem() ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT( error == KErrNone );
+    EUNIT_ASSERT( iContactAvailability->iContactName->Compare( KLastName ) == NULL );
+
+    CleanupStack::PopAndDestroy( contactItem );
+    array = NULL;
+    iContactAvailability->ContactArrayL( array, *contactEngine );
+    CleanupStack::PushL( array );
+    contactEngine->DeleteContactsL( *array, ETrue );
+    CleanupStack::PopAndDestroy( array );
+    
+    //contact firstname && lastname && iBeginWithFirstName = ETrue
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    contactItem= contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+
+    fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL( KPlusNumber() );
+    
+    fieldMobile1 = contactItem->FindField(EPbkFieldIdFirstName);
+    fieldMobile1->TextStorage()->SetTextL( KFirstName() );
+    
+    TPbkContactItemField* fieldMobile2 = contactItem->FindField(EPbkFieldIdLastName);
+    fieldMobile2->TextStorage()->SetTextL( KLastName() );
+    
+    contactEngine->AddNewContactL( *contactItem );
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+
+    iConcreteSettings->SetTelNumberL( KPlusNumber() );
+        
+    iContactAvailability->iBeginWithFirstName = ETrue;
+    TRAP( error, 
+         iContactAvailability->UpdateContactNameL( contactItem->ContactItem() ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT( error == KErrNone );
+    EUNIT_ASSERT( iContactAvailability->iContactName->Compare( KFirstLastName ) == NULL );
+//
+    CleanupStack::PopAndDestroy( contactItem );
+    array = NULL;
+    iContactAvailability->ContactArrayL( array, *contactEngine );
+    CleanupStack::PushL( array );
+    contactEngine->DeleteContactsL( *array, ETrue );
+    CleanupStack::PopAndDestroy( array );
+    
+    //contact firstname && lastname && iBeginWithFirstName = EFalse
+    EUNIT_DISABLE_ALLOC_DECORATOR;
+    contactItem= contactEngine->CreateEmptyContactL();
+    CleanupStack::PushL( contactItem ); 
+
+    fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+    fieldMobile->TextStorage()->SetTextL( KPlusNumber() );
+    
+    fieldMobile1 = contactItem->FindField(EPbkFieldIdFirstName);
+    fieldMobile1->TextStorage()->SetTextL( KFirstName() );
+    
+    fieldMobile2 = contactItem->FindField(EPbkFieldIdLastName);
+    fieldMobile2->TextStorage()->SetTextL( KLastName() );
+    
+    contactEngine->AddNewContactL( *contactItem );
+    EUNIT_ENABLE_ALLOC_DECORATOR;
+
+    iConcreteSettings->SetTelNumberL( KPlusNumber() );
+        
+    iContactAvailability->iBeginWithFirstName = EFalse;
+    TRAP( error, 
+         iContactAvailability->UpdateContactNameL( contactItem->ContactItem() ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT( error == KErrNone );
+    EUNIT_ASSERT( iContactAvailability->iContactName->Compare( KLastFirstName ) == NULL );
+
+    CleanupStack::PopAndDestroy( contactItem );
+    array = NULL;
+    iContactAvailability->ContactArrayL( array, *contactEngine );
+    CleanupStack::PushL( array );
+    contactEngine->DeleteContactsL( *array, ETrue );
+    CleanupStack::PopAndDestroy( array );
+    
+    // contact name only contain 1 character
+    _LIT(KNameWithOneChar,"M");
+    for (int i = 0; i < 1; ++i )
+        {
+        EUNIT_DISABLE_ALLOC_DECORATOR;
+        contactItem= contactEngine->CreateEmptyContactL();
+        CleanupStack::PushL( contactItem ); 
+
+        fieldMobile = contactItem->FindField(EPbkFieldIdPhoneNumberMobile);
+        fieldMobile->TextStorage()->SetTextL( KPlusNumber() );
+            
+        fieldMobile1 = contactItem->FindField(EPbkFieldIdFirstName);
+        fieldMobile1->TextStorage()->SetTextL( KNameWithOneChar() );
+            
+        contactEngine->AddNewContactL( *contactItem );
+        EUNIT_ENABLE_ALLOC_DECORATOR;
+
+        iConcreteSettings->SetTelNumberL( KPlusNumber() );
+                
+        iContactAvailability->iBeginWithFirstName = i;
+        TRAP( error, 
+               iContactAvailability->UpdateContactNameL( contactItem->ContactItem() ) );
+        if ( error == KErrNoMemory ) User::Leave( error );
+        EUNIT_ASSERT( error == KErrNone );
+        EUNIT_ASSERT( iContactAvailability->iContactName->Compare( KNameWithOneChar ) == 0 );
+
+        CleanupStack::PopAndDestroy( contactItem );
+        array = NULL;
+        iContactAvailability->ContactArrayL( array, *contactEngine );
+        CleanupStack::PushL( array );
+        contactEngine->DeleteContactsL( *array, ETrue );
+        CleanupStack::PopAndDestroy( array );
+        }
+    
+    CleanupStack::PopAndDestroy( contactEngine );
     }
- 
 //  TEST TABLE
 
 EUNIT_BEGIN_TEST_TABLE( 
@@ -376,13 +1515,6 @@
     "DoExecuteL_2",
     "FUNCTIONALITY",
     SetupL, UT_CMusAvaController_DoExecuteL2_L, Teardown) 
-
-EUNIT_TEST(
-    "DoExecuteL_3 - test ",
-    "CMusAvaContactAvailability",
-    "DoExecuteL_3",
-    "FUNCTIONALITY",
-    SetupL, UT_CMusAvaController_DoExecuteL3_L, Teardown)
     
 EUNIT_TEST(
     "Name - test ",
@@ -503,6 +1635,12 @@
     "FUNCTIONALITY",
     SetupL, UT_CMusAvaController_UpdateContactNameLL, Teardown)
 
+EUNIT_TEST(
+    "UpdateContactNameL - test ",
+    "CMusAvaContactAvailability",
+    "UpdateContactNameL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMusAvaController_CallConnectedLL, Teardown)    
 EUNIT_END_TEST_TABLE
 
 //  END OF FILE