utilities/mpmediacontroller/tsrc/unittest_mpmediakeyhandler/src/unittest_mpmediakeyhandler.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 18 Aug 2010 09:46:20 +0300
changeset 48 af3740e3753f
permissions -rw-r--r--
Revision: 201031 Kit: 201033

/**
* 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: Unit test for mpmediakeyhandler
*
*/

#include <QMetaType>

#include "stub/inc/mpenginefactory.h"
#include "stub/inc/remconcoreapitarget.h"
#include "stub/inc/remconcoreapitargetobserver.h"
#include "stub/inc/remconinterfaceselector.h"
#include "unittest_mpmediakeyhandler.h"
#include "mpcommondefs.h"


// Do this so we can access all member variables.
#define private public
#include "mpmediakeyhandler.h"
#include "mpmediakeyhandler_p.h"
#undef private

//This so stub classes can be loaded
#include "mpmediakeyhandler_p.cpp"
#include "mpmediakeyremconresponse.cpp"


/*!
 Make our test case a stand-alone executable that runs all the test functions.
 */
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    TestMpMediaKeyHandler tv;

    if ( argc > 1 ) {
        return QTest::qExec( &tv, argc, argv);
    }
    else {
        char *pass[3];
        pass[0] = argv[0];
        pass[1] = "-o";
        pass[2] = "c:\\data\\unittest_mpmediakeyhandler.txt";

        return QTest::qExec(&tv, 3, pass);
    }
}

TestMpMediaKeyHandler::TestMpMediaKeyHandler()
    : mTest(0)
{
}

TestMpMediaKeyHandler::~TestMpMediaKeyHandler()
{
    delete mTest;
}

/*!
 Called before the first testfunction is executed.
 */
void TestMpMediaKeyHandler::initTestCase()
{
}

/*!
 Called after the last testfunction was executed.
 */
void TestMpMediaKeyHandler::cleanupTestCase()
{
}

/*!
 Called before each testfunction is executed.
 */
void TestMpMediaKeyHandler::init()
{
    mTest = new MpMediaKeyHandler();
    mTestPrivate = mTest->d_ptr;
}

/*!
 Called after every testfunction.
 */
void TestMpMediaKeyHandler::cleanup()
{
    if (mTest)
    {
        delete mTest;
        mTest = 0;
        mTestPrivate = 0;
        
        MpEngineFactory::close();
    }
}

void TestMpMediaKeyHandler::testConstructor()
{
    QVERIFY( mTest );
    QVERIFY( mTestPrivate );
    QVERIFY( mTestPrivate->iInterfaceSelector );
    QVERIFY( mTestPrivate->iResponseHandler );
    QVERIFY( mTestPrivate->iMpEngine );
}

void TestMpMediaKeyHandler::testDestructor()
{
    // it is been observed that CRemConCoreApiTarget is not being deleted by anyone
    // the creator claim it does not own it, while others never claim the ownership neither
    cleanup();
    QVERIFY( !mTest );
    //QCOMPARE(CRemConCoreApiTarget::getCount(), 0);
    QCOMPARE(CRemConCoreApiTarget::getCount(), 2);
    QCOMPARE(CRemConInterfaceSelector::getCount(), 0);
}

void TestMpMediaKeyHandler::testCommandPausePlayKey()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    mTestPrivate->MrccatoCommand(ERemConCoreApiPausePlayFunction, ERemConCoreApiButtonClick);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdPlayPause);

}

void TestMpMediaKeyHandler::testCommandPlayKey()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    mTestPrivate->MrccatoCommand(ERemConCoreApiPlay, ERemConCoreApiButtonClick);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdPlay);
}

void TestMpMediaKeyHandler::testCommandStopKey()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    mTestPrivate->MrccatoCommand(ERemConCoreApiStop, ERemConCoreApiButtonClick);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdStop);
}

void TestMpMediaKeyHandler::testCommandPauseKey()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    mTestPrivate->MrccatoCommand(ERemConCoreApiPause, ERemConCoreApiButtonClick);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdPause);
}

void TestMpMediaKeyHandler::testCommandRewindKeyPress()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    mTestPrivate->MrccatoCommand(ERemConCoreApiRewind, ERemConCoreApiButtonPress);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdStartSeekBackward);
}

void TestMpMediaKeyHandler::testCommandRewindKeyRelease()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    mTestPrivate->MrccatoCommand(ERemConCoreApiRewind, ERemConCoreApiButtonRelease);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdStopSeeking);
}

void TestMpMediaKeyHandler::testCommandFastForwardKeyPress()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    mTestPrivate->MrccatoCommand(ERemConCoreApiFastForward, ERemConCoreApiButtonPress);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdStartSeekForward);
}

void TestMpMediaKeyHandler::testCommandFastForwardKeyRelease()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    mTestPrivate->MrccatoCommand(ERemConCoreApiFastForward, ERemConCoreApiButtonRelease);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdStopSeeking);
}

void TestMpMediaKeyHandler::testCommandBackwardKey()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    mTestPrivate->MrccatoCommand(ERemConCoreApiBackward, ERemConCoreApiButtonClick);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdSkipBackward);
}

void TestMpMediaKeyHandler::testCommandForwardKey()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    mTestPrivate->MrccatoCommand(ERemConCoreApiForward, ERemConCoreApiButtonClick);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE(mTestPrivate->iMpEngine->iMediaCommandReceived, CmdSkipForward);
}

void TestMpMediaKeyHandler::testCommandVolumeUpKey()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();

    // Simulate hardware side key clicked.
    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeUp, ERemConCoreApiButtonClick);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdIncreaseVolume );
    QVERIFY( mTestPrivate->iSideKeyAlreadyClicked );
    QTest::qWait(100);

    // Simulate holding the hardware side key.
    mTestPrivate->iMpEngine->iMediaCommandReceived = CmdNone;
    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeUp, ERemConCoreApiButtonPress);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+2);
    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
    QVERIFY( mTestPrivate->iSideKeyAlreadyClicked );
    QTest::qWait(100);

    // Release hardware side key.
    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeUp, ERemConCoreApiButtonRelease);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+3);
    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
    QVERIFY( !mTestPrivate->iSideKeyAlreadyClicked );
    QTest::qWait(100);

    // Simulate headset volume key pressed.
    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeUp, ERemConCoreApiButtonPress);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+4);
    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdIncreaseVolume );
    QVERIFY( mTestPrivate->iSideKeyAlreadyClicked );
}

void TestMpMediaKeyHandler::testCommandVolumeDownKey()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();

    // Simulate hardware side key clicked.
    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeDown, ERemConCoreApiButtonClick);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdDecreaseVolume );
    QVERIFY( mTestPrivate->iSideKeyAlreadyClicked );
    QTest::qWait(100);

    // Simulate holding the hardware side key.
    mTestPrivate->iMpEngine->iMediaCommandReceived = CmdNone;
    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeDown, ERemConCoreApiButtonPress);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+2);
    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
    QVERIFY( mTestPrivate->iSideKeyAlreadyClicked );
    QTest::qWait(100);

    // Release hardware side key.
    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeDown, ERemConCoreApiButtonRelease);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+3);
    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
    QVERIFY( !mTestPrivate->iSideKeyAlreadyClicked );
    QTest::qWait(100);

    // Simulate headset volume key pressed.
    mTestPrivate->MrccatoCommand(ERemConCoreApiVolumeDown, ERemConCoreApiButtonPress);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+4);
    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdDecreaseVolume );
    QVERIFY( mTestPrivate->iSideKeyAlreadyClicked );
}

void TestMpMediaKeyHandler::testPlay()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    mTestPrivate->MrccatoPlay(ERemConCoreApiPlaybackSpeedX1, ERemConCoreApiButtonClick);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdPlay );
}

void TestMpMediaKeyHandler::testTuneFunction()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    mTestPrivate->MrccatoTuneFunction(ETrue, 0, 1, ERemConCoreApiButtonClick);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
}

void TestMpMediaKeyHandler::testSelectDiskFunction()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    mTestPrivate->MrccatoSelectDiskFunction(0, ERemConCoreApiButtonClick);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
}

void TestMpMediaKeyHandler::testAudioInputFunction()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    mTestPrivate->MrccatoSelectAudioInputFunction(0, ERemConCoreApiButtonClick);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
}

void TestMpMediaKeyHandler::testSelectAvInputFunction()
{
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    mTestPrivate->MrccatoSelectAvInputFunction(0, ERemConCoreApiButtonClick);
    QCOMPARE(CRemConCoreApiTarget::getSendResponseCount(), oldCount+1);
    QCOMPARE( mTestPrivate->iMpEngine->iMediaCommandReceived, CmdNone );
}

// End of file