diff -r 000000000000 -r 9736f095102e buildverification/smoketest/System/Src/TestSystemBase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/buildverification/smoketest/System/Src/TestSystemBase.cpp Tue Jan 26 15:16:33 2010 +0200 @@ -0,0 +1,116 @@ +// Copyright (c) 2005-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: +// + +#include "TestSystemBase.h" + +// Global Vars +_LIT(KTestExecuteLog,"c:\\Logs\\TestExecute\\smoketest_system_temp.htm"); +_LIT(KPanicText,"The following Panic has occured: Thread Name = %S Exit Reason = %d Exit Category = %S"); + +CSystemTestBase* CSystemTestBase::NewL() + { + CSystemTestBase* self=new(ELeave) CSystemTestBase; + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); // self + return(self); + } + +void CSystemTestBase::ConstructL() + { + iUndertaker=CEikUndertaker::NewL(*this); + User::LeaveIfError(iLogger.Connect()); + User::LeaveIfError(iLogger.CreateLog(KTestExecuteLog,RTestExecuteLogServ::ELogModeAppend)); + } + +CSystemTestBase::CSystemTestBase() + { + // do nothing + } + +CSystemTestBase::~CSystemTestBase() + { + delete iUndertaker; + iLogger.Close(); + } + +void CSystemTestBase::HandleThreadExitL(RThread& aThread) + { + TExitType exitType=aThread.ExitType(); + if (exitType==EExitPanic) + { + CActiveScheduler::Stop(); + iExitReason = aThread.ExitReason(); + iExitCategory = aThread.ExitCategory(); + TBuf<100> iName(aThread.FullName()); + iLogger.WriteFormat(KPanicText, &iName, iExitReason, &iExitCategory); + User::Panic(iExitCategory,iExitReason); + } + } + +//LOCAL_C TInt PanicThread(TAny*) +// { +// _LIT(PanicReason, "Just, why not"); +// TInt iPanicInt = 666; +// User::Panic(PanicReason, iPanicInt); +// return iPanicInt; +// } + +LOCAL_C void MainL() + { + // Construct and install the active scheduler + CActiveScheduler* myScheduler = new(ELeave) CActiveScheduler; + CleanupStack::PushL(myScheduler); + CActiveScheduler::Install(myScheduler); + + CSystemTestBase* iTempBase = CSystemTestBase::NewL(); + + // The following is just test code that spawns a thread and makes it panic + //RThread iPanicThread; + //_LIT(PanicThreadTest, "Undertaker Panic Thread Test"); + + //User::LeaveIfError(iPanicThread.Create(PanicThreadTest(), &PanicThread, KDefaultStackSize, 0x100, 0x100, NULL)); + //iPanicThread.SetPriority(EPriorityAbsoluteHigh); + //iPanicThread.Resume(); + + CActiveScheduler::Start(); + + for (;;) + { + User::After(100000); + } + } + +GLDEF_C TInt E32Main() +/** + * Executable Entry Point + * Top level always creates TRAP harness. + * Calls MainL() inside the TRAP harness + */ + { + __UHEAP_MARK; + CTrapCleanup* cleanup = CTrapCleanup::New(); + if(cleanup == NULL) + { + return KErrNoMemory; + } + TRAPD(err,MainL()); + // should never reach this point if some thread has panicked already + _LIT(KTestPanicReason,"Trap"); + __ASSERT_ALWAYS(!err, User::Panic(KTestPanicReason,err)); + delete cleanup; + __UHEAP_MARKEND; + return KErrNone; + }