--- /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 <eikenv.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <ecom/ecom.h>
+#include <hal.h>
+
+#include "TDisableExitChecksStep.h"
+#include <apacmdln.h>
+
+
+_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();
+ }