diff -r 924385140d98 -r c2c61fdca848 startupservices/Startup/syserrcmd/tsrc/syserrcmdtest/src/syserrcmdtest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/startupservices/Startup/syserrcmd/tsrc/syserrcmdtest/src/syserrcmdtest.cpp Wed Sep 01 12:24:48 2010 +0100 @@ -0,0 +1,343 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* CSysErrCmdTest class implementation. +* +*/ + +#include +#include +#include + +#include +#include +#include + +#include "syserrcmdtest.h" +#include "syserrcmdfactory.h" +#include "syserrcmdtestsstub.h" +#include "trace.h" + +// INTERNAL INCLUDES +NONSHARABLE_CLASS( TWaitInfo ) + { + public: + + CPeriodic* iPeriodic; + CActiveSchedulerWait* iWait; + }; + + +/** +* Call back method when we need to stop active scheduler wait. +*/ +LOCAL_C TInt WaitCallBack( TAny* aSelf ) + { + if( aSelf ) + { + TWaitInfo* info = static_cast( aSelf ); + if( info->iPeriodic ) + { + info->iPeriodic->Cancel(); + } + if( info->iWait ) + { + if( info->iWait->IsStarted() ) + { + info->iWait->AsyncStop(); + } + } + } + + return KErrNone; + } + +/** +* Helper method to wait current scheduler before teardown is completed. +*/ +LOCAL_C void WaitL( TInt aIntervalInMicorseconds ) + { + TWaitInfo info; + + // Construct periodic + CPeriodic* periodic = CPeriodic::NewL( CActive::EPriorityStandard ); + CleanupStack::PushL( periodic ); + info.iPeriodic = periodic; + + // Construct active scheduler wait + CActiveSchedulerWait* wait = new( ELeave ) CActiveSchedulerWait; + CleanupStack::PushL( wait ); + info.iWait = wait; + + // Start timer and wait + TCallBack cb( WaitCallBack, &info ); + periodic->Start( aIntervalInMicorseconds, aIntervalInMicorseconds, cb ); + wait->Start(); + + // Cleanup + CleanupStack::PopAndDestroy( wait ); + CleanupStack::PopAndDestroy( periodic ); + } + +// --------------------------------------------------------- +// CSysErrCmdTest::LibEntryL +// Returns: Poiter to CSysErrCmdTest class +// --------------------------------------------------------- +EXPORT_C CSysErrCmdTest* LibEntryL( CTestModuleIf& aTestModuleIf ) + { + FUNC_LOG; + + CSysErrCmdTest* libEntry( CSysErrCmdTest::NewL( aTestModuleIf ) ); + return libEntry; + } + +// --------------------------------------------------------- +// CSysErrCmdTest::CSysErrCmdTest +// --------------------------------------------------------- +CSysErrCmdTest::CSysErrCmdTest( CTestModuleIf& aTestModuleIf ) : + CScriptBase( aTestModuleIf ) + { + FUNC_LOG; + } + +// --------------------------------------------------------- +// CSysErrCmdTest::ConstructL +// --------------------------------------------------------- +void CSysErrCmdTest::ConstructL() + { + FUNC_LOG; + + iExecuteHandler = CAsyncRequestHandler::NewL( + *this, + HandleIssueRequest, + HandleRunL, + HandleRunError, + HandleDoCancel, + CAsyncRequestHandler::ERequestOneShot ); + + User::LeaveIfError( iFs.Connect() ); + + iCustCmdEnvStub = SysErrCmdTestsStub::CustomCommandEnvStubL( iFs ); + } + +// --------------------------------------------------------- +// CSysErrCmdTest::NewL +// --------------------------------------------------------- +CSysErrCmdTest* CSysErrCmdTest::NewL( CTestModuleIf& aTestModuleIf ) + { + FUNC_LOG; + + CSysErrCmdTest* self = new (ELeave) CSysErrCmdTest( aTestModuleIf ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------- +// CSysErrCmdTest::~CSysErrCmdTest +// --------------------------------------------------------- +CSysErrCmdTest::~CSysErrCmdTest() + { + iFs.Close(); + delete iExecuteHandler; + delete iCustCmdEnvStub; + FUNC_LOG; + } + +// --------------------------------------------------------- +// CSysErrCmdTest::RunMethodL +// --------------------------------------------------------- +TInt CSysErrCmdTest::RunMethodL( CStifItemParser& aItem ) + { + FUNC_LOG; + + const TStifFunctionInfo 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( "CreateAndDestroy", CSysErrCmdTest::CreateAndDestroyL ), + ENTRY( "InitAndClose", CSysErrCmdTest::InitAndCloseL ), + ENTRY( "Execute", CSysErrCmdTest::ExecuteL ), + ENTRY( "ExecuteCancel", CSysErrCmdTest::ExecuteCancelL ), + ENTRY( "ExecuteAfterGlobalNote", CSysErrCmdTest::ShowAfterAknGlobalNoteL ), + ENTRY( "ExecuteAfterUiServiceGlobalNote", CSysErrCmdTest::ShowAfterUiServerGlobalNoteL ) + }; + const TInt count( sizeof( KFunctions ) / sizeof( TStifFunctionInfo ) ); + TInt ret( RunInternalL( KFunctions, count, aItem ) ); + return ret; + } + +// --------------------------------------------------------- +// CSysErrCmdTest::CreateAndDestroyL +// --------------------------------------------------------- + +TInt CSysErrCmdTest::CreateAndDestroyL( CStifItemParser& aItem ) + { + FUNC_LOG; + ( void )aItem; + MSsmCustomCommand* sysErrCmd = SysErrCmdFactory::SysErrCmdNewL(); + sysErrCmd->Release(); + return KErrNone; + } + +// --------------------------------------------------------- +// CSysErrCmdTest::InitAndCloseL +// --------------------------------------------------------- +TInt CSysErrCmdTest::InitAndCloseL( CStifItemParser& aItem ) + { + FUNC_LOG; + ( void )aItem; + + MSsmCustomCommand* sysErrCmd = SysErrCmdFactory::SysErrCmdNewL(); + + TInt err( sysErrCmd->Initialize( iCustCmdEnvStub ) ); + ERROR( err, "Failed to init syserrcmd" ); + User::LeaveIfError( err ); + + sysErrCmd->Close(); + sysErrCmd->Release(); + + return KErrNone; + } +// --------------------------------------------------------- +// CSysErrCmdTest::ExecuteL +// --------------------------------------------------------- + +TInt CSysErrCmdTest::ExecuteL( CStifItemParser& aItem ) + { + FUNC_LOG; + ( void )aItem; + iSysErrCmd = SysErrCmdFactory::SysErrCmdNewL(); + TInt err( iSysErrCmd->Initialize( iCustCmdEnvStub ) ); + ERROR( err, "Failed to init syserrcmd" ); + User::LeaveIfError( err ); + + iExecuteHandler->IssueRequest(); + + WaitL( 5000 ); + + iSysErrCmd->Close(); + iSysErrCmd->Release(); + + INFO_1( "Execution result %d", iExecutionResult ); + + return iExecutionResult; + } + +// --------------------------------------------------------- +// CSysErrCmdTest::ExecuteL +// --------------------------------------------------------- + +TInt CSysErrCmdTest::ExecuteCancelL( CStifItemParser& aItem ) + { + FUNC_LOG; + ( void )aItem; + iSysErrCmd = SysErrCmdFactory::SysErrCmdNewL(); + TInt err( iSysErrCmd->Initialize( iCustCmdEnvStub ) ); + ERROR( err, "Failed to init syserrcmd" ); + User::LeaveIfError( err ); + + iExecuteHandler->IssueRequest(); + + WaitL( 5000 ); + + iSysErrCmd->ExecuteCancel(); + + WaitL( 5000 ); + + iSysErrCmd->Close(); + iSysErrCmd->Release(); + + INFO_1( "ExecutionCancel result %d", iExecutionResult ); + + return ( iExecutionResult == KErrCancel ) ? KErrNone : KErrGeneral; + } + +// --------------------------------------------------------- +// CSysErrCmdTest::ShowAfterAknGlobalNoteL +// --------------------------------------------------------- +TInt CSysErrCmdTest::ShowAfterAknGlobalNoteL( CStifItemParser& aItem ) + { + CAknGlobalNote* note = CAknGlobalNote::NewLC(); + note->ShowNoteL( EAknGlobalInformationNote, _L("CAknGlobalNote::ShowNoteL()") ); + CleanupStack::PopAndDestroy( note ); + + return ExecuteL( aItem ); + } + +// --------------------------------------------------------- +// CSysErrCmdTest::ShowAfterUiServerGlobalNoteL +// --------------------------------------------------------- +TInt CSysErrCmdTest::ShowAfterUiServerGlobalNoteL( CStifItemParser& aItem ) + { + RAknUiServer aknSrv; + + User::LeaveIfError( aknSrv.Connect() ); + + CleanupClosePushL( aknSrv ); + + aknSrv.ShowGlobalNoteL( _L("RAknUiServer::ShowGlobalNoteL()"), EAknGlobalInformationNote ); + + CleanupStack::PopAndDestroy( &aknSrv ); + + return ExecuteL( aItem ); + } + +// --------------------------------------------------------- +// CSysErrCmdTest::HandleIssueRequest +// --------------------------------------------------------- + +void CSysErrCmdTest::HandleIssueRequest( TRequestStatus& aRequest ) + { + FUNC_LOG; + + iSysErrCmd->Execute( KNullDesC8, aRequest ); + + } +// --------------------------------------------------------- +// CSysErrCmdTest::HandleRunL +// --------------------------------------------------------- + +void CSysErrCmdTest::HandleRunL( TInt aStatus ) + { + FUNC_LOG; + INFO_1( "CSysErrCmdTest::HandleRunL %d", aStatus ); + + if ( KErrNone != aStatus ) + { + iExecutionResult = aStatus; + } + } +// --------------------------------------------------------- +// CSysErrCmdTest::HandleRunError +// --------------------------------------------------------- + +TInt CSysErrCmdTest::HandleRunError( TInt aError ) + { + FUNC_LOG; + ERROR( aError, "CSysErrCmdTest::HandleRunError" ); + return KErrNone; + } +// --------------------------------------------------------- +// CSysErrCmdTest::HandleDoCancel +// --------------------------------------------------------- + +void CSysErrCmdTest::HandleDoCancel() + { + FUNC_LOG; + } + +