videoplayback/videoplaybackview/tsrc/testuserinputhandler/src/testuserinputhandler.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 17 Sep 2010 08:30:05 +0300
changeset 62 0e1e938beb1a
parent 59 a76e86df7ccd
permissions -rw-r--r--
Revision: 201035 Kit: 201037

/**
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:   tester for methods in User Input Handler
*
*/

#include <e32err.h>
#include <w32std.h>
#include <eikenv.h>

#include <e32property.h>
#include <centralrepository.h>  
#include <settingsinternalcrkeys.h> 
#include <avkondomainpskeys.h>

#include <hbapplication.h>
#include <hbinstance.h>
#include <QDebug>

#include "testuserinputhandler.h"
#include "../stub/inc/mpxvideoviewwrapper.h"
#include "../stub/inc/videobaseplaybackview.h"

#define private public
#include "videoplaybackuserinputhandler.h"
#undef private


// ---------------------------------------------------------------------------
// main
// ---------------------------------------------------------------------------
//
int main(int argc, char *argv[])
{
    HbApplication app(argc, argv);
    HbMainWindow window;

    TestUserInputHandler tv;

    char *pass[3];
    pass[0] = argv[0];
    pass[1] = "-o";
    pass[2] = "c:\\data\\testuserinputhandler.txt";

    int res = QTest::qExec(&tv, 3, pass);

    return res;
}

// ---------------------------------------------------------------------------
// init
// ---------------------------------------------------------------------------
//
void TestUserInputHandler::init()
{
    mBaseVideoView    = new VideoBasePlaybackView();
    mVideoViewWrapper = CMPXVideoViewWrapper::NewL( mBaseVideoView );

    mUserInputHdlr = CVideoPlaybackUserInputHandler::NewL( mVideoViewWrapper );
}

// ---------------------------------------------------------------------------
// cleanup
// ---------------------------------------------------------------------------
//
void TestUserInputHandler::cleanup()
{
    delete mUserInputHdlr;
    mUserInputHdlr = NULL;

    delete mVideoViewWrapper;
    mVideoViewWrapper = NULL;

    delete mBaseVideoView;
    mBaseVideoView = NULL;
}

// ---------------------------------------------------------------------------
// setup
// ---------------------------------------------------------------------------
//
void TestUserInputHandler::setup()
{
}

void TestUserInputHandler::testProcessMediaKeyPlay()
{
    init();

    mUserInputHdlr->iProcessingInputType = EVideoNone;

    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPlay, ERemConCoreApiButtonPress);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoMediaKeys );

    // this event should be ignored as the 1st event is still being processed
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPause, ERemConCoreApiButtonPress);

    // verify that "Play" is still being processed and not "Pause"
    QVERIFY( mUserInputHdlr->iLastMediaKeyPressed == ERemConCoreApiPlay );

    // send the release event for "Play"
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPlay, ERemConCoreApiButtonRelease);

    // verify that no input is now being processed
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );

    cleanup();
}

void TestUserInputHandler::testProcessMediaKeyPause()
{
    init();

    mUserInputHdlr->iProcessingInputType = EVideoNone;

    // Issue Play
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPlay, ERemConCoreApiButtonPress);
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPlay, ERemConCoreApiButtonRelease);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );

    // Initiate Pause
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPause, ERemConCoreApiButtonPress);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoMediaKeys );
    QVERIFY( mUserInputHdlr->iLastMediaKeyPressed == ERemConCoreApiPause );

    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPause, ERemConCoreApiButtonRelease);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );

    cleanup();

}

void TestUserInputHandler::testProcessMediaKeyPlayPause()
{
    init();

    mUserInputHdlr->iProcessingInputType = EVideoNone;

    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPausePlayFunction, ERemConCoreApiButtonClick);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );

    // set to background
    mUserInputHdlr->iForeground = false;

    mUserInputHdlr->iLastMediaKeyPressed = ENop;
    // this event should be ignored as iForeground is false
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPausePlayFunction, ERemConCoreApiButtonPress);
    QVERIFY( mUserInputHdlr->iLastMediaKeyPressed == ENop );
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );

    cleanup();
}

void TestUserInputHandler::testProcessMediaKeyStop()
{
    init();

    mUserInputHdlr->iProcessingInputType = EVideoNone;

    // Issue Play
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPlay, ERemConCoreApiButtonPress);
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPlay, ERemConCoreApiButtonRelease);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );

    // Stop
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiStop, ERemConCoreApiButtonPress);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoMediaKeys );
    QVERIFY( mUserInputHdlr->iLastMediaKeyPressed == ERemConCoreApiStop );

    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiStop, ERemConCoreApiButtonRelease);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );

    cleanup();
}

void TestUserInputHandler::testProcessMediaKeyForward()
{
    init();

    mUserInputHdlr->iProcessingInputType = EVideoNone;

    // Issue Play
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPlay, ERemConCoreApiButtonPress);
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPlay, ERemConCoreApiButtonRelease);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );

    // Forward
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiFastForward, ERemConCoreApiButtonPress);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoMediaKeys );
    QVERIFY( mUserInputHdlr->iLastMediaKeyPressed == ERemConCoreApiFastForward );

    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiFastForward, ERemConCoreApiButtonRelease);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );

    cleanup();
}

void TestUserInputHandler::testProcessMediaKeyRewind()
{
    init();

    mUserInputHdlr->iProcessingInputType = EVideoNone;

    // Issue Play
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPlay, ERemConCoreApiButtonPress);
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPlay, ERemConCoreApiButtonRelease);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );

    // Forward
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiFastForward, ERemConCoreApiButtonPress);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoMediaKeys );
    QVERIFY( mUserInputHdlr->iLastMediaKeyPressed == ERemConCoreApiFastForward );

    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiFastForward, ERemConCoreApiButtonRelease);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );

    // Rewind
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiRewind, ERemConCoreApiButtonPress);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoMediaKeys );
    QVERIFY( mUserInputHdlr->iLastMediaKeyPressed == ERemConCoreApiRewind );

    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiRewind, ERemConCoreApiButtonRelease);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );

    cleanup();
}

void TestUserInputHandler::testProcessMediaKeyVolumeUp()
{
    init();

    mUserInputHdlr->iProcessingInputType = EVideoNone;

    // Issue Play
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPlay, ERemConCoreApiButtonPress);
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPlay, ERemConCoreApiButtonRelease);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );

    // Volume Up
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiVolumeUp, ERemConCoreApiButtonPress);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoMediaKeys );
    QVERIFY( mUserInputHdlr->iLastMediaKeyPressed == ERemConCoreApiVolumeUp );
    QVERIFY( mUserInputHdlr->iVolumeRepeatTimer->IsActive() );
    QVERIFY( mUserInputHdlr->iVolumeRepeatUp );

    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiVolumeUp, ERemConCoreApiButtonRelease);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );
    QVERIFY( ! mUserInputHdlr->iVolumeRepeatTimer->IsActive() );

    cleanup();
}

void TestUserInputHandler::testProcessMediaKeyVolumeDown()
{
    init();

    mUserInputHdlr->iProcessingInputType = EVideoNone;

    // Issue Play
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPlay, ERemConCoreApiButtonPress);
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiPlay, ERemConCoreApiButtonRelease);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );

    // Volume Down
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiVolumeDown, ERemConCoreApiButtonPress);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoMediaKeys );
    QVERIFY( mUserInputHdlr->iLastMediaKeyPressed == ERemConCoreApiVolumeDown );
    QVERIFY( mUserInputHdlr->iVolumeRepeatTimer->IsActive() );
    QVERIFY( ! mUserInputHdlr->iVolumeRepeatUp );

    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiVolumeDown, ERemConCoreApiButtonRelease);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );
    QVERIFY( ! mUserInputHdlr->iVolumeRepeatTimer->IsActive() );

    cleanup();
}

void TestUserInputHandler::testProcessMediaKeyWhenLocked()
{
    
    init();

    mUserInputHdlr->iProcessingInputType = EVideoNone;
    RProperty::Set( KPSUidAvkonDomain, KAknKeyguardStatus, true );  

    // media keys should be ignored when key lock is ON
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiVolumeDown, ERemConCoreApiButtonPress);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );
    
    RProperty::Set( KPSUidAvkonDomain, KAknKeyguardStatus, false ); 

    cleanup();       
}

void TestUserInputHandler::testProcessMediaKeyWhenInBackground()
{
    init();

    mUserInputHdlr->iProcessingInputType = EVideoNone;
    mUserInputHdlr->iForeground = false;

    // media keys should be ignored when not in foreground 
    mUserInputHdlr->ProcessMediaKey(ERemConCoreApiVolumeDown, ERemConCoreApiButtonPress);
    QVERIFY( mUserInputHdlr->iProcessingInputType == EVideoNone );

    cleanup();      
}

// End of file