keepalive/flextimer/test/testflextimer/src/testrflextimer.cpp
author hgs
Mon, 24 May 2010 20:51:35 +0300
changeset 32 5c4486441ae6
permissions -rw-r--r--
201021
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* ============================================================================
hgs
parents:
diff changeset
     3
*  Name        : testrflextimer.cpp
hgs
parents:
diff changeset
     4
*  Part of     : src / testflextimer
hgs
parents:
diff changeset
     5
*  Description : STIF test cases for RFlexTimer
hgs
parents:
diff changeset
     6
*  Version     : %version: 1 %
hgs
parents:
diff changeset
     7
*
hgs
parents:
diff changeset
     8
*  Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     9
*  All rights reserved.
hgs
parents:
diff changeset
    10
*  This component and the accompanying materials are made available
hgs
parents:
diff changeset
    11
*  under the terms of the License "Eclipse Public License v1.0"
hgs
parents:
diff changeset
    12
*  which accompanies this distribution, and is available
hgs
parents:
diff changeset
    13
*  at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
    14
*
hgs
parents:
diff changeset
    15
*  Initial Contributors:
hgs
parents:
diff changeset
    16
*  Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    17
*
hgs
parents:
diff changeset
    18
*  Contributors:
hgs
parents:
diff changeset
    19
*  Nokia Corporation
hgs
parents:
diff changeset
    20
* ============================================================================
hgs
parents:
diff changeset
    21
* Template version: 4.1
hgs
parents:
diff changeset
    22
*/
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
#include <e32debug.h>               // for RDebug
hgs
parents:
diff changeset
    25
#include <rflextimer.h>             // for RFlexTimer
hgs
parents:
diff changeset
    26
#include <stiftesteventinterface.h> // for TEventIf 
hgs
parents:
diff changeset
    27
#include "testflextimer.h"          // for global constants
hgs
parents:
diff changeset
    28
#include "testrflextimer.h"
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
// ======== LOCAL FUNCTIONS ========
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    36
// Constructor
hgs
parents:
diff changeset
    37
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    38
//
hgs
parents:
diff changeset
    39
CTestRFlexTimer::CTestRFlexTimer()
hgs
parents:
diff changeset
    40
    {
hgs
parents:
diff changeset
    41
    }
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    45
// Destructor
hgs
parents:
diff changeset
    46
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    47
//
hgs
parents:
diff changeset
    48
CTestRFlexTimer::~CTestRFlexTimer()
hgs
parents:
diff changeset
    49
    {
hgs
parents:
diff changeset
    50
    }
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    54
// ___  ____ _    ____ _   _    ____ _  _ ____ ____ _  _ ____ 
hgs
parents:
diff changeset
    55
// |  \ |___ |    |__|  \_/     |    |__| |___ |    |_/  [__  
hgs
parents:
diff changeset
    56
// |__/ |___ |___ |  |   |      |___ |  | |___ |___ | \_ ___] 
hgs
parents:
diff changeset
    57
// 
hgs
parents:
diff changeset
    58
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    61
TBool CTestRFlexTimer::IsDelayOk( 
hgs
parents:
diff changeset
    62
    const TTimeIntervalMicroSeconds aDelay,
hgs
parents:
diff changeset
    63
    const TTimeIntervalMicroSeconds32 aInterval,
hgs
parents:
diff changeset
    64
    const TTimeIntervalMicroSeconds32 aWindow )
hgs
parents:
diff changeset
    65
    {
hgs
parents:
diff changeset
    66
    TTimeIntervalMicroSeconds interval( aInterval.Int() );
hgs
parents:
diff changeset
    67
    TTimeIntervalMicroSeconds window( aWindow.Int() );
hgs
parents:
diff changeset
    68
    return IsDelayOk( aDelay, interval, window );
hgs
parents:
diff changeset
    69
    }
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    72
TBool CTestRFlexTimer::IsDelayOk( 
hgs
parents:
diff changeset
    73
    const TTimeIntervalMicroSeconds aDelay,
hgs
parents:
diff changeset
    74
    const TTimeIntervalMicroSeconds32 aInterval,
hgs
parents:
diff changeset
    75
    const TTimeIntervalMicroSeconds aWindow )
hgs
parents:
diff changeset
    76
    {
hgs
parents:
diff changeset
    77
    TTimeIntervalMicroSeconds interval( aInterval.Int() );
hgs
parents:
diff changeset
    78
    return IsDelayOk( aDelay, interval, aWindow );
hgs
parents:
diff changeset
    79
    }
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    82
TBool CTestRFlexTimer::IsDelayOk( 
hgs
parents:
diff changeset
    83
    const TTimeIntervalMicroSeconds aDelay,
hgs
parents:
diff changeset
    84
    const TTimeIntervalMicroSeconds aInterval,
hgs
parents:
diff changeset
    85
    const TTimeIntervalMicroSeconds32 aWindow )
hgs
parents:
diff changeset
    86
    {
hgs
parents:
diff changeset
    87
    TTimeIntervalMicroSeconds window( aWindow.Int() );
hgs
parents:
diff changeset
    88
    return IsDelayOk( aDelay, aInterval, window );
hgs
parents:
diff changeset
    89
    }
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    92
TBool CTestRFlexTimer::IsDelayOk( 
hgs
parents:
diff changeset
    93
    const TTimeIntervalMicroSeconds aDelay,
hgs
parents:
diff changeset
    94
    const TTimeIntervalMicroSeconds aInterval,
hgs
parents:
diff changeset
    95
    const TTimeIntervalMicroSeconds aWindow )
hgs
parents:
diff changeset
    96
    {
hgs
parents:
diff changeset
    97
    /**
hgs
parents:
diff changeset
    98
     *  Timer can be expired 1 sec late or 1 system tick (15625 microseconds)
hgs
parents:
diff changeset
    99
     *  early.
hgs
parents:
diff changeset
   100
     */
hgs
parents:
diff changeset
   101
    const TInt64 KTimerResolution( 1000000 ); 
hgs
parents:
diff changeset
   102
    const TInt64 KTickResolution( 1000000 / 64 );
hgs
parents:
diff changeset
   103
    
hgs
parents:
diff changeset
   104
    RDebug::Print( 
hgs
parents:
diff changeset
   105
       _L("=== Timer delay: %Ld, interval: %Ld, window: %Ld"), 
hgs
parents:
diff changeset
   106
       aDelay.Int64(),
hgs
parents:
diff changeset
   107
       aInterval.Int64(),
hgs
parents:
diff changeset
   108
       aWindow.Int64() );
hgs
parents:
diff changeset
   109
    
hgs
parents:
diff changeset
   110
    return !( aDelay.Int64() < aInterval.Int64() - aWindow.Int64() - KTickResolution ||
hgs
parents:
diff changeset
   111
              aDelay.Int64() > aInterval.Int64() + KTimerResolution );
hgs
parents:
diff changeset
   112
    }
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   115
// Create, configure, start with AfterTicks and close RFlexTimer 
hgs
parents:
diff changeset
   116
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   117
//
hgs
parents:
diff changeset
   118
TTimeIntervalMicroSeconds CTestRFlexTimer::ExecuteAfterTicksL(
hgs
parents:
diff changeset
   119
    TInt aTicks,
hgs
parents:
diff changeset
   120
    TTimeIntervalMicroSeconds aWindowSize )
hgs
parents:
diff changeset
   121
    {
hgs
parents:
diff changeset
   122
    // Create, connect and configure the timer handle
hgs
parents:
diff changeset
   123
    RFlexTimer timer;
hgs
parents:
diff changeset
   124
    User::LeaveIfError( timer.Connect() );
hgs
parents:
diff changeset
   125
    User::LeaveIfError( timer.Configure( aWindowSize ) );
hgs
parents:
diff changeset
   126
    
hgs
parents:
diff changeset
   127
    TTime startTime;
hgs
parents:
diff changeset
   128
    startTime.UniversalTime();
hgs
parents:
diff changeset
   129
    
hgs
parents:
diff changeset
   130
    // Run the timer and wait its expiration
hgs
parents:
diff changeset
   131
    TRequestStatus status;
hgs
parents:
diff changeset
   132
    timer.AfterTicks( status, aTicks );
hgs
parents:
diff changeset
   133
    User::WaitForRequest( status );
hgs
parents:
diff changeset
   134
    
hgs
parents:
diff changeset
   135
    TTime endTime;
hgs
parents:
diff changeset
   136
    endTime.UniversalTime();
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
    // Clean up
hgs
parents:
diff changeset
   139
    timer.Close();
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
    // Return running time of the timer
hgs
parents:
diff changeset
   142
    return endTime.MicroSecondsFrom( startTime );
hgs
parents:
diff changeset
   143
    }
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
// ---------------------------------------------------------------------------
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
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   153
// TEST CASE: Start a timer using After (32 bit) and wait it to expire.
hgs
parents:
diff changeset
   154
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   155
//
hgs
parents:
diff changeset
   156
TInt CTestRFlexTimer::ExpireAfter32L(
hgs
parents:
diff changeset
   157
    TTestResult& aResult, 
hgs
parents:
diff changeset
   158
    CTestFlexTimer* /* aCallback */ )
hgs
parents:
diff changeset
   159
    {
hgs
parents:
diff changeset
   160
    __UHEAP_MARK;
hgs
parents:
diff changeset
   161
    
hgs
parents:
diff changeset
   162
    const TTimeIntervalMicroSeconds32 KInterval( 3000000 ); // Time to wait timer
hgs
parents:
diff changeset
   163
    const TTimeIntervalMicroSeconds KWindow( 0 );           // Window for check results
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
    // Initialize case
hgs
parents:
diff changeset
   166
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
    TTime startTime;
hgs
parents:
diff changeset
   169
    startTime.UniversalTime();
hgs
parents:
diff changeset
   170
    TRequestStatus status;
hgs
parents:
diff changeset
   171
    
hgs
parents:
diff changeset
   172
    // Do the actual test
hgs
parents:
diff changeset
   173
    //-----------------------------------------------------
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
    RFlexTimer timer;
hgs
parents:
diff changeset
   176
    User::LeaveIfError( timer.Connect() );
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
    timer.After( status, KInterval );
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
                                     //    //  ___     _____
hgs
parents:
diff changeset
   181
    User::WaitForRequest( status ); // // // //_ // //  //
hgs
parents:
diff changeset
   182
                                   //_//_// //  // //  //
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
    timer.Close();
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
    //-----------------------------------------------------
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
    // Verify the test
hgs
parents:
diff changeset
   189
    TTime endTime;
hgs
parents:
diff changeset
   190
    endTime.UniversalTime();
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
    aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
   193
    if ( !IsDelayOk( endTime.MicroSecondsFrom( startTime ), KInterval, KWindow ) )
hgs
parents:
diff changeset
   194
        {
hgs
parents:
diff changeset
   195
        aResult.SetResult( KErrGeneral, _L("Test case failed. Wrong expiration.") );
hgs
parents:
diff changeset
   196
        }
hgs
parents:
diff changeset
   197
hgs
parents:
diff changeset
   198
    __UHEAP_MARKEND;
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
    return KErrNone;
hgs
parents:
diff changeset
   201
    }
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   204
// TEST CASE: Start a timer using After (32 bit) and wait it to expire.
hgs
parents:
diff changeset
   205
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   206
//
hgs
parents:
diff changeset
   207
TInt CTestRFlexTimer::ExpireAfter64L(
hgs
parents:
diff changeset
   208
    TTestResult& aResult, 
hgs
parents:
diff changeset
   209
    CTestFlexTimer* /* aCallback */ )
hgs
parents:
diff changeset
   210
    {
hgs
parents:
diff changeset
   211
    __UHEAP_MARK;
hgs
parents:
diff changeset
   212
    
hgs
parents:
diff changeset
   213
    const TTimeIntervalMicroSeconds KInterval( 3000000 );   // Time to wait timer
hgs
parents:
diff changeset
   214
    const TTimeIntervalMicroSeconds KWindow( 0 );           // Window for check results
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
    // Initialize case
hgs
parents:
diff changeset
   217
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
   218
hgs
parents:
diff changeset
   219
    TTime startTime;
hgs
parents:
diff changeset
   220
    startTime.UniversalTime();
hgs
parents:
diff changeset
   221
    TRequestStatus status;
hgs
parents:
diff changeset
   222
    
hgs
parents:
diff changeset
   223
    // Do the actual test
hgs
parents:
diff changeset
   224
    //-----------------------------------------------------
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
    RFlexTimer timer;
hgs
parents:
diff changeset
   227
    User::LeaveIfError( timer.Connect() );
hgs
parents:
diff changeset
   228
hgs
parents:
diff changeset
   229
    timer.After( status, KInterval );
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
                                     //    //  ___     _____
hgs
parents:
diff changeset
   232
    User::WaitForRequest( status ); // // // //_ // //  //
hgs
parents:
diff changeset
   233
                                   //_//_// //  // //  //
hgs
parents:
diff changeset
   234
hgs
parents:
diff changeset
   235
    timer.Close();
hgs
parents:
diff changeset
   236
    
hgs
parents:
diff changeset
   237
    //-----------------------------------------------------
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
    // Verify the test
hgs
parents:
diff changeset
   240
    TTime endTime;
hgs
parents:
diff changeset
   241
    endTime.UniversalTime();
hgs
parents:
diff changeset
   242
hgs
parents:
diff changeset
   243
    aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
   244
    if ( !IsDelayOk( endTime.MicroSecondsFrom( startTime ), KInterval, KWindow ) )
hgs
parents:
diff changeset
   245
        {
hgs
parents:
diff changeset
   246
        aResult.SetResult( KErrGeneral, _L("Test case failed. Wrong expiration.") );
hgs
parents:
diff changeset
   247
        }
hgs
parents:
diff changeset
   248
    
hgs
parents:
diff changeset
   249
    __UHEAP_MARKEND;
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
    return KErrNone;
hgs
parents:
diff changeset
   252
    }
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   255
// TEST CASE: Start a timer using AfterTicks and wait it to expire.
hgs
parents:
diff changeset
   256
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   257
//
hgs
parents:
diff changeset
   258
TInt CTestRFlexTimer::ExpireAfterTicksL(
hgs
parents:
diff changeset
   259
    TTestResult& aResult, 
hgs
parents:
diff changeset
   260
    CTestFlexTimer* /* aCallback */ )
hgs
parents:
diff changeset
   261
    {
hgs
parents:
diff changeset
   262
    __UHEAP_MARK;
hgs
parents:
diff changeset
   263
    
hgs
parents:
diff changeset
   264
    const TTimeIntervalMicroSeconds32 KInterval( 3000000 );     // Time to wait timer
hgs
parents:
diff changeset
   265
    const TTimeIntervalMicroSeconds KWindow( 0 );               // Window for check results
hgs
parents:
diff changeset
   266
    const TTimeIntervalMicroSeconds32 KOneTick( 1000000 / 64 ); // System tick: 1/64 sec
hgs
parents:
diff changeset
   267
hgs
parents:
diff changeset
   268
    // Initialize case
hgs
parents:
diff changeset
   269
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
   270
hgs
parents:
diff changeset
   271
    TTime startTime;
hgs
parents:
diff changeset
   272
    startTime.UniversalTime();
hgs
parents:
diff changeset
   273
    TRequestStatus status;
hgs
parents:
diff changeset
   274
    
hgs
parents:
diff changeset
   275
    // Do the actual test
hgs
parents:
diff changeset
   276
    //-----------------------------------------------------
hgs
parents:
diff changeset
   277
hgs
parents:
diff changeset
   278
    RFlexTimer timer;
hgs
parents:
diff changeset
   279
    User::LeaveIfError( timer.Connect() );
hgs
parents:
diff changeset
   280
    
hgs
parents:
diff changeset
   281
    timer.AfterTicks( status, KInterval.Int() / KOneTick.Int() );
hgs
parents:
diff changeset
   282
    
hgs
parents:
diff changeset
   283
                                     //    //  ___     _____
hgs
parents:
diff changeset
   284
    User::WaitForRequest( status ); // // // //_ // //  //
hgs
parents:
diff changeset
   285
                                   //_//_// //  // //  //
hgs
parents:
diff changeset
   286
hgs
parents:
diff changeset
   287
    timer.Close();
hgs
parents:
diff changeset
   288
    
hgs
parents:
diff changeset
   289
    //-----------------------------------------------------
hgs
parents:
diff changeset
   290
hgs
parents:
diff changeset
   291
    // Verify the test
hgs
parents:
diff changeset
   292
    TTime endTime;
hgs
parents:
diff changeset
   293
    endTime.UniversalTime();
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
    aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
   296
    if ( !IsDelayOk( endTime.MicroSecondsFrom( startTime ), KInterval, KWindow ) )
hgs
parents:
diff changeset
   297
        {
hgs
parents:
diff changeset
   298
        aResult.SetResult( KErrGeneral, _L("Test case failed. Wrong expiration.") );
hgs
parents:
diff changeset
   299
        }
hgs
parents:
diff changeset
   300
    
hgs
parents:
diff changeset
   301
    __UHEAP_MARKEND;
hgs
parents:
diff changeset
   302
hgs
parents:
diff changeset
   303
    return KErrNone;
hgs
parents:
diff changeset
   304
    }
hgs
parents:
diff changeset
   305
hgs
parents:
diff changeset
   306
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   307
// TEST CASE: Start a timer using At and wait it to expire.
hgs
parents:
diff changeset
   308
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   309
//
hgs
parents:
diff changeset
   310
TInt CTestRFlexTimer::ExpireAtL(
hgs
parents:
diff changeset
   311
    TTestResult& aResult, 
hgs
parents:
diff changeset
   312
    CTestFlexTimer* /* aCallback */ )
hgs
parents:
diff changeset
   313
    {
hgs
parents:
diff changeset
   314
    __UHEAP_MARK;
hgs
parents:
diff changeset
   315
    
hgs
parents:
diff changeset
   316
    const TTimeIntervalMicroSeconds KInterval( 3000000 ); // Time to wait timer
hgs
parents:
diff changeset
   317
    const TTimeIntervalMicroSeconds KWindow( 0 );         // Window for check results
hgs
parents:
diff changeset
   318
hgs
parents:
diff changeset
   319
    // Initialize case
hgs
parents:
diff changeset
   320
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
   321
hgs
parents:
diff changeset
   322
    TTime startTime;
hgs
parents:
diff changeset
   323
    startTime.UniversalTime();
hgs
parents:
diff changeset
   324
    TRequestStatus status;
hgs
parents:
diff changeset
   325
    
hgs
parents:
diff changeset
   326
    // Do the actual test
hgs
parents:
diff changeset
   327
    //-----------------------------------------------------
hgs
parents:
diff changeset
   328
hgs
parents:
diff changeset
   329
    RFlexTimer timer;
hgs
parents:
diff changeset
   330
    User::LeaveIfError( timer.Connect() );
hgs
parents:
diff changeset
   331
hgs
parents:
diff changeset
   332
    TTime now;
hgs
parents:
diff changeset
   333
    now.HomeTime();
hgs
parents:
diff changeset
   334
    
hgs
parents:
diff changeset
   335
    timer.At( status, now + KInterval );
hgs
parents:
diff changeset
   336
hgs
parents:
diff changeset
   337
                                     //    //  ___     _____
hgs
parents:
diff changeset
   338
    User::WaitForRequest( status ); // // // //_ // //  //
hgs
parents:
diff changeset
   339
                                   //_//_// //  // //  //
hgs
parents:
diff changeset
   340
    
hgs
parents:
diff changeset
   341
    timer.Close();
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
    //-----------------------------------------------------
hgs
parents:
diff changeset
   344
hgs
parents:
diff changeset
   345
    // Verify the test
hgs
parents:
diff changeset
   346
    TTime endTime;
hgs
parents:
diff changeset
   347
    endTime.UniversalTime();
hgs
parents:
diff changeset
   348
hgs
parents:
diff changeset
   349
    aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
   350
    if ( !IsDelayOk( endTime.MicroSecondsFrom( startTime ), KInterval, KWindow ) )
hgs
parents:
diff changeset
   351
        {
hgs
parents:
diff changeset
   352
        aResult.SetResult( KErrGeneral, _L("Test case failed. Wrong expiration.") );
hgs
parents:
diff changeset
   353
        }
hgs
parents:
diff changeset
   354
hgs
parents:
diff changeset
   355
    __UHEAP_MARKEND;
hgs
parents:
diff changeset
   356
hgs
parents:
diff changeset
   357
    return KErrNone;
hgs
parents:
diff changeset
   358
    }
hgs
parents:
diff changeset
   359
hgs
parents:
diff changeset
   360
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   361
// TEST CASE: Start a timer using AtUTC and wait it to expire.
hgs
parents:
diff changeset
   362
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   363
//
hgs
parents:
diff changeset
   364
TInt CTestRFlexTimer::ExpireAtUtcL(
hgs
parents:
diff changeset
   365
    TTestResult& aResult, 
hgs
parents:
diff changeset
   366
    CTestFlexTimer* /* aCallback */ )
hgs
parents:
diff changeset
   367
    {
hgs
parents:
diff changeset
   368
    __UHEAP_MARK;
hgs
parents:
diff changeset
   369
    
hgs
parents:
diff changeset
   370
    const TTimeIntervalMicroSeconds KInterval( 3000000 ); // Time to wait timer
hgs
parents:
diff changeset
   371
    const TTimeIntervalMicroSeconds KWindow( 0 );         // Window for check results
hgs
parents:
diff changeset
   372
hgs
parents:
diff changeset
   373
    // Initialize case
hgs
parents:
diff changeset
   374
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
   375
hgs
parents:
diff changeset
   376
    TTime startTime;
hgs
parents:
diff changeset
   377
    startTime.UniversalTime();
hgs
parents:
diff changeset
   378
    TRequestStatus status;
hgs
parents:
diff changeset
   379
    
hgs
parents:
diff changeset
   380
    // Do the actual test
hgs
parents:
diff changeset
   381
    //-----------------------------------------------------
hgs
parents:
diff changeset
   382
hgs
parents:
diff changeset
   383
    RFlexTimer timer;
hgs
parents:
diff changeset
   384
    User::LeaveIfError( timer.Connect() );
hgs
parents:
diff changeset
   385
hgs
parents:
diff changeset
   386
    TTime now;
hgs
parents:
diff changeset
   387
    now.UniversalTime();
hgs
parents:
diff changeset
   388
    
hgs
parents:
diff changeset
   389
    timer.AtUTC( status, now + KInterval );
hgs
parents:
diff changeset
   390
hgs
parents:
diff changeset
   391
                                     //    //  ___     _____
hgs
parents:
diff changeset
   392
    User::WaitForRequest( status ); // // // //_ // //  //
hgs
parents:
diff changeset
   393
                                   //_//_// //  // //  //
hgs
parents:
diff changeset
   394
hgs
parents:
diff changeset
   395
    timer.Close();
hgs
parents:
diff changeset
   396
    
hgs
parents:
diff changeset
   397
    //-----------------------------------------------------
hgs
parents:
diff changeset
   398
hgs
parents:
diff changeset
   399
    // Verify the test
hgs
parents:
diff changeset
   400
    TTime endTime;
hgs
parents:
diff changeset
   401
    endTime.UniversalTime();
hgs
parents:
diff changeset
   402
hgs
parents:
diff changeset
   403
    aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
   404
    if ( !IsDelayOk( endTime.MicroSecondsFrom( startTime ), KInterval, KWindow ) )
hgs
parents:
diff changeset
   405
        {
hgs
parents:
diff changeset
   406
        aResult.SetResult( KErrGeneral, _L("Test case failed. Wrong expiration.") );
hgs
parents:
diff changeset
   407
        }
hgs
parents:
diff changeset
   408
hgs
parents:
diff changeset
   409
    __UHEAP_MARKEND;
hgs
parents:
diff changeset
   410
hgs
parents:
diff changeset
   411
    return KErrNone;
hgs
parents:
diff changeset
   412
    }
hgs
parents:
diff changeset
   413
hgs
parents:
diff changeset
   414
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   415
// TEST CASE: Start timer with After (32 bit) without connecting first
hgs
parents:
diff changeset
   416
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   417
//
hgs
parents:
diff changeset
   418
TInt CTestRFlexTimer::After32WithoutConnect(
hgs
parents:
diff changeset
   419
    TTestResult& aResult, 
hgs
parents:
diff changeset
   420
    CTestFlexTimer* aCallback )
hgs
parents:
diff changeset
   421
    {
hgs
parents:
diff changeset
   422
    TRequestStatus status;
hgs
parents:
diff changeset
   423
hgs
parents:
diff changeset
   424
    // Test should panic with
hgs
parents:
diff changeset
   425
    // Category: "KERN-EXEC"
hgs
parents:
diff changeset
   426
    // Reason:   0
hgs
parents:
diff changeset
   427
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   428
        CTestModuleIf::EPanic,
hgs
parents:
diff changeset
   429
        0 );
hgs
parents:
diff changeset
   430
    
hgs
parents:
diff changeset
   431
    // Do the actual test
hgs
parents:
diff changeset
   432
    //-----------------------------------------------------
hgs
parents:
diff changeset
   433
hgs
parents:
diff changeset
   434
    RFlexTimer timer;
hgs
parents:
diff changeset
   435
    timer.After( status, TTimeIntervalMicroSeconds32( 1000000 ) );
hgs
parents:
diff changeset
   436
    User::WaitForRequest( status ); // PANIC
hgs
parents:
diff changeset
   437
    timer.Close();
hgs
parents:
diff changeset
   438
    
hgs
parents:
diff changeset
   439
    //-----------------------------------------------------
hgs
parents:
diff changeset
   440
hgs
parents:
diff changeset
   441
    // No panic, change result back to normal
hgs
parents:
diff changeset
   442
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   443
        CTestModuleIf::ENormal,
hgs
parents:
diff changeset
   444
        KErrNone );
hgs
parents:
diff changeset
   445
hgs
parents:
diff changeset
   446
    aResult.SetResult( KErrGeneral, _L("Test case failed. No panic.") );
hgs
parents:
diff changeset
   447
hgs
parents:
diff changeset
   448
    return KErrNone;
hgs
parents:
diff changeset
   449
    }
hgs
parents:
diff changeset
   450
hgs
parents:
diff changeset
   451
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   452
// TEST CASE: Start timer with After (64 bit) without connecting first
hgs
parents:
diff changeset
   453
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   454
//
hgs
parents:
diff changeset
   455
TInt CTestRFlexTimer::After64WithoutConnect(
hgs
parents:
diff changeset
   456
    TTestResult& aResult, 
hgs
parents:
diff changeset
   457
    CTestFlexTimer* aCallback )
hgs
parents:
diff changeset
   458
    {
hgs
parents:
diff changeset
   459
    TRequestStatus status;
hgs
parents:
diff changeset
   460
hgs
parents:
diff changeset
   461
    // Test should panic with
hgs
parents:
diff changeset
   462
    // Category: "KERN-EXEC"
hgs
parents:
diff changeset
   463
    // Reason:   0
hgs
parents:
diff changeset
   464
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   465
        CTestModuleIf::EPanic,
hgs
parents:
diff changeset
   466
        0 );
hgs
parents:
diff changeset
   467
hgs
parents:
diff changeset
   468
    // Do the actual test
hgs
parents:
diff changeset
   469
    //-----------------------------------------------------
hgs
parents:
diff changeset
   470
    
hgs
parents:
diff changeset
   471
    RFlexTimer timer;
hgs
parents:
diff changeset
   472
hgs
parents:
diff changeset
   473
    timer.After( status, TTimeIntervalMicroSeconds( 1000000 ) );
hgs
parents:
diff changeset
   474
    User::WaitForRequest( status ); // PANIC
hgs
parents:
diff changeset
   475
    timer.Close();
hgs
parents:
diff changeset
   476
hgs
parents:
diff changeset
   477
    //-----------------------------------------------------
hgs
parents:
diff changeset
   478
hgs
parents:
diff changeset
   479
    // No panic, change result back to normal
hgs
parents:
diff changeset
   480
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   481
        CTestModuleIf::ENormal,
hgs
parents:
diff changeset
   482
        KErrNone );
hgs
parents:
diff changeset
   483
hgs
parents:
diff changeset
   484
    aResult.SetResult( KErrGeneral, _L("Test case failed. No panic.") );
hgs
parents:
diff changeset
   485
hgs
parents:
diff changeset
   486
    return KErrNone;
hgs
parents:
diff changeset
   487
    }
hgs
parents:
diff changeset
   488
hgs
parents:
diff changeset
   489
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   490
// TEST CASE: Start timer with AfterTicks without connecting first
hgs
parents:
diff changeset
   491
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   492
//
hgs
parents:
diff changeset
   493
TInt CTestRFlexTimer::AfterTicksWithoutConnect(
hgs
parents:
diff changeset
   494
    TTestResult& aResult, 
hgs
parents:
diff changeset
   495
    CTestFlexTimer* aCallback )
hgs
parents:
diff changeset
   496
    {
hgs
parents:
diff changeset
   497
    TRequestStatus status;
hgs
parents:
diff changeset
   498
hgs
parents:
diff changeset
   499
    // Test should panic with
hgs
parents:
diff changeset
   500
    // Category: "KERN-EXEC"
hgs
parents:
diff changeset
   501
    // Reason:   0
hgs
parents:
diff changeset
   502
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   503
        CTestModuleIf::EPanic,
hgs
parents:
diff changeset
   504
        0 );
hgs
parents:
diff changeset
   505
    
hgs
parents:
diff changeset
   506
    // Do the actual test
hgs
parents:
diff changeset
   507
    //-----------------------------------------------------
hgs
parents:
diff changeset
   508
hgs
parents:
diff changeset
   509
    RFlexTimer timer;
hgs
parents:
diff changeset
   510
hgs
parents:
diff changeset
   511
    timer.AfterTicks( status, 1000 );
hgs
parents:
diff changeset
   512
    User::WaitForRequest( status ); // PANIC
hgs
parents:
diff changeset
   513
    timer.Close();
hgs
parents:
diff changeset
   514
hgs
parents:
diff changeset
   515
    //-----------------------------------------------------
hgs
parents:
diff changeset
   516
hgs
parents:
diff changeset
   517
    // No panic, change result back to normal
hgs
parents:
diff changeset
   518
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   519
        CTestModuleIf::ENormal,
hgs
parents:
diff changeset
   520
        KErrNone );
hgs
parents:
diff changeset
   521
hgs
parents:
diff changeset
   522
    aResult.SetResult( KErrGeneral, _L("Test case failed. No panic.") );
hgs
parents:
diff changeset
   523
hgs
parents:
diff changeset
   524
    return KErrNone;
hgs
parents:
diff changeset
   525
    }
hgs
parents:
diff changeset
   526
hgs
parents:
diff changeset
   527
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   528
// TEST CASE: Start timer with At without connecting first
hgs
parents:
diff changeset
   529
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   530
//
hgs
parents:
diff changeset
   531
TInt CTestRFlexTimer::AtWithoutConnect(
hgs
parents:
diff changeset
   532
    TTestResult& aResult, 
hgs
parents:
diff changeset
   533
    CTestFlexTimer* aCallback )
hgs
parents:
diff changeset
   534
    {
hgs
parents:
diff changeset
   535
    TRequestStatus status;
hgs
parents:
diff changeset
   536
hgs
parents:
diff changeset
   537
    // Test should panic with
hgs
parents:
diff changeset
   538
    // Category: "KERN-EXEC"
hgs
parents:
diff changeset
   539
    // Reason:   0
hgs
parents:
diff changeset
   540
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   541
        CTestModuleIf::EPanic,
hgs
parents:
diff changeset
   542
        0 );
hgs
parents:
diff changeset
   543
    
hgs
parents:
diff changeset
   544
    // Do the actual test
hgs
parents:
diff changeset
   545
    //-----------------------------------------------------
hgs
parents:
diff changeset
   546
hgs
parents:
diff changeset
   547
    RFlexTimer timer;
hgs
parents:
diff changeset
   548
hgs
parents:
diff changeset
   549
    TTime expirationTime;
hgs
parents:
diff changeset
   550
    expirationTime.HomeTime();
hgs
parents:
diff changeset
   551
    expirationTime += TTimeIntervalMicroSeconds( 1000000 );
hgs
parents:
diff changeset
   552
    
hgs
parents:
diff changeset
   553
    timer.At( status, expirationTime );
hgs
parents:
diff changeset
   554
    User::WaitForRequest( status ); // PANIC
hgs
parents:
diff changeset
   555
    timer.Close();
hgs
parents:
diff changeset
   556
hgs
parents:
diff changeset
   557
    //-----------------------------------------------------
hgs
parents:
diff changeset
   558
hgs
parents:
diff changeset
   559
    // No panic, change result back to normal
hgs
parents:
diff changeset
   560
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   561
        CTestModuleIf::ENormal,
hgs
parents:
diff changeset
   562
        KErrNone );
hgs
parents:
diff changeset
   563
hgs
parents:
diff changeset
   564
    aResult.SetResult( KErrGeneral, _L("Test case failed. No panic.") );
hgs
parents:
diff changeset
   565
hgs
parents:
diff changeset
   566
    return KErrNone;
hgs
parents:
diff changeset
   567
    }
hgs
parents:
diff changeset
   568
hgs
parents:
diff changeset
   569
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   570
// TEST CASE: Start timer with At without connecting first
hgs
parents:
diff changeset
   571
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   572
//
hgs
parents:
diff changeset
   573
TInt CTestRFlexTimer::AtUtcWithoutConnect(
hgs
parents:
diff changeset
   574
    TTestResult& aResult, 
hgs
parents:
diff changeset
   575
    CTestFlexTimer* aCallback )
hgs
parents:
diff changeset
   576
    {
hgs
parents:
diff changeset
   577
    TRequestStatus status;
hgs
parents:
diff changeset
   578
hgs
parents:
diff changeset
   579
    // Test should panic with
hgs
parents:
diff changeset
   580
    // Category: "KERN-EXEC"
hgs
parents:
diff changeset
   581
    // Reason:   0
hgs
parents:
diff changeset
   582
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   583
        CTestModuleIf::EPanic,
hgs
parents:
diff changeset
   584
        0 );
hgs
parents:
diff changeset
   585
    
hgs
parents:
diff changeset
   586
    // Do the actual test
hgs
parents:
diff changeset
   587
    //-----------------------------------------------------
hgs
parents:
diff changeset
   588
hgs
parents:
diff changeset
   589
    RFlexTimer timer;
hgs
parents:
diff changeset
   590
hgs
parents:
diff changeset
   591
    TTime expirationTime;
hgs
parents:
diff changeset
   592
    expirationTime.UniversalTime();
hgs
parents:
diff changeset
   593
    expirationTime += TTimeIntervalMicroSeconds( 1000000 );
hgs
parents:
diff changeset
   594
    
hgs
parents:
diff changeset
   595
    timer.AtUTC( status, expirationTime );
hgs
parents:
diff changeset
   596
    User::WaitForRequest( status ); // PANIC
hgs
parents:
diff changeset
   597
    timer.Close();
hgs
parents:
diff changeset
   598
hgs
parents:
diff changeset
   599
    //-----------------------------------------------------
hgs
parents:
diff changeset
   600
hgs
parents:
diff changeset
   601
    // No panic, change result back to normal
hgs
parents:
diff changeset
   602
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   603
        CTestModuleIf::ENormal,
hgs
parents:
diff changeset
   604
        KErrNone );
hgs
parents:
diff changeset
   605
hgs
parents:
diff changeset
   606
    aResult.SetResult( KErrGeneral, _L("Test case failed. No panic.") );
hgs
parents:
diff changeset
   607
    
hgs
parents:
diff changeset
   608
    return KErrNone;
hgs
parents:
diff changeset
   609
    }
hgs
parents:
diff changeset
   610
hgs
parents:
diff changeset
   611
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   612
// TEST CASE: Configure (32 bit) timer without connecting first
hgs
parents:
diff changeset
   613
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   614
//
hgs
parents:
diff changeset
   615
TInt CTestRFlexTimer::Configure32WithoutConnect(
hgs
parents:
diff changeset
   616
    TTestResult& aResult, 
hgs
parents:
diff changeset
   617
    CTestFlexTimer* aCallback )
hgs
parents:
diff changeset
   618
    {
hgs
parents:
diff changeset
   619
    // Test should panic with
hgs
parents:
diff changeset
   620
    // Category: "KERN-EXEC"
hgs
parents:
diff changeset
   621
    // Reason:   0
hgs
parents:
diff changeset
   622
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   623
        CTestModuleIf::EPanic,
hgs
parents:
diff changeset
   624
        0 );
hgs
parents:
diff changeset
   625
    
hgs
parents:
diff changeset
   626
    // Do the actual test
hgs
parents:
diff changeset
   627
    //-----------------------------------------------------
hgs
parents:
diff changeset
   628
hgs
parents:
diff changeset
   629
    RFlexTimer timer;
hgs
parents:
diff changeset
   630
hgs
parents:
diff changeset
   631
    timer.Configure( TTimeIntervalMicroSeconds32( 1000000 ) ); // PANIC
hgs
parents:
diff changeset
   632
    // Configure is synchronous command. No need to wait.
hgs
parents:
diff changeset
   633
    timer.Close();
hgs
parents:
diff changeset
   634
hgs
parents:
diff changeset
   635
    //-----------------------------------------------------
hgs
parents:
diff changeset
   636
hgs
parents:
diff changeset
   637
    // No panic, change result back to normal
hgs
parents:
diff changeset
   638
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   639
        CTestModuleIf::ENormal,
hgs
parents:
diff changeset
   640
        KErrNone );
hgs
parents:
diff changeset
   641
hgs
parents:
diff changeset
   642
    aResult.SetResult( KErrGeneral, _L("Test case failed. No panic.") );
hgs
parents:
diff changeset
   643
    
hgs
parents:
diff changeset
   644
    return KErrNone;
hgs
parents:
diff changeset
   645
    }
hgs
parents:
diff changeset
   646
hgs
parents:
diff changeset
   647
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   648
// TEST CASE: Configure (32 bit) timer without connecting first
hgs
parents:
diff changeset
   649
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   650
//
hgs
parents:
diff changeset
   651
TInt CTestRFlexTimer::Configure64WithoutConnect(
hgs
parents:
diff changeset
   652
    TTestResult& aResult, 
hgs
parents:
diff changeset
   653
    CTestFlexTimer* aCallback )
hgs
parents:
diff changeset
   654
    {
hgs
parents:
diff changeset
   655
    // Test should panic with
hgs
parents:
diff changeset
   656
    // Category: "KERN-EXEC"
hgs
parents:
diff changeset
   657
    // Reason:   0
hgs
parents:
diff changeset
   658
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   659
        CTestModuleIf::EPanic,
hgs
parents:
diff changeset
   660
        0 );
hgs
parents:
diff changeset
   661
    
hgs
parents:
diff changeset
   662
    // Do the actual test
hgs
parents:
diff changeset
   663
    //-----------------------------------------------------
hgs
parents:
diff changeset
   664
hgs
parents:
diff changeset
   665
    RFlexTimer timer;
hgs
parents:
diff changeset
   666
hgs
parents:
diff changeset
   667
    timer.Configure( TTimeIntervalMicroSeconds( 1000000 ) ); // PANIC
hgs
parents:
diff changeset
   668
    // Configure is synchronous command. No need to wait.
hgs
parents:
diff changeset
   669
    timer.Close();
hgs
parents:
diff changeset
   670
    
hgs
parents:
diff changeset
   671
    //-----------------------------------------------------
hgs
parents:
diff changeset
   672
hgs
parents:
diff changeset
   673
    // No panic, change result back to normal
hgs
parents:
diff changeset
   674
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   675
        CTestModuleIf::ENormal,
hgs
parents:
diff changeset
   676
        KErrNone );
hgs
parents:
diff changeset
   677
hgs
parents:
diff changeset
   678
    aResult.SetResult( KErrGeneral, _L("Test case failed. No panic.") );
hgs
parents:
diff changeset
   679
hgs
parents:
diff changeset
   680
    return KErrNone;
hgs
parents:
diff changeset
   681
    }
hgs
parents:
diff changeset
   682
hgs
parents:
diff changeset
   683
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   684
// TEST CASE: Cancel timer without connecting first
hgs
parents:
diff changeset
   685
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   686
//
hgs
parents:
diff changeset
   687
TInt CTestRFlexTimer::CancelWithoutConnect(
hgs
parents:
diff changeset
   688
    TTestResult& aResult, 
hgs
parents:
diff changeset
   689
    CTestFlexTimer* aCallback )
hgs
parents:
diff changeset
   690
    {
hgs
parents:
diff changeset
   691
hgs
parents:
diff changeset
   692
    // Test should panic with
hgs
parents:
diff changeset
   693
    // Category: "KERN-EXEC"
hgs
parents:
diff changeset
   694
    // Reason:   0
hgs
parents:
diff changeset
   695
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   696
        CTestModuleIf::EPanic,
hgs
parents:
diff changeset
   697
        0 );
hgs
parents:
diff changeset
   698
    
hgs
parents:
diff changeset
   699
    // Do the actual test
hgs
parents:
diff changeset
   700
    //-----------------------------------------------------
hgs
parents:
diff changeset
   701
hgs
parents:
diff changeset
   702
    RFlexTimer timer;
hgs
parents:
diff changeset
   703
    timer.Cancel(); // PANIC
hgs
parents:
diff changeset
   704
    // Cancel is synchronous command. No need to wait.
hgs
parents:
diff changeset
   705
    timer.Close();
hgs
parents:
diff changeset
   706
hgs
parents:
diff changeset
   707
    //-----------------------------------------------------
hgs
parents:
diff changeset
   708
hgs
parents:
diff changeset
   709
    // No panic, change result back to normal
hgs
parents:
diff changeset
   710
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   711
        CTestModuleIf::ENormal,
hgs
parents:
diff changeset
   712
        KErrNone );
hgs
parents:
diff changeset
   713
hgs
parents:
diff changeset
   714
    aResult.SetResult( KErrGeneral, _L("Test case failed. No panic.") );
hgs
parents:
diff changeset
   715
hgs
parents:
diff changeset
   716
    return KErrNone;
hgs
parents:
diff changeset
   717
    }
hgs
parents:
diff changeset
   718
hgs
parents:
diff changeset
   719
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   720
// TEST CASE: Call After twice
hgs
parents:
diff changeset
   721
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   722
//
hgs
parents:
diff changeset
   723
TInt CTestRFlexTimer::CallAfterTwiceL(
hgs
parents:
diff changeset
   724
    TTestResult& aResult, 
hgs
parents:
diff changeset
   725
    CTestFlexTimer* aCallback )
hgs
parents:
diff changeset
   726
    {
hgs
parents:
diff changeset
   727
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
   728
    
hgs
parents:
diff changeset
   729
    // Test should panic with
hgs
parents:
diff changeset
   730
    // Category: "RFlexTimer"
hgs
parents:
diff changeset
   731
    // Reason:   15 (EFlexTimerServerErrorPendingTimer)
hgs
parents:
diff changeset
   732
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   733
        CTestModuleIf::EPanic,
hgs
parents:
diff changeset
   734
        15 );
hgs
parents:
diff changeset
   735
hgs
parents:
diff changeset
   736
    TRequestStatus status;
hgs
parents:
diff changeset
   737
    
hgs
parents:
diff changeset
   738
    // Do the actual test
hgs
parents:
diff changeset
   739
    //-----------------------------------------------------
hgs
parents:
diff changeset
   740
hgs
parents:
diff changeset
   741
    RFlexTimer timer;
hgs
parents:
diff changeset
   742
    User::LeaveIfError( timer.Connect() );
hgs
parents:
diff changeset
   743
hgs
parents:
diff changeset
   744
    timer.After( status, TTimeIntervalMicroSeconds32( 100000 ) );
hgs
parents:
diff changeset
   745
    timer.After( status, TTimeIntervalMicroSeconds( 100000 ) );
hgs
parents:
diff changeset
   746
hgs
parents:
diff changeset
   747
    User::WaitForRequest( status ); // PANIC
hgs
parents:
diff changeset
   748
hgs
parents:
diff changeset
   749
    timer.Close();
hgs
parents:
diff changeset
   750
hgs
parents:
diff changeset
   751
    //-----------------------------------------------------
hgs
parents:
diff changeset
   752
hgs
parents:
diff changeset
   753
hgs
parents:
diff changeset
   754
    // No panic, change result back to normal
hgs
parents:
diff changeset
   755
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   756
        CTestModuleIf::ENormal,
hgs
parents:
diff changeset
   757
        KErrNone );
hgs
parents:
diff changeset
   758
hgs
parents:
diff changeset
   759
    aResult.SetResult( KErrGeneral, _L("Test case failed. No panic.") );
hgs
parents:
diff changeset
   760
hgs
parents:
diff changeset
   761
    return KErrNone;
hgs
parents:
diff changeset
   762
    }
hgs
parents:
diff changeset
   763
hgs
parents:
diff changeset
   764
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   765
// TEST CASE: Call AfterTicks twice
hgs
parents:
diff changeset
   766
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   767
//
hgs
parents:
diff changeset
   768
TInt CTestRFlexTimer::CallAfterTicksTwiceL(
hgs
parents:
diff changeset
   769
    TTestResult& aResult, 
hgs
parents:
diff changeset
   770
    CTestFlexTimer* aCallback )
hgs
parents:
diff changeset
   771
    {
hgs
parents:
diff changeset
   772
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
   773
    
hgs
parents:
diff changeset
   774
    // Test should panic with
hgs
parents:
diff changeset
   775
    // Category: "RFlexTimer"
hgs
parents:
diff changeset
   776
    // Reason:   15 (EFlexTimerServerErrorPendingTimer)
hgs
parents:
diff changeset
   777
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   778
        CTestModuleIf::EPanic,
hgs
parents:
diff changeset
   779
        15 );
hgs
parents:
diff changeset
   780
hgs
parents:
diff changeset
   781
    TRequestStatus status;
hgs
parents:
diff changeset
   782
    
hgs
parents:
diff changeset
   783
    // Do the actual test
hgs
parents:
diff changeset
   784
    //-----------------------------------------------------
hgs
parents:
diff changeset
   785
hgs
parents:
diff changeset
   786
    RFlexTimer timer;
hgs
parents:
diff changeset
   787
    User::LeaveIfError( timer.Connect() );
hgs
parents:
diff changeset
   788
hgs
parents:
diff changeset
   789
    timer.AfterTicks( status, 1000 );
hgs
parents:
diff changeset
   790
    timer.AfterTicks( status, 1000 );
hgs
parents:
diff changeset
   791
hgs
parents:
diff changeset
   792
    User::WaitForRequest( status ); // PANIC
hgs
parents:
diff changeset
   793
hgs
parents:
diff changeset
   794
    timer.Close();
hgs
parents:
diff changeset
   795
hgs
parents:
diff changeset
   796
    //-----------------------------------------------------
hgs
parents:
diff changeset
   797
hgs
parents:
diff changeset
   798
    // No panic, change result back to normal
hgs
parents:
diff changeset
   799
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   800
        CTestModuleIf::ENormal,
hgs
parents:
diff changeset
   801
        KErrNone );
hgs
parents:
diff changeset
   802
hgs
parents:
diff changeset
   803
    aResult.SetResult( KErrGeneral, _L("Test case failed. No panic.") );
hgs
parents:
diff changeset
   804
hgs
parents:
diff changeset
   805
    return KErrNone;
hgs
parents:
diff changeset
   806
    }
hgs
parents:
diff changeset
   807
hgs
parents:
diff changeset
   808
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   809
// TEST CASE: Call At twice
hgs
parents:
diff changeset
   810
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   811
//
hgs
parents:
diff changeset
   812
TInt CTestRFlexTimer::CallAtTwiceL(
hgs
parents:
diff changeset
   813
    TTestResult& aResult, 
hgs
parents:
diff changeset
   814
    CTestFlexTimer* aCallback )
hgs
parents:
diff changeset
   815
    {
hgs
parents:
diff changeset
   816
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
   817
    
hgs
parents:
diff changeset
   818
    // Test should panic with
hgs
parents:
diff changeset
   819
    // Category: "RFlexTimer"
hgs
parents:
diff changeset
   820
    // Reason:   15 (EFlexTimerServerErrorPendingTimer)
hgs
parents:
diff changeset
   821
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   822
        CTestModuleIf::EPanic,
hgs
parents:
diff changeset
   823
        15 );
hgs
parents:
diff changeset
   824
hgs
parents:
diff changeset
   825
    TRequestStatus status;
hgs
parents:
diff changeset
   826
hgs
parents:
diff changeset
   827
    // Do the actual test
hgs
parents:
diff changeset
   828
    //-----------------------------------------------------
hgs
parents:
diff changeset
   829
hgs
parents:
diff changeset
   830
    RFlexTimer timer;
hgs
parents:
diff changeset
   831
    User::LeaveIfError( timer.Connect() );
hgs
parents:
diff changeset
   832
hgs
parents:
diff changeset
   833
    TTime expirationTime;
hgs
parents:
diff changeset
   834
    expirationTime.HomeTime();
hgs
parents:
diff changeset
   835
    expirationTime += TTimeIntervalMicroSeconds( 1000000 );
hgs
parents:
diff changeset
   836
    
hgs
parents:
diff changeset
   837
    timer.At( status, expirationTime );
hgs
parents:
diff changeset
   838
    timer.At( status, expirationTime );
hgs
parents:
diff changeset
   839
hgs
parents:
diff changeset
   840
    User::WaitForRequest( status ); // PANIC
hgs
parents:
diff changeset
   841
hgs
parents:
diff changeset
   842
    timer.Close();
hgs
parents:
diff changeset
   843
hgs
parents:
diff changeset
   844
    //-----------------------------------------------------
hgs
parents:
diff changeset
   845
hgs
parents:
diff changeset
   846
hgs
parents:
diff changeset
   847
    // No panic, change result back to normal
hgs
parents:
diff changeset
   848
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   849
        CTestModuleIf::ENormal,
hgs
parents:
diff changeset
   850
        KErrNone );
hgs
parents:
diff changeset
   851
hgs
parents:
diff changeset
   852
    aResult.SetResult( KErrGeneral, _L("Test case failed. No panic.") );
hgs
parents:
diff changeset
   853
    
hgs
parents:
diff changeset
   854
    return KErrNone;
hgs
parents:
diff changeset
   855
    }
hgs
parents:
diff changeset
   856
hgs
parents:
diff changeset
   857
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   858
// TEST CASE: Call AtUTC twice
hgs
parents:
diff changeset
   859
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   860
//
hgs
parents:
diff changeset
   861
TInt CTestRFlexTimer::CallAtUtcTwiceL(
hgs
parents:
diff changeset
   862
    TTestResult& aResult, 
hgs
parents:
diff changeset
   863
    CTestFlexTimer* aCallback )
hgs
parents:
diff changeset
   864
    {
hgs
parents:
diff changeset
   865
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
   866
    
hgs
parents:
diff changeset
   867
    // Test should panic with
hgs
parents:
diff changeset
   868
    // Category: "RFlexTimer"
hgs
parents:
diff changeset
   869
    // Reason:   15 (EFlexTimerServerErrorPendingTimer)
hgs
parents:
diff changeset
   870
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   871
        CTestModuleIf::EPanic,
hgs
parents:
diff changeset
   872
        15 );
hgs
parents:
diff changeset
   873
hgs
parents:
diff changeset
   874
    TRequestStatus status;
hgs
parents:
diff changeset
   875
    
hgs
parents:
diff changeset
   876
    // Do the actual test
hgs
parents:
diff changeset
   877
    //-----------------------------------------------------
hgs
parents:
diff changeset
   878
hgs
parents:
diff changeset
   879
    RFlexTimer timer;
hgs
parents:
diff changeset
   880
    User::LeaveIfError( timer.Connect() );
hgs
parents:
diff changeset
   881
    
hgs
parents:
diff changeset
   882
    TTime expirationTime;
hgs
parents:
diff changeset
   883
    expirationTime.UniversalTime();
hgs
parents:
diff changeset
   884
    expirationTime += TTimeIntervalMicroSeconds( 1000000 );
hgs
parents:
diff changeset
   885
    
hgs
parents:
diff changeset
   886
    timer.AtUTC( status, expirationTime );
hgs
parents:
diff changeset
   887
    timer.AtUTC( status, expirationTime );
hgs
parents:
diff changeset
   888
hgs
parents:
diff changeset
   889
    
hgs
parents:
diff changeset
   890
    User::WaitForRequest( status ); // PANIC
hgs
parents:
diff changeset
   891
hgs
parents:
diff changeset
   892
    timer.Close();
hgs
parents:
diff changeset
   893
    
hgs
parents:
diff changeset
   894
    //-----------------------------------------------------
hgs
parents:
diff changeset
   895
hgs
parents:
diff changeset
   896
    // No panic, change result back to normal
hgs
parents:
diff changeset
   897
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   898
        CTestModuleIf::ENormal,
hgs
parents:
diff changeset
   899
        KErrNone );
hgs
parents:
diff changeset
   900
hgs
parents:
diff changeset
   901
    aResult.SetResult( KErrGeneral, _L("Test case failed. No panic.") );
hgs
parents:
diff changeset
   902
hgs
parents:
diff changeset
   903
    return KErrNone;
hgs
parents:
diff changeset
   904
    }
hgs
parents:
diff changeset
   905
hgs
parents:
diff changeset
   906
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   907
// TEST CASE: Call Connect twice
hgs
parents:
diff changeset
   908
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   909
//
hgs
parents:
diff changeset
   910
TInt CTestRFlexTimer::CallConnectTwiceL(
hgs
parents:
diff changeset
   911
    TTestResult& aResult, 
hgs
parents:
diff changeset
   912
    CTestFlexTimer* aCallback )
hgs
parents:
diff changeset
   913
    {
hgs
parents:
diff changeset
   914
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
   915
    
hgs
parents:
diff changeset
   916
    // Test should panic with
hgs
parents:
diff changeset
   917
    // Category: "RFlexTimer"
hgs
parents:
diff changeset
   918
    // Reason:   33 (EFlexTimerAlreadyConnected)
hgs
parents:
diff changeset
   919
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   920
        CTestModuleIf::EPanic,
hgs
parents:
diff changeset
   921
        33 );
hgs
parents:
diff changeset
   922
hgs
parents:
diff changeset
   923
    // Do the actual test
hgs
parents:
diff changeset
   924
    //-----------------------------------------------------
hgs
parents:
diff changeset
   925
hgs
parents:
diff changeset
   926
    RFlexTimer timer;
hgs
parents:
diff changeset
   927
    User::LeaveIfError( timer.Connect() );
hgs
parents:
diff changeset
   928
    User::LeaveIfError( timer.Connect() ); // PANIC
hgs
parents:
diff changeset
   929
hgs
parents:
diff changeset
   930
    timer.Close();
hgs
parents:
diff changeset
   931
    
hgs
parents:
diff changeset
   932
    //-----------------------------------------------------
hgs
parents:
diff changeset
   933
hgs
parents:
diff changeset
   934
    // No panic, change result back to normal
hgs
parents:
diff changeset
   935
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
   936
        CTestModuleIf::ENormal,
hgs
parents:
diff changeset
   937
        KErrNone );
hgs
parents:
diff changeset
   938
hgs
parents:
diff changeset
   939
    aResult.SetResult( KErrGeneral, _L("Test case failed. No panic.") );
hgs
parents:
diff changeset
   940
hgs
parents:
diff changeset
   941
    return KErrNone;
hgs
parents:
diff changeset
   942
    }
hgs
parents:
diff changeset
   943
hgs
parents:
diff changeset
   944
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   945
// TEST CASE: Reconnect the handle to the server
hgs
parents:
diff changeset
   946
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   947
//
hgs
parents:
diff changeset
   948
TInt CTestRFlexTimer::ReconnectL(
hgs
parents:
diff changeset
   949
    TTestResult& aResult, 
hgs
parents:
diff changeset
   950
    CTestFlexTimer* /* aCallback */ )
hgs
parents:
diff changeset
   951
    {
hgs
parents:
diff changeset
   952
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
   953
    
hgs
parents:
diff changeset
   954
    // Do the actual test
hgs
parents:
diff changeset
   955
    //-----------------------------------------------------
hgs
parents:
diff changeset
   956
hgs
parents:
diff changeset
   957
    RFlexTimer timer;
hgs
parents:
diff changeset
   958
    User::LeaveIfError( timer.Connect() );
hgs
parents:
diff changeset
   959
    timer.Close();
hgs
parents:
diff changeset
   960
    User::LeaveIfError( timer.Connect() );
hgs
parents:
diff changeset
   961
    timer.Close();
hgs
parents:
diff changeset
   962
    
hgs
parents:
diff changeset
   963
    //-----------------------------------------------------
hgs
parents:
diff changeset
   964
hgs
parents:
diff changeset
   965
    aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
   966
hgs
parents:
diff changeset
   967
    return KErrNone;
hgs
parents:
diff changeset
   968
    }
hgs
parents:
diff changeset
   969
hgs
parents:
diff changeset
   970
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   971
// TEST CASE: Cancel timer without starting it first
hgs
parents:
diff changeset
   972
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   973
//
hgs
parents:
diff changeset
   974
TInt CTestRFlexTimer::CancelWithoutStart(
hgs
parents:
diff changeset
   975
    TTestResult& aResult, 
hgs
parents:
diff changeset
   976
    CTestFlexTimer* /* aCallback */ )
hgs
parents:
diff changeset
   977
    {
hgs
parents:
diff changeset
   978
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
   979
hgs
parents:
diff changeset
   980
    // Do the actual test
hgs
parents:
diff changeset
   981
    //-----------------------------------------------------
hgs
parents:
diff changeset
   982
hgs
parents:
diff changeset
   983
    RFlexTimer timer;
hgs
parents:
diff changeset
   984
hgs
parents:
diff changeset
   985
    User::LeaveIfError( timer.Connect() );
hgs
parents:
diff changeset
   986
    timer.Cancel();
hgs
parents:
diff changeset
   987
    timer.Close();
hgs
parents:
diff changeset
   988
hgs
parents:
diff changeset
   989
    //-----------------------------------------------------
hgs
parents:
diff changeset
   990
hgs
parents:
diff changeset
   991
    aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
   992
hgs
parents:
diff changeset
   993
    return KErrNone;
hgs
parents:
diff changeset
   994
    }
hgs
parents:
diff changeset
   995
hgs
parents:
diff changeset
   996
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   997
// TEST CASE: Start tick timer with negative ticks
hgs
parents:
diff changeset
   998
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   999
//
hgs
parents:
diff changeset
  1000
TInt CTestRFlexTimer::NegativeTicksInAfterTicksL(
hgs
parents:
diff changeset
  1001
    TTestResult& aResult, 
hgs
parents:
diff changeset
  1002
    CTestFlexTimer* aCallback )
hgs
parents:
diff changeset
  1003
    {
hgs
parents:
diff changeset
  1004
    const TInt KTestValue( -1 );
hgs
parents:
diff changeset
  1005
    
hgs
parents:
diff changeset
  1006
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
  1007
hgs
parents:
diff changeset
  1008
    // Test should panic with
hgs
parents:
diff changeset
  1009
    // Category: "RFlexTimer"
hgs
parents:
diff changeset
  1010
    // Reason:   2 (EFlexTimerAfterTicksIntervalLessThanZero)
hgs
parents:
diff changeset
  1011
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
  1012
        CTestModuleIf::EPanic,
hgs
parents:
diff changeset
  1013
        2 );
hgs
parents:
diff changeset
  1014
hgs
parents:
diff changeset
  1015
    TTimeIntervalMicroSeconds delay = ExecuteAfterTicksL( KTestValue );
hgs
parents:
diff changeset
  1016
hgs
parents:
diff changeset
  1017
    // No panic, change result back to normal
hgs
parents:
diff changeset
  1018
    aCallback->TestModuleIf().SetExitReason( 
hgs
parents:
diff changeset
  1019
        CTestModuleIf::ENormal,
hgs
parents:
diff changeset
  1020
        KErrNone );
hgs
parents:
diff changeset
  1021
hgs
parents:
diff changeset
  1022
    aResult.SetResult( KErrGeneral, _L("Test case failed. No panic.") );
hgs
parents:
diff changeset
  1023
hgs
parents:
diff changeset
  1024
    return KErrNone;
hgs
parents:
diff changeset
  1025
    }
hgs
parents:
diff changeset
  1026
hgs
parents:
diff changeset
  1027
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1028
// TEST CASE: Start tick timer with zero ticks
hgs
parents:
diff changeset
  1029
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1030
//
hgs
parents:
diff changeset
  1031
TInt CTestRFlexTimer::ZeroTicksInAfterTicksL(
hgs
parents:
diff changeset
  1032
    TTestResult& aResult, 
hgs
parents:
diff changeset
  1033
    CTestFlexTimer* /* aCallback */ )
hgs
parents:
diff changeset
  1034
    {
hgs
parents:
diff changeset
  1035
    const TInt KTestValue( 0 );
hgs
parents:
diff changeset
  1036
    
hgs
parents:
diff changeset
  1037
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
  1038
hgs
parents:
diff changeset
  1039
    TTimeIntervalMicroSeconds delay = ExecuteAfterTicksL( KTestValue );
hgs
parents:
diff changeset
  1040
hgs
parents:
diff changeset
  1041
    // Analyze the results
hgs
parents:
diff changeset
  1042
    aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
  1043
    if ( !IsDelayOk( delay, 
hgs
parents:
diff changeset
  1044
                     TTimeIntervalMicroSeconds( KTestValue ),
hgs
parents:
diff changeset
  1045
                     TTimeIntervalMicroSeconds( 0 )) )
hgs
parents:
diff changeset
  1046
        {
hgs
parents:
diff changeset
  1047
        aResult.SetResult( 
hgs
parents:
diff changeset
  1048
            KErrGeneral, 
hgs
parents:
diff changeset
  1049
            _L("Test case failed. Wrong expiration time.") );
hgs
parents:
diff changeset
  1050
        }
hgs
parents:
diff changeset
  1051
hgs
parents:
diff changeset
  1052
    return KErrNone;
hgs
parents:
diff changeset
  1053
    }
hgs
parents:
diff changeset
  1054
hgs
parents:
diff changeset
  1055
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1056
// TEST CASE: Change system time while tick timer is active
hgs
parents:
diff changeset
  1057
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1058
//
hgs
parents:
diff changeset
  1059
TInt CTestRFlexTimer::ChangeTimeWhileAfterTicksL(
hgs
parents:
diff changeset
  1060
    TTestResult& aResult, 
hgs
parents:
diff changeset
  1061
    CTestFlexTimer* /* aCallback */ )
hgs
parents:
diff changeset
  1062
    {
hgs
parents:
diff changeset
  1063
    const TTimeIntervalMicroSeconds32 KTimerInterval( 10000000 );   // Time to wait timer
hgs
parents:
diff changeset
  1064
    const TTimeIntervalMicroSeconds KWaitTillChangeTime( 1000000 ); // Time to wait before change system time
hgs
parents:
diff changeset
  1065
    const TTimeIntervalMicroSeconds KTimeChange( 3000000 );         // Duration to change system time
hgs
parents:
diff changeset
  1066
hgs
parents:
diff changeset
  1067
    // Interval for check results
hgs
parents:
diff changeset
  1068
    const TTimeIntervalMicroSeconds KInterval( KTimerInterval.Int() + KTimeChange.Int64() );
hgs
parents:
diff changeset
  1069
    const TTimeIntervalMicroSeconds KWindow( 0 );                   // Window for check results
hgs
parents:
diff changeset
  1070
    const TTimeIntervalMicroSeconds32 KOneTick( 1000000 / 64 );     // System tick: 1/64 sec
hgs
parents:
diff changeset
  1071
hgs
parents:
diff changeset
  1072
    // Initialize case
hgs
parents:
diff changeset
  1073
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
  1074
hgs
parents:
diff changeset
  1075
    TTime startTime;
hgs
parents:
diff changeset
  1076
    startTime.UniversalTime();
hgs
parents:
diff changeset
  1077
    TRequestStatus status, helperStatus;
hgs
parents:
diff changeset
  1078
    
hgs
parents:
diff changeset
  1079
    // Do the actual test
hgs
parents:
diff changeset
  1080
    //-----------------------------------------------------
hgs
parents:
diff changeset
  1081
hgs
parents:
diff changeset
  1082
    RFlexTimer timer;
hgs
parents:
diff changeset
  1083
    User::LeaveIfError( timer.Connect() );
hgs
parents:
diff changeset
  1084
    
hgs
parents:
diff changeset
  1085
    timer.AfterTicks( status, KTimerInterval.Int() / KOneTick.Int() );
hgs
parents:
diff changeset
  1086
hgs
parents:
diff changeset
  1087
    //-----------------------------------------------------
hgs
parents:
diff changeset
  1088
    // ... meanwhile change system time
hgs
parents:
diff changeset
  1089
hgs
parents:
diff changeset
  1090
        RFlexTimer helper;
hgs
parents:
diff changeset
  1091
        
hgs
parents:
diff changeset
  1092
        User::LeaveIfError( helper.Connect() );
hgs
parents:
diff changeset
  1093
        helper.After( helperStatus, KWaitTillChangeTime );
hgs
parents:
diff changeset
  1094
    
hgs
parents:
diff changeset
  1095
                                               //    //  ___     _____
hgs
parents:
diff changeset
  1096
        User::WaitForRequest( helperStatus ); // // // //_ // //  //
hgs
parents:
diff changeset
  1097
                                             //_//_// //  // //  //
hgs
parents:
diff changeset
  1098
        
hgs
parents:
diff changeset
  1099
        TTime newNow;
hgs
parents:
diff changeset
  1100
        newNow.UniversalTime();
hgs
parents:
diff changeset
  1101
        newNow += KTimeChange;
hgs
parents:
diff changeset
  1102
        
hgs
parents:
diff changeset
  1103
        User::SetUTCTime( newNow );
hgs
parents:
diff changeset
  1104
    
hgs
parents:
diff changeset
  1105
        helper.Close();
hgs
parents:
diff changeset
  1106
hgs
parents:
diff changeset
  1107
    // The test continues...
hgs
parents:
diff changeset
  1108
    //-----------------------------------------------------
hgs
parents:
diff changeset
  1109
    
hgs
parents:
diff changeset
  1110
                                     //    //  ___     _____
hgs
parents:
diff changeset
  1111
    User::WaitForRequest( status ); // // // //_ // //  //
hgs
parents:
diff changeset
  1112
                                   //_//_// //  // //  //
hgs
parents:
diff changeset
  1113
hgs
parents:
diff changeset
  1114
    timer.Close();
hgs
parents:
diff changeset
  1115
hgs
parents:
diff changeset
  1116
    //-----------------------------------------------------
hgs
parents:
diff changeset
  1117
hgs
parents:
diff changeset
  1118
    // Verify the test
hgs
parents:
diff changeset
  1119
    TTime endTime;
hgs
parents:
diff changeset
  1120
    endTime.UniversalTime();
hgs
parents:
diff changeset
  1121
hgs
parents:
diff changeset
  1122
    aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
  1123
    if ( !IsDelayOk( endTime.MicroSecondsFrom( startTime ), KInterval, KWindow ) )
hgs
parents:
diff changeset
  1124
        {
hgs
parents:
diff changeset
  1125
        //RDebug::Print( _L("Timer delay: %lld"), 
hgs
parents:
diff changeset
  1126
        //               endTime.MicroSecondsFrom( startTime ).Int64() );
hgs
parents:
diff changeset
  1127
        aResult.SetResult( KErrGeneral, _L("Test case failed. Wrong expiration.") );
hgs
parents:
diff changeset
  1128
        }
hgs
parents:
diff changeset
  1129
    
hgs
parents:
diff changeset
  1130
    __UHEAP_MARKEND;
hgs
parents:
diff changeset
  1131
hgs
parents:
diff changeset
  1132
    return KErrNone;
hgs
parents:
diff changeset
  1133
    }
hgs
parents:
diff changeset
  1134
hgs
parents:
diff changeset
  1135
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1136
// TEST CASE: Timer window works correctly
hgs
parents:
diff changeset
  1137
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1138
//
hgs
parents:
diff changeset
  1139
TInt CTestRFlexTimer::TestAfterTicksWindowL(
hgs
parents:
diff changeset
  1140
    TTestResult& aResult, 
hgs
parents:
diff changeset
  1141
    CTestFlexTimer* /* aCallback */ )
hgs
parents:
diff changeset
  1142
    {
hgs
parents:
diff changeset
  1143
hgs
parents:
diff changeset
  1144
    // T1: expiration after 4-8 sec
hgs
parents:
diff changeset
  1145
    const TTimeIntervalMicroSeconds32 KTimerOneInterval( 8000000 );
hgs
parents:
diff changeset
  1146
    const TTimeIntervalMicroSeconds32 KTimerOneWindow( 4000000 );
hgs
parents:
diff changeset
  1147
hgs
parents:
diff changeset
  1148
    // T2: expiration after 9-10 sec
hgs
parents:
diff changeset
  1149
    // T2's interval must not overlap with T1's -- otherwise T1 will be 
hgs
parents:
diff changeset
  1150
    // delayed
hgs
parents:
diff changeset
  1151
    const TTimeIntervalMicroSeconds32 KTimerTwoInterval( 10000000 );
hgs
parents:
diff changeset
  1152
    const TTimeIntervalMicroSeconds32 KTimerTwoWindow( 1000000 );
hgs
parents:
diff changeset
  1153
hgs
parents:
diff changeset
  1154
    // T3: expiration after 5 secs
hgs
parents:
diff changeset
  1155
    const TTimeIntervalMicroSeconds KAfterTimerInterval( 5000000 );
hgs
parents:
diff changeset
  1156
    const TTimeIntervalMicroSeconds KAfterTimerWindow( 0 );
hgs
parents:
diff changeset
  1157
hgs
parents:
diff changeset
  1158
    // System tick: 1/64 sec
hgs
parents:
diff changeset
  1159
    const TTimeIntervalMicroSeconds32 KOneTick( 1000000 / 64 );
hgs
parents:
diff changeset
  1160
    const TTimeIntervalMicroSeconds KNoWindow( 0 );
hgs
parents:
diff changeset
  1161
hgs
parents:
diff changeset
  1162
    
hgs
parents:
diff changeset
  1163
    
hgs
parents:
diff changeset
  1164
    // Initialize case
hgs
parents:
diff changeset
  1165
    aResult.SetResult( KErrGeneral, _L("Test case leaved") );
hgs
parents:
diff changeset
  1166
hgs
parents:
diff changeset
  1167
    TTime startTime;
hgs
parents:
diff changeset
  1168
    startTime.UniversalTime();
hgs
parents:
diff changeset
  1169
    TRequestStatus oneStatus, twoStatus, afterStatus;
hgs
parents:
diff changeset
  1170
    
hgs
parents:
diff changeset
  1171
    // Do the actual test
hgs
parents:
diff changeset
  1172
    //-----------------------------------------------------
hgs
parents:
diff changeset
  1173
hgs
parents:
diff changeset
  1174
    RFlexTimer timerOne;
hgs
parents:
diff changeset
  1175
    User::LeaveIfError( timerOne.Connect() );
hgs
parents:
diff changeset
  1176
    timerOne.Configure( KTimerOneWindow );
hgs
parents:
diff changeset
  1177
    timerOne.AfterTicks( oneStatus, KTimerOneInterval.Int() / KOneTick.Int() );
hgs
parents:
diff changeset
  1178
hgs
parents:
diff changeset
  1179
    RFlexTimer timerTwo;
hgs
parents:
diff changeset
  1180
    User::LeaveIfError( timerTwo.Connect() );
hgs
parents:
diff changeset
  1181
    timerTwo.Configure( KTimerTwoWindow );
hgs
parents:
diff changeset
  1182
    timerTwo.AfterTicks( twoStatus, KTimerTwoInterval.Int() / KOneTick.Int() );
hgs
parents:
diff changeset
  1183
    
hgs
parents:
diff changeset
  1184
    RFlexTimer afterTimer;
hgs
parents:
diff changeset
  1185
    User::LeaveIfError( afterTimer.Connect() );
hgs
parents:
diff changeset
  1186
    afterTimer.Configure( KAfterTimerWindow );
hgs
parents:
diff changeset
  1187
    afterTimer.After( afterStatus, KAfterTimerInterval );
hgs
parents:
diff changeset
  1188
    
hgs
parents:
diff changeset
  1189
                                        //    //  ___     _____
hgs
parents:
diff changeset
  1190
    User::WaitForRequest( oneStatus ); // // // //_ // //  //
hgs
parents:
diff changeset
  1191
                                      //_//_// //  // //  //
hgs
parents:
diff changeset
  1192
hgs
parents:
diff changeset
  1193
    TTime oneEndTime;
hgs
parents:
diff changeset
  1194
    oneEndTime.UniversalTime();
hgs
parents:
diff changeset
  1195
                                        //    //  ___     _____
hgs
parents:
diff changeset
  1196
    User::WaitForRequest( twoStatus ); // // // //_ // //  //
hgs
parents:
diff changeset
  1197
                                      //_//_// //  // //  //
hgs
parents:
diff changeset
  1198
hgs
parents:
diff changeset
  1199
    TTime twoEndTime;
hgs
parents:
diff changeset
  1200
    twoEndTime.UniversalTime();
hgs
parents:
diff changeset
  1201
    
hgs
parents:
diff changeset
  1202
    timerOne.Close();
hgs
parents:
diff changeset
  1203
    timerTwo.Close();
hgs
parents:
diff changeset
  1204
    afterTimer.Close();
hgs
parents:
diff changeset
  1205
hgs
parents:
diff changeset
  1206
    //-----------------------------------------------------
hgs
parents:
diff changeset
  1207
    
hgs
parents:
diff changeset
  1208
    // Handle afterStatus too - to get rid of unhandled asynchronous message
hgs
parents:
diff changeset
  1209
    // error from STIF.
hgs
parents:
diff changeset
  1210
    User::WaitForRequest( afterStatus );
hgs
parents:
diff changeset
  1211
    
hgs
parents:
diff changeset
  1212
    aResult.SetResult( KErrNone, _L("Test case passed") );
hgs
parents:
diff changeset
  1213
    
hgs
parents:
diff changeset
  1214
    // T1 should be expired at the same time than T3 - check with T3's values
hgs
parents:
diff changeset
  1215
    if ( !IsDelayOk( oneEndTime.MicroSecondsFrom( startTime ), KAfterTimerInterval, KNoWindow ) )
hgs
parents:
diff changeset
  1216
        {
hgs
parents:
diff changeset
  1217
        aResult.SetResult( KErrGeneral, _L("Test case failed. Timer one wrong expiration.") );
hgs
parents:
diff changeset
  1218
        }
hgs
parents:
diff changeset
  1219
    // T2 should be expired at it's max window
hgs
parents:
diff changeset
  1220
    else if ( !IsDelayOk( twoEndTime.MicroSecondsFrom( startTime ), KTimerTwoInterval, KNoWindow ) )
hgs
parents:
diff changeset
  1221
        {
hgs
parents:
diff changeset
  1222
        aResult.SetResult( KErrGeneral, _L("Test case failed. Timer two wrong expiration.") );
hgs
parents:
diff changeset
  1223
        }
hgs
parents:
diff changeset
  1224
    
hgs
parents:
diff changeset
  1225
    __UHEAP_MARKEND;
hgs
parents:
diff changeset
  1226
hgs
parents:
diff changeset
  1227
    return KErrNone;
hgs
parents:
diff changeset
  1228
    }