--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/tsrc/public/basic/common/basetest/src/basetest.cpp Tue Sep 21 11:25:55 2010 -0500
@@ -0,0 +1,295 @@
+/*
+* Copyright (c) 2002 - 2007 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: Base Class Scripted STIF cases
+*
+*/
+
+// INCLUDE FILES
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include "basetest.h"
+
+
+// -----------------------------------------------------------------------------
+// CBaseTest::CCollectionHelperTest
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CBaseTest::CBaseTest( CTestModuleIf& aTestModuleIf ):
+ CScriptBase( aTestModuleIf ),
+ iTestModuleIf(aTestModuleIf)
+ {
+ }
+
+// Destructor
+EXPORT_C CBaseTest::~CBaseTest()
+ {
+ // Delete logger
+ delete iLog;
+ delete iTimeoutController;
+ }
+
+// -----------------------------------------------------------------------------
+// CBaseTest::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CBaseTest::ConstructL()
+{
+ iTimeoutController = CSimpleTimeout::NewL (this, iLog);
+}
+
+// -----------------------------------------------------------------------------
+// CBaseTest::EventName
+// Return descriptor with the notification description
+// -----------------------------------------------------------------------------
+EXPORT_C TPtrC CBaseTest::EventName( TInt aKey )
+{
+ static TText* const badKeyword = (TText*)L"BadKeyword";
+ static TText* const keywords[] = {
+ (TText*)L"EColHandleCollectionMessage",
+ (TText*)L"EColHandleOpen",
+ (TText*)L"EColHandleAddFileComplete",
+ (TText*)L"EColHandleRemove",
+ (TText*)L"EColHandleFindAllComplete",
+ (TText*)L"EPlaHandlePlaybackMessage1",
+ (TText*)L"EPlaHandlePlaybackMessage2"
+ };
+
+ if( (TUint)aKey >= (sizeof( keywords )/sizeof(TText*)) )
+ {
+ iLog->Log(_L("Keyword out of bounds"));
+ TPtrC keyword( badKeyword );
+ return keyword;
+ }
+ else
+ {
+ TPtrC keyword( keywords[aKey] );
+ return keyword;
+ }
+}
+
+// -----------------------------------------------------------------------------
+// CBaseTest::AddExpectedEvent
+// Add an event to the expected events' list
+// -----------------------------------------------------------------------------
+EXPORT_C void CBaseTest::AddExpectedEvent(TExpectedEvent event, TInt ms)
+{
+ FTRACE(FPrint(_L("CBaseTest::AddExpectedEvent")));
+ iExpectedEvents.Append(event);
+ TPtrC eventName = EventName(event);
+ iLog->Log(_L("Adding expected event:(0x%02x)%S Total=%d"), event,
+ &eventName, iExpectedEvents.Count() );
+
+ if ( iTimeoutController && !iTimeoutController->IsActive() )
+ {
+ if (ms > 0)
+ {
+ iTimeoutController->Start( TTimeIntervalMicroSeconds(ms * 1000) );
+ }
+ else
+ {
+ iLog->Log(_L("Timeout with default value (1s)"));
+ iTimeoutController->Start( TTimeIntervalMicroSeconds(1000000) );
+ }
+ }
+}
+
+// -----------------------------------------------------------------------------
+// CBaseTest::RemoveExpectedEvent
+// Remove the indicated event from the expected events' list
+// Returns: ETrue: Event found.
+// EFalse: Event not found.
+// -----------------------------------------------------------------------------
+EXPORT_C TBool CBaseTest::RemoveExpectedEvent(TExpectedEvent aEvent)
+{
+ FTRACE(FPrint(_L("CBaseTest::RemoveExpectedEvent")));
+ TBool match = EFalse;
+ for (TUint i=0; i < iExpectedEvents.Count() ; i++)
+ {
+ if (iExpectedEvents[i] == aEvent)
+ {
+ iExpectedEvents.Remove(i);
+ match = ETrue;
+ break;
+ }
+ }
+
+ return match;
+}
+
+
+// -----------------------------------------------------------------------------
+// CBaseTest::RemoveAllExpectedEvents
+// Remove the indicated event from the expected events' list
+// -----------------------------------------------------------------------------
+EXPORT_C void CBaseTest::RemoveAllExpectedEvents()
+{
+ FTRACE(FPrint(_L("CBaseTest::RemoveAllExpectedEvents")));
+ iLog->Log(_L("Removing all expected events"));
+
+ iExpectedEvents.Reset();
+ iOcurredEvents.Reset();
+}
+
+
+// -----------------------------------------------------------------------------
+// CBaseTest::ProcessEvent
+// Process events.
+// -----------------------------------------------------------------------------
+EXPORT_C void CBaseTest::ProcessEvent(TExpectedEvent aEvent, TInt aError)
+{
+ FTRACE(FPrint(_L("CBaseTest::ProcessExpectedEvent")));
+ TPtrC nameEvent = EventName(aEvent);
+
+ // Check for error
+ if (aError == KErrNone)
+ {
+ // Remove the event
+ if (RemoveExpectedEvent(aEvent))
+ {
+ iLog->Log(_L("Expected Event: (0x%02x)%S has ocurred Total=%d"),
+ aEvent, &nameEvent,iExpectedEvents.Count());
+ }
+ else
+ {
+ iLog->Log(_L("Event: (0x%02x)%S has ocurred"), aEvent, &nameEvent);
+ return;
+ }
+
+ // All expected events have ocurred
+ if (iExpectedEvents.Count() == 0 )
+ {
+ Signal();
+ iTimeoutController->Cancel();
+ }
+ }
+ else
+ {
+ iLog->Log(_L("[Error] Event: (0x%02x)%S return with error code=%d"),
+ aEvent, &nameEvent, aError);
+
+ if (iExpectedEvents.Count() != 0 )
+ {
+ RemoveExpectedEvent(aEvent);
+ }
+
+ iTimeoutController->Cancel();
+ Signal(KErrCallbackErrorCode);
+ }
+}
+
+// -----------------------------------------------------------------------------
+// CBaseTest::HandleTimeout
+// Review if all the expected events have ocurred once the time is over
+// -----------------------------------------------------------------------------
+EXPORT_C void CBaseTest::HandleTimeout(TInt aError)
+{
+ FTRACE(FPrint(_L("CBaseTest::HandleTimeout")));
+ // All expected events have ocurred
+ if (aError != KErrNone)
+ {
+ if (iExpectedEvents.Count() == 0 )
+ {
+ iLog->Log(_L("Timing out but events have ocurred"));
+ Signal();
+ }
+ else
+ {
+ RemoveAllExpectedEvents();
+ iLog->Log(_L("Timing out and events still pending"));
+ Signal(KErrEventPending);
+ }
+ }
+ else
+ {
+ iLog->Log(_L("Timing out return a error %d"), aError);
+ Signal(aError);
+ }
+}
+
+// -----------------------------------------------------------------------------
+// CBaseTest::SetTimeout
+// Create a timer and set a timeout
+// When the timeout is reached the test case is marked as failed
+// It's used rather than the "timeout" keyword in the configuration file
+// because in this way the log continues
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CBaseTest::SetTimeout( CStifItemParser& aItem )
+{
+ FTRACE(FPrint(_L("CBaseTest::SetTimeout")));
+ TInt timeout=0;
+ TInt error = aItem.GetNextInt(timeout) ;
+ if ( iTimeoutController )
+ {
+ if ( timeout > 0 )
+ {
+ iTimeoutController->Start( TTimeIntervalMicroSeconds(timeout*1000) );
+ }
+ else
+ {
+ iTimeoutController->Start( TTimeIntervalMicroSeconds(1000000) );
+ }
+ }
+ else
+ {
+ iLog->Log(_L("Timeout Controller doesn't exist"));
+ error = KErrTimeoutController;
+ }
+ return error;
+}
+
+
+// -----------------------------------------------------------------------------
+// Uses the TestModuleBase API to allow a panic as exit reason for a test case
+// Returns: Symbian OS errors.
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CBaseTest::SetAllowedPanic( CStifItemParser& aItem )
+{
+ FTRACE(FPrint(_L("CBaseTest::SetAllowedPanic")));
+ TInt error = KErrNone;
+ TInt panicCode;
+ TPtrC panicType;
+ if ( ( KErrNone == aItem.GetNextString(panicType) ) &&
+ ( KErrNone == aItem.GetNextInt(panicCode) ) )
+ {
+ iLog->Log(_L("Allowing panic: %S %d"), &panicType, panicCode);
+ iTestModuleIf.SetExitReason( CTestModuleIf::EPanic, panicCode );
+ iNormalExitReason = EFalse;
+ }
+ else
+ {
+ iLog->Log(KMsgBadTestParameters);
+ error = KErrBadTestParameter;
+ }
+ return error;
+}
+
+// -----------------------------------------------------------------------------
+// CBaseTest::SetExpectedEvents()
+// Returns: Symbian OS errors.
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CBaseTest::SetExpectedEvents( CStifItemParser& aItem )
+{
+ FTRACE(FPrint(_L("CBaseTest::SetExpectedEvents")));
+ TInt error = KErrNone;
+ TInt event=0;
+ while ( KErrNone == aItem.GetNextInt(event))
+ {
+ AddExpectedEvent(static_cast<TExpectedEvent>(event), 0); // Default timeout value
+ }
+ return error;
+}