phonebookui/Phonebook2/ccapplication/ccapp/tsrc/ut_cmscontactfetcher/src/t_ccacmscontactfetcherwrapperblocks.cpp
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ccapplication/ccapp/tsrc/ut_cmscontactfetcher/src/t_ccacmscontactfetcherwrapperblocks.cpp	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,891 @@
+/*
+* Copyright (c) 2002 - 2007 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:  ?Description
+*
+*/
+
+
+
+// [INCLUDE FILES] - do not remove
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+
+#include <e32property.h>
+
+#include "t_ccacmscontactfetcherwrapper.h"
+#include "ccapputilheaders.h"
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::Delete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+//
+void T_CCCACmsContactFetcherWrapper::Delete() 
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt T_CCCACmsContactFetcherWrapper::RunMethodL( 
+    CStifItemParser& aItem ) 
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        {  
+        // Copy this line for every implemented function.
+        // First string is the function name used in TestScripter script file.
+        // Second is the actual implementation member function. 
+        ENTRY( "CreateAndDelete", 
+                T_CCCACmsContactFetcherWrapper::CreateAndDeleteL ),
+        ENTRY( "CreateWithContent", 
+                T_CCCACmsContactFetcherWrapper::CreateWithContentL ),
+        ENTRY( "CreateWithContactLink", 
+                T_CCCACmsContactFetcherWrapper::CreateWithContactLinkL ),
+        ENTRY( "CreateWithMSISDN", 
+                T_CCCACmsContactFetcherWrapper::CreateWithMSISDNL ),
+        ENTRY( "CreateWithEmail", 
+                T_CCCACmsContactFetcherWrapper::CreateWithEmailL ),
+        ENTRY( "NoDataFields", 
+                T_CCCACmsContactFetcherWrapper::NoDataFieldsL ),
+        ENTRY( "ErrorInContactOpen", 
+                T_CCCACmsContactFetcherWrapper::ErrorInContactOpenL ),
+        ENTRY( "ErrorInContactFetch", 
+                T_CCCACmsContactFetcherWrapper::ErrorInContactFetchL ),
+        ENTRY( "CreateWithManyItems", 
+                T_CCCACmsContactFetcherWrapper::CreateWithManyItemsL ),
+        ENTRY( "HandlePhonebookNotification", 
+                T_CCCACmsContactFetcherWrapper::HandlePhonebookNotificationL ),
+        ENTRY( "TestContactStoreApiL", 
+                T_CCCACmsContactFetcherWrapper::TestContactStoreApiL ),
+        ENTRY( "FindFromOtherStoresL", 
+                T_CCCACmsContactFetcherWrapper::FindFromOtherStoresL ),
+        //ADD NEW ENTRY HERE
+        // [test cases entries] - Do not remove
+        };
+
+    const TInt count = sizeof( KFunctions ) / 
+                        sizeof( TStifFunctionInfo ); 
+
+    return RunInternalL( KFunctions, count, aItem );  
+
+    }
+
+// -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::CreateAndDeleteL
+//  test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt T_CCCACmsContactFetcherWrapper::CreateAndDeleteL( CStifItemParser& /*aItem*/ )
+    {
+    // Print to UI
+    _LIT( KT_CCCACmsContactFetcherWrapper, "T_CCCACmsContactFetcherWrapper" );
+    _LIT( KCreateAndDelete, "CreateAndDelete" );
+    TestModuleIf().Printf( 0, KT_CCCACmsContactFetcherWrapper, KCreateAndDelete );
+    // Print to log file
+    iLog->Log( KCreateAndDelete );
+
+    User::LeaveIfError( SetupL( KTestCreateAndDelete, MCCAParameter::EContactId ) );
+    
+    TInt leaveCode( KErrNone );
+    CCCAppCmsContactFetcherWrapper* leave = NULL;
+    TRAP( leaveCode, leave = CCCAppCmsContactFetcherWrapper::InstanceL( ) ); 
+    T1L( KErrNotFound, leaveCode );
+    TL( leave == NULL );
+          
+    CCCAParameter* param = CCCAParameter::NewL();
+    CleanupStack::PushL( param );
+    CCCAppCmsContactFetcherWrapper* wrapper = 
+                CCCAppCmsContactFetcherWrapper::CreateInstanceL( param ); 
+    wrapper->AddObserverL( *this );
+    
+    CompleteRequestL( &wrapper->iStatus, KErrNone );
+    CompleteRequestL( &wrapper->iStatus, KErrNone );
+    CCCAppCmsContactFetcherWrapper* wrapper2 = 
+                CCCAppCmsContactFetcherWrapper::InstanceL( ); 
+    wrapper2->AddObserverL( *this );
+    wrapper2->RemoveObserver( *this );
+    if( wrapper->IsActive() )
+        {
+        TRequestStatus* status = &wrapper->iStatus;
+        User::RequestComplete( status, KErrNone );
+        }
+    wrapper2->Release();
+    wrapper2 = NULL;
+    
+    CCCAppCmsContactFetcherWrapper* leaveAgain = NULL;
+    TRAP( leaveCode, leaveAgain = 
+            CCCAppCmsContactFetcherWrapper::CreateInstanceL( param ) ); 
+    T1L( KErrAlreadyExists, leaveCode );
+    TL( leaveAgain == NULL );
+  
+    wrapper->RemoveObserver( *this );
+    if( wrapper->IsActive() )
+        {
+        TRequestStatus* status = &wrapper->iStatus;
+        User::RequestComplete( status, KErrNone );
+        }
+    wrapper->Release(); 
+    wrapper = NULL;
+
+    CleanupStack::PopAndDestroy( param );
+
+    return KErrNone;
+
+    }
+    
+ // -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::NoDataFieldsL
+//  test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt T_CCCACmsContactFetcherWrapper::NoDataFieldsL( CStifItemParser& /*aItem*/ )
+    {
+    // Print to UI
+    _LIT( KT_CCCACmsContactFetcherWrapper, "T_CCCACmsContactFetcherWrapper" );
+    _LIT( KNoDataFields, "NoDataFields" );
+    TestModuleIf().Printf( 0, KT_CCCACmsContactFetcherWrapper, KNoDataFields );
+    // Print to log file
+    iLog->Log( KNoDataFields );
+    
+    User::LeaveIfError( SetupL( KTestNoDataFields, MCCAParameter::EContactId ) );
+        
+    CCCAParameter* param = CCCAParameter::NewL();
+    CleanupStack::PushL( param );
+    CCCAppCmsContactFetcherWrapper* wrapper = 
+            CCCAppCmsContactFetcherWrapper::CreateInstanceL( param ); 
+    wrapper->AddObserverL( *this );
+
+    CompleteRequestL( &wrapper->iStatus, KErrNone );
+    CompleteRequestL( &wrapper->iStatus, KErrNone );
+    wrapper->RemoveObserver( *this );
+    if( wrapper->IsActive() )
+        {
+        TRequestStatus* status = &wrapper->iStatus;
+        User::RequestComplete( status, KErrNone );
+        }
+    wrapper->Release(); 
+    wrapper = NULL;
+
+    CleanupStack::PopAndDestroy( param );
+    
+    TL( iObserverCalled );
+    T1L( 1, iObserverCalledCount );
+
+    return KErrNone;
+
+    }
+// -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::CreateWithContentL
+//  test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt T_CCCACmsContactFetcherWrapper::CreateWithContentL( CStifItemParser& /*aItem*/ )
+    {
+    // Print to UI
+    _LIT( KT_CCCACmsContactFetcherWrapper, "T_CCCACmsContactFetcherWrapper" );
+    _LIT( KCreateWithContent, "CreateWithContent" );
+    TestModuleIf().Printf( 0, KT_CCCACmsContactFetcherWrapper, KCreateWithContent );
+    // Print to log file
+    iLog->Log( KCreateWithContent );
+
+    
+    User::LeaveIfError( SetupL( 
+            KTestOneContactFieldItem, MCCAParameter::EContactId ) );
+     
+    CCCAParameter* param = CCCAParameter::NewL();
+    CleanupStack::PushL( param );
+    CCCAppCmsContactFetcherWrapper* wrapper = 
+            CCCAppCmsContactFetcherWrapper::CreateInstanceL( param ); 
+    
+    wrapper->AddObserverL( *this );
+
+    CompleteRequestL( &wrapper->iStatus, KErrNone );
+
+
+    TInt count = 1; 
+    for ( TInt i(0); i < count; i++ )
+        {
+        CompleteRequestL( &wrapper->iStatus, KErrNone );
+        }
+
+    wrapper->RemoveObserver( *this );
+    if( wrapper->IsActive() )
+        {
+        TRequestStatus* status = &wrapper->iStatus;
+        User::RequestComplete( status, KErrNone );
+        }
+    wrapper->Release(); 
+    wrapper = NULL;
+
+    CleanupStack::PopAndDestroy( param );
+    
+    TL( iObserverCalled );
+    T1L( 1, iObserverCalledCount );
+
+    return KErrNone;
+
+    }
+// -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::CreateWithManyItemsL
+//  test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt T_CCCACmsContactFetcherWrapper::CreateWithManyItemsL( 
+        CStifItemParser& /*aItem*/ )
+    {
+    // Print to UI
+    _LIT( KT_CCCACmsContactFetcherWrapper, "T_CCCACmsContactFetcherWrapper" );
+    _LIT( KCreateWithManyItems, "CreateWithManyItems" );
+    TestModuleIf().Printf( 0, KT_CCCACmsContactFetcherWrapper, KCreateWithManyItems );
+    // Print to log file
+    iLog->Log( KCreateWithManyItems );
+
+    
+    User::LeaveIfError( SetupL( 
+            KTestManyContactFieldItems, MCCAParameter::EContactId ) );
+     
+    CCCAParameter* param = CCCAParameter::NewL();
+    CleanupStack::PushL( param );
+    CCCAppCmsContactFetcherWrapper* wrapper = 
+            CCCAppCmsContactFetcherWrapper::CreateInstanceL( param ); 
+    
+    wrapper->AddObserverL( *this );
+
+    CompleteRequestL( &wrapper->iStatus, KErrNone );
+
+    TInt count = 3;
+    for ( TInt i(0); i < count; i++ )
+        {
+        CompleteRequestL( &wrapper->iStatus, KErrNone );
+        }
+
+    wrapper->RemoveObserver( *this );
+    if( wrapper->IsActive() )
+        {
+        TRequestStatus* status = &wrapper->iStatus;
+        User::RequestComplete( status, KErrNone );
+        }
+    wrapper->Release(); 
+    wrapper = NULL;
+
+    CleanupStack::PopAndDestroy( param );
+    
+    TL( iObserverCalled );
+    T1L( 3, iObserverCalledCount );
+
+    return KErrNone;
+
+    }
+// -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::CreateWithContactLinkL
+//  test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt T_CCCACmsContactFetcherWrapper::CreateWithContactLinkL( 
+        CStifItemParser& /*aItem*/ )
+    {
+    // Print to UI
+    _LIT( KT_CCCACmsContactFetcherWrapper, "T_CCCACmsContactFetcherWrapper" );
+    _LIT( KCreateWithContactLink, "CreateWithContactLink" );
+    TestModuleIf().Printf( 0, KT_CCCACmsContactFetcherWrapper, KCreateWithContactLink );
+    // Print to log file
+    iLog->Log( KCreateWithContactLink );
+ 
+    User::LeaveIfError( SetupL( KTestContactLink, MCCAParameter::EContactLink ) );
+     
+    CCCAParameter* param = CCCAParameter::NewL();
+    CleanupStack::PushL( param );
+    CCCAppCmsContactFetcherWrapper* wrapper = 
+            CCCAppCmsContactFetcherWrapper::CreateInstanceL( param ); 
+    
+    wrapper->AddObserverL( *this );
+
+    CompleteRequestL( &wrapper->iStatus, KErrNone );
+    
+
+    TInt count = 1; 
+    for ( TInt i(0); i < count; i++ )
+        {
+        CompleteRequestL( &wrapper->iStatus, KErrNone );
+        }
+
+    wrapper->RemoveObserver( *this );
+    if( wrapper->IsActive() )
+        {
+        TRequestStatus* status = &wrapper->iStatus;
+        User::RequestComplete( status, KErrNone );
+        }
+    wrapper->Release(); 
+    wrapper = NULL;
+
+    CleanupStack::PopAndDestroy( param );
+    
+    TL( iObserverCalled );
+    T1L( 1, iObserverCalledCount );    
+
+    return KErrNone;
+
+    }
+    
+ // -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::CreateWithMSISDNL
+//  test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt T_CCCACmsContactFetcherWrapper::CreateWithMSISDNL( CStifItemParser& /*aItem*/ )
+    {
+    // Print to UI
+    _LIT( KT_CCCACmsContactFetcherWrapper, "T_CCCACmsContactFetcherWrapper" );
+    _LIT( KCreateWithMSISDN, "CreateWithMSISDN" );
+    TestModuleIf().Printf( 0, KT_CCCACmsContactFetcherWrapper, KCreateWithMSISDN );
+    // Print to log file
+    iLog->Log( KCreateWithMSISDN );
+   
+    User::LeaveIfError( SetupL( KTestMSISDN, MCCAParameter::EContactMSISDN ) );
+     
+    CCCAParameter* param = CCCAParameter::NewL();
+    CleanupStack::PushL( param );
+    CCCAppCmsContactFetcherWrapper* wrapper = 
+            CCCAppCmsContactFetcherWrapper::CreateInstanceL( param ); 
+    
+    wrapper->AddObserverL( *this );
+    
+    const CCmsContactFieldInfo* info = wrapper->ContactInfo();
+    TL( NULL == info );
+    
+    CompleteRequestL( &wrapper->iStatus, KErrNone );
+
+    TInt count = 2; 
+    for ( TInt i(0); i < count; i++ )
+        {
+        CompleteRequestL( &wrapper->iStatus, KErrNone );
+        }
+    
+    info = wrapper->ContactInfo();    
+    TL( NULL != info );
+    
+    RPointerArray<CCmsContactField>& array = wrapper->ContactFieldDataArray();
+    T1L( 1, array.Count() ); 
+        
+    wrapper->RemoveObserver( *this );
+    if( wrapper->IsActive() )
+        {
+        TRequestStatus* status = &wrapper->iStatus;
+        User::RequestComplete( status, KErrNone );
+        }
+    wrapper->Release(); 
+    wrapper = NULL;
+
+    CleanupStack::PopAndDestroy( param );
+    
+    TL( iObserverCalled );
+    T1L( 2, iObserverCalledCount ); 
+
+    return KErrNone;
+
+    }
+ // -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::CreateWithEmailL
+//  test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt T_CCCACmsContactFetcherWrapper::CreateWithEmailL( 
+        CStifItemParser& /*aItem*/ )
+    {
+    // Print to UI
+    _LIT( KT_CCCACmsContactFetcherWrapper, "T_CCCACmsContactFetcherWrapper" );
+    _LIT( KCreateWithEmail, "CreateWithEmail" );
+    TestModuleIf().Printf( 0, KT_CCCACmsContactFetcherWrapper, KCreateWithEmail );
+    // Print to log file
+    iLog->Log( KCreateWithEmail );
+
+    User::LeaveIfError( SetupL( KTestEmail, MCCAParameter::EContactEmail ) );
+     
+    CCCAParameter* param = CCCAParameter::NewL();
+    CleanupStack::PushL( param );
+    
+    TInt error ( KErrNone );
+    CCCAppCmsContactFetcherWrapper* wrapper = NULL;
+    TRAP( error, wrapper = 
+            CCCAppCmsContactFetcherWrapper::CreateInstanceL( param ) );    
+    wrapper->AddObserverL( *this );
+    wrapper->RemoveObserver( *this );
+    if( wrapper->IsActive() )
+        {
+        TRequestStatus* status = &wrapper->iStatus;
+        User::RequestComplete( status, KErrNone );
+        }
+    wrapper->Release(); 
+    wrapper = NULL;
+       
+    CleanupStack::PopAndDestroy( param );
+    
+    TL( iErrorObserverCalled );
+    TL( EFalse == iObserverCalled );
+
+    return KErrNone;
+
+    }
+
+// --------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::ContactFieldDataObserverNotifyL
+// --------------------------------------------------------------------------
+//
+void T_CCCACmsContactFetcherWrapper::ContactFieldDataObserverNotifyL( 
+        MCCAppContactFieldDataObserver::TParameter& aParameter )
+    {
+    iObserverCalled = ETrue;
+    iObserverCalledCount++;
+    iLog->Log( _L("..contact info notified") );
+    
+    if ( aParameter.iType == 
+            MCCAppContactFieldDataObserver::TParameter::EContactsChanged )
+        {
+        iObserverCalledWithContactsChanged = ETrue;
+        }
+    else
+        {
+        switch ( iOngoingTestCase )
+            {
+            case KTestOneContactFieldItem:
+            case KTestContactLink:
+                {
+                if ( 1 == iObserverCalledCount )
+                    {
+                    T1L( MCCAppContactFieldDataObserver::TParameter::EContactInfoAvailable, 
+                            aParameter.iType );
+                    }
+                if ( 2 == iObserverCalledCount )
+                    {
+                    T1L( MCCAppContactFieldDataObserver::TParameter::EContactDeleted, 
+                            aParameter.iType );
+                    }
+                break;
+                }
+            default:
+                {
+                break;
+                }
+            } 
+        }
+    
+    if ( aParameter.iType == 
+            MCCAppContactFieldDataObserver::TParameter::EContactsChanged )
+        {
+        iObserverCalledWithContactsChanged = ETrue;
+        }
+    
+    if ( iSchedulerStarted )
+        {
+        iSchedulerStarted = EFalse;
+        CActiveScheduler::Stop();
+        }
+    }
+    
+// --------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::ContactFieldDataObserverHandleErrorL
+// --------------------------------------------------------------------------
+//
+void T_CCCACmsContactFetcherWrapper::ContactFieldDataObserverHandleErrorL( 
+        TInt /*aState*/, TInt /*aError*/ )
+    {
+    iErrorObserverCalled = ETrue;
+
+    iLog->Log( _L("hanle error notified") );
+    
+    switch ( iOngoingTestCase )
+        {
+        case KTestEmail:
+            {
+            break;
+            }
+        default:
+            {
+            break;
+            }
+
+        }
+    if ( iSchedulerStarted )
+        {
+        iSchedulerStarted = EFalse;
+        CActiveScheduler::Stop();
+        }
+    }
+           
+// -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::ErrorInContactOpenL
+//  test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt T_CCCACmsContactFetcherWrapper::ErrorInContactOpenL( 
+        CStifItemParser& /*aItem*/ )
+    {
+    // Print to UI
+    _LIT( KT_CCCACmsContactFetcherWrapper, "T_CCCACmsContactFetcherWrapper" );
+    _LIT( KErrorInContactOpen, "ErrorInContactOpen" );
+    TestModuleIf().Printf( 
+            0, KT_CCCACmsContactFetcherWrapper, KErrorInContactOpen );
+    // Print to log file
+    iLog->Log( KErrorInContactOpen );
+    
+    User::LeaveIfError( SetupL( 
+            KTestCompleteOpenWithError, MCCAParameter::EContactId ) );
+     
+    CCCAParameter* param = CCCAParameter::NewL();
+    CleanupStack::PushL( param );
+    CCCAppCmsContactFetcherWrapper* wrapper = 
+            CCCAppCmsContactFetcherWrapper::CreateInstanceL( param ); 
+    
+    wrapper->AddObserverL( *this );
+    CompleteRequestL( &wrapper->iStatus, KErrNone );
+    CompleteRequestL( &wrapper->iStatus, KErrCancel );
+    wrapper->RemoveObserver( *this );
+    if( wrapper->IsActive() )
+        {
+        TRequestStatus* status = &wrapper->iStatus;
+        User::RequestComplete( status, KErrNone );
+        }
+    wrapper->Release(); 
+    wrapper = NULL;
+
+    CleanupStack::PopAndDestroy( param );
+    
+    TL( iErrorObserverCalled )
+
+    return KErrNone;
+
+    }
+    
+// -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::ErrorInContactFetchL
+//  test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt T_CCCACmsContactFetcherWrapper::ErrorInContactFetchL( 
+        CStifItemParser& /*aItem*/ )
+    {
+    // Print to UI
+    _LIT( KT_CCCACmsContactFetcherWrapper, "T_CCCACmsContactFetcherWrapper" );
+    _LIT( KErrorInContactFetch, "ErrorInContactFetch" );
+    TestModuleIf().Printf( 0, KT_CCCACmsContactFetcherWrapper, KErrorInContactFetch );
+    // Print to log file
+    iLog->Log( KErrorInContactFetch );
+
+    
+    User::LeaveIfError( SetupL( 
+            KTestCompleteFetchWithError, MCCAParameter::EContactId ) );
+     
+    CCCAParameter* param = CCCAParameter::NewL();
+    CleanupStack::PushL( param );
+    CCCAppCmsContactFetcherWrapper* wrapper = 
+            CCCAppCmsContactFetcherWrapper::CreateInstanceL( param ); 
+    
+    wrapper->AddObserverL( *this );
+    TRequestStatus* status = &wrapper->iStatus;
+    User::RequestComplete( status, KErrNone );
+            iSchedulerStarted = ETrue;
+    CStopSchedulerAfterDelay* schedulerStopper = 
+            new (ELeave) CStopSchedulerAfterDelay();
+    schedulerStopper->ConstructL();
+    CleanupStack::PushL( schedulerStopper );
+    schedulerStopper->After( 1000000 );// 1 sec
+    CActiveScheduler::Start();
+    CleanupStack::PopAndDestroy( schedulerStopper );
+
+    TInt count = 1; 
+    for ( TInt i(0); i < count; i++ )
+        {
+        CompleteRequestL( &wrapper->iStatus, KErrCancel );
+        }
+
+    wrapper->RemoveObserver( *this );
+    if( wrapper->IsActive() )
+        {
+        TRequestStatus* status = &wrapper->iStatus;
+        User::RequestComplete( status, KErrNone );
+        }
+    wrapper->Release(); 
+    wrapper = NULL;
+
+    CleanupStack::PopAndDestroy( param );
+    
+    TL( iErrorObserverCalled );
+
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::HandlePhonebookNotificationL
+//  test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt T_CCCACmsContactFetcherWrapper::HandlePhonebookNotificationL( 
+        CStifItemParser& aItem )
+    {
+    _LIT( KT_CCCACmsContactFetcherWrapper, "T_CCCACmsContactFetcherWrapper" );
+    _LIT( KHandlePhonebookNotification, "HandlePhonebookNotification" );
+    TestModuleIf().Printf( 
+            0, KT_CCCACmsContactFetcherWrapper, KHandlePhonebookNotification );
+    // Print to log file
+    iLog->Log( KHandlePhonebookNotification );
+    
+    User::LeaveIfError( SetupL( 
+            KTestOneContactFieldItem, MCCAParameter::EContactId ) );
+        
+    CCCAParameter* param = CCCAParameter::NewL();
+    CleanupStack::PushL( param );
+    CCCAppCmsContactFetcherWrapper* wrapper = 
+            CCCAppCmsContactFetcherWrapper::CreateInstanceL( param );
+    
+    wrapper->AddObserverL( *this );
+
+    CompleteRequestL( &wrapper->iStatus, KErrNone );
+    CompleteRequestL( &wrapper->iStatus, KErrNone );
+    
+    TInt modifiedNotDeleted;
+    if ( aItem.GetNextInt( modifiedNotDeleted ) != KErrNone )
+            return KErrNotFound;
+    
+    if (modifiedNotDeleted)
+        {
+        TRequestStatus* status = &wrapper->iStatus;
+        User::RequestComplete( status, KErrNone );
+        wrapper->HandlePhonebookNotificationL(ECmsContactModified);
+        CompleteRequestL( &wrapper->iStatus, KErrNone );
+        CompleteRequestL( &wrapper->iStatus, KErrNone );
+        // Observer is called 2 times when fetching contacts, 
+        // and contacts are fetched again after they are changed so 1 + 2*2 = 5
+        T1L( iObserverCalledCount, 4); 
+        TL( iObserverCalledWithContactsChanged);
+        }
+    else
+        {
+        wrapper->HandlePhonebookNotificationL(ECmsContactDeleted);
+        T1L( iObserverCalledCount, 2);
+        }
+        
+    wrapper->RemoveObserver( *this );
+    if( wrapper->IsActive() )
+        {
+        TRequestStatus* status = &wrapper->iStatus;
+        User::RequestComplete( status, KErrNone );
+        }
+    wrapper->Release(); 
+    wrapper = NULL;
+
+    CleanupStack::PopAndDestroy( param );
+    
+    
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::TestContactStoreApiL
+//  test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt T_CCCACmsContactFetcherWrapper::TestContactStoreApiL( 
+        CStifItemParser& /*aItem */)
+    {
+    // Print to UI
+    _LIT( KT_CCCACmsContactFetcherWrapper, "T_CCCACmsContactFetcherWrapper" );
+    _LIT( KDescription, "TestContactStoreApiL" );
+    TestModuleIf().Printf( 0, KT_CCCACmsContactFetcherWrapper, KDescription );
+    // Print to log file
+    iLog->Log( KDescription );
+    
+    User::LeaveIfError( SetupL( KTestNoDataFields, MCCAParameter::EContactId ) );
+    // setup
+    CCCAParameter* param = CCCAParameter::NewL();
+    CleanupStack::PushL( param );
+    CCCAppCmsContactFetcherWrapper* wrapper = 
+            CCCAppCmsContactFetcherWrapper::CreateInstanceL( param ); 
+    wrapper->AddObserverL( *this );
+
+    CompleteRequestL( &wrapper->iStatus, KErrNone );
+
+    // test itself
+    wrapper->iCmsContactDataFetcher.iContactStore_called = EFalse;
+    TCmsContactStore cntStore = wrapper->ContactStore();
+    TAL( wrapper->iCmsContactDataFetcher.iContactStore_called );
+
+    // cleanup
+    wrapper->RemoveObserver( *this );
+    if( wrapper->IsActive() )
+        {
+        TRequestStatus* status = &wrapper->iStatus;
+        User::RequestComplete( status, KErrNone );
+        }
+    wrapper->Release(); 
+    wrapper = NULL;
+
+    CleanupStack::PopAndDestroy( param );
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::FindFromOtherStoresL
+//  test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt T_CCCACmsContactFetcherWrapper::FindFromOtherStoresL( 
+        CStifItemParser& /*aItem*/ )
+    {
+    // Print to UI
+    _LIT( KT_CCCACmsContactFetcherWrapper, "T_CCCACmsContactFetcherWrapper" );
+    _LIT( KFindFromOtherStoresL, "FindFromOtherStoresL" );
+    TestModuleIf().Printf( 
+            0, KT_CCCACmsContactFetcherWrapper, KFindFromOtherStoresL );
+    // Print to log file
+    iLog->Log( KFindFromOtherStoresL );
+ 
+    User::LeaveIfError( SetupL( KTestContactLink, MCCAParameter::EContactLink ) );
+     
+    CCCAParameter* param = CCCAParameter::NewL();
+    CleanupStack::PushL( param );
+    CCCAppCmsContactFetcherWrapper* wrapper = 
+        CCCAppCmsContactFetcherWrapper::CreateInstanceL( 
+             param, 
+             CCCAppCmsContactFetcherWrapper::EFindContactFromOtherStores ); 
+    wrapper->AddObserverL( *this );
+
+    // Since there is not needed external notifiers for the
+    // finding from other stores functionality, the testing
+    // needs external way of stopping the CActiveScheduler.
+    // Simple timer, CStopSchedulerAfterDelay, used here.
+    TRequestStatus* status = &wrapper->iStatus;
+    User::RequestComplete( status, KErrNone );
+    iSchedulerStarted = ETrue;
+    CStopSchedulerAfterDelay* schedulerStopper = 
+        new (ELeave) CStopSchedulerAfterDelay();
+    schedulerStopper->ConstructL();
+    schedulerStopper->After( 1000000 );// 1 sec
+    CActiveScheduler::Start();
+    iSchedulerStarted = EFalse;
+    delete schedulerStopper;
+    schedulerStopper = NULL;
+    CompleteRequestL( &wrapper->iStatus, KErrNone );
+    iSchedulerStarted = EFalse;
+    CompleteRequestL( &wrapper->iStatus, KErrNone );
+    wrapper->RemoveObserver( *this );
+    if( wrapper->IsActive() )
+        {
+        TRequestStatus* status = &wrapper->iStatus;
+        User::RequestComplete( status, KErrNone );
+        }
+    wrapper->Release(); 
+    wrapper = NULL;
+
+    CleanupStack::PopAndDestroy( param );
+    
+    TL( iObserverCalled );
+    T1L( 1, iObserverCalledCount );    
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::SetupL
+//
+// -----------------------------------------------------------------------------
+//
+TInt T_CCCACmsContactFetcherWrapper::SetupL( TInt aTestCase, TInt aParameterType )
+    {
+    iErrorObserverCalled = EFalse;
+    iObserverCalled = EFalse;
+    iObserverCalledCount = 0;
+    
+    iOngoingTestCase = aTestCase;
+    
+    // Ongoing test case
+    TInt err = RProperty::Define( 
+            KTestPropertyCat, ETestCaseStateProperty, RProperty::EInt );
+    if ( err != KErrAlreadyExists && err != KErrNone )
+        {
+        return ( err );
+        }
+    err = RProperty::Set( KTestPropertyCat, ETestCaseStateProperty, aTestCase );
+    
+    
+    // Parameter type used in CCAParameter creation
+    err = RProperty::Define( 
+            KTestPropertyCat, ETestParameterTypeProperty, RProperty::EInt );
+    if ( err != KErrAlreadyExists && err != KErrNone )
+        {
+        return ( err );
+        }
+    err = RProperty::Set( 
+            KTestPropertyCat, ETestParameterTypeProperty, aParameterType );
+    
+    CActiveScheduler* scheduler = new ( ELeave ) CActiveScheduler;
+    if( !CActiveScheduler::Current() )
+        {
+        CActiveScheduler::Install( scheduler );
+        }
+    else
+        {
+        delete scheduler;
+        }
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// T_CCCACmsContactFetcherWrapper::CompleteRequestL
+//
+// -----------------------------------------------------------------------------
+//
+void T_CCCACmsContactFetcherWrapper::CompleteRequestL( 
+        TRequestStatus* aStatus, TInt aReason )
+    {
+    TRequestStatus* status = aStatus;
+    User::RequestComplete( status, aReason );
+
+    iSchedulerStarted = ETrue;
+    
+    CStopSchedulerAfterDelay* schedulerStopper = 
+        new (ELeave) CStopSchedulerAfterDelay();
+    schedulerStopper->ConstructL();
+    CleanupStack::PushL( schedulerStopper );
+    schedulerStopper->After( 1000000 );// 1 sec
+    CActiveScheduler::Start();
+    CleanupStack::PopAndDestroy( schedulerStopper );
+
+    }
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+// None
+
+//  [End of File] - Do not remove