diff -r 000000000000 -r 2f259fa3e83a commonuisupport/uikon/test/tdisableexitchecks/TDisableExitChecksStep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commonuisupport/uikon/test/tdisableexitchecks/TDisableExitChecksStep.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,189 @@ +// Copyright (c) 2007-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: +// + +/** + @file + @test + @internalComponent - Internal Symbian test code +*/ + +#include +#include +#include +#include +#include +#include + +#include "TDisableExitChecksStep.h" +#include + + +_LIT(KTDisableExitChecksResourceFilePath,""); +_LIT8(KETrue,"ETrue"); +_LIT8(KEFalse,"EFalse"); + +/*AppUI*/ +CTDisableExitChecksAppUi::CTDisableExitChecksAppUi(CTmsTestStep* aStep) : + CTestAppUi(aStep, KTDisableExitChecksResourceFilePath) + { + } + +void CTDisableExitChecksAppUi::ConstructL() + { + CTestAppUi::ConstructL(); + AutoTestManager().StartAutoTest(); + } + +CTDisableExitChecksAppUi::~CTDisableExitChecksAppUi() + { + } + +/** + @SYMTestCaseID UIF-TDisableExitChecksStep-TestDisableShutDownChecks + + @SYMDEF PDEF109432: Device does not shutdown properly + + @SYMTestCaseDesc Test triggers the launch of an app that leaks memory once with disabled and once + with enabled shutdown checks. + + @SYMTestPriority High + + @SYMTestStatus Implemented + + @SYMTestActions Call StartProcessL with ETrue in order to disable the shutdown checks. + Call StartProcessL with EFalse in order to disable the shutdown checks. + Close the panic windows that have emerged. + + @SYMTestExpectedResults A panic window emerges, when the shutdown checks are enabled, since + the app used (disableexitchecksapp) leaks memory. The panic window is followingly closed. + */ + +void CTDisableExitChecksAppUi::TestDisableShutDownChecks() + { + INFO_PRINTF1(_L("Start Test TestDisableShutDownChecks...")); + INFO_PRINTF1(_L("Disable shutdown checks...")); + StartProcessL(KETrue); + INFO_PRINTF1(_L("Enable shutdown checks...")); + StartProcessL(KEFalse); + CloseAllPanicWindowsL(); //closes the panic window that emerges, when the shutdown checks are enabled. + } + +/** + * This function creates a process to run disableexitchecksapp and launches this application. + * + * The trailing data in the launch information is set to the aTailEnd parameter (expected to + * be ETrue or EFalse). + * + * Since disableexitchecksapp leaks memory, it panics, when shutdown checks are enabled. + * However, it is expected to exit normally,when shutdown checks are disabled. + * + */ +void CTDisableExitChecksAppUi::StartProcessL(const TDesC8& aTailEnd) + { + CApaCommandLine* cmdLine=CApaCommandLine::NewLC(); + RProcess process; + INFO_PRINTF1(_L("Create process...")); + User::LeaveIfError(process.Create(KExeName, KNullDesC)); + INFO_PRINTF1(_L("Process created!")); + CleanupClosePushL(process); + INFO_PRINTF1(_L("Set commandline parameters...")); + TRAPD(ret, + { + cmdLine->SetExecutableNameL(KExeName); + cmdLine->SetTailEndL(aTailEnd); + cmdLine->SetProcessEnvironmentL(process); + }) + TEST(ret==KErrNone); + TRequestStatus status = KRequestPending; + process.Logon(status); + + //Prevent emulator closing when a panic occurs + User::SetJustInTime(EFalse); + + process.Resume(); + User::WaitForRequest(status); + INFO_PRINTF1(_L("Check process exit type...")); + if (aTailEnd==KETrue) + TEST(process.ExitType()==EExitKill); //disableexitchecksapp exits normally,when shutdown checks are disabled + else if (aTailEnd==KEFalse) + TEST(process.ExitType()==EExitPanic); //disableexitchecksapp panics at exit,when shutdown checks are enabled + INFO_PRINTF1(_L("Check process exit reason...")); + TEST(process.ExitReason()==KErrNone); + + User::SetJustInTime(ETrue); + CleanupStack::PopAndDestroy(2, cmdLine); + } + +void CTDisableExitChecksAppUi::RunTestStepL(TInt aStepNum) + { + switch(aStepNum) + { + case 1: + SetTestStepID(_L("UIF-TDisableExitChecksStep-TestDisableShutDownChecks")); + TRAPD(err,TestDisableShutDownChecks()); + TEST(err==KErrNone); + RecordTestResultL(); + CloseTMSGraphicsStep(); + break; + case 2: + INFO_PRINTF1(_L("All tests completed.\n")); + AutoTestManager().FinishAllTestCases(CAutoTestManager::EPass); + break; + default: + INFO_PRINTF1(_L("CTDisableExitChecksAppUi::RunTestStepL default case\n")); + break; + } + } + +/*Test step*/ +CTDisableExitChecksStep::CTDisableExitChecksStep() + { + SetTestStepName(KTDisableExitChecksStep); + } + +CTDisableExitChecksStep::~CTDisableExitChecksStep() + { + } + +void CTDisableExitChecksStep::ConstructAppL(CEikonEnv* aCoe) + { + aCoe->ConstructL(); + CTDisableExitChecksAppUi* appUi=new(ELeave) CTDisableExitChecksAppUi(this); + aCoe->SetAppUi(appUi); + appUi->ConstructL(); + } + +TVerdict CTDisableExitChecksStep::doTestStepL() // main function called by E32 + { + INFO_PRINTF1(_L("TDisableExitChecks Test Started")); + PreallocateHALBuffer(); + __UHEAP_MARK; // + CEikonEnv* coe=new CEikonEnv; + TRAPD(err,ConstructAppL(coe)); + if (!err) + { + coe->ExecuteD(); + } + else + { + SetTestStepResult(EFail); + delete coe; + } + + REComSession::FinalClose(); + __UHEAP_MARKEND; + INFO_PRINTF1(_L("Test Finished")); + return TestStepResult(); + }