diff -r bf7481649c98 -r 2717213c588a windowing/windowserver/test/tcapability/TCapTest.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/test/tcapability/TCapTest.CPP Tue Jun 22 15:21:29 2010 +0300 @@ -0,0 +1,745 @@ +// Copyright (c) 1995-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: +// Automatically test the window server capabilities. +// +// + +#include +#include "W32STD.H" +#include "../../SERVER/w32cmd.h" +#include +#include +#include + +typedef TInt (*TPanicFunction)(TInt aInt,TDes& capability,TInt aExternalGroupId); +LOCAL_D const TUint KPanicThreadHeapSize=0x2000; +#define EWindowGroupHandle 1234 +#define EWindowGroupHandle2 4567 +_LIT(KCAPABILITY_ALL,"CAPABILITY_ALL"); +_LIT(KCAPABILITY_NONE,"CAPABILITY_NONE"); +_LIT(KWRITEDATA_SWEVENT,"WRITEDATA+SWEVENT"); +_LIT(KWRITEDATA_POWERMGMT,"WRITEDATA+POWERMGMT"); +_LIT(KPOWERMGMT_SWEVENT,"POWERMGMT+SWEVENT"); +_LIT(KSetOrdinalPositionPri,"EWsWinOpSetOrdinalPositionPri Capability Check"); +_LIT(KSetOrdinalPositionErr,"EWsWinOpSetOrdinalPositionErr Capability Check"); +TLogMessageText LogMessageText; + +//Enum for indicating which capability is checked. +enum TTestCapability + { + EWriteDeviceData, + ESwEvent, + EPowerMgmt, + EDoNotTest, + ENoCapReq, + EEikSrvSID, + ESwEventPri, + ENoSwEventPri, + ENoSwEventPriSmallOrdinal, + ESwEventErr, + ENoSwEventErr, + ENoSwEventErrSmallOrdinal, + }; + +//Enum for test exit reasons +enum TTestState + { + EWsExitReasonBad, + EWsTestNext, + EWsTestFinished, + }; + + +TTestCapability gTheTestCapability; +TInt gTestState=KErrNone; + + +//Panics if EWsExitReasonBad +enum TAutoPanics + { + EAutoPanicPanicFailed, + }; + +//Thread function structure +struct SPanicParams + { + TInt num; + TPanicFunction func; + TBuf<256> capability; + TInt externalGroupId; + }; + +class CTestBase + { +public: + CTestBase(); + ~CTestBase(); + void ConstructL(const TDes* aCapabilityTest); + TInt TestWsPanicL(TPanicFunction aFunction, TInt aInt, const TDes& aCommandLine); + void UpdateLogsL(); +private : + TInt TestPanicL(SPanicParams* aPtr); + TInt LaunchPanicThread(RThread& aThread, SPanicParams* aPtr); + void Test(TInt aCondition); +private : + TInt iThreadNumber; + RWsSession iWs; + TBuf<256> iCapabilityTest; + TInt iTestCount; + TInt iTestPass; + }; + +//RWsSession derived class to test the EWservMessShutdown message +class RShellWsSession : public RWsSession + { +public: + void ShutDown(); + }; + +void RShellWsSession::ShutDown() + { + SendReceive(EWservMessShutdown,TIpcArgs(EWservShutdownCheck)); + } + +LOCAL_C TInt PanicThreadFunc(TAny* aPtr) + { + CTrapCleanup* CleanUpStack=CTrapCleanup::New(); + SPanicParams* ptr=(SPanicParams*)aPtr; + TInt ret; + TRAP(ret,ret=(*ptr->func)(ptr->num,ptr->capability,ptr->externalGroupId)); + delete CleanUpStack; + if (ret==EWsExitReasonBad) + { + User::Panic(_L("Auto"),EAutoPanicPanicFailed); + } + return(ret); + } + +CTestBase::CTestBase() + { + } + +CTestBase::~CTestBase() + { + iWs.Close(); + } + +void CTestBase::ConstructL(const TDes* aCapabilityTest) + { + iTestCount=iTestPass=0; + iWs.Connect(); + TLex lex(*aCapabilityTest); + TPtrC capability = lex.NextToken(); + iCapabilityTest.Append(capability); + } + +TInt CTestBase::LaunchPanicThread(RThread& aThread, SPanicParams* aPtr) + { + TBuf<32> threadName; + _LIT(KPanicThread, "AutoPanicThread%d"); + threadName.AppendFormat(KPanicThread,iThreadNumber++); + return(aThread.Create(threadName,PanicThreadFunc,KDefaultStackSize,KPanicThreadHeapSize,KPanicThreadHeapSize,aPtr,EOwnerThread)); + } + +TInt CTestBase::TestPanicL(SPanicParams* aPtr) + { + RThread thread; + TRequestStatus stat; + TInt err=LaunchPanicThread(thread, aPtr); + if (err==KErrAlreadyExists) + { + // wait for kernel to clear up old threads + // and have several attempts at starting the thread + // if unsuccessful the first time + for (TInt i=0;i<3;i++) + { + User::After(TTimeIntervalMicroSeconds32(100000)); //0.1 secs + err=LaunchPanicThread(thread, aPtr); + if (err!=KErrAlreadyExists) + { + break; + } + } + } + User::LeaveIfError(err); + thread.Logon(stat); + User::SetJustInTime(EFalse); + thread.Resume(); + User::WaitForRequest(stat); + User::SetJustInTime(ETrue); + TInt threadExit=thread.ExitReason(); + if (threadExit!=EWsTestFinished) + { + if (gTheTestCapability==ENoCapReq) + { + Test(threadExit==KErrNone); + } + else if(gTheTestCapability==EEikSrvSID) + { + Test(threadExit==KErrPermissionDenied); + } + else if(!iCapabilityTest.Compare(KCAPABILITY_ALL)) + { + if(gTheTestCapability!=EDoNotTest) + { + iTestCount++; + if(gTheTestCapability==ESwEventPri) + { + Test(threadExit==KPasswordWindowGroupPriority); + } + else + { + Test(threadExit==KErrNone); + } + } + } + else if(!iCapabilityTest.Compare(KCAPABILITY_NONE)) + { + if(gTheTestCapability!=EDoNotTest) + { + iTestCount++; + if((gTheTestCapability==ENoSwEventPriSmallOrdinal)||(gTheTestCapability==ENoSwEventPri)) + { + Test(threadExit==KPasswordWindowGroupPriority-1); + } + else if(gTheTestCapability==ENoSwEventErrSmallOrdinal) + { + Test(threadExit==KErrNone); + } + else if(gTheTestCapability==ENoSwEventErr) + { + Test(threadExit==KErrPermissionDenied); + } + else + { + Test((threadExit==EWservPanicPermissionDenied)||(threadExit==KErrPermissionDenied)); + } + } + } + else if(!iCapabilityTest.Compare(KWRITEDATA_SWEVENT)) + { + if(gTheTestCapability==EWriteDeviceData || gTheTestCapability==ESwEvent) + { + iTestCount++; + Test(threadExit==KErrNone); + } + if(gTheTestCapability==EPowerMgmt) + { + iTestCount++; + Test((threadExit==EWservPanicPermissionDenied)||(threadExit==KErrPermissionDenied)); + } + } + else if(!iCapabilityTest.Compare(KWRITEDATA_POWERMGMT)) + { + if(gTheTestCapability==EWriteDeviceData || gTheTestCapability==EPowerMgmt) + { + iTestCount++; + Test(threadExit==KErrNone); + } + if(gTheTestCapability==ESwEvent) + { + iTestCount++; + Test((threadExit==EWservPanicPermissionDenied)||(threadExit==KErrPermissionDenied)); + } + } + else if(!iCapabilityTest.Compare(KPOWERMGMT_SWEVENT)) + { + if(gTheTestCapability==EPowerMgmt || gTheTestCapability==ESwEvent) + { + iTestCount++; + Test(threadExit==KErrNone); + } + if(gTheTestCapability==EWriteDeviceData) + { + iTestCount++; + Test((threadExit==EWservPanicPermissionDenied)||(threadExit==KErrPermissionDenied)); + } + } + } + thread.Close(); + return(threadExit); + } + +TInt CTestBase::TestWsPanicL(TPanicFunction aFunction,TInt aTestNo, const TDes& aCommandLine) + { + TLex lex(aCommandLine); + TPtrC capability = lex.NextToken(); + TPtrC idstr = lex.NextToken(); + lex = idstr; + TInt id = 0; + lex.Val(id); + + SPanicParams params; + params.num=aTestNo; + params.func=aFunction; + params.capability.Copy(capability); + params.externalGroupId = id; + return TestPanicL(¶ms); + } + +void CTestBase::Test(TInt aCondition) + { + if(!aCondition) + { + TLogMessageText buf; + _LIT(Fail,"AUTO Failed in Capability Test : "); + buf.Append(Fail); + buf.Append(iCapabilityTest); + iWs.LogMessage(buf); + iWs.Flush(); + } + else + { + iTestPass++; + } + } + +void CTestBase::UpdateLogsL() + { + TBuf<256> testResult; + RFs fileSession; + RFile resultFile; + User::LeaveIfError(fileSession.Connect()); + CleanupClosePushL(fileSession); + resultFile.Replace(fileSession,_L("C:\\DATA\\TestResult.Dat"),EFileWrite); + CleanupClosePushL(resultFile); + TFileText fileText; + fileText.Set(resultFile); + testResult.Num(iTestCount); + fileText.Write(testResult); + testResult.Num(iTestPass); + fileText.Write(testResult); + resultFile.Close(); + fileSession.Close(); + CleanupStack::PopAndDestroy(&resultFile); + CleanupStack::PopAndDestroy(&fileSession); + } + +TInt TestCapability(TInt aTest, TDes& aCapability, TInt aExternalGroupId) + { + _LIT(KDllName,"CLICK"); + RWsSession ws; + ws.Connect(); + CleanupClosePushL(ws); + RWindowGroup gr1(ws); + RWindowGroup gr2(ws); + gr1.Construct(EWindowGroupHandle,EFalse); + gr2.Construct(EWindowGroupHandle2,EFalse); + CleanupClosePushL(gr1); + CleanupClosePushL(gr2); + TWsEvent event; + RSoundPlugIn click1(ws); + CWsScreenDevice *screenDevice; + TRawEvent rawEvent; + CPalette* defPalette=CPalette::NewDefaultL(EColor256); + TInt ret=KErrNone; + switch(aTest) + { + case 0: + // ws.LogMessage(_L("EWsClOpSetKeyboardRepeatRate Capability Check")); + gTheTestCapability=EWriteDeviceData; + ret=ws.SetKeyboardRepeatRate(TTimeIntervalMicroSeconds32(1000000), TTimeIntervalMicroSeconds32(500000)); + ws.Flush(); + break; + case 1: + // ws.LogMessage(_L("EWsClOpSetDoubleClick Capability Check")); + gTheTestCapability=EWriteDeviceData; + ret=ws.SetDoubleClick(TTimeIntervalMicroSeconds32(900000),10); + ws.Flush(); + break; + case 2: + // ws.LogMessage(_L("EWsClOpSendEventToWindowGroup (external group) Capability Check")); + gTheTestCapability=ESwEvent; + event.SetType(EEventModifiersChanged); + ret=ws.SendEventToWindowGroup(aExternalGroupId,event); + break; + case 3: + // ws.LogMessage(_L("EWsClOpSendEventToAllWindowGroup Capability Check")); + gTheTestCapability=ESwEvent; + event.SetType(EEventModifiersChanged); + ret=ws.SendEventToAllWindowGroups(event); + break; + case 4: + // ws.LogMessage(_L("EWsClOpSendEventToAllWindowGroupPriority Capability Check")); + gTheTestCapability=ESwEvent; + event.SetType(EEventModifiersChanged); + gr1.SetOrdinalPosition(0,1); + ret=ws.SendEventToAllWindowGroups(gr1.OrdinalPriority(),event); + break; + case 5: + // ws.LogMessage(_L("EWsClOpSendEventToOneWindowGroupPerClient Capability Check")); + gTheTestCapability=ESwEvent; + event.SetType(EEventModifiersChanged); + ret=ws.SendEventToOneWindowGroupsPerClient(event); + break; + case 6: + // ws.LogMessage(_L("EWsClOpSendMessageToWindowGroup (external group) Capability Check")); + gTheTestCapability=ESwEvent; + ret=ws.SendMessageToWindowGroup(aExternalGroupId,TUid::Uid(123),_L8("SomeParams")); + break; + case 7: + // ws.LogMessage(_L("EWsClOpClaimSystemPointerCursorList Capability Check")); + gTheTestCapability=EWriteDeviceData; + ret=ws.ClaimSystemPointerCursorList(); + //This may return KErrInUse if succeeds. + if(ret==KErrInUse) + { + ret=KErrNone; + } + break; + case 8: + // ws.LogMessage(_L("EWsClOpSetClientCursorMode Capability Check")); + gTheTestCapability=EWriteDeviceData; + ret=ws.SetClientCursorMode(EPointerCursorNone); + ws.Flush(); + break; + case 9: + //Check only if capability is not defined,since the windowgroup is not focused. + if(aCapability.Compare(KCAPABILITY_ALL)&&aCapability.Compare(KWRITEDATA_POWERMGMT)&&aCapability.Compare(KWRITEDATA_SWEVENT)) + { + // ws.LogMessage(_L("EWsClOpSetPointerCursorPosition Capability Check")); + gTheTestCapability=EWriteDeviceData; + ret=ws.SetPointerCursorPosition(TPoint(60,20)); + ws.Flush(); + } + else + { + gTheTestCapability=EDoNotTest; + } + break; + case 10: + // ws.LogMessage(_L("EWsClOpSetModifierState Capability Check")); + gTheTestCapability=EWriteDeviceData; + ret=ws.SetModifierState(EModifierCapsLock,ETurnOnModifier); + ret=ws.SetModifierState(EModifierCapsLock,ETurnOffModifier); + ws.Flush(); + break; + case 11: + { + // ws.LogMessage(_L("EWsClOpRawEvent Capability Check")); + gTheTestCapability=ESwEvent; + rawEvent.Set(TRawEvent::EActive); + ws.SimulateRawEvent(rawEvent); + ws.Flush(); + } + break; + case 12: + { + // ws.LogMessage(_L("EWsClOpKeyEvent Capability Check")); + gTheTestCapability=ESwEvent; + TKeyEvent keyEvent; + keyEvent.iCode='J'; + keyEvent.iScanCode=0; + keyEvent.iModifiers=EModifierAutorepeatable; + keyEvent.iRepeats=0; + ws.SimulateKeyEvent(keyEvent); + ws.Flush(); + } + break; + case 13: + // ws.LogMessage(_L("EWsClOpSendOffEventsToShell Capability Check")); + gTheTestCapability=EPowerMgmt; + ret=ws.RequestOffEvents(EFalse); + break; + case 14: + // ws.LogMessage(_L("EWsClOpSetFaded Capability Check")); + gTheTestCapability=EWriteDeviceData; + ret=ws.SetSystemFaded(EFalse); + break; + case 15: + //Since there is some problem in running the EWsClOpNoFlickerFree + //code this test is not run if WriteDeviceData capability is defined. + // ws.LogMessage(_L("EWsClOpNoFlickerFree Capability Check")); + if(aCapability.Compare(KCAPABILITY_ALL)&&aCapability.Compare(KWRITEDATA_POWERMGMT)&&aCapability.Compare(KWRITEDATA_SWEVENT)) + { + CWsScreenDevice* screen = new (ELeave) CWsScreenDevice(ws); + gTheTestCapability=EWriteDeviceData; + TInt err; + if ((err=screen->Construct(0))!=KErrNone) + { + delete screen; + User::Leave(err); + } + ws.TestWrite(ws.WsHandle(), EWsClOpNoFlickerFree, NULL, 0); + ws.Flush(); + delete screen; + } + else + { + gTheTestCapability=EDoNotTest; + } + break; + case 16: + // ws.LogMessage(_L("EWsClOpSetFocusScreen Capability Check")); + gTheTestCapability=EWriteDeviceData; + ret=ws.SetFocusScreen(0); + break; + case 17: + { + //Check only if capability is not defined. Otherwise it will shut down the shell. + if(aCapability.Compare(KCAPABILITY_ALL)&&aCapability.Compare(KWRITEDATA_POWERMGMT)&&aCapability.Compare(KPOWERMGMT_SWEVENT)) + { + // ws.LogMessage(_L("EWservMessShutdown Capability Check")); + gTheTestCapability=EPowerMgmt; + RShellWsSession wsShell; + wsShell.Connect(); + wsShell.ShutDown(); + } + else + { + gTheTestCapability=EDoNotTest; + } + break; + } + case 18: + // ws.LogMessage(_L("EWsWinOpCaptureKey Capability Check")); + gTheTestCapability=ESwEvent; + ret=gr2.CaptureKey('a',EModifierFunc,EModifierFunc); + //If the function succeeds capability check,the ret value is handle identifying the capture key. + if(ret>0) + { + ret=KErrNone; + } + break; + case 19: + // ws.LogMessage(_L("EWsWinOpCaptureKeyUpsAndDowns Capability Check")); + gTheTestCapability=ESwEvent; + ret=gr2.CaptureKeyUpAndDowns('a',0,0); + //If the function succeeds capability check,the ret value is handle identifying the capture key. + if(ret>0) + { + ret=KErrNone; + } + break; + case 20: + // ws.LogMessage(_L("EWsWinOpCaptureLongKey Capability Check")); + gTheTestCapability=ESwEvent; + ret=gr2.CaptureLongKey(EKeyEscape,'e',0,0,2,ELongCaptureNormal|ELongCaptureRepeatEvents); + //If the function succeeds capability check,the ret value is handle identifying the capture key. + if(ret>0) + { + ret=KErrNone; + } + break; + case 21: + // ws.LogMessage(_L("EWsClickOpLoad Capability Check")); + gTheTestCapability=EWriteDeviceData; + click1.Construct(); + CleanupClosePushL(click1); + ret=click1.Load(KDllName); + CleanupStack::PopAndDestroy(&click1); + break; + case 22: + // ws.LogMessage(_L("EWsClickOpUnLoad Capability Check")); + gTheTestCapability=EWriteDeviceData; + click1.Construct(); + ret=click1.Unload(); + break; + case 23: + // ws.LogMessage(_L("EWsSdOpSetScreenMode Capability Check")); + gTheTestCapability=EWriteDeviceData; + screenDevice=new(ELeave) CWsScreenDevice(ws); + CleanupStack::PushL(screenDevice); + screenDevice->Construct(0); + screenDevice->SetScreenMode(0); + CleanupStack::PopAndDestroy(screenDevice); + break; + case 24: + // ws.LogMessage(_L("EWsSdOpSetScreenModeEnforcement Capability Check")); + gTheTestCapability=EWriteDeviceData; + screenDevice=new(ELeave) CWsScreenDevice(ws); + CleanupStack::PushL(screenDevice); + screenDevice->Construct(0); + screenDevice->SetScreenModeEnforcement(ESizeEnforcementNone); + ws.Flush(); + CleanupStack::PopAndDestroy(screenDevice); + break; + case 25: + { + // ws.LogMessage(_L("EWsSdOpSetPalette Capability Check")); + gTheTestCapability=EWriteDeviceData; + screenDevice=new(ELeave) CWsScreenDevice(ws); + CleanupStack::PushL(screenDevice); + screenDevice->Construct(0); + ret=screenDevice->SetCustomPalette(defPalette); + //Returns KErrNotSupported if succeeds capability check. + if(ret==KErrNotSupported) + { + ret=KErrNone; + } + CleanupStack::PopAndDestroy(screenDevice); + } + break; + case 26: + { + //Checking the capability for SetHotKeys + // ws.LogMessage(_L("EWsClOpSetHotKey Capability Check")); + gTheTestCapability=ESwEvent; + ret=ws.SetHotKey(EHotKeyEnableLogging,'e',EModifierFunc|EModifierCtrl|EModifierShift,0); + ws.Flush(); + } + break; + case 27: + { + //Checking the capability for ClearHotKeys + // ws.LogMessage(_L("EWsClOpClearHotKeys Capability Check")); + gTheTestCapability=ESwEvent; + ret=ws.ClearHotKeys(EHotKeyEnableLogging); + ws.Flush(); + } + break; + case 28: + // ws.LogMessage(_L("EWsClOpSendEventToWindowGroup (own group) Capability Check")); + gTheTestCapability=ENoCapReq; + event.SetType(EEventModifiersChanged); + ret=ws.SendEventToWindowGroup(gr1.Identifier(),event); + break; + case 29: + // ws.LogMessage(_L("EWsClOpSendMessageToWindowGroup (own group) Capability Check")); + gTheTestCapability=ENoCapReq; + ret=ws.SendMessageToWindowGroup(gr1.Identifier(),TUid::Uid(123),_L8("SomeParams")); + break; + case 30: + // ws.LogMessage(_L("EWsClOpSetBackLight Capability Check")); + gTheTestCapability=EEikSrvSID; + screenDevice=new(ELeave) CWsScreenDevice(ws); + CleanupStack::PushL(screenDevice); + screenDevice->Construct(0); + ret=screenDevice->SetBackLight(ETrue); //Always returns KErrPermissionDenied. + CleanupStack::PopAndDestroy(screenDevice); + break; + case 31: + { + TBool test=EFalse; + if(!aCapability.Compare(KCAPABILITY_ALL)) + { + gTheTestCapability=ESwEventPri; + test=ETrue; + } + else if(!aCapability.Compare(KCAPABILITY_NONE)) + { + gTheTestCapability=ENoSwEventPri; + test=ETrue; + } + else + { + gTheTestCapability=EDoNotTest; + } + if(test) + { + LogMessageText.Format(KSetOrdinalPositionPri); + ws.LogMessage(LogMessageText); + gr1.SetOrdinalPosition(0,KPasswordWindowGroupPriority); + ret=ws.GetWindowGroupOrdinalPriority(gr1.Identifier()); + } + } + break; + case 32: + if(!aCapability.Compare(KCAPABILITY_NONE)) + { + LogMessageText.Format(KSetOrdinalPositionPri); + ws.LogMessage(LogMessageText); + gTheTestCapability=ENoSwEventPriSmallOrdinal; + gr1.SetOrdinalPosition(0,KPasswordWindowGroupPriority-1); + ret=ws.GetWindowGroupOrdinalPriority(gr1.Identifier()); + } + else + { + gTheTestCapability=EDoNotTest; + } + break; + case 33: + { + TBool test=EFalse; + if(!aCapability.Compare(KCAPABILITY_ALL)) + { + gTheTestCapability=ESwEventErr; + test=ETrue; + } + else if(!aCapability.Compare(KCAPABILITY_NONE)) + { + gTheTestCapability=ENoSwEventErr; + test=ETrue; + } + else + { + gTheTestCapability=EDoNotTest; + } + if(test) + { + LogMessageText.Format(KSetOrdinalPositionErr); + ws.LogMessage(LogMessageText); + ret=gr1.SetOrdinalPositionErr(0,KPasswordWindowGroupPriority); + } + } + break; + case 34: + if(!aCapability.Compare(KCAPABILITY_NONE)) + { + LogMessageText.Format(KSetOrdinalPositionErr); + ws.LogMessage(LogMessageText); + gTheTestCapability=ENoSwEventErrSmallOrdinal; + ret=gr1.SetOrdinalPositionErr(0,KPasswordWindowGroupPriority-1); + } + else + { + gTheTestCapability=EDoNotTest; + } + break; + case 35: + // EWsClOpSetCloseProximityThresholds Capability Check + gTheTestCapability=EWriteDeviceData; + ret=ws.SetCloseProximityThresholds(-20, -50); + ws.SetCloseProximityThresholds(KMaxTInt, KMinTInt); + break; + case 36: + // EWsClOpSetHighPressureThresholds Capability Check + gTheTestCapability=EWriteDeviceData; + ret=ws.SetHighPressureThresholds(4000, 2000); + ws.SetHighPressureThresholds(KMaxTInt, KMinTInt); + break; + default: + ret=gTestState=EWsTestFinished; + } + CleanupStack::PopAndDestroy(&gr2); + CleanupStack::PopAndDestroy(&gr1); + CleanupStack::PopAndDestroy(&ws); + return ret; + } + +void MainL() + { + TBuf<256> commandLine; + User::CommandLine(commandLine); + CTestBase testBase; + testBase.ConstructL(&commandLine); + TInt ii=0; + while(gTestState!=EWsTestFinished) + testBase.TestWsPanicL(&TestCapability,ii++,commandLine) ; +// testBase.UpdateLogsL(); + } + +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + CTrapCleanup* cleanUpStack=CTrapCleanup::New(); + if(cleanUpStack==NULL) + { + return KErrNoMemory; + } + TRAP_IGNORE(MainL()) + delete cleanUpStack; + __UHEAP_MARKEND; + return(KErrNone); + }