usbengines/usbwatcher/tsrc/UsbWatcherTest/src/UsbWatcherTestBlocks.cpp
branchRCL_3
changeset 24 e02eb84a14d2
parent 22 5b2a402e96ac
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbengines/usbwatcher/tsrc/UsbWatcherTest/src/UsbWatcherTestBlocks.cpp	Wed Sep 01 12:20:49 2010 +0100
@@ -0,0 +1,1126 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+// [INCLUDE FILES] - do not remove
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include "UsbWatcherTest.h"
+#include "testdebug.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES  
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CUsbWatcherTest::TestConstructL
+// Construct here all test resources for test methods. 
+// Called from ConstructL. 
+// -----------------------------------------------------------------------------
+
+void CUsbWatcherTest::TestConstructL()
+    {
+    TRACE_FUNC_ENTRY
+    
+    iStubber = CStubber::NewL();
+
+    iWatcher = new ( ELeave ) RUsbWatcher();
+    iCenRep = CRepository::NewL( KCRUidUsbWatcher );
+    STIF_LOG( "Usb man initialization" );
+    iUsbMan = new ( ELeave ) RUsb();
+    User::LeaveIfError( iUsbMan -> Connect() );  
+    User::LeaveIfError( BackupPersonalitySetting() );
+    
+    TRACE_FUNC_EXIT
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbWatcherTest::TestDelete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+
+void CUsbWatcherTest::TestDelete() 
+    {
+    TRACE_FUNC_ENTRY
+
+    if ( RestorePersonalitySetting() != KErrNone )
+        STIF_LOG( "Warning: personality restore failed" );
+    
+    delete iWatcher;
+    iWatcher = NULL;
+    
+    delete iCenRep;
+    iCenRep = NULL;
+    
+    iUsbMan -> Close();
+    delete iUsbMan;
+    iUsbMan = NULL;
+    
+    delete iStubber;
+    iStubber = NULL;
+    
+    TRACE_FUNC_EXIT
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbWatcherTest::TestBlocksInfoL
+// Add new test block parameter entries below
+// -----------------------------------------------------------------------------
+
+void CUsbWatcherTest::TestBlocksInfoL()
+    {
+    
+    TESTENTRY( "ExampleTestL", CUsbWatcherTest::ExampleTestL )
+            {
+            TESTPARAM( eGetString, eTestOption1 )
+            TESTPARAM( eGetString, eTestOption2 )
+            TESTPARAM( eGetInt, eTestIntOption1 )
+            TESTPARAM( eGetChar, eTestCharOption1 )
+            }
+    
+    TESTENTRY( "InitializationTest", CUsbWatcherTest::InitializationTestL )
+            {
+            TESTPARAM( eGetString, eTestOption1 )
+            }
+
+    TESTENTRY( "PersonalityManagementTest", CUsbWatcherTest::PersonalityManagementTestL )
+            {
+            TESTPARAM( eGetString, eTestOption1 )
+            TESTPARAM( eGetString, eTestOption2 )
+            }
+    
+    TESTENTRY( "PersonalitySwitchTest", CUsbWatcherTest::PersonalitySwitchTestL )
+            {
+            TESTPARAM( eGetString, eTestOption1 )
+            }
+
+    TESTENTRY( "BranchTest", CUsbWatcherTest::BranchTestL )
+            {
+            TESTPARAM( eGetString, eTestOption1 )
+            }
+    }
+
+// Add test block methods implementation here
+// -----------------------------------------------------------------------------
+// CUsbWatcherTest::ExampleTestL
+// -----------------------------------------------------------------------------
+
+void CUsbWatcherTest::ExampleTestL( TUsbWatcherTestBlockParams& aParams, TUsbWatcherTestResult& aTestResult )
+    {
+    TRACE_FUNC_ENTRY
+    
+    //iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) );
+
+    if ( !aParams.iTestOption1.Compare( _L( "API" ) ) )
+        {
+		TRACE_INFO( "Api test option: %S", &aParams.iTestOption1 )
+		TRACE_INFO( "Api test sub-option: %S", &aParams.iTestOption2 )
+		TRACE_INFO( "Api test int option: %d", aParams.iTestIntOption1 )
+		TRACE_INFO( "Api test char option: %c", TText( aParams.iTestCharOption1 ) )
+        }
+    else if ( !aParams.iTestOption1.Compare( _L( "MODULE" ) ) )
+        {
+		TRACE_INFO( "Module test option: %S", &aParams.iTestOption1 )
+		TRACE_INFO( "Module test sub-option: %S", &aParams.iTestOption2 )
+		TRACE_INFO( "Module test int option: %d", aParams.iTestIntOption1 )
+		TRACE_INFO( "Module test char option: %c", TText( aParams.iTestCharOption1 ) )
+        }
+    else if ( !aParams.iTestOption1.Compare( _L( "BRANCH" ) ) )
+        {
+		TRACE_INFO( "Branch test option: %S", &aParams.iTestOption1 )
+		TRACE_INFO( "Branch test sub-option: %S", &aParams.iTestOption2 )
+		TRACE_INFO( "Branch test int option: %d", aParams.iTestIntOption1 )
+		TRACE_INFO( "Branch test char option: %c", TText( aParams.iTestCharOption1 ) )
+        }
+    else
+        {
+        TRACE( "Invalid test parameter" )
+        TRACE_FUNC_EXIT
+        User::Leave( KErrNotFound );
+        }
+    
+    aTestResult = ETestCasePassed;
+    TRACE_FUNC_EXIT
+    }
+
+
+// Add other member functions implementation here
+
+// -----------------------------------------------------------------------------
+// CUSBWatcherApiTest::InitializationTest
+// -----------------------------------------------------------------------------
+
+void CUsbWatcherTest::InitializationTestL( TUsbWatcherTestBlockParams& aParams, 
+                                            TUsbWatcherTestResult& aTestResult )
+    {
+    TInt res;   
+    TPtrC testOptionName( aParams.iTestOption1 );
+        
+    if ( !testOptionName.Compare( _L( "VERSION" ) ) )
+        {
+        TRACE( "Test option: VERSION" );
+        TVersion returnedVersion;
+        TVersion expectedVersion( KUsbWatcherSrvMajorVersionNumber,
+                                KUsbWatcherSrvMinorVersionNumber,
+                                KUsbWatcherSrvBuildVersionNumber );
+        TRACE( "  >Version" );
+        returnedVersion = iWatcher -> Version();
+        TRACE( "  <Version" );
+        if( expectedVersion.iMajor != returnedVersion.iMajor )
+            User::Leave(KErrNotFound);
+        if( expectedVersion.iMinor != returnedVersion.iMinor )
+            User::Leave(KErrNotFound);
+        if( expectedVersion.iBuild != returnedVersion.iBuild )
+            User::Leave(KErrNotFound);
+        }
+    else if ( !testOptionName.Compare( _L( "SINGLE_CONN" ) ) )
+        {
+        TRACE( "Test option: SINGLE_CONN" );
+        TRACE( ">Connect" );
+        res = iWatcher -> Connect();
+        TRACE( "  <Connect" );
+        TRACE_INFO( "USB watcher connection value: %d, expected: %d", res, KErrNone );
+        User::LeaveIfError( res );
+        }
+    else
+        {
+        TRACE( "Test option: not supported" );
+        User::Leave( KErrNotFound );
+        }
+        
+    aTestResult = ETestCasePassed;
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBWatcherApiTest::PersonalityManagementTest
+// -----------------------------------------------------------------------------
+
+void CUsbWatcherTest::PersonalityManagementTestL( TUsbWatcherTestBlockParams& aParams, 
+                                                    TUsbWatcherTestResult& aTestResult )
+    {
+    TInt res;
+    TInt newPersonalityId;
+    TPtrC testOptionName( aParams.iTestOption2 );
+    TPtrC usbPersonalityName( aParams.iTestOption1 );
+    TInt currentPersonalityId;
+    
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetPersonalityProperty, 0, 0, _L8( "stub" ) ) );
+    
+    res = iUsbMan -> GetCurrentPersonalityId( currentPersonalityId );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( "GetCurrentPersonalityId failed with value: %d", res );
+        User::Leave(res);
+        }
+        
+    res = GetPersonalityIdFromString( usbPersonalityName, newPersonalityId );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( "GetPersonalityIdFromString failed with value: %d", res );
+        User::Leave(res);
+        }
+    
+    TRACE( "  >Connect" );
+    res = iWatcher -> Connect();
+    TRACE( "  <Connect" );
+    TRACE_INFO( "USB watcher connection value: %d, expected: %d", res, KErrNone );
+    User::LeaveIfError( res );
+    
+    if ( !testOptionName.Compare( _L( "SET_PERSONALITY" ) ) && newPersonalityId == KUsbPersonalityIdPCSuiteMTP )
+        {     
+        TRequestStatus status;
+        TInt setPersonalityId;
+        
+        if ( currentPersonalityId != newPersonalityId )
+            {
+            iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+            iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EDeviceStateNotification, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+            iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+            iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) );
+            iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EDeviceStateNotification, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+            iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EDeviceStateNotification, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+            }
+                
+        res = iUsbMan -> GetCurrentPersonalityId( currentPersonalityId );
+        
+        TRACE( "  >SetPersonality" );
+        iWatcher -> SetPersonality( status, KUsbPersonalityIdMS, EFalse, EFalse );
+        User::WaitForRequest( status );
+        TRACE( "  <SetPersonality" );
+        TRACE_INFO( "Set initial test personality value: %d", status.Int() );
+        res = iCenRep -> Get( KUsbWatcherPersonality, setPersonalityId );
+        TRACE_INFO( "Set initial test personality value: %d, personality ID: %d", status.Int(), setPersonalityId );
+        User::LeaveIfError( status.Int() );
+        if( KUsbPersonalityIdMS != setPersonalityId )
+            User::Leave(KErrNotFound); 
+        }
+    else
+        {
+        TRequestStatus status;
+        TInt setPersonalityId;
+        
+        if ( currentPersonalityId != newPersonalityId )
+            {
+            iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+            iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EDeviceStateNotification, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+            iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+            iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) );
+            }
+        
+        TRACE( "  >SetPersonality" );
+        iWatcher -> SetPersonality( status, KUsbPersonalityIdPCSuiteMTP, EFalse, EFalse );
+        User::WaitForRequest( status );        
+        TRACE( "  <SetPersonality" );
+        res = iCenRep -> Get( KUsbWatcherPersonality, setPersonalityId );
+        TRACE_INFO( "Set initial test personality value: %d, personality ID: %d", status.Int(), setPersonalityId );
+        User::LeaveIfError( status.Int() ); 
+        if( KUsbPersonalityIdPCSuiteMTP != setPersonalityId )
+            User::Leave(KErrNotFound);
+        }
+        
+    if ( !testOptionName.Compare( _L( "SET_PERSONALITY" ) ) )
+        {
+        TRACE( "Test option: SET_PERSONALITY" );
+        aTestResult = SetPersonalityTest( newPersonalityId, ETrue );
+        }
+    else if ( !testOptionName.Compare( _L( "CANCEL_SET_PERSONALITY" ) ) )
+        {
+        TRACE( "Test option: CANCEL_SET_PERSONALITY" );
+        aTestResult = CancelSetPersonalityTest( newPersonalityId, ETrue );
+        }
+    else if ( !testOptionName.Compare( _L( "SET_PREVIOUS_PERSONALITY" ) ) )
+        {
+        TRACE( "Test option: SET_PREVIOUS_PERSONALITY" );
+        aTestResult = SetPreviousPersonalityTest( newPersonalityId, ETrue );
+        }
+    else if ( !testOptionName.Compare( _L( "SET_PREVIOUS_PERSONALITY_ON_DISC" ) ) )
+        {
+        TRACE( "Test option: SET_PREVIOUS_PERSONALITY_ON_DISC" );
+        aTestResult = SetPreviousPersonalityOnDiscTest( newPersonalityId, ETrue );
+        }
+    else if ( !testOptionName.Compare( _L( "SET_PREVIOUS_PERSONALITY_SYNC" ) ) )
+        {
+        TRACE( "Test option: SET_PREVIOUS_PERSONALITY_SYNC" );
+        aTestResult = SetPreviousPersonalitySyncTest( newPersonalityId, ETrue );
+        }
+    else if ( !testOptionName.Compare( _L( "CANCEL_SET_PREVIOUS_PERSONALITY" ) ) )
+        {
+        TRACE( "Test option: CANCEL_SET_PREVIOUS_PERSONALITY" );
+        aTestResult = CancelSetPreviousPersonalityTest( newPersonalityId, ETrue );
+        }
+    else if ( !testOptionName.Compare( _L( "SET_PERSONALITY_DISC" ) ) )
+        {
+        TRACE( "Test option: SET_PERSONALITY_DISC" );
+        aTestResult = SetPersonalityTest( newPersonalityId, EFalse );
+        }
+    else if ( !testOptionName.Compare( _L( "CANCEL_SET_PERSONALITY_DISC" ) ) )
+        {
+        TRACE( "Test option: CANCEL_SET_PERSONALITY_DISC" );
+        aTestResult = CancelSetPersonalityTest( newPersonalityId, EFalse );
+        }
+    else if ( !testOptionName.Compare( _L( "SET_PREVIOUS_PERSONALITY_DISC" ) ) )
+        {
+        TRACE( "Test option: SET_PREVIOUS_PERSONALITY_DISC" );
+        aTestResult = SetPreviousPersonalityTest( newPersonalityId, EFalse );
+        }
+    else if ( !testOptionName.Compare( _L( "SET_PREVIOUS_PERSONALITY_ON_DISC_DISC" ) ) )
+        {
+        TRACE( "Test option: SET_PREVIOUS_PERSONALITY_ON_DISC_DISC" );
+        aTestResult = SetPreviousPersonalityOnDiscTest( newPersonalityId, EFalse );
+        }
+    else if ( !testOptionName.Compare( _L( "SET_PREVIOUS_PERSONALITY_SYNC_DISC" ) ) )
+        {
+        TRACE( "Test option: SET_PREVIOUS_PERSONALITY_SYNC_DISC" );
+        aTestResult = SetPreviousPersonalitySyncTest( newPersonalityId, EFalse );
+        }
+    else if ( !testOptionName.Compare( _L( "CANCEL_SET_PREVIOUS_PERSONALITY_DISC" ) ) )
+        {
+        TRACE( "Test option: CANCEL_SET_PREVIOUS_PERSONALITY_DISC" );
+        aTestResult = CancelSetPreviousPersonalityTest( newPersonalityId, EFalse );
+        }
+    else if ( !testOptionName.Compare( _L( "SET_UNKNOWN_PERSONALITY" ) ) )
+        {
+        TRACE( "Test option: SET_UNKNOWN_PERSONALITY" );
+        aTestResult = SetUnknownPersonalityTest();
+        }
+    else if ( !testOptionName.Compare( _L( "INTERRUPT_PERSONALITY_SET" ) ) )
+        {
+        TRACE( "Test option: INTERRUPT_PERSONALITY_SET" );
+        aTestResult = InterruptPersonalitySetTest( newPersonalityId );
+        }
+    else
+        {
+        TRACE( "Test option: not supported" );
+        User::Leave(KErrNotFound);
+        }
+    }
+
+TUsbWatcherTestResult CUsbWatcherTest::SetPersonalityTest( TInt aNewPersonalityId, TBool aCableConnected )
+    {
+    TRequestStatus stat;
+    TInt currentPersonalityId;
+    TInt res;
+    
+    TRACE( "Checking test results:" );
+    
+    if ( aCableConnected )
+        {
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) );
+        }
+    
+    TRACE( "  >SetPersonality" );
+    iWatcher -> SetPersonality( stat, aNewPersonalityId, EFalse, EFalse );   
+    User::WaitForRequest( stat );
+    TRACE( "  <SetPersonality" );
+    TRACE_INFO("Set personality request status: %d, expected %d", stat.Int(), KErrNone );
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, currentPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Current personality ID: %d, expected: %d", currentPersonalityId, aNewPersonalityId );
+    
+    if ( stat.Int() != KErrNone || res != KErrNone || currentPersonalityId != aNewPersonalityId )
+        return ETestCaseFailed;
+    
+    return ETestCasePassed;    
+    }
+
+TUsbWatcherTestResult CUsbWatcherTest::CancelSetPersonalityTest( TInt aNewPersonalityId, TBool aCableConnected )
+    {
+    TRequestStatus stat;
+    TInt previousPersonalityId;
+    TInt currentPersonalityId;
+    TInt res;
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, previousPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Original personality ID: %d", previousPersonalityId );
+    if ( res != KErrNone )
+        return ETestCaseFailed;
+    
+    TRACE( "Checking test results:" );
+    
+    if ( aCableConnected )
+        {
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EDeviceStateNotification, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EDeviceStateNotification, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetPersonalityProperty, 0, 0, _L8( "stub" ) ) );
+        }
+    
+    
+    TRACE( "  >SetPersonality" );
+    iWatcher -> SetPersonality( stat, aNewPersonalityId, EFalse, EFalse );
+    TRACE( "  >CancelSetPersonality" );
+    iWatcher -> CancelSetPersonality();
+    User::WaitForRequest( stat );
+    TRACE( "  <CancelSetPersonality" );
+    TRACE_INFO("Cancel set personality request status: %d", stat.Int() );
+     
+    res = iCenRep -> Get( KUsbWatcherPersonality, currentPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Current personality ID: %d", currentPersonalityId );
+    
+    if ( aCableConnected )
+        {
+        if ( stat.Int() != KErrCancel || res != KErrNone || currentPersonalityId != previousPersonalityId )
+            return ETestCaseFailed;
+        }
+    else
+        {
+        if ( stat.Int() != KErrNone || res != KErrNone || currentPersonalityId != aNewPersonalityId )
+            return ETestCaseFailed;
+        }
+    
+    return ETestCasePassed; 
+    }
+
+TUsbWatcherTestResult CUsbWatcherTest::SetPreviousPersonalityTest( TInt aNewPersonalityId, TBool aCableConnected )
+    {
+    TRequestStatus stat;
+    TInt previousPersonalityId;
+    TInt currentPersonalityId;
+    TInt res;
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, previousPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Original personality ID: %d", previousPersonalityId );
+    if ( res != KErrNone )
+        return ETestCaseFailed;
+    
+    TRACE( "  >SetPersonality" );
+    
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EDeviceStateNotification, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) );
+    
+    iWatcher -> SetPersonality( stat, aNewPersonalityId, EFalse, EFalse );
+    User::WaitForRequest( stat );
+    TRACE( "  <SetPersonality" );
+    TRACE_INFO("Set personality request status: %d, expected %d", stat.Int(), KErrNone );
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, currentPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Current personality ID: %d, expected: %d", currentPersonalityId, aNewPersonalityId );
+    
+    if ( stat.Int() != KErrNone || res != KErrNone || currentPersonalityId != aNewPersonalityId )
+        return ETestCaseFailed;
+    
+    TRACE( "Checking test results:" );
+    
+    if ( aCableConnected )
+        {
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EDeviceStateNotification, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) );
+        }
+    
+    TRACE( "  >SetPreviousPersonality" );
+    iWatcher -> SetPreviousPersonality( stat );
+    User::WaitForRequest( stat );
+    TRACE( "  <SetPreviousPersonality" );
+    TRACE_INFO("Set previous personality request status: %d, expected %d", stat.Int(), KErrNone );
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, currentPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Current personality ID: %d, expected: %d", currentPersonalityId, previousPersonalityId );
+    
+    if ( stat.Int() != KErrNone || res != KErrNone || currentPersonalityId != previousPersonalityId )
+        return ETestCaseFailed;
+    
+    return ETestCasePassed; 
+    }
+
+TUsbWatcherTestResult CUsbWatcherTest::SetPreviousPersonalityOnDiscTest( TInt aNewPersonalityId, TBool aCableConnected )
+    {
+    TRequestStatus stat;
+    TInt previousPersonalityId;
+    TInt currentPersonalityId;
+    TInt res;
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, previousPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Original personality ID: %d", previousPersonalityId );
+    if ( res != KErrNone )
+        return ETestCaseFailed;
+    
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EDeviceStateNotification, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) );
+    
+    TRACE( "  >SetPersonality" );
+    iWatcher -> SetPersonality( stat, aNewPersonalityId, EFalse, EFalse );
+    User::WaitForRequest( stat );
+    TRACE( "  <SetPersonality" );
+    TRACE_INFO("Set personality request status: %d, expected %d", stat.Int(), KErrNone );
+    
+    if ( aCableConnected )    
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+    
+    TRACE( "  >SetPreviousPersonalityOnDisconnect" );   
+    iWatcher -> SetPreviousPersonalityOnDisconnect();
+    TRACE( "  <SetPreviousPersonalityOnDisconnect" );
+    
+    // disconnect cable here
+    
+    TRACE( "Checking test results:" );
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, currentPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Current personality ID: %d, expected: %d", currentPersonalityId, aNewPersonalityId );
+    
+    if ( stat.Int() != KErrNone || res != KErrNone || currentPersonalityId != aNewPersonalityId )
+        return ETestCaseFailed;
+    
+    return ETestCasePassed; 
+    }
+
+TUsbWatcherTestResult CUsbWatcherTest::SetPreviousPersonalitySyncTest( TInt aNewPersonalityId, TBool aCableConnected )
+    {
+    TRequestStatus stat;
+    TInt previousPersonalityId;
+    TInt currentPersonalityId;
+    TInt res;
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, previousPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Original personality ID: %d", previousPersonalityId );
+    if ( res != KErrNone )
+        return ETestCaseFailed;
+    
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) );
+    
+    TRACE( "  >SetPersonality" );
+    iWatcher -> SetPersonality( stat, aNewPersonalityId, EFalse, EFalse );
+    User::WaitForRequest( stat );
+    TRACE( "  <SetPersonality" );
+    TRACE_INFO("Set personality request status: %d, expected %d", stat.Int(), KErrNone );
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, currentPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Current personality ID: %d, expected: %d", currentPersonalityId, aNewPersonalityId );
+    
+    if ( stat.Int() != KErrNone || res != KErrNone || currentPersonalityId != aNewPersonalityId )
+        return ETestCaseFailed;
+    
+    TRACE( "Checking test results:" );
+    
+    if ( aCableConnected )
+        {
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) );
+        }
+    
+    TRACE( "  >SetPreviousPersonality" );
+    iWatcher -> SetPreviousPersonality();
+    TRACE( "  <SetPreviousPersonality" );
+    TRACE("Set previous personality sync invoked"  );
+    
+    User::After( 10*1000*1000 );
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, currentPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Current personality ID: %d, expected: %d", currentPersonalityId, previousPersonalityId );
+    
+    if ( res != KErrNone || currentPersonalityId != previousPersonalityId )
+        return ETestCaseFailed;
+    
+    return ETestCasePassed; 
+    }
+
+TUsbWatcherTestResult CUsbWatcherTest::CancelSetPreviousPersonalityTest( TInt aNewPersonalityId, TBool aCableConnected )
+    {
+    TRequestStatus stat;
+    TInt previousPersonalityId;
+    TInt currentPersonalityId;
+    TInt res;
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, previousPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Original personality ID: %d", previousPersonalityId );
+    if ( res != KErrNone )
+        return ETestCaseFailed;
+    
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) );
+    
+    TRACE( "  >SetPersonality" );
+    iWatcher -> SetPersonality( stat, aNewPersonalityId, EFalse, EFalse );
+    User::WaitForRequest( stat );
+    TRACE( "  <SetPersonality" );
+    TRACE_INFO("Set personality request status: %d, expected %d", stat.Int(), KErrNone );
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, currentPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Current personality ID: %d, expected: %d", currentPersonalityId, aNewPersonalityId );
+    
+    if ( stat.Int() != KErrNone || res != KErrNone || currentPersonalityId != aNewPersonalityId )
+        return ETestCaseFailed;
+    
+    TRACE( "Checking test results:" );
+    
+    if ( aCableConnected )
+        {
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) );
+        }
+    
+    TRACE( "  >SetPreviousPersonality" );
+    iWatcher -> SetPreviousPersonality( stat );
+    TRACE( "  >CancelSetPreviousPersonality" );
+    iWatcher -> CancelSetPreviousPersonality();
+    User::WaitForRequest( stat );
+    TRACE( "  <CancelSetPreviousPersonality" );
+    TRACE_INFO("Cancel set previous personality request status: %d", stat.Int() );
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, currentPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Current personality ID: %d", currentPersonalityId );
+    
+    if ( aCableConnected )
+        {
+        if ( stat.Int() != KErrCancel || res != KErrNone || currentPersonalityId != aNewPersonalityId )
+            return ETestCaseFailed;
+        }
+    else
+        {
+        if ( stat.Int() != KErrNone || res != KErrNone || currentPersonalityId != previousPersonalityId )
+            return ETestCaseFailed;
+        }
+    
+    
+    return ETestCasePassed; 
+    }
+
+TUsbWatcherTestResult CUsbWatcherTest::SetUnknownPersonalityTest()
+    {
+    TRequestStatus stat;
+    TInt unknownPersonalityId = 0xFFFF;
+    
+    TRACE( "Checking test results:" );
+    
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) );
+    
+    TRACE( "  >SetPersonality" );
+    iWatcher -> SetPersonality( stat, unknownPersonalityId, EFalse, EFalse );   
+    User::WaitForRequest( stat );
+    TRACE( "  <SetPersonality" );
+    TRACE_INFO("Set personality request status: %d, expected %d", stat.Int(), KErrNotFound );
+    
+    if ( stat.Int() != KErrNotFound )
+        return ETestCaseFailed;
+    
+    return ETestCasePassed; 
+    }
+
+TUsbWatcherTestResult CUsbWatcherTest::InterruptPersonalitySetTest( TInt aNewPersonalityId )
+    {
+    TRequestStatus stat;
+    TRequestStatus secondStat;
+    TInt previousPersonalityId;
+    TInt currentPersonalityId;
+    TInt res;
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, previousPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Original personality ID: %d", previousPersonalityId );
+    if ( res != KErrNone )
+        return ETestCaseFailed;
+    
+    TRACE( "Checking test results:" );
+    
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+    
+    TRACE( "  >SetPersonality" );
+    iWatcher -> SetPersonality( stat, aNewPersonalityId, EFalse, EFalse );
+    TRACE( "  >SetPersonality" );
+    iWatcher -> SetPersonality( secondStat, previousPersonalityId, EFalse, EFalse );
+    User::WaitForRequest( stat );
+    TRACE( "  <SetPersonality" );
+    User::WaitForRequest( secondStat );
+    TRACE( "  <SetPersonality" );
+    
+    TRACE_INFO("Set personality request status: %d, expected %d", stat.Int(), KErrNone );
+    TRACE_INFO("Interrupt set personality request status: %d, expected %d", secondStat.Int(), KErrNone );
+
+    res = iCenRep -> Get( KUsbWatcherPersonality, currentPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Current personality ID: %d, expected: %d", currentPersonalityId, previousPersonalityId );
+    
+    if ( stat.Int() != KErrNone || secondStat.Int() != KErrNone || res != KErrNone || currentPersonalityId != previousPersonalityId )
+        return ETestCaseFailed;
+    
+    return ETestCasePassed; 
+    }
+
+TInt CUsbWatcherTest::GetPersonalityIdFromString( TPtrC& aUsbPersonalityName, TInt& aUsbPersonalityId )
+    {
+    if ( !aUsbPersonalityName.Compare( _L( "PCSUITE" ) ) )
+        {
+        TRACE( "Test personality ID setting: PCSUITE" );
+        aUsbPersonalityId = KUsbPersonalityIdPCSuiteMTP;
+        }
+    else if ( !aUsbPersonalityName.Compare( _L( "MS" ) ) )
+        {
+        TRACE( "Test personality ID setting: MS" );
+        aUsbPersonalityId = KUsbPersonalityIdMS;
+        }
+    else if ( !aUsbPersonalityName.Compare( _L( "PTP" ) ) )
+        {
+        TRACE( "Test personality ID setting: PTP" );
+        aUsbPersonalityId = KUsbPersonalityIdPTP;
+        }
+    else if ( !aUsbPersonalityName.Compare( _L( "MTP" ) ) )
+        {
+        TRACE( "Test personality ID setting: MTP" );
+        aUsbPersonalityId = KUsbPersonalityIdMTP;
+        }
+    else if ( !aUsbPersonalityName.Compare( _L( "Modem" ) ) )
+        {
+        TRACE( "Test personality ID setting: Modem" );
+        aUsbPersonalityId = KUsbPersonalityIdModemInst;
+        }
+    else
+        {
+        TRACE( "Test personality ID setting: not supported" );
+        return KErrNotFound;
+        }
+ 
+    return KErrNone;   
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBWatcherTest::PersonalitySwitchTest
+// -----------------------------------------------------------------------------
+
+void CUsbWatcherTest::PersonalitySwitchTestL( TUsbWatcherTestBlockParams& aParams, 
+                                                TUsbWatcherTestResult& aTestResult )
+    {
+    TInt res;
+    TRequestStatus stat;
+    TPtrC testOptionName( aParams.iTestOption1 );
+    TInt currentPersonalityId;
+    
+    res = iUsbMan -> GetCurrentPersonalityId( currentPersonalityId );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( "GetCurrentPersonalityId failed with value: %d" , res );
+        User::Leave( res );
+        }
+    
+    TRACE( "  >Connect" );
+    res = iWatcher -> Connect();
+    TRACE( "  <Connect" );
+    TRACE_INFO( "USB watcher connection value: %d, expected: %d" , res, KErrNone );
+    User::LeaveIfError( res );
+    
+    if ( currentPersonalityId != KUsbPersonalityIdPCSuiteMTP )
+        {
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) ); 
+        }   
+    
+    TRACE( "  >SetPersonality" );
+    iWatcher -> SetPersonality( stat, KUsbPersonalityIdPCSuiteMTP, EFalse, EFalse );
+    User::WaitForRequest( stat );
+    TRACE( "  <SetPersonality" );
+    
+    TRACE_INFO( "Set initial test personality value: %d" , stat.Int() );
+    User::LeaveIfError( stat.Int() ); 
+        
+    if ( !testOptionName.Compare( _L( "FAST_SWITCH" ) ) )
+        {
+        TRACE( "Test option: FAST_SWITCH" );
+        aTestResult = FastPersonalitySwitchTest();
+        }
+    else if ( !testOptionName.Compare( _L( "DELAYED_SWITCH" ) ) )
+        {
+        TRACE( "Test option: DELAYED_SWITCH" );
+        aTestResult = DelayedPersonalitySwitchTest();
+        }
+    else
+        {
+        TRACE( "Test option: not supported" );
+        User::Leave(KErrNotFound);
+        }
+    
+    }
+
+TUsbWatcherTestResult CUsbWatcherTest::FastPersonalitySwitchTest()
+    {
+    TInt res;
+    TInt testLoopCounter = 3;
+    TInt numberOfPersonalities = 4;
+    TInt currentPersonalityId;
+    TInt setPersonalityId;
+    TRequestStatus stat;
+    
+    TRACE( "Checking test results:" );
+    
+    for ( int i = 0; i< testLoopCounter; i++ )
+        {
+        currentPersonalityId = KUsbPersonalityIdMS;
+        for ( int j = 0; j< numberOfPersonalities; j++ )
+            {
+            iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+            iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+            iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) ); 
+            
+            TRACE( "  >SetPersonality" );
+            iWatcher -> SetPersonality( stat, currentPersonalityId, EFalse, EFalse );
+            User::WaitForRequest( stat );
+            TRACE( "  <SetPersonality" );
+            
+            res = iCenRep -> Get( KUsbWatcherPersonality, setPersonalityId );
+            TRACE_INFO("Set personality request status: %d, expected %d", stat.Int(), KErrNone );
+            TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+            TRACE_INFO("Current personality ID: %d, expected: %d", currentPersonalityId, setPersonalityId );
+            if ( stat.Int() != KErrNone || res != KErrNone || currentPersonalityId != setPersonalityId )
+                return ETestCaseFailed;
+            currentPersonalityId++;
+            }
+        }
+    return ETestCasePassed;
+    }
+
+TUsbWatcherTestResult CUsbWatcherTest::DelayedPersonalitySwitchTest()
+    {
+    TInt res;
+    TInt numberOfPersonalities = 4;
+    TInt currentPersonalityId;
+    TInt setPersonalityId;
+    TRequestStatus stat;
+    
+    TRACE( "Checking test results:" );
+    currentPersonalityId = KUsbPersonalityIdMS;
+    
+    for ( int j = 0; j< numberOfPersonalities; j++ )
+        {
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) ); 
+        
+        TRACE( "  >SetPersonality" );
+        iWatcher -> SetPersonality( stat, currentPersonalityId, EFalse, EFalse );
+        User::WaitForRequest( stat );
+        TRACE( "  <SetPersonality" );
+        
+        res = iCenRep -> Get( KUsbWatcherPersonality, setPersonalityId );
+        TRACE_INFO("Set personality request status: %d, expected %d", stat.Int(), KErrNone );
+        TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+        TRACE_INFO("Current personality ID: %d, expected: %d", currentPersonalityId, setPersonalityId );
+        if ( stat.Int() != KErrNone || res != KErrNone || currentPersonalityId != setPersonalityId )
+            return ETestCaseFailed;
+        currentPersonalityId++;
+        User::After( 7000*1000 );
+        }
+    return ETestCasePassed;
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBWatcherTest::BranchTest
+// -----------------------------------------------------------------------------
+
+void CUsbWatcherTest::BranchTestL( TUsbWatcherTestBlockParams& aParams, 
+                                    TUsbWatcherTestResult& aTestResult )
+    {
+    TInt res;
+    TRequestStatus stat;
+    TPtrC testOptionName( aParams.iTestOption1 );
+    TInt currentPersonalityId;
+    
+    res = iUsbMan -> GetCurrentPersonalityId( currentPersonalityId );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( "GetCurrentPersonalityId failed with value: %d", res );
+        User::Leave( res );
+        }
+        
+    TRACE( "  >Connect" );
+    res = iWatcher -> Connect();
+    TRACE( "  <Connect" );
+    TRACE_INFO( "USB watcher connection value: %d, expected: %d", res, KErrNone );
+    User::LeaveIfError( res );
+    
+    if ( currentPersonalityId != KUsbPersonalityIdPCSuiteMTP )
+        {
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) ); 
+        }   
+    
+    TRACE( "Initial SetPersonality" );
+    
+    TRACE( "  >SetPersonality" );
+    iWatcher -> SetPersonality( stat, KUsbPersonalityIdPCSuiteMTP, EFalse, EFalse );
+    User::WaitForRequest( stat );
+    TRACE( "  <SetPersonality" );
+    
+    TRACE_INFO( "Set initial test personality value: %d", stat.Int() );
+    User::LeaveIfError( stat.Int() ); 
+        
+    if ( !testOptionName.Compare( _L( "SAME_PERSONALITY_SET" ) ) )
+        {
+        TRACE( "Test option: SAME_PERSONALITY_SET" );
+        aTestResult = SetSamePersonalityTest();
+        }
+    else if ( !testOptionName.Compare( _L( "NON_BLOCKING" ) ) )
+        {
+        TRACE( "Test option: NON_BLOCKING" );
+        aTestResult = SetPersonalityBlockingOn();
+        }
+    else if ( !testOptionName.Compare( _L( "FORCE_SWITCH" ) ) )
+        {
+        TRACE( "Test option: FORCE_SWITCH" );
+        aTestResult = SetPersonalityAskOnConnectionOff();
+        }
+    else
+        {
+        TRACE( "Test option: not supported" );
+        User::Leave( KErrNotFound );
+        }
+    }
+
+TUsbWatcherTestResult CUsbWatcherTest::SetSamePersonalityTest()
+    {
+    TRequestStatus stat;
+    TInt currentPersonalityId;
+    TInt res;
+    
+    TRACE( "Checking test results:" );
+    
+    TRACE( "  >SetPersonality" );
+    iWatcher -> SetPersonality( stat, KUsbPersonalityIdPCSuiteMTP, EFalse, EFalse );   
+    User::WaitForRequest( stat );
+    TRACE( "  <SetPersonality" );
+    TRACE_INFO("Set personality request status: %d, expected %d", stat.Int(), KErrNone );
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, currentPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Current personality ID: %d, expected: %d", currentPersonalityId, KUsbPersonalityIdPCSuiteMTP );
+    
+    if ( stat.Int() != KErrNone || res != KErrNone || currentPersonalityId != KUsbPersonalityIdPCSuiteMTP )
+        return ETestCaseFailed;
+    
+    return ETestCasePassed;  
+    }
+
+TUsbWatcherTestResult CUsbWatcherTest::SetPersonalityBlockingOn()
+    {
+    TRequestStatus stat;
+    TInt currentPersonalityId;
+    TInt res;
+    
+    TRACE( "Checking test results:" );
+    
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) ); 
+    
+    TRACE( "  >SetPersonality" );
+    iWatcher -> SetPersonality( stat, KUsbPersonalityIdMS, EFalse, ETrue );   
+    User::WaitForRequest( stat );
+    TRACE( "  <SetPersonality" );
+    TRACE_INFO("Set personality request status: %d, expected %d", stat.Int(), KErrNone );
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, currentPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Current personality ID: %d, expected: %d", currentPersonalityId, KUsbPersonalityIdMS );
+    
+    if ( stat.Int() != KErrNone || res != KErrNone || currentPersonalityId != KUsbPersonalityIdMS )
+        return ETestCaseFailed;
+    
+    return ETestCasePassed; 
+    }
+
+TUsbWatcherTestResult CUsbWatcherTest::SetPersonalityAskOnConnectionOff()
+    {
+    TRequestStatus stat;
+    TInt currentPersonalityId;
+    TInt res;
+    
+    TRACE( "Checking test results:" );
+    
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+    iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) ); 
+    
+    TRACE( "  >SetPersonality" );
+    iWatcher -> SetPersonality( stat, KUsbPersonalityIdMS, ETrue, EFalse );   
+    User::WaitForRequest( stat );
+    TRACE( "  <SetPersonality" );
+    TRACE_INFO("Set personality request status: %d, expected %d", stat.Int(), KErrNone );
+    
+    res = iCenRep -> Get( KUsbWatcherPersonality, currentPersonalityId );
+    TRACE_INFO("GetCurrentPersonalityId value: %d, expected %d", res, KErrNone );
+    TRACE_INFO("Current personality ID: %d, expected: %d", currentPersonalityId, KUsbPersonalityIdMS );
+    
+    if ( stat.Int() != KErrNone || res != KErrNone || currentPersonalityId != KUsbPersonalityIdMS )
+        return ETestCaseFailed;
+    
+    return ETestCasePassed; 
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBWatcherTest:: Other functions
+// -----------------------------------------------------------------------------
+
+TInt CUsbWatcherTest::BackupPersonalitySetting()
+    {
+    TRACE( "><Backup personality setting" )
+    return iUsbMan -> GetCurrentPersonalityId( iPersonalityIdBackup );
+    }
+
+TInt CUsbWatcherTest::RestorePersonalitySetting()
+    {
+    TRequestStatus stat;
+    TInt currentPersonalityId;
+    
+    TRACE( ">Restore personality setting" )
+    TRACE( "  >Close" );
+    iWatcher -> Close();
+    TRACE( "  <Close" );
+    
+    iUsbMan -> GetCurrentPersonalityId( currentPersonalityId );
+    if ( currentPersonalityId != iPersonalityIdBackup )
+        {   
+        TRACE( "  >Connect" );
+        iWatcher -> Connect();
+        TRACE( "  <Connect" );
+        
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, EGetDeviceState, 0, 0, _L8( "EUsbDeviceStateConfigured" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStopAsync, 0, 0, _L8( "stub" ) ) );
+        iStubber -> EnqueBehavior( TApiBehavior( KUsbManStubAgentDll, ETryStartAsync, 0, 0, _L8( "stub" ) ) );
+        
+        TRACE( "  >SetPersonality" );
+        iWatcher -> SetPersonality( stat, iPersonalityIdBackup, EFalse, EFalse );
+        User::WaitForRequest( stat );
+        TRACE( "  <SetPersonality" );
+        
+        TRACE( "  >Close" );
+        iWatcher -> Close();
+        TRACE( "  <Close" );
+        }
+    
+    TRACE( "<Restore personality setting" )
+    return stat.Int();
+    }
+
+
+
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+// None
+
+//  [End of File] - Do not remove