mpx/tsrc/public/basic/common/basetest/src/basetest.cpp
author hgs
Tue, 21 Sep 2010 11:25:55 -0500
changeset 62 b276843a15ba
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
62
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Base Class Scripted STIF cases
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
// INCLUDE FILES
hgs
parents:
diff changeset
    19
#include <e32svr.h>
hgs
parents:
diff changeset
    20
#include <StifParser.h>
hgs
parents:
diff changeset
    21
#include <Stiftestinterface.h>
hgs
parents:
diff changeset
    22
#include "basetest.h"
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    26
// CBaseTest::CCollectionHelperTest
hgs
parents:
diff changeset
    27
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
    28
// might leave.
hgs
parents:
diff changeset
    29
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    30
//
hgs
parents:
diff changeset
    31
EXPORT_C CBaseTest::CBaseTest( CTestModuleIf& aTestModuleIf ):
hgs
parents:
diff changeset
    32
        CScriptBase( aTestModuleIf ), 
hgs
parents:
diff changeset
    33
        iTestModuleIf(aTestModuleIf)
hgs
parents:
diff changeset
    34
    {   
hgs
parents:
diff changeset
    35
    }
hgs
parents:
diff changeset
    36
    
hgs
parents:
diff changeset
    37
// Destructor
hgs
parents:
diff changeset
    38
EXPORT_C CBaseTest::~CBaseTest()
hgs
parents:
diff changeset
    39
    { 
hgs
parents:
diff changeset
    40
    // Delete logger
hgs
parents:
diff changeset
    41
    delete iLog; 
hgs
parents:
diff changeset
    42
    delete iTimeoutController;
hgs
parents:
diff changeset
    43
    }
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    46
// CBaseTest::ConstructL
hgs
parents:
diff changeset
    47
// Symbian 2nd phase constructor can leave.
hgs
parents:
diff changeset
    48
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    49
//
hgs
parents:
diff changeset
    50
EXPORT_C void CBaseTest::ConstructL()
hgs
parents:
diff changeset
    51
{
hgs
parents:
diff changeset
    52
    iTimeoutController = CSimpleTimeout::NewL (this, iLog);
hgs
parents:
diff changeset
    53
}
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    56
// CBaseTest::EventName
hgs
parents:
diff changeset
    57
// Return descriptor with the notification description
hgs
parents:
diff changeset
    58
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    59
EXPORT_C TPtrC CBaseTest::EventName( TInt aKey )
hgs
parents:
diff changeset
    60
{
hgs
parents:
diff changeset
    61
    static TText* const badKeyword = (TText*)L"BadKeyword";
hgs
parents:
diff changeset
    62
    static TText* const keywords[] = {
hgs
parents:
diff changeset
    63
        (TText*)L"EColHandleCollectionMessage",
hgs
parents:
diff changeset
    64
        (TText*)L"EColHandleOpen",
hgs
parents:
diff changeset
    65
        (TText*)L"EColHandleAddFileComplete",
hgs
parents:
diff changeset
    66
        (TText*)L"EColHandleRemove",
hgs
parents:
diff changeset
    67
        (TText*)L"EColHandleFindAllComplete",
hgs
parents:
diff changeset
    68
        (TText*)L"EPlaHandlePlaybackMessage1",
hgs
parents:
diff changeset
    69
        (TText*)L"EPlaHandlePlaybackMessage2"
hgs
parents:
diff changeset
    70
    };
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
    if( (TUint)aKey >= (sizeof( keywords )/sizeof(TText*)) )
hgs
parents:
diff changeset
    73
    {
hgs
parents:
diff changeset
    74
        iLog->Log(_L("Keyword out of bounds"));
hgs
parents:
diff changeset
    75
        TPtrC keyword( badKeyword );
hgs
parents:
diff changeset
    76
        return keyword;
hgs
parents:
diff changeset
    77
    }
hgs
parents:
diff changeset
    78
    else
hgs
parents:
diff changeset
    79
    {
hgs
parents:
diff changeset
    80
        TPtrC keyword( keywords[aKey] );
hgs
parents:
diff changeset
    81
        return keyword;
hgs
parents:
diff changeset
    82
    }
hgs
parents:
diff changeset
    83
}
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    86
// CBaseTest::AddExpectedEvent
hgs
parents:
diff changeset
    87
// Add an event to the expected events' list
hgs
parents:
diff changeset
    88
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    89
EXPORT_C void CBaseTest::AddExpectedEvent(TExpectedEvent event, TInt ms)
hgs
parents:
diff changeset
    90
{
hgs
parents:
diff changeset
    91
    FTRACE(FPrint(_L("CBaseTest::AddExpectedEvent")));
hgs
parents:
diff changeset
    92
    iExpectedEvents.Append(event);
hgs
parents:
diff changeset
    93
    TPtrC eventName = EventName(event);
hgs
parents:
diff changeset
    94
    iLog->Log(_L("Adding expected event:(0x%02x)%S Total=%d"), event, 
hgs
parents:
diff changeset
    95
            &eventName, iExpectedEvents.Count() );
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
    if ( iTimeoutController && !iTimeoutController->IsActive() )
hgs
parents:
diff changeset
    98
    {
hgs
parents:
diff changeset
    99
        if (ms > 0)
hgs
parents:
diff changeset
   100
        {
hgs
parents:
diff changeset
   101
            iTimeoutController->Start( TTimeIntervalMicroSeconds(ms * 1000) );
hgs
parents:
diff changeset
   102
        }
hgs
parents:
diff changeset
   103
        else
hgs
parents:
diff changeset
   104
        {
hgs
parents:
diff changeset
   105
            iLog->Log(_L("Timeout with default value (1s)"));
hgs
parents:
diff changeset
   106
            iTimeoutController->Start( TTimeIntervalMicroSeconds(1000000) );
hgs
parents:
diff changeset
   107
        }
hgs
parents:
diff changeset
   108
    }
hgs
parents:
diff changeset
   109
}
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   112
// CBaseTest::RemoveExpectedEvent
hgs
parents:
diff changeset
   113
// Remove the indicated event from the expected events' list
hgs
parents:
diff changeset
   114
// Returns: ETrue: Event found.
hgs
parents:
diff changeset
   115
//          EFalse: Event not found.
hgs
parents:
diff changeset
   116
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   117
EXPORT_C TBool CBaseTest::RemoveExpectedEvent(TExpectedEvent aEvent)
hgs
parents:
diff changeset
   118
{
hgs
parents:
diff changeset
   119
    FTRACE(FPrint(_L("CBaseTest::RemoveExpectedEvent")));
hgs
parents:
diff changeset
   120
    TBool match = EFalse;
hgs
parents:
diff changeset
   121
    for (TUint i=0; i < iExpectedEvents.Count() ; i++)
hgs
parents:
diff changeset
   122
    {
hgs
parents:
diff changeset
   123
        if (iExpectedEvents[i] == aEvent)
hgs
parents:
diff changeset
   124
        {
hgs
parents:
diff changeset
   125
            iExpectedEvents.Remove(i);
hgs
parents:
diff changeset
   126
            match = ETrue;
hgs
parents:
diff changeset
   127
            break;
hgs
parents:
diff changeset
   128
        }
hgs
parents:
diff changeset
   129
    }
hgs
parents:
diff changeset
   130
hgs
parents:
diff changeset
   131
    return match;
hgs
parents:
diff changeset
   132
}
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   136
// CBaseTest::RemoveAllExpectedEvents
hgs
parents:
diff changeset
   137
// Remove the indicated event from the expected events' list
hgs
parents:
diff changeset
   138
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   139
EXPORT_C void CBaseTest::RemoveAllExpectedEvents()
hgs
parents:
diff changeset
   140
{
hgs
parents:
diff changeset
   141
    FTRACE(FPrint(_L("CBaseTest::RemoveAllExpectedEvents")));
hgs
parents:
diff changeset
   142
    iLog->Log(_L("Removing all expected events"));
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
    iExpectedEvents.Reset();
hgs
parents:
diff changeset
   145
    iOcurredEvents.Reset();
hgs
parents:
diff changeset
   146
}
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   150
// CBaseTest::ProcessEvent
hgs
parents:
diff changeset
   151
// Process events.
hgs
parents:
diff changeset
   152
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   153
EXPORT_C void CBaseTest::ProcessEvent(TExpectedEvent aEvent, TInt aError)
hgs
parents:
diff changeset
   154
{
hgs
parents:
diff changeset
   155
    FTRACE(FPrint(_L("CBaseTest::ProcessExpectedEvent")));
hgs
parents:
diff changeset
   156
    TPtrC nameEvent = EventName(aEvent);
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
    // Check for error
hgs
parents:
diff changeset
   159
    if (aError == KErrNone)
hgs
parents:
diff changeset
   160
    {
hgs
parents:
diff changeset
   161
        // Remove the event
hgs
parents:
diff changeset
   162
        if (RemoveExpectedEvent(aEvent))
hgs
parents:
diff changeset
   163
        {
hgs
parents:
diff changeset
   164
            iLog->Log(_L("Expected Event: (0x%02x)%S has ocurred Total=%d"), 
hgs
parents:
diff changeset
   165
                    aEvent, &nameEvent,iExpectedEvents.Count());
hgs
parents:
diff changeset
   166
        }
hgs
parents:
diff changeset
   167
        else
hgs
parents:
diff changeset
   168
        {
hgs
parents:
diff changeset
   169
            iLog->Log(_L("Event: (0x%02x)%S has ocurred"), aEvent, &nameEvent);
hgs
parents:
diff changeset
   170
            return;
hgs
parents:
diff changeset
   171
        }
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
        // All expected events have ocurred
hgs
parents:
diff changeset
   174
        if (iExpectedEvents.Count() == 0 )
hgs
parents:
diff changeset
   175
        {
hgs
parents:
diff changeset
   176
            Signal();
hgs
parents:
diff changeset
   177
            iTimeoutController->Cancel();
hgs
parents:
diff changeset
   178
        }
hgs
parents:
diff changeset
   179
    }
hgs
parents:
diff changeset
   180
    else
hgs
parents:
diff changeset
   181
    {
hgs
parents:
diff changeset
   182
        iLog->Log(_L("[Error] Event: (0x%02x)%S return with error code=%d"), 
hgs
parents:
diff changeset
   183
                aEvent, &nameEvent, aError);
hgs
parents:
diff changeset
   184
        
hgs
parents:
diff changeset
   185
        if (iExpectedEvents.Count() != 0 )
hgs
parents:
diff changeset
   186
        {
hgs
parents:
diff changeset
   187
            RemoveExpectedEvent(aEvent);
hgs
parents:
diff changeset
   188
        }
hgs
parents:
diff changeset
   189
        
hgs
parents:
diff changeset
   190
        iTimeoutController->Cancel();
hgs
parents:
diff changeset
   191
        Signal(KErrCallbackErrorCode);
hgs
parents:
diff changeset
   192
    }
hgs
parents:
diff changeset
   193
}
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   196
// CBaseTest::HandleTimeout
hgs
parents:
diff changeset
   197
// Review if all the expected events have ocurred once the time is over
hgs
parents:
diff changeset
   198
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   199
EXPORT_C void CBaseTest::HandleTimeout(TInt aError)
hgs
parents:
diff changeset
   200
{
hgs
parents:
diff changeset
   201
    FTRACE(FPrint(_L("CBaseTest::HandleTimeout")));
hgs
parents:
diff changeset
   202
    // All expected events have ocurred
hgs
parents:
diff changeset
   203
    if (aError != KErrNone)
hgs
parents:
diff changeset
   204
    {
hgs
parents:
diff changeset
   205
        if (iExpectedEvents.Count() == 0 )
hgs
parents:
diff changeset
   206
        {
hgs
parents:
diff changeset
   207
            iLog->Log(_L("Timing out but events have ocurred"));
hgs
parents:
diff changeset
   208
            Signal();
hgs
parents:
diff changeset
   209
        }
hgs
parents:
diff changeset
   210
        else
hgs
parents:
diff changeset
   211
        {
hgs
parents:
diff changeset
   212
            RemoveAllExpectedEvents();
hgs
parents:
diff changeset
   213
            iLog->Log(_L("Timing out and events still pending"));
hgs
parents:
diff changeset
   214
            Signal(KErrEventPending);
hgs
parents:
diff changeset
   215
        }
hgs
parents:
diff changeset
   216
    }
hgs
parents:
diff changeset
   217
    else
hgs
parents:
diff changeset
   218
    {
hgs
parents:
diff changeset
   219
        iLog->Log(_L("Timing out return a error %d"), aError);
hgs
parents:
diff changeset
   220
        Signal(aError);
hgs
parents:
diff changeset
   221
    }
hgs
parents:
diff changeset
   222
}
hgs
parents:
diff changeset
   223
hgs
parents:
diff changeset
   224
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   225
// CBaseTest::SetTimeout
hgs
parents:
diff changeset
   226
// Create a timer and set a timeout
hgs
parents:
diff changeset
   227
// When the timeout is reached the test case is marked as failed
hgs
parents:
diff changeset
   228
// It's used rather than the "timeout" keyword in the configuration file
hgs
parents:
diff changeset
   229
// because in this way the log continues
hgs
parents:
diff changeset
   230
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   231
EXPORT_C TInt CBaseTest::SetTimeout( CStifItemParser& aItem )
hgs
parents:
diff changeset
   232
{
hgs
parents:
diff changeset
   233
    FTRACE(FPrint(_L("CBaseTest::SetTimeout")));
hgs
parents:
diff changeset
   234
    TInt timeout=0;
hgs
parents:
diff changeset
   235
    TInt error = aItem.GetNextInt(timeout) ;
hgs
parents:
diff changeset
   236
    if ( iTimeoutController )
hgs
parents:
diff changeset
   237
    {
hgs
parents:
diff changeset
   238
        if ( timeout > 0 )
hgs
parents:
diff changeset
   239
        {
hgs
parents:
diff changeset
   240
            iTimeoutController->Start( TTimeIntervalMicroSeconds(timeout*1000) );
hgs
parents:
diff changeset
   241
        }
hgs
parents:
diff changeset
   242
        else
hgs
parents:
diff changeset
   243
        {
hgs
parents:
diff changeset
   244
            iTimeoutController->Start( TTimeIntervalMicroSeconds(1000000) );
hgs
parents:
diff changeset
   245
        }
hgs
parents:
diff changeset
   246
    }
hgs
parents:
diff changeset
   247
    else
hgs
parents:
diff changeset
   248
    {
hgs
parents:
diff changeset
   249
        iLog->Log(_L("Timeout Controller doesn't exist"));
hgs
parents:
diff changeset
   250
        error = KErrTimeoutController;
hgs
parents:
diff changeset
   251
    }
hgs
parents:
diff changeset
   252
    return error;
hgs
parents:
diff changeset
   253
}
hgs
parents:
diff changeset
   254
hgs
parents:
diff changeset
   255
hgs
parents:
diff changeset
   256
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   257
// Uses the TestModuleBase API to allow a panic as exit reason for a test case
hgs
parents:
diff changeset
   258
// Returns: Symbian OS errors.
hgs
parents:
diff changeset
   259
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   260
EXPORT_C TInt CBaseTest::SetAllowedPanic( CStifItemParser& aItem )
hgs
parents:
diff changeset
   261
{
hgs
parents:
diff changeset
   262
    FTRACE(FPrint(_L("CBaseTest::SetAllowedPanic")));
hgs
parents:
diff changeset
   263
    TInt error = KErrNone;
hgs
parents:
diff changeset
   264
    TInt panicCode;
hgs
parents:
diff changeset
   265
    TPtrC panicType;
hgs
parents:
diff changeset
   266
    if (  ( KErrNone == aItem.GetNextString(panicType) ) &&
hgs
parents:
diff changeset
   267
    ( KErrNone == aItem.GetNextInt(panicCode) )  )
hgs
parents:
diff changeset
   268
    {
hgs
parents:
diff changeset
   269
        iLog->Log(_L("Allowing panic: %S %d"), &panicType, panicCode);
hgs
parents:
diff changeset
   270
        iTestModuleIf.SetExitReason( CTestModuleIf::EPanic, panicCode );
hgs
parents:
diff changeset
   271
        iNormalExitReason = EFalse;
hgs
parents:
diff changeset
   272
    }
hgs
parents:
diff changeset
   273
    else
hgs
parents:
diff changeset
   274
    {
hgs
parents:
diff changeset
   275
        iLog->Log(KMsgBadTestParameters);
hgs
parents:
diff changeset
   276
        error = KErrBadTestParameter;
hgs
parents:
diff changeset
   277
    }
hgs
parents:
diff changeset
   278
    return error;
hgs
parents:
diff changeset
   279
}
hgs
parents:
diff changeset
   280
hgs
parents:
diff changeset
   281
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   282
// CBaseTest::SetExpectedEvents()
hgs
parents:
diff changeset
   283
// Returns: Symbian OS errors.
hgs
parents:
diff changeset
   284
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   285
EXPORT_C TInt CBaseTest::SetExpectedEvents( CStifItemParser& aItem )
hgs
parents:
diff changeset
   286
{
hgs
parents:
diff changeset
   287
    FTRACE(FPrint(_L("CBaseTest::SetExpectedEvents")));
hgs
parents:
diff changeset
   288
    TInt error = KErrNone;
hgs
parents:
diff changeset
   289
    TInt event=0;
hgs
parents:
diff changeset
   290
    while ( KErrNone == aItem.GetNextInt(event))
hgs
parents:
diff changeset
   291
    {
hgs
parents:
diff changeset
   292
        AddExpectedEvent(static_cast<TExpectedEvent>(event), 0); // Default timeout value
hgs
parents:
diff changeset
   293
    }
hgs
parents:
diff changeset
   294
    return error;
hgs
parents:
diff changeset
   295
}