diff -r bbd31066657e -r 8bb370ba6d1d testexecfw/stf/stffw/event/src/SUEventCases.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testexecfw/stf/stffw/event/src/SUEventCases.cpp Fri Apr 09 10:46:28 2010 +0800 @@ -0,0 +1,312 @@ +/* +* 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: This file contains SUEvent module implementation. +* +*/ + +// INCLUDE FILES +#include +#include "SUEvent.h" +#include + +#include + +// EXTERNAL DATA STRUCTURES +//extern ?external_data; + +// EXTERNAL FUNCTION PROTOTYPES +//extern ?external_function( ?arg_type,?arg_type ); + +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def + +// LOCAL CONSTANTS AND MACROS +//const ?type ?constant_var = ?constant; +//#define ?macro_name ?macro_def + +// MODULE DATA STRUCTURES +//enum ?declaration +//typedef ?declaration + +// LOCAL FUNCTION PROTOTYPES +//?type ?function_name( ?arg_type, ?arg_type ); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// ?function_name ?description. +// ?description +// Returns: ?value_1: ?description +// ?value_n: ?description_line1 +// ?description_line2 +// ----------------------------------------------------------------------------- +// +/* +?type ?function_name( + ?arg_type arg, // ?description + ?arg_type arg) // ?description + { + + ?code // ?comment + + // ?comment + ?code + } +*/ + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CSUEvent::Case +// Returns a test case by number. +// +// This function contains an array of all available test cases +// i.e pair of case name and test function. If case specified by parameter +// aCaseNumber is found from array, then that item is returned. +// +// The reason for this rather complicated function is to specify all the +// test cases only in one place. It is not necessary to understand how +// function pointers to class member functions works when adding new test +// cases. See function body for instructions how to add new test case. +// ----------------------------------------------------------------------------- +// +const TCaseInfo CSUEvent::Case ( + const TInt aCaseNumber ) const + { + + /** + * To add new test cases, implement new test case function and add new + * line to KCases array specify the name of the case and the function + * doing the test case + * In practice, do following + * 1) Make copy of existing test case function and change its name + * and functionality. Note that the function must be added to + * SUEvent.cpp file and to SUEvent.h + * header file. + * + * 2) Add entry to following KCases array either by using: + * + * 2.1: FUNCENTRY or ENTRY macro + * ENTRY macro takes two parameters: test case name and test case + * function name. + * + * FUNCENTRY macro takes only test case function name as a parameter and + * uses that as a test case name and test case function name. + * + * Or + * + * 2.2: OOM_FUNCENTRY or OOM_ENTRY macro. Note that these macros are used + * only with OOM (Out-Of-Memory) testing! + * + * OOM_ENTRY macro takes five parameters: test case name, test case + * function name, TBool which specifies is method supposed to be run using + * OOM conditions, TInt value for first heap memory allocation failure and + * TInt value for last heap memory allocation failure. + * + * OOM_FUNCENTRY macro takes test case function name as a parameter and uses + * that as a test case name, TBool which specifies is method supposed to be + * run using OOM conditions, TInt value for first heap memory allocation + * failure and TInt value for last heap memory allocation failure. + */ + + static TCaseInfoInternal const KCases[] = + { + // To add new test cases, add new items to this array + + // NOTE: When compiled to GCCE, there must be Classname:: + // declaration in front of the method name, e.g. + // CSUEvent::PrintTest. Otherwise the compiler + // gives errors. + + //sets event as state event + ENTRY("SetEventState", CSUEvent::SetEventState), + //sets event as indication event + ENTRY("SetEventIndication", CSUEvent::SetEventIndication), + //unsets event + ENTRY("UnsetEvent", CSUEvent::UnsetEvent), + //waits for evenr + ENTRY("WaitEvent", CSUEvent::WaitEvent), + //sets event as indication in hard mode + ENTRY("SetEventIndicationHard", CSUEvent::SetEventIndicationHard), + // Example how to use OOM functionality + //OOM_ENTRY( "Loop test with OOM", CSUEvent::LoopTest, ETrue, 2, 3), + //OOM_FUNCENTRY( CSUEvent::PrintTest, ETrue, 1, 3 ), + }; + + // Verify that case number is valid + if( (TUint) aCaseNumber >= sizeof( KCases ) / + sizeof( TCaseInfoInternal ) ) + { + // Invalid case, construct empty object + TCaseInfo null( (const TText*) L"" ); + null.iMethod = NULL; + null.iIsOOMTest = EFalse; + null.iFirstMemoryAllocation = 0; + null.iLastMemoryAllocation = 0; + return null; + } + + // Construct TCaseInfo object and return it + TCaseInfo tmp ( KCases[ aCaseNumber ].iCaseName ); + tmp.iMethod = KCases[ aCaseNumber ].iMethod; + tmp.iIsOOMTest = KCases[ aCaseNumber ].iIsOOMTest; + tmp.iFirstMemoryAllocation = KCases[ aCaseNumber ].iFirstMemoryAllocation; + tmp.iLastMemoryAllocation = KCases[ aCaseNumber ].iLastMemoryAllocation; + return tmp; + + } + +//#0 +TInt CSUEvent::SetEventState(TTestResult& aResult, const TFileName& aEventName) + { +//RDebug::Print(_L(" CSUEvent::SetEventState start event_name=%S (%d)"), &aEventName, RThread().Id().Id()); + iLog->Log(_L("CSUEvent::SetEventState event=%S"), &aEventName); + + //Set state event + TEventIf setEvent(TEventIf::ESetEvent, aEventName, TEventIf::EState); +//RDebug::Print(_L(" CSUEvent::SetEventState call Event (%d)"), RThread().Id().Id()); + TestModuleIf().Event(setEvent); + +//RDebug::Print(_L(" CSUEvent::SetEventState call SetResult (%d)"), RThread().Id().Id()); + aResult.SetResult(KErrNone, _L("")); + +//RDebug::Print(_L(" CSUEvent::SetEventState end (%d)"), RThread().Id().Id()); + return KErrNone; + } + +//#1 +TInt CSUEvent::SetEventIndication(TTestResult& aResult, const TFileName& aEventName) + { +//RDebug::Print(_L(" CSUEvent::SetEventIndication start event_name=%S (%d)"), &aEventName, RThread().Id().Id()); + iLog->Log(_L("CSUEvent::SetEventIndication event=%S"), &aEventName); + + //Set indication event + TEventIf setEvent(TEventIf::ESetEvent, aEventName, TEventIf::EIndication); +//RDebug::Print(_L(" CSUEvent::SetEventIndication call Event (%d)"), RThread().Id().Id()); + TestModuleIf().Event(setEvent); + +//RDebug::Print(_L(" CSUEvent::SetEventIndication call SetResult (%d)"), RThread().Id().Id()); + aResult.SetResult(KErrNone, _L("")); +//RDebug::Print(_L(" CSUEvent::SetEventIndication end (%d)"), RThread().Id().Id()); + return KErrNone; + } + +//#2 +TInt CSUEvent::UnsetEvent(TTestResult& aResult, const TFileName& aEventName) + { +RDebug::Print(_L("CSUEvent::UnsetEvent start event_name=%S"), &aEventName); + iLog->Log(_L("CSUEvent::UnsetEvent event=%S"), &aEventName); + + //Unset event + TEventIf event(TEventIf::EUnsetEvent, aEventName, TEventIf::EState); +RDebug::Print(_L("CSUEvent::UnsetEvent call Event")); + TestModuleIf().Event(event); + +RDebug::Print(_L("CSUEvent::UnsetEvent call SetResult")); + aResult.SetResult(KErrNone, _L("")); +RDebug::Print(_L("CSUEvent::UnsetEvent end")); + return KErrNone; + } + + +//#3 +TInt CSUEvent::WaitEvent(TTestResult& aResult, const TFileName& aEventName) + { +//RDebug::Print(_L(" CSUEvent::WaitEvent start event name=%S (%d)"), &aEventName, RThread().Id().Id()); + iLog->Log(_L("CSUEvent::WaitEvent event=%S"), &aEventName); + + //Request, wait for, and release event +//RDebug::Print(_L(" CSUEvent::WaitEvent set event request (%d)"), RThread().Id().Id()); + TEventIf event(TEventIf::EReqEvent, aEventName, TEventIf::EState); +//RDebug::Print(_L(" CSUEvent::WaitEvent call Event (%d)"), RThread().Id().Id()); + TestModuleIf().Event(event); +//RDebug::Print(_L(" CSUEvent::WaitEvent set event (%d)"), RThread().Id().Id()); + event.SetType(TEventIf::EWaitEvent); +//RDebug::Print(_L(" CSUEvent::WaitEvent call Event (%d)"), RThread().Id().Id()); + TestModuleIf().Event(event); +//RDebug::Print(_L(" CSUEvent::WaitEvent set event release (%d)"), RThread().Id().Id()); + event.SetType(TEventIf::ERelEvent); +//RDebug::Print(_L(" CSUEvent::WaitEvent call Event (%d)"), RThread().Id().Id()); + TestModuleIf().Event(event); + +//RDebug::Print(_L(" CSUEvent::WaitEvent call SetResult (%d)"), RThread().Id().Id()); + aResult.SetResult(KErrNone, _L("")); +//RDebug::Print(_L(" CSUEvent::WaitEvent end (%d)"), RThread().Id().Id()); + return KErrNone; + } + + +//#4 +TInt CSUEvent::SetEventIndicationHard(TTestResult& aResult, const TFileName& /*aEventName*/) + { +//RDebug::Print(_L(" CSUEvent::SetEventIndicationHard start (%d)"), RThread().Id().Id()); + iLog->Log(_L("CSUEvent::SetEventIndicationHard")); + + TBuf<20> eventName; + eventName.Copy(_L("event1")); + //Set indication event + TEventIf setEvent(TEventIf::ESetEvent, eventName, TEventIf::EIndication); +//RDebug::Print(_L(" CSUEvent::SetEventIndicationHard call Event (%d)"), RThread().Id().Id()); + TestModuleIf().Event(setEvent); + +//RDebug::Print(_L(" CSUEvent::SetEventIndicationHard call SetResult (%d)"), RThread().Id().Id()); + aResult.SetResult(KErrNone, _L("")); +//RDebug::Print(_L(" CSUEvent::SetEventIndicationHard end (%d)"), RThread().Id().Id()); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +/* +?type ?classname::?member_function( + ?arg_type arg, + ?arg_type arg ) + { + + ?code + + } +*/ + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// ----------------------------------------------------------------------------- +// ?function_name implements... +// ?implementation_description. +// Returns: ?value_1: ?description +// ?value_n: ?description +// ?description +// ----------------------------------------------------------------------------- +// +/* +?type ?function_name( + ?arg_type arg, // ?description + ?arg_type arg ) // ?description + { + + ?code + + } +*/ +// End of File