tsrc/testtools/stubsrv/inc/stubber.h
author hgs
Tue, 13 Jul 2010 00:24:10 +0300
changeset 62 eadeea68c837
permissions -rw-r--r--
201027
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
62
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 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:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#ifndef STUBBER_H
hgs
parents:
diff changeset
    19
#define STUBBER_H
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
#include <e32base.h>
hgs
parents:
diff changeset
    22
#include <apibehavior.h>
hgs
parents:
diff changeset
    23
#include <stubsrvconst.h>
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
class RStubClient;
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
class MApiInvoker 
hgs
parents:
diff changeset
    28
{
hgs
parents:
diff changeset
    29
public:
hgs
parents:
diff changeset
    30
    virtual void InvokeApiComplete(const TApiBehavior& aBeh) = 0;
hgs
parents:
diff changeset
    31
};
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
NONSHARABLE_CLASS(CStubber) : public CActive
hgs
parents:
diff changeset
    34
    {
hgs
parents:
diff changeset
    35
public: 
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
    IMPORT_C static CStubber* NewL();
hgs
parents:
diff changeset
    38
    
hgs
parents:
diff changeset
    39
    IMPORT_C ~CStubber();
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
   /**
hgs
parents:
diff changeset
    42
    * Queues an API behavior specification to Stub server.
hgs
parents:
diff changeset
    43
    *
hgs
parents:
diff changeset
    44
    * This method is called by API behavior controllers, e.g. a module test, to specify the next expected 
hgs
parents:
diff changeset
    45
    * behavior of an API. When InvokeApi() is called, the first queued behavior matching
hgs
parents:
diff changeset
    46
    * the lib identifier and API identifier will be extracted and returned.
hgs
parents:
diff changeset
    47
    *
hgs
parents:
diff changeset
    48
    * @param aApi an API behavior.
hgs
parents:
diff changeset
    49
    * @param aExeDuration, specifies the execution time of InvokeApi() in microseconds.
hgs
parents:
diff changeset
    50
    *            value less than 0 means never completing InvokeApi(); 
hgs
parents:
diff changeset
    51
    *            value 0 means completing InvokeApi() asap;
hgs
parents:
diff changeset
    52
    *            value 1000000 means InvokeApi() takes 1 sec execution time;
hgs
parents:
diff changeset
    53
    *        and so on. 
hgs
parents:
diff changeset
    54
    */
hgs
parents:
diff changeset
    55
    IMPORT_C void EnqueBehavior(const TApiBehavior& aBeh, TInt aExeDuration = 0);
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
    /**
hgs
parents:
diff changeset
    58
    * Deletes all queued behaviors of the specified API.
hgs
parents:
diff changeset
    59
    *
hgs
parents:
diff changeset
    60
    * @param aLib the identifier of a stub
hgs
parents:
diff changeset
    61
    * @param aApi the identifier of the API
hgs
parents:
diff changeset
    62
    */
hgs
parents:
diff changeset
    63
    IMPORT_C void DeleteBehaviors(TUint aLib, TUint aApi);
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
    /**
hgs
parents:
diff changeset
    66
    * Invokes an API.
hgs
parents:
diff changeset
    67
    *
hgs
parents:
diff changeset
    68
    * If there is a queued behavior for this API, Stub server will perform according to the execution setting; 
hgs
parents:
diff changeset
    69
    * otherwise stub server will act according to the specified mode.
hgs
parents:
diff changeset
    70
    *
hgs
parents:
diff changeset
    71
    * @param aBeh contains the lib and API identifiers when passed in;
hgs
parents:
diff changeset
    72
    *                 will contain the behavior at complete.
hgs
parents:
diff changeset
    73
    * @param aMode the mode to be used if no queued behavior is found for the specified API;
hgs
parents:
diff changeset
    74
    *              In case of ECompleteIfNoBehaviorSet mode, stub server will complete this function 
hgs
parents:
diff changeset
    75
    *              immediately and return a default TApiBehavior(TUint, TUint); 
hgs
parents:
diff changeset
    76
    *              stub server will keep this function call pending until a behavior is queued if the mode
hgs
parents:
diff changeset
    77
    *              is ESuspendIfBehaviorSet.
hgs
parents:
diff changeset
    78
    */
hgs
parents:
diff changeset
    79
    IMPORT_C void InvokeApi(TApiBehavior& aBeh, TApiInvokeMode aMode = ECompleteIfNoBehaviorSet);
hgs
parents:
diff changeset
    80
	
hgs
parents:
diff changeset
    81
    /**
hgs
parents:
diff changeset
    82
    * asynchronous version of InvokeAPI(), MApiInvoker::InvokeApiComplete will be called when
hgs
parents:
diff changeset
    83
    * this opeation is completed by stub server
hgs
parents:
diff changeset
    84
    *
hgs
parents:
diff changeset
    85
    * Only one InvokeApiL is allowed at a time.
hgs
parents:
diff changeset
    86
    *
hgs
parents:
diff changeset
    87
    * Leaves if the completion code in the behavior to be extracted is not KErrNone.
hgs
parents:
diff changeset
    88
    *
hgs
parents:
diff changeset
    89
    * @param aLib the identifier of a stub
hgs
parents:
diff changeset
    90
    * @param aApi the identifier of the API
hgs
parents:
diff changeset
    91
    * @param aMode the mode to be used if no queued behavior is found for the specified API;
hgs
parents:
diff changeset
    92
    *              In case of ECompleteIfNoBehaviorSet mode, stub server will complete this function 
hgs
parents:
diff changeset
    93
    *              immediately and return a default TApiBehavior(TUint, TUint); 
hgs
parents:
diff changeset
    94
    *              stub server will keep this function call pending until a behavior is queued if the mode
hgs
parents:
diff changeset
    95
    *              is ESuspendIfBehaviorSet.
hgs
parents:
diff changeset
    96
    */
hgs
parents:
diff changeset
    97
	IMPORT_C void InvokeApiL(MApiInvoker& aInvoker, TUint aLib, TUint aApi, TApiInvokeMode aMode = ECompleteIfNoBehaviorSet);
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
    /**
hgs
parents:
diff changeset
   100
    * Cancels InvokeApi()
hgs
parents:
diff changeset
   101
    */
hgs
parents:
diff changeset
   102
	IMPORT_C void InvokeApiCancel();
hgs
parents:
diff changeset
   103
    
hgs
parents:
diff changeset
   104
protected:
hgs
parents:
diff changeset
   105
    void RunL();
hgs
parents:
diff changeset
   106
    void DoCancel();
hgs
parents:
diff changeset
   107
    TInt RunError(TInt aReason);
hgs
parents:
diff changeset
   108
    
hgs
parents:
diff changeset
   109
protected:
hgs
parents:
diff changeset
   110
    CStubber();
hgs
parents:
diff changeset
   111
    
hgs
parents:
diff changeset
   112
    void ConstructL();
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
protected:
hgs
parents:
diff changeset
   115
    MApiInvoker* iInvoker;
hgs
parents:
diff changeset
   116
    
hgs
parents:
diff changeset
   117
    TApiBehavior iBeh;
hgs
parents:
diff changeset
   118
    TApiBehaviorPckg iBehPckg;
hgs
parents:
diff changeset
   119
    
hgs
parents:
diff changeset
   120
    RStubClient* iClient;
hgs
parents:
diff changeset
   121
    };
hgs
parents:
diff changeset
   122
    
hgs
parents:
diff changeset
   123
#endif // STUBBER_H
hgs
parents:
diff changeset
   124