qtmobileextensions/src/keycapture/tsrc/test_xqkeycapture.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 17 Sep 2010 08:34:25 +0300
changeset 26 3d09643def13
parent 24 9d760f716ca8
child 27 6bfad47013df
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: 
*
*/

#include <QtTest/QtTest>
#include <QEventLoop>
#include <QDebug>
#include <QtCore>

#include <W32STD.H>

#include "mytestwindowgroup.h"
#include "stub/remconcoreapitarget.h"
#include "stub/remconcallhandlingtarget.h"
#include "stub/remconinterfaceselector.h"

#include "targetwrapper.h"

#include <xqkeycapture.h>
#include <QFile>

const int KAllFlagsOn = XQKeyCapture::CaptureBasic | 
                        XQKeyCapture::CaptureCallHandlingExt |
                        XQKeyCapture::CaptureEnableRemoteExtEvents;
const Qt::Key KNotSpecifiedKey = Qt::Key_F35;

class TestXQKeyCapture : public QObject
{
    Q_OBJECT

public:
    TestXQKeyCapture(): QObject(), keyCapture(0) {};


private slots:
    void initTestCase();
    void cleanupTestCase();
    void init();
    void cleanup();
    
    void testCreateAndDestroy();

    void testCaptureKey_data();
    void testCaptureKey();

    void testCaptureKeyList_data();
    void testCaptureKeyList();

	void testCaptureKey_S60_data();
	void testCaptureKey_S60();

    void testCaptureKeyList_S60_data();
	void testCaptureKeyList_S60();

    void testCaptureKeyUpAndDowns_data();
    void testCaptureKeyUpAndDowns();

    void testCaptureKeyUpAndDownsList_data();
    void testCaptureKeyUpAndDownsList();

    void testCaptureKeyUpAndDowns_S60_data();
    void testCaptureKeyUpAndDowns_S60();

    void testCaptureKeyUpAndDownsList_S60_data();
    void testCaptureKeyUpAndDownsList_S60();

    void testCaptureLongKey_data();
    void testCaptureLongKey();

    void testCaptureLongKeyList_data();
    void testCaptureLongKeyList();

    void testCaptureLongKey_S60_data();
    void testCaptureLongKey_S60();

    void testCaptureLongKeyList_S60_data();
    void testCaptureLongKeyList_S60();

    void testCancelCaptureKey_data();
    void testCancelCaptureKey();

    void testCancelCaptureKeyList_data();
    void testCancelCaptureKeyList();

    void testCancelCaptureKey_S60_data();
    void testCancelCaptureKey_S60();

    void testCancelCaptureKeyList_S60_data();
    void testCancelCaptureKeyList_S60();

    void testCancelCaptureKeyUpAndDowns_data();
    void testCancelCaptureKeyUpAndDowns();

    void testCancelCaptureKeyUpAndDownsList_data();
    void testCancelCaptureKeyUpAndDownsList();

    void testCancelCaptureKeyUpAndDowns_S60_data();
    void testCancelCaptureKeyUpAndDowns_S60();

    void testCancelCaptureKeyUpAndDownsList_S60_data();
    void testCancelCaptureKeyUpAndDownsList_S60();

    void testCancelCaptureLongKey_data();
    void testCancelCaptureLongKey();

    void testCancelCaptureLongKeyList_data();
    void testCancelCaptureLongKeyList();

    void testCancelCaptureLongKey_S60_data();
    void testCancelCaptureLongKey_S60();

    void testCancelCaptureLongKeyList_S60_data();
    void testCancelCaptureLongKeyList_S60();

    void testCaptureRemoteKeys_data();
    void testCaptureRemoteKeys();

    void testCaptureRemoteKeys_SelectorFail_data();
    void testCaptureRemoteKeys_SelectorFail();

    void testCaptureRemoteKeys_ApiCore_data();
    void testCaptureRemoteKeys_ApiCore();    
    
    void testCaptureRemoteKeys_ApiCoreCancel_data();
    void testCaptureRemoteKeys_ApiCoreCancel();
    
    void testCaptureRemoteKeys_CallHandling_data();
    void testCaptureRemoteKeys_CallHandling();    

    void testCaptureRemoteKeys_CallHandlingCancel_data();
    void testCaptureRemoteKeys_CallHandlingCancel();    
    
    void testCaptureRemoteKeys_Basic_data();
    void testCaptureRemoteKeys_Basic();
    
    void testCaptureRemoteKeys_Extended_data();
    void testCaptureRemoteKeys_Extended();
    
    void testCancelCaptureRemoteKeys_data();
    void testCancelCaptureRemoteKeys();


    void testErrorString();
    void testErrorId();
	
	void testKeyMapperFile();

private:
	QString clearString(const QString& line);
	QString clearString(const QString& line, const QString& prefix, const QString& comment);
	void setProperKeys(bool extended);
    
private:
    XQKeyCapture* keyCapture;

    Qt::Key aKey;
    Qt::KeyboardModifiers aModifiersMap;
    Qt::KeyboardModifiers aModifier;
    
    int numOfArgs;
    WindowGroupActionType actionType;
    QList<unsigned int> results;
    QList<unsigned int> additionalResults;
    
    QList<long int> cancelResults;
    QList<long int> cancelAdditionalResults;
    
    long int additionalRequestHandle;
    
    bool willBeAdditionalRequest;
    bool additionalResult;
    bool ignoreWindowGroupAction;
    
    
public slots:
    void windowGroupAction(WindowGroupActionType, QList<unsigned int>);
    void windowGroupActionCancel(WindowGroupActionType, QList<long int>);
    
public:
    //for events handling    
    bool event(QEvent *);
    bool eventFilter(QObject *, QEvent *);
    void processEvent(QEvent *ev);
    
    void resetKeys();
    QWidget myGlobalWidget;
    Qt::Key myLastKeyPressed;
    Qt::Key myLastKeyReleased;
    Qt::Key myLastKeyPress;
    Qt::Key myLastKeyExtendedPress;
    Qt::Key myLastKeyRelease;
    Qt::Key myLastKeyExtendedRelease;
    QMap<TRemConCoreApiOperationId, Qt::Key> myKeyMapping;    
};

// ======== MEMBER FUNCTIONS ========
void TestXQKeyCapture::resetKeys() 
{
    myLastKeyPressed = KNotSpecifiedKey;
    myLastKeyReleased = KNotSpecifiedKey;
    myLastKeyPress = KNotSpecifiedKey;
    myLastKeyExtendedPress = KNotSpecifiedKey;
    myLastKeyRelease = KNotSpecifiedKey;
    myLastKeyExtendedRelease = KNotSpecifiedKey;
}
void TestXQKeyCapture::initTestCase()
{
    bool ret = connect(MyTestWindowGroup::Instance(), SIGNAL(windowGroupAction(WindowGroupActionType, QList<unsigned int>)),
            this, SLOT(windowGroupAction(WindowGroupActionType, QList<unsigned int>)));
    QVERIFY(ret);
    ret = connect(MyTestWindowGroup::Instance(), SIGNAL(windowGroupActionCancel(WindowGroupActionType, QList<long int>)),
            this, SLOT(windowGroupActionCancel(WindowGroupActionType, QList<long int>)));
    QVERIFY(ret);
        
    myGlobalWidget.installEventFilter(this);
    
    // load key mapping
    
    TargetWrapper* myTargetWrapper = new TargetWrapper();
    myTargetWrapper->init(XQKeyCapture::CaptureBasic);
    myKeyMapping = myTargetWrapper->keyMapping;
    delete myTargetWrapper;
    myGlobalWidget.setFocus();
    myGlobalWidget.activateWindow();
}

void TestXQKeyCapture::cleanupTestCase()
{
    //is this needed - looking for panic reason.
    myGlobalWidget.removeEventFilter(this);
    myGlobalWidget.deleteLater();
    //delete MyTestWindowGroup::Instance();
}

void TestXQKeyCapture::init()
{
    keyCapture = new XQKeyCapture();
    resetKeys();
}

void TestXQKeyCapture::cleanup()
{
    delete keyCapture;
    CRemConCoreApiTarget::setNewLLeave(false);
    CRemConCallHandlingTarget::setNewLLeave(false);
    myGlobalWidget.setVisible(false);
}

void TestXQKeyCapture::testCreateAndDestroy()
{
    //empty, all done in init and cleanup
}

////////////////////////////////////////////////////////////////
// CAPTURE
//Capture Key
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::testCaptureKey_data()
{
    QTest::addColumn<unsigned int>("qtKey");
    QTest::addColumn<unsigned int>("qtMask");
    QTest::addColumn<unsigned int>("qtModifier");

    QTest::addColumn<unsigned int>("symbianKey");
    QTest::addColumn<unsigned int>("symbianMask");
    QTest::addColumn<unsigned int>("symbianModifier");
        
    QTest::addColumn<long int>("reqNum");
    
    QTest::addColumn<bool>("additional");
    QTest::addColumn<unsigned int>("additionalSymbianKey");
    
    QTest::newRow("esc_key") << static_cast<unsigned int>(Qt::Key_Escape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<unsigned int>(EKeyEscape)
                            << static_cast<unsigned int>(0)
                            << static_cast<unsigned int>(0)
                            << static_cast<long int>(12)
                            << false
                            << static_cast<unsigned int>(0);

    QTest::newRow("esc_key_not_supported") << static_cast<unsigned int>(Qt::Key_Escape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<unsigned int>(EKeyEscape)
                            << static_cast<unsigned int>(0)
                            << static_cast<unsigned int>(0)
                            << static_cast<long int>(KErrNotSupported)
                            << false
                            << static_cast<unsigned int>(0);
    
    QTest::newRow("esc_key_modifiers") << static_cast<unsigned int>(Qt::Key_Escape) 
                            << static_cast<unsigned int>(Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt:: KeypadModifier)
                            << static_cast<unsigned int>(Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt:: KeypadModifier) 
                            << static_cast<unsigned int>(EKeyEscape)
                            << static_cast<unsigned int>(EModifierShift | EModifierCtrl | EModifierAlt | EModifierKeypad)
                            << static_cast<unsigned int>(EModifierShift | EModifierCtrl | EModifierAlt | EModifierKeypad)
                            << static_cast<long int>(13)
                            << false
                            << static_cast<unsigned int>(0);
    
    QTest::newRow("shift_key") << static_cast<unsigned int>(Qt::Key_Shift) 
                            << static_cast<unsigned int>(Qt::ShiftModifier)
                            << static_cast<unsigned int>(Qt::ShiftModifier) 
                            << static_cast<unsigned int>(EKeyLeftShift)
                            << static_cast<unsigned int>(EModifierShift)
                            << static_cast<unsigned int>(EModifierShift)
                            << static_cast<long int>(12)
                            << true
                            << static_cast<unsigned int>(EKeyRightShift);

    QTest::newRow("control_key") << static_cast<unsigned int>(Qt::Key_Control) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<unsigned int>(EKeyLeftCtrl)
                            << static_cast<unsigned int>(0)
                            << static_cast<unsigned int>(0)
                            << static_cast<long int>(12)
                            << true
                            << static_cast<unsigned int>(EKeyRightCtrl);
                            
    QTest::newRow("meta_key") << static_cast<unsigned int>(Qt::Key_Super_R) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<unsigned int>(EKeyRightFunc)
                            << static_cast<unsigned int>(0)
                            << static_cast<unsigned int>(0)
                            << static_cast<long int>(12)
                            << true
                            << static_cast<unsigned int>(EKeyRightFunc);
}

void TestXQKeyCapture::testCaptureKey()
{
    numOfArgs = 3;
    actionType = WGATCaptureKey;
    additionalResult = false;
    ignoreWindowGroupAction = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(unsigned int, symbianKey);
    QFETCH(unsigned int, symbianMask);
    QFETCH(unsigned int, symbianModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(unsigned int, additionalSymbianKey);
    
    willBeAdditionalRequest = additional;
    
    results.clear();
    results << symbianKey << symbianMask << symbianModifier;
    
    additionalResults.clear();
    additionalResults << additionalSymbianKey << symbianMask << symbianModifier;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);

    keyCapture->captureKey(static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

void TestXQKeyCapture::testCaptureKeyList_data() 
{
    testCaptureKey_data();
}

void TestXQKeyCapture::testCaptureKeyList()
{
    numOfArgs = 3;
    actionType = WGATCaptureKey;
    additionalResult = false;
    ignoreWindowGroupAction = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(unsigned int, symbianKey);
    QFETCH(unsigned int, symbianMask);
    QFETCH(unsigned int, symbianModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(unsigned int, additionalSymbianKey);
    
    willBeAdditionalRequest = additional;
    
    results.clear();
    results << symbianKey << symbianMask << symbianModifier;
    
    additionalResults.clear();
    additionalResults << additionalSymbianKey << symbianMask << symbianModifier;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);

    keyCapture->captureKey(QList<Qt::Key>() << static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

////////////////////////////////////////////////////////////////
//Capture Key Up And Downs
////////////////////////////////////////////////////////////////

void TestXQKeyCapture::testCaptureKey_S60_data()
{
    QTest::addColumn<unsigned int>("s60Key");
    QTest::addColumn<unsigned int>("qtMask");
    QTest::addColumn<unsigned int>("qtModifier");

    QTest::addColumn<unsigned int>("symbianKey");
    QTest::addColumn<unsigned int>("symbianMask");
    QTest::addColumn<unsigned int>("symbianModifier");
        
    QTest::addColumn<long int>("reqNum");
    
    QTest::addColumn<bool>("additional");
    QTest::addColumn<unsigned int>("additionalSymbianKey");
    
    QTest::newRow("esc_key") << static_cast<unsigned int>(EKeyEscape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<unsigned int>(EKeyEscape)
                            << static_cast<unsigned int>(0)
                            << static_cast<unsigned int>(0)
                            << static_cast<long int>(12)
                            << false
                            << static_cast<unsigned int>(0);

    QTest::newRow("esc_key_not_supported") << static_cast<unsigned int>(EKeyEscape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<unsigned int>(EKeyEscape)
                            << static_cast<unsigned int>(0)
                            << static_cast<unsigned int>(0)
                            << static_cast<long int>(KErrNotSupported)
                            << false
                            << static_cast<unsigned int>(0);
    
    QTest::newRow("esc_key_modifiers") << static_cast<unsigned int>(EKeyEscape) 
                            << static_cast<unsigned int>(Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt:: KeypadModifier)
                            << static_cast<unsigned int>(Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt:: KeypadModifier) 
                            << static_cast<unsigned int>(EKeyEscape)
                            << static_cast<unsigned int>(EModifierShift | EModifierCtrl | EModifierAlt | EModifierKeypad)
                            << static_cast<unsigned int>(EModifierShift | EModifierCtrl | EModifierAlt | EModifierKeypad)
                            << static_cast<long int>(13)
                            << false
                            << static_cast<unsigned int>(0);
    
    QTest::newRow("shift_key") << static_cast<unsigned int>(EKeyLeftShift) 
                            << static_cast<unsigned int>(Qt::ShiftModifier)
                            << static_cast<unsigned int>(Qt::ShiftModifier) 
                            << static_cast<unsigned int>(EKeyLeftShift)
                            << static_cast<unsigned int>(EModifierShift)
                            << static_cast<unsigned int>(EModifierShift)
                            << static_cast<long int>(12)
                            << true
                            << static_cast<unsigned int>(EKeyRightShift);

    QTest::newRow("control_key") << static_cast<unsigned int>(EKeyRightCtrl) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<unsigned int>(EKeyRightCtrl)
                            << static_cast<unsigned int>(0)
                            << static_cast<unsigned int>(0)
                            << static_cast<long int>(12)
                            << true
                            << static_cast<unsigned int>(EKeyRightFunc);
                            
    QTest::newRow("meta_key") << static_cast<unsigned int>(EKeyLeftCtrl) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<unsigned int>(EKeyLeftCtrl)
                            << static_cast<unsigned int>(0)
                            << static_cast<unsigned int>(0)
                            << static_cast<long int>(12)
                            << true
                            << static_cast<unsigned int>(EKeyLeftFunc);


}

void TestXQKeyCapture::testCaptureKey_S60()
{
    numOfArgs = 3;
    actionType = WGATCaptureKey;
    additionalResult = false;
    ignoreWindowGroupAction = false;
    
    QFETCH(unsigned int, s60Key);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(unsigned int, symbianKey);
    QFETCH(unsigned int, symbianMask);
    QFETCH(unsigned int, symbianModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(unsigned int, additionalSymbianKey);
    
    willBeAdditionalRequest = additional;
    
    results.clear();
    results << symbianKey << symbianMask << symbianModifier;
    
    additionalResults.clear();
    additionalResults << additionalSymbianKey << symbianMask << symbianModifier;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    keyCapture->captureKey(static_cast<TUint>(s60Key), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

void TestXQKeyCapture::testCaptureKeyList_S60_data()
{
    testCaptureKey_S60_data();
}

void TestXQKeyCapture::testCaptureKeyList_S60()
{
    numOfArgs = 3;
    actionType = WGATCaptureKey;
    additionalResult = false;
    ignoreWindowGroupAction = false;
    
    QFETCH(unsigned int, s60Key);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(unsigned int, symbianKey);
    QFETCH(unsigned int, symbianMask);
    QFETCH(unsigned int, symbianModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(unsigned int, additionalSymbianKey);
    
    willBeAdditionalRequest = additional;
    
    results.clear();
    results << symbianKey << symbianMask << symbianModifier;
    
    additionalResults.clear();
    additionalResults << additionalSymbianKey << symbianMask << symbianModifier;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    keyCapture->captureKey(QList<TUint>() << static_cast<TUint>(s60Key), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

////////////////////////////////////////////////////////////////
//Capture Key Up And Downs
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::testCaptureKeyUpAndDowns_data()
{
    QTest::addColumn<unsigned int>("qtKey");
    QTest::addColumn<unsigned int>("qtMask");
    QTest::addColumn<unsigned int>("qtModifier");

    QTest::addColumn<unsigned int>("symbianKey");
    QTest::addColumn<unsigned int>("symbianMask");
    QTest::addColumn<unsigned int>("symbianModifier");
        
    QTest::addColumn<long int>("reqNum");
    
    QTest::addColumn<bool>("additional");
    QTest::addColumn<unsigned int>("additionalSymbianKey");
    
    QTest::newRow("esc_key") << static_cast<unsigned int>(Qt::Key_Escape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<unsigned int>(EStdKeyEscape)
                            << static_cast<unsigned int>(0)
                            << static_cast<unsigned int>(0)
                            << static_cast<long int>(12)
                            << false
                            << static_cast<unsigned int>(0);
}

void TestXQKeyCapture::testCaptureKeyUpAndDowns()
{
    numOfArgs = 3;
    actionType = WGATCaptureKeyUpAndDowns;
    additionalResult = false;
    ignoreWindowGroupAction = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(unsigned int, symbianKey);
    QFETCH(unsigned int, symbianMask);
    QFETCH(unsigned int, symbianModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(unsigned int, additionalSymbianKey);
    
    willBeAdditionalRequest = additional;
    
    results.clear();
    results << symbianKey << symbianMask << symbianModifier;
    
    additionalResults.clear();
    additionalResults << additionalSymbianKey << symbianMask << symbianModifier;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    keyCapture->captureKeyUpAndDowns(static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

void TestXQKeyCapture::testCaptureKeyUpAndDownsList_data()
{
    testCaptureKeyUpAndDowns_data();
}

void TestXQKeyCapture::testCaptureKeyUpAndDownsList()
{
    numOfArgs = 3;
    actionType = WGATCaptureKeyUpAndDowns;
    additionalResult = false;
    ignoreWindowGroupAction = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(unsigned int, symbianKey);
    QFETCH(unsigned int, symbianMask);
    QFETCH(unsigned int, symbianModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(unsigned int, additionalSymbianKey);
    
    willBeAdditionalRequest = additional;
    
    results.clear();
    results << symbianKey << symbianMask << symbianModifier;
    
    additionalResults.clear();
    additionalResults << additionalSymbianKey << symbianMask << symbianModifier;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    keyCapture->captureKeyUpAndDowns(QList<Qt::Key>() << static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

////////////////////////////////////////////////////////////////
//Capture Key Up And Downs
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::testCaptureKeyUpAndDowns_S60_data()
{
    QTest::addColumn<unsigned int>("qtKey");
    QTest::addColumn<unsigned int>("qtMask");
    QTest::addColumn<unsigned int>("qtModifier");

    QTest::addColumn<unsigned int>("symbianKey");
    QTest::addColumn<unsigned int>("symbianMask");
    QTest::addColumn<unsigned int>("symbianModifier");
        
    QTest::addColumn<long int>("reqNum");
    
    QTest::addColumn<bool>("additional");
    QTest::addColumn<unsigned int>("additionalSymbianKey");
    
    QTest::newRow("esc_key") << static_cast<unsigned int>(EStdKeyEscape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<unsigned int>(EStdKeyEscape)
                            << static_cast<unsigned int>(0)
                            << static_cast<unsigned int>(0)
                            << static_cast<long int>(12)
                            << false
                            << static_cast<unsigned int>(0);
}

void TestXQKeyCapture::testCaptureKeyUpAndDowns_S60()
{
    numOfArgs = 3;
    actionType = WGATCaptureKeyUpAndDowns;
    additionalResult = false;
    ignoreWindowGroupAction = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(unsigned int, symbianKey);
    QFETCH(unsigned int, symbianMask);
    QFETCH(unsigned int, symbianModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(unsigned int, additionalSymbianKey);
    
    willBeAdditionalRequest = additional;
    
    results.clear();
    results << symbianKey << symbianMask << symbianModifier;
    
    additionalResults.clear();
    additionalResults << additionalSymbianKey << symbianMask << symbianModifier;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    keyCapture->captureKeyUpAndDowns(static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

void TestXQKeyCapture::testCaptureKeyUpAndDownsList_S60_data()
{
    testCaptureKeyUpAndDowns_S60_data();
}

void TestXQKeyCapture::testCaptureKeyUpAndDownsList_S60()
{
    numOfArgs = 3;
    actionType = WGATCaptureKeyUpAndDowns;
    additionalResult = false;
    ignoreWindowGroupAction = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(unsigned int, symbianKey);
    QFETCH(unsigned int, symbianMask);
    QFETCH(unsigned int, symbianModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(unsigned int, additionalSymbianKey);
    
    willBeAdditionalRequest = additional;
    
    results.clear();
    results << symbianKey << symbianMask << symbianModifier;
    
    additionalResults.clear();
    additionalResults << additionalSymbianKey << symbianMask << symbianModifier;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    keyCapture->captureKeyUpAndDowns(QList<TUint>() << static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

////////////////////////////////////////////////////////////////
//Capture Long Key
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::testCaptureLongKey_data()
{
    QTest::addColumn<unsigned int>("qtKey");
    QTest::addColumn<unsigned int>("qtMask");
    QTest::addColumn<unsigned int>("qtModifier");
    QTest::addColumn<int>("longFlags");
    
    QTest::addColumn<unsigned int>("symbianKey");
    QTest::addColumn<unsigned int>("symbianMask");
    QTest::addColumn<unsigned int>("symbianModifier");
    QTest::addColumn<int>("symbianPriority");
    QTest::addColumn<int>("symbianLongFlags");
        
    QTest::addColumn<long int>("reqNum");
    
    QTest::addColumn<bool>("additional");
    QTest::addColumn<unsigned int>("additionalSymbianKey");
    
    
    QTest::newRow("esc_key") << static_cast<unsigned int>(Qt::Key_Escape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<int>(XQKeyCapture::LongNormal) 
                            << static_cast<unsigned int>(EKeyEscape)
                            << static_cast<unsigned int>(0)
                            << static_cast<unsigned int>(0)
                            << static_cast<int>(0) //priority
                            << static_cast<int>(XQKeyCapture::LongNormal) 
                            << static_cast<long int>(12)
                            << false
                            << static_cast<unsigned int>(0);

}

void TestXQKeyCapture::testCaptureLongKey()
{
    numOfArgs = 6;
    actionType = WGATCaptureLongKey;
    additionalResult = false;
    ignoreWindowGroupAction = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);
    QFETCH(int, longFlags);
    
    QFETCH(unsigned int, symbianKey);
    QFETCH(unsigned int, symbianMask);
    QFETCH(unsigned int, symbianModifier);
    QFETCH(int, symbianPriority);
    QFETCH(int, symbianLongFlags);
    
    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(unsigned int, additionalSymbianKey);
    
    willBeAdditionalRequest = additional;
    
    results.clear();
    results << symbianKey << symbianKey << symbianMask << symbianModifier << symbianPriority << symbianLongFlags;
    
    additionalResults.clear();
    additionalResults << additionalSymbianKey << symbianMask << symbianModifier << symbianPriority << symbianLongFlags;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    keyCapture->captureLongKey(static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier), static_cast<XQKeyCapture::LongFlags>(longFlags));
}

void TestXQKeyCapture::testCaptureLongKeyList_data()
{
    testCaptureLongKey_data();
}

void TestXQKeyCapture::testCaptureLongKeyList()
{
    numOfArgs = 6;
    actionType = WGATCaptureLongKey;
    additionalResult = false;
    ignoreWindowGroupAction = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);
    QFETCH(int, longFlags);
    
    QFETCH(unsigned int, symbianKey);
    QFETCH(unsigned int, symbianMask);
    QFETCH(unsigned int, symbianModifier);
    QFETCH(int, symbianPriority);
    QFETCH(int, symbianLongFlags);
    
    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(unsigned int, additionalSymbianKey);
    
    willBeAdditionalRequest = additional;
    
    results.clear();
    results << symbianKey << symbianKey << symbianMask << symbianModifier << symbianPriority << symbianLongFlags;
    
    additionalResults.clear();
    additionalResults << additionalSymbianKey << symbianMask << symbianModifier << symbianPriority << symbianLongFlags;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    keyCapture->captureLongKey(QList<Qt::Key>() << static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier), static_cast<XQKeyCapture::LongFlags>(longFlags));
}

////////////////////////////////////////////////////////////////
//Capture Long Key
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::testCaptureLongKey_S60_data()
{
    QTest::addColumn<unsigned int>("qtKey");
    QTest::addColumn<unsigned int>("qtMask");
    QTest::addColumn<unsigned int>("qtModifier");
    QTest::addColumn<int>("longFlags");
    
    QTest::addColumn<unsigned int>("symbianKey");
    QTest::addColumn<unsigned int>("symbianMask");
    QTest::addColumn<unsigned int>("symbianModifier");
    QTest::addColumn<int>("symbianPriority");
    QTest::addColumn<int>("symbianLongFlags");
        
    QTest::addColumn<long int>("reqNum");
    
    QTest::addColumn<bool>("additional");
    QTest::addColumn<unsigned int>("additionalSymbianKey");
    
    
    QTest::newRow("esc_key") << static_cast<unsigned int>(EKeyEscape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<int>(XQKeyCapture::LongNormal) 
                            << static_cast<unsigned int>(EKeyEscape)
                            << static_cast<unsigned int>(0)
                            << static_cast<unsigned int>(0)
                            << static_cast<int>(0) //priority
                            << static_cast<int>(XQKeyCapture::LongNormal) 
                            << static_cast<long int>(12)
                            << false
                            << static_cast<unsigned int>(0);

}

void TestXQKeyCapture::testCaptureLongKey_S60()
{
    numOfArgs = 6;
    actionType = WGATCaptureLongKey;
    additionalResult = false;
    ignoreWindowGroupAction = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);
    QFETCH(int, longFlags);
    
    QFETCH(unsigned int, symbianKey);
    QFETCH(unsigned int, symbianMask);
    QFETCH(unsigned int, symbianModifier);
    QFETCH(int, symbianPriority);
    QFETCH(int, symbianLongFlags);
    
    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(unsigned int, additionalSymbianKey);
    
    willBeAdditionalRequest = additional;
    
    results.clear();
    results << symbianKey << symbianKey << symbianMask << symbianModifier << symbianPriority << symbianLongFlags;
    
    additionalResults.clear();
    additionalResults << additionalSymbianKey << symbianMask << symbianModifier << symbianPriority << symbianLongFlags;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    keyCapture->captureLongKey(static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier), static_cast<XQKeyCapture::LongFlags>(longFlags));
}

void TestXQKeyCapture::testCaptureLongKeyList_S60_data()
{
    testCaptureLongKey_S60_data();
}

void TestXQKeyCapture::testCaptureLongKeyList_S60()
{
    numOfArgs = 6;
    actionType = WGATCaptureLongKey;
    additionalResult = false;
    ignoreWindowGroupAction = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);
    QFETCH(int, longFlags);
    
    QFETCH(unsigned int, symbianKey);
    QFETCH(unsigned int, symbianMask);
    QFETCH(unsigned int, symbianModifier);
    QFETCH(int, symbianPriority);
    QFETCH(int, symbianLongFlags);
    
    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(unsigned int, additionalSymbianKey);
    
    willBeAdditionalRequest = additional;
    
    results.clear();
    results << symbianKey << symbianKey << symbianMask << symbianModifier << symbianPriority << symbianLongFlags;
    
    additionalResults.clear();
    additionalResults << additionalSymbianKey << symbianMask << symbianModifier << symbianPriority << symbianLongFlags;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    keyCapture->captureLongKey(QList<TUint>() << static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier), static_cast<XQKeyCapture::LongFlags>(longFlags));
}

////////////////////////////////////////////////////////////////
// CANCEL
//Cancel Capture Key
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::testCancelCaptureKey_data()
{
    QTest::addColumn<unsigned int>("qtKey");
    QTest::addColumn<unsigned int>("qtMask");
    QTest::addColumn<unsigned int>("qtModifier");

    QTest::addColumn<long int>("reqNum");
    
    QTest::addColumn<bool>("additional");
    QTest::addColumn<long int>("additionalReqNum");
    
    QTest::newRow("esc_key") << static_cast<unsigned int>(Qt::Key_Escape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<long int>(12)
                            << false
                            << static_cast<long int>(0);

    QTest::newRow("esc_key_not_supported") << static_cast<unsigned int>(Qt::Key_Escape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<long int>(KErrNotSupported)
                            << false
                            << static_cast<long int>(0);
    
    QTest::newRow("esc_key_modifiers") << static_cast<unsigned int>(Qt::Key_Escape) 
                            << static_cast<unsigned int>(Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt:: KeypadModifier)
                            << static_cast<unsigned int>(Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt:: KeypadModifier) 
                            << static_cast<long int>(13)
                            << false
                            << static_cast<long int>(0);
    
    QTest::newRow("shift_key") << static_cast<unsigned int>(Qt::Key_Shift) 
                            << static_cast<unsigned int>(Qt::ShiftModifier)
                            << static_cast<unsigned int>(Qt::ControlModifier) 
                            << static_cast<long int>(15)
                            << true
                            << static_cast<long int>(16);

    QTest::newRow("control_key") << static_cast<unsigned int>(Qt::Key_Control) 
                            << static_cast<unsigned int>(Qt::ControlModifier)
                            << static_cast<unsigned int>(Qt::ShiftModifier) 
                            << static_cast<long int>(17)
                            << true
                            << static_cast<long int>(18);
                            
    QTest::newRow("meta_key") << static_cast<unsigned int>(Qt::Key_Meta) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<long int>(19)
                            << true
                            << static_cast<long int>(20);


}

void TestXQKeyCapture::testCancelCaptureKey()
{
    numOfArgs = 1;
    actionType = WGATCancelCaptureKey;
    additionalResult = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(long int, additionalReqNum);
    
    willBeAdditionalRequest = additional;
    additionalRequestHandle = additionalReqNum;
    
    cancelResults.clear();
    cancelResults << reqNum;
    
    cancelAdditionalResults.clear();
    cancelAdditionalResults << additionalReqNum;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    ignoreWindowGroupAction = true;
    keyCapture->captureKey(static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
    ignoreWindowGroupAction = false;
    willBeAdditionalRequest = additional;
    keyCapture->cancelCaptureKey(static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

void TestXQKeyCapture::testCancelCaptureKeyList_data()
{
    testCancelCaptureKey_data();
}

void TestXQKeyCapture::testCancelCaptureKeyList()
{
    numOfArgs = 1;
    actionType = WGATCancelCaptureKey;
    additionalResult = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(long int, additionalReqNum);
    
    willBeAdditionalRequest = additional;
    additionalRequestHandle = additionalReqNum;
    
    cancelResults.clear();
    cancelResults << reqNum;
    
    cancelAdditionalResults.clear();
    cancelAdditionalResults << additionalReqNum;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    ignoreWindowGroupAction = true;
    keyCapture->captureKey(static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
    ignoreWindowGroupAction = false;
    willBeAdditionalRequest = additional;
    keyCapture->cancelCaptureKey(QList<Qt::Key>() << static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

////////////////////////////////////////////////////////////////
// CANCEL
//Cancel Capture Key
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::testCancelCaptureKey_S60_data()
{
    QTest::addColumn<unsigned int>("qtKey");
    QTest::addColumn<unsigned int>("qtMask");
    QTest::addColumn<unsigned int>("qtModifier");

    QTest::addColumn<long int>("reqNum");
    
    QTest::addColumn<bool>("additional");
    QTest::addColumn<long int>("additionalReqNum");
    
    QTest::newRow("esc_key") << static_cast<unsigned int>(EKeyEscape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<long int>(12)
                            << false
                            << static_cast<long int>(0);

    QTest::newRow("esc_key_not_supported") << static_cast<unsigned int>(EKeyEscape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<long int>(KErrNotSupported)
                            << false
                            << static_cast<long int>(0);
    
    QTest::newRow("esc_key_modifiers") << static_cast<unsigned int>(EKeyEscape) 
                            << static_cast<unsigned int>(Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt:: KeypadModifier)
                            << static_cast<unsigned int>(Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt:: KeypadModifier) 
                            << static_cast<long int>(13)
                            << false
                            << static_cast<long int>(0);
    
    QTest::newRow("shift_key") << static_cast<unsigned int>(EKeyLeftShift) 
                            << static_cast<unsigned int>(Qt::ShiftModifier)
                            << static_cast<unsigned int>(Qt::ControlModifier) 
                            << static_cast<long int>(15)
                            << true
                            << static_cast<long int>(16);

    QTest::newRow("control_key") << static_cast<unsigned int>(EKeyLeftCtrl) 
                            << static_cast<unsigned int>(Qt::ControlModifier)
                            << static_cast<unsigned int>(Qt::ShiftModifier) 
                            << static_cast<long int>(17)
                            << true
                            << static_cast<long int>(18);
                            
    QTest::newRow("meta_key") << static_cast<unsigned int>(EKeyRightCtrl) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<long int>(19)
                            << true
                            << static_cast<long int>(20);
}

void TestXQKeyCapture::testCancelCaptureKey_S60()
{
    numOfArgs = 1;
    actionType = WGATCancelCaptureKey;
    additionalResult = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(long int, additionalReqNum);
    
    willBeAdditionalRequest = additional;
    additionalRequestHandle = additionalReqNum;
    
    cancelResults.clear();
    cancelResults << reqNum;
    
    cancelAdditionalResults.clear();
    cancelAdditionalResults << additionalReqNum;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    ignoreWindowGroupAction = true;
    keyCapture->captureKey(static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
    ignoreWindowGroupAction = false;
    willBeAdditionalRequest = additional;
    keyCapture->cancelCaptureKey(static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

void TestXQKeyCapture::testCancelCaptureKeyList_S60_data()
{
    testCancelCaptureKey_S60_data();
}

void TestXQKeyCapture::testCancelCaptureKeyList_S60()
{
    numOfArgs = 1;
    actionType = WGATCancelCaptureKey;
    additionalResult = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(long int, additionalReqNum);
    
    willBeAdditionalRequest = additional;
    additionalRequestHandle = additionalReqNum;
    
    cancelResults.clear();
    cancelResults << reqNum;
    
    cancelAdditionalResults.clear();
    cancelAdditionalResults << additionalReqNum;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    ignoreWindowGroupAction = true;
    keyCapture->captureKey(static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
    ignoreWindowGroupAction = false;
    willBeAdditionalRequest = additional;
    keyCapture->cancelCaptureKey(QList<TUint>() << static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

////////////////////////////////////////////////////////////////
//Cancel Capture Key Up And Downs
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::testCancelCaptureKeyUpAndDowns_data()
{
    QTest::addColumn<unsigned int>("qtKey");
    QTest::addColumn<unsigned int>("qtMask");
    QTest::addColumn<unsigned int>("qtModifier");

    QTest::addColumn<long int>("reqNum");
    
    QTest::addColumn<bool>("additional");
    QTest::addColumn<long int>("additionalReqNum");
    
    QTest::newRow("esc_key") << static_cast<unsigned int>(Qt::Key_Escape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<long int>(34)
                            << false
                            << static_cast<long int>(35);

}

void TestXQKeyCapture::testCancelCaptureKeyUpAndDowns()
{
    numOfArgs = 1;
    actionType = WGATCancelCaptureKeyUpAndDowns;
    additionalResult = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(long int, additionalReqNum);
    
    willBeAdditionalRequest = additional;
    additionalRequestHandle = additionalReqNum;
    
    cancelResults.clear();
    cancelResults << reqNum;
    
    cancelAdditionalResults.clear();
    cancelAdditionalResults << additionalReqNum;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    ignoreWindowGroupAction = true;
    keyCapture->captureKeyUpAndDowns(static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
    ignoreWindowGroupAction = false;
    willBeAdditionalRequest = additional;
    keyCapture->cancelCaptureKeyUpAndDowns(static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

void TestXQKeyCapture::testCancelCaptureKeyUpAndDownsList_data()
{
    testCancelCaptureKeyUpAndDowns_data();
}

void TestXQKeyCapture::testCancelCaptureKeyUpAndDownsList()
{
    numOfArgs = 1;
    actionType = WGATCancelCaptureKeyUpAndDowns;
    additionalResult = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(long int, additionalReqNum);
    
    willBeAdditionalRequest = additional;
    additionalRequestHandle = additionalReqNum;
    
    cancelResults.clear();
    cancelResults << reqNum;
    
    cancelAdditionalResults.clear();
    cancelAdditionalResults << additionalReqNum;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    ignoreWindowGroupAction = true;
    keyCapture->captureKeyUpAndDowns(static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
    ignoreWindowGroupAction = false;
    willBeAdditionalRequest = additional;
    keyCapture->cancelCaptureKeyUpAndDowns(QList<Qt::Key>() << static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

////////////////////////////////////////////////////////////////
//Cancel Capture Key Up And Downs
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::testCancelCaptureKeyUpAndDowns_S60_data()
{
    QTest::addColumn<unsigned int>("qtKey");
    QTest::addColumn<unsigned int>("qtMask");
    QTest::addColumn<unsigned int>("qtModifier");

    QTest::addColumn<long int>("reqNum");
    
    QTest::addColumn<bool>("additional");
    QTest::addColumn<long int>("additionalReqNum");
    
    QTest::newRow("esc_key") << static_cast<unsigned int>(EKeyEscape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier) 
                            << static_cast<long int>(34)
                            << false
                            << static_cast<long int>(35);

}

void TestXQKeyCapture::testCancelCaptureKeyUpAndDowns_S60()
{
    numOfArgs = 1;
    actionType = WGATCancelCaptureKeyUpAndDowns;
    additionalResult = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(long int, additionalReqNum);
    
    willBeAdditionalRequest = additional;
    additionalRequestHandle = additionalReqNum;
    
    cancelResults.clear();
    cancelResults << reqNum;
    
    cancelAdditionalResults.clear();
    cancelAdditionalResults << additionalReqNum;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    ignoreWindowGroupAction = true;
    keyCapture->captureKeyUpAndDowns(static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
    ignoreWindowGroupAction = false;
    willBeAdditionalRequest = additional;
    keyCapture->cancelCaptureKeyUpAndDowns(static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

void TestXQKeyCapture::testCancelCaptureKeyUpAndDownsList_S60_data()
{
    testCancelCaptureKeyUpAndDowns_S60_data();
}

void TestXQKeyCapture::testCancelCaptureKeyUpAndDownsList_S60()
{
    numOfArgs = 1;
    actionType = WGATCancelCaptureKeyUpAndDowns;
    additionalResult = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(long int, additionalReqNum);
    
    willBeAdditionalRequest = additional;
    additionalRequestHandle = additionalReqNum;
    
    cancelResults.clear();
    cancelResults << reqNum;
    
    cancelAdditionalResults.clear();
    cancelAdditionalResults << additionalReqNum;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    ignoreWindowGroupAction = true;
    keyCapture->captureKeyUpAndDowns(static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
    ignoreWindowGroupAction = false;
    willBeAdditionalRequest = additional;
    keyCapture->cancelCaptureKeyUpAndDowns(QList<TUint>() << static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier));
}

////////////////////////////////////////////////////////////////
//Cancel Capture Long Key
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::testCancelCaptureLongKey_data()
{
    QTest::addColumn<unsigned int>("qtKey");
    QTest::addColumn<unsigned int>("qtMask");
    QTest::addColumn<unsigned int>("qtModifier");
    QTest::addColumn<int>("longFlags");
    
    QTest::addColumn<long int>("reqNum");
    
    QTest::addColumn<bool>("additional");
    QTest::addColumn<long int>("additionalReqNum");
    
    QTest::newRow("esc_key") << static_cast<unsigned int>(Qt::Key_Escape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<int>(XQKeyCapture::LongNormal) 
                            << static_cast<long int>(22)
                            << false
                            << static_cast<long int>(23);





}

void TestXQKeyCapture::testCancelCaptureLongKey()
{
    numOfArgs = 1;
    actionType = WGATCancelCaptureLongKey;
    additionalResult = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);
    QFETCH(int, longFlags);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(long int, additionalReqNum);
    
    willBeAdditionalRequest = additional;
    additionalRequestHandle = additionalReqNum;
    
    cancelResults.clear();
    cancelResults << reqNum;
    
    cancelAdditionalResults.clear();
    cancelAdditionalResults << additionalReqNum;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    ignoreWindowGroupAction = true;
    keyCapture->captureLongKey(static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier), static_cast<XQKeyCapture::LongFlags>(longFlags));
    ignoreWindowGroupAction = false;
    willBeAdditionalRequest = additional;
    keyCapture->cancelCaptureLongKey(static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier), static_cast<XQKeyCapture::LongFlags>(longFlags));
}

void TestXQKeyCapture::testCancelCaptureLongKeyList_data()
{
    testCancelCaptureLongKey_data();
}

void TestXQKeyCapture::testCancelCaptureLongKeyList()
{
    numOfArgs = 1;
    actionType = WGATCancelCaptureLongKey;
    additionalResult = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);
    QFETCH(int, longFlags);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(long int, additionalReqNum);
    
    willBeAdditionalRequest = additional;
    additionalRequestHandle = additionalReqNum;
    
    cancelResults.clear();
    cancelResults << reqNum;
    
    cancelAdditionalResults.clear();
    cancelAdditionalResults << additionalReqNum;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    ignoreWindowGroupAction = true;
    keyCapture->captureLongKey(static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier), static_cast<XQKeyCapture::LongFlags>(longFlags));
    ignoreWindowGroupAction = false;
    willBeAdditionalRequest = additional;
    keyCapture->cancelCaptureLongKey(QList<Qt::Key>() << static_cast<Qt::Key>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier), static_cast<XQKeyCapture::LongFlags>(longFlags));
}

////////////////////////////////////////////////////////////////
//Cancel Capture Long Key
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::testCancelCaptureLongKey_S60_data()
{
    QTest::addColumn<unsigned int>("qtKey");
    QTest::addColumn<unsigned int>("qtMask");
    QTest::addColumn<unsigned int>("qtModifier");
    QTest::addColumn<int>("longFlags");
    
    QTest::addColumn<long int>("reqNum");
    
    QTest::addColumn<bool>("additional");
    QTest::addColumn<long int>("additionalReqNum");
    
    QTest::newRow("esc_key") << static_cast<unsigned int>(EKeyEscape) 
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<unsigned int>(Qt::NoModifier)
                            << static_cast<int>(XQKeyCapture::LongNormal) 
                            << static_cast<long int>(22)
                            << false
                            << static_cast<long int>(23);

}

void TestXQKeyCapture::testCancelCaptureLongKey_S60()
{
    numOfArgs = 1;
    actionType = WGATCancelCaptureLongKey;
    additionalResult = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);
    QFETCH(int, longFlags);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(long int, additionalReqNum);
    
    willBeAdditionalRequest = additional;
    additionalRequestHandle = additionalReqNum;
    
    cancelResults.clear();
    cancelResults << reqNum;
    
    cancelAdditionalResults.clear();
    cancelAdditionalResults << additionalReqNum;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    ignoreWindowGroupAction = true;
    keyCapture->captureLongKey(static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier), static_cast<XQKeyCapture::LongFlags>(longFlags));
    ignoreWindowGroupAction = false;
    willBeAdditionalRequest = additional;
    keyCapture->cancelCaptureLongKey(static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier), static_cast<XQKeyCapture::LongFlags>(longFlags));
}

void TestXQKeyCapture::testCancelCaptureLongKeyList_S60_data()
{
    testCancelCaptureLongKey_S60_data();
}

void TestXQKeyCapture::testCancelCaptureLongKeyList_S60()
{
    numOfArgs = 1;
    actionType = WGATCancelCaptureLongKey;
    additionalResult = false;
    
    QFETCH(unsigned int, qtKey);
    QFETCH(unsigned int, qtMask);
    QFETCH(unsigned int, qtModifier);
    QFETCH(int, longFlags);

    QFETCH(long int, reqNum);
    
    QFETCH(bool, additional);
    QFETCH(long int, additionalReqNum);
    
    willBeAdditionalRequest = additional;
    additionalRequestHandle = additionalReqNum;
    
    cancelResults.clear();
    cancelResults << reqNum;
    
    cancelAdditionalResults.clear();
    cancelAdditionalResults << additionalReqNum;
    
    MyTestWindowGroup::Instance()->setRequestNumber(reqNum);
    ignoreWindowGroupAction = true;
    keyCapture->captureLongKey(static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier), static_cast<XQKeyCapture::LongFlags>(longFlags));
    ignoreWindowGroupAction = false;
    willBeAdditionalRequest = additional;
    keyCapture->cancelCaptureLongKey(QList<TUint>() << static_cast<TUint>(qtKey), Qt::KeyboardModifier(qtMask), Qt::KeyboardModifier(qtModifier), static_cast<XQKeyCapture::LongFlags>(longFlags));
}

void TestXQKeyCapture::testCaptureRemoteKeys_data()
    {
    QTest::addColumn<unsigned int>("flags");
    
    // there are 4 flags: 
    // XQKeyCapture::CaptureNone = 0x0
    // XQKeyCapture::CaptureBasic = 0x1
    // XQKeyCapture::CaptureCallHandlingExt = 0x2
    // XQKeyCapture::CaptureEnableRemoteExtEvents = 0x4
    // so we should iterate through all combinations:
    for(unsigned int i(0); i <= KAllFlagsOn; ++i) {
        QString desc("flag:0x" + QString::number(i,16));
        QTest::newRow(desc.toAscii()) << i ;
        }    
    }

void TestXQKeyCapture::testCaptureRemoteKeys()
    {
    QFETCH(unsigned int, flags);
    XQKeyCapture::CapturingFlag flag = static_cast<XQKeyCapture::CapturingFlag>(flags);
    int oldCoreApiCount = CRemConCoreApiTarget::getCount();
    int oldCallHandlingCount = CRemConCallHandlingTarget::getCount();
    int expectedCoreApiCount(oldCoreApiCount);
    int expectedCallHandlingCount(oldCallHandlingCount);
    keyCapture->captureRemoteKeys(static_cast<XQKeyCapture::CapturingFlag>(flag));
    if(flag & XQKeyCapture::CaptureBasic) expectedCoreApiCount++;
    if(flag & XQKeyCapture::CaptureCallHandlingExt) expectedCallHandlingCount++;
    int newCoreApiCount = CRemConCoreApiTarget::getCount();
    int newCallHandlingCount = CRemConCallHandlingTarget::getCount();
    QVERIFY2(expectedCoreApiCount == newCoreApiCount, "expected core api creation count was different");
    QVERIFY2(expectedCallHandlingCount == newCallHandlingCount, "expected call handling api creation count was different");    
    }

void TestXQKeyCapture::testCaptureRemoteKeys_SelectorFail_data()
    {
    testCaptureRemoteKeys_data();
    }

void TestXQKeyCapture::testCaptureRemoteKeys_SelectorFail()
    {
    QFETCH(unsigned int, flags);
    CRemConInterfaceSelector::setNewLLeave();
    bool result = keyCapture->captureRemoteKeys(static_cast<XQKeyCapture::CapturingFlag>(flags));
    QVERIFY2(!result , "CaptureRemoteKeys did not fail and it should.");
    CRemConInterfaceSelector::setNewLLeave();
    result = keyCapture->cancelCaptureRemoteKeys(static_cast<XQKeyCapture::CapturingFlag>(flags));
    QVERIFY2(!result , "CaptureRemoteKeys did not fail and it should.");        
    }

void TestXQKeyCapture::testCaptureRemoteKeys_ApiCore_data()
    {
    testCaptureRemoteKeys_data();
    }

void TestXQKeyCapture::testCaptureRemoteKeys_ApiCore()
    {
    QFETCH(unsigned int, flags);
    XQKeyCapture::CapturingFlag flag = static_cast<XQKeyCapture::CapturingFlag>(flags);
    CRemConCoreApiTarget::setNewLLeave();
    bool result = keyCapture->captureRemoteKeys(flag);
    bool expected = !(flag & XQKeyCapture::CaptureBasic);   
    QVERIFY2(result == expected, "CaptureRemoteKeys did not fail and it should.");
    }

void TestXQKeyCapture::testCaptureRemoteKeys_ApiCoreCancel_data()
    {
    testCaptureRemoteKeys_data();
    }
void TestXQKeyCapture::testCaptureRemoteKeys_ApiCoreCancel()
    {
    QFETCH(unsigned int, flags);
    
    // set all flags on
    XQKeyCapture::CapturingFlag flag = static_cast<XQKeyCapture::CapturingFlag>(KAllFlagsOn);    
    bool result = keyCapture->captureRemoteKeys(flag);
    QVERIFY2(result, "CaptureRemoteKeys failed.");
    
    // check cancel for each flag
    CRemConCoreApiTarget::setNewLLeave();
    flag = static_cast<XQKeyCapture::CapturingFlag>(flags);
    // it should fail only if CaptureBasic is not removed and was set.
    bool expected = (flag & XQKeyCapture::CaptureBasic);
    result = keyCapture->cancelCaptureRemoteKeys(flag);
    QVERIFY2(result == expected, "CaptureRemoteKeys did not fail and it should.");
    }


void TestXQKeyCapture::testCaptureRemoteKeys_CallHandling_data()
    {
    testCaptureRemoteKeys_data();
    }
void TestXQKeyCapture::testCaptureRemoteKeys_CallHandling()
    {
    QFETCH(unsigned int, flags);
    XQKeyCapture::CapturingFlag flag = static_cast<XQKeyCapture::CapturingFlag>(flags);
    
    CRemConCallHandlingTarget::setNewLLeave();
    bool result = keyCapture->captureRemoteKeys(flag);
    bool expected = !(flag & XQKeyCapture::CaptureCallHandlingExt);   
    QVERIFY2(result == expected, "CaptureRemoteKeys did not fail and it should."); 
    }

void TestXQKeyCapture::testCaptureRemoteKeys_CallHandlingCancel_data()
    {
    testCaptureRemoteKeys_data();
    }
void TestXQKeyCapture::testCaptureRemoteKeys_CallHandlingCancel()
    {
    QFETCH(unsigned int, flags);
    
    // set all flags
    XQKeyCapture::CapturingFlag flag = static_cast<XQKeyCapture::CapturingFlag>(KAllFlagsOn);    
    bool result = keyCapture->captureRemoteKeys(flag);
    QVERIFY2(result, "CaptureRemoteKeys failed.");
    
    // check cancel
    CRemConCallHandlingTarget::setNewLLeave();
    flag = static_cast<XQKeyCapture::CapturingFlag>(flags);
    // it should fail only if CaptureBasic flag is unset
    bool expected = (flag & XQKeyCapture::CaptureCallHandlingExt);
    result = keyCapture->cancelCaptureRemoteKeys(flag);
    QVERIFY2(result == expected, "CaptureRemoteKeys did not fail and it should.");
    }

void TestXQKeyCapture::testCaptureRemoteKeys_Basic_data()
    {
    QTest::addColumn<unsigned int>("buttonAction");
    QTest::addColumn<unsigned int>("operationId");
    QTest::addColumn<unsigned int>("operationQtKey");
    // this test will take few minutes to go thru all possible button / operation
    for(unsigned int buttonA(0); buttonA < 3; buttonA++) {  // 0 - ERemConCoreApiButtonPress, 1 - ERemConCoreApiButtonRelease, 2 - ERemConCoreApiButtonClick
        foreach(TRemConCoreApiOperationId operationId, myKeyMapping.keys()) {
            QTest::newRow(QString::number(operationId).toAscii()) << buttonA << static_cast<unsigned int>(operationId) << static_cast<unsigned int>(myKeyMapping.value(operationId));
        }
    }
    }

void TestXQKeyCapture::testCaptureRemoteKeys_Basic()
    {
    QFETCH(unsigned int, buttonAction);
    QFETCH(unsigned int, operationId);
    QFETCH(unsigned int, operationQtKey);    
    // this test in the beginning was supposed to test whole event delivery process; 
    // now it will just check proper translation between qt and symbian.
    myGlobalWidget.setVisible(true);
    myGlobalWidget.setFocus();
    myGlobalWidget.activateWindow();
    
    TRemConCoreApiOperationId opId = static_cast<TRemConCoreApiOperationId>(operationId);   
    TargetWrapper* myTargetWrapper = new TargetWrapper();
    XQKeyCapture::CapturingFlags myFlag = XQKeyCapture::CaptureBasic;
    myTargetWrapper->init(myFlag);
    int oldCount = CRemConCoreApiTarget::getSendResponseCount();
    TRemConCoreApiButtonAction btnAction = static_cast<TRemConCoreApiButtonAction>(buttonAction);   
    myTargetWrapper->MrccatoCommand(opId, btnAction);
    
    // verify core Api calls
    QVERIFY2(CRemConCoreApiTarget::getSendResponseCount() == oldCount+1, "Send Response Count is not equal");
    QVERIFY2(CRemConCoreApiTarget::getLastOperationId() == opId, "Operation Id is different then requested");
    
    // verify proper symbian -> qt key call 
    bool extendedEvents = (myFlag & XQKeyCapture::CaptureEnableRemoteExtEvents);        
    setProperKeys(extendedEvents);    
    if(btnAction == ERemConCoreApiButtonClick) {
        QVERIFY2(myTargetWrapper->mapKey(opId) == myLastKeyPressed, "Qt key does not correspond to proper Symbian key");
        QVERIFY2(myTargetWrapper->mapKey(opId) == myLastKeyReleased, "Qt key does not correspond to proper Symbian key");
    }
    if(btnAction == ERemConCoreApiButtonPress) {
        QVERIFY2(myTargetWrapper->mapKey(opId) == myLastKeyPressed, "Qt key does not correspond to proper Symbian key");
        QVERIFY2(myLastKeyReleased == KNotSpecifiedKey, "Qt key does not correspond to proper Symbian key");
    }
    if(btnAction == ERemConCoreApiButtonRelease) {
        QVERIFY2(myLastKeyPressed == KNotSpecifiedKey, "Qt key does not correspond to proper Symbian key");
        QVERIFY2(myTargetWrapper->mapKey(opId) == myLastKeyReleased, "Qt key does not correspond to proper Symbian key");
    }    
    delete myTargetWrapper;
    }

void TestXQKeyCapture::testCaptureRemoteKeys_Extended_data()
    {
    testCaptureRemoteKeys_data();
    }

void TestXQKeyCapture::testCaptureRemoteKeys_Extended()
    {
    QFETCH(unsigned int, flags);
    XQKeyCapture::CapturingFlag flag = static_cast<XQKeyCapture::CapturingFlag>(flags);
    
    TargetWrapper* myTargetWrapper = new TargetWrapper();
    myTargetWrapper->init(flag);
    
    bool expected = (flag & XQKeyCapture::CaptureCallHandlingExt);
    bool extendedEvents = (flag & XQKeyCapture::CaptureEnableRemoteExtEvents);
    myGlobalWidget.setVisible(true);
    myGlobalWidget.setFocus();
    myGlobalWidget.activateWindow();
    
    // key call
    resetKeys();
    myTargetWrapper->AnswerCall();
    setProperKeys(extendedEvents);
    QVERIFY((myLastKeyPressed == Qt::Key_Call) == expected);
    QVERIFY((myLastKeyReleased == Qt::Key_Call) == expected);
    
    // End call
    resetKeys();
    myTargetWrapper->EndCall();
    setProperKeys(extendedEvents);   
    QVERIFY((myLastKeyPressed == Qt::Key_Hangup) == expected);
    QVERIFY((myLastKeyReleased == Qt::Key_Hangup) == expected);
    
    // Answer End Call
    resetKeys();
    myTargetWrapper->AnswerEndCall();
    setProperKeys(extendedEvents);
    QVERIFY((myLastKeyPressed == Qt::Key_Hangup) == expected);
    QVERIFY((myLastKeyReleased == Qt::Key_Hangup) == expected);
    delete myTargetWrapper;
    }

void TestXQKeyCapture::testCancelCaptureRemoteKeys_data()
    {
    testCaptureRemoteKeys_data();
    }

void TestXQKeyCapture::testCancelCaptureRemoteKeys()
    {
    QFETCH(unsigned int, flags);
    keyCapture->cancelCaptureRemoteKeys(static_cast<XQKeyCapture::CapturingFlag>(flags));
    }



////////////////////////////////////////////////////////////////
// ERRORS
//errorString
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::testErrorString()
{
    keyCapture->errorString();
}

////////////////////////////////////////////////////////////////
// ERRORS
//errorId
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::testErrorId()
{
    keyCapture->errorId();
}

QString TestXQKeyCapture::clearString(const QString& line) 
{
    QString s(line);
    s.replace(" ", "");
    s.replace("\t", "");
    return s.trimmed();
}

QString TestXQKeyCapture::clearString(const QString& line, const QString& prefix, const QString& comment) 
{
    QString s(line);
    s.replace(prefix, comment);
    s.replace(" ", "");
    s.replace("\t", "");
    return s.trimmed();
}

void TestXQKeyCapture::setProperKeys(bool extendedEvents) 
{
    if(extendedEvents) {
        myLastKeyPressed = myLastKeyExtendedPress;
        myLastKeyReleased = myLastKeyExtendedRelease;
        QVERIFY((myLastKeyPress == KNotSpecifiedKey));
        QVERIFY((myLastKeyRelease == KNotSpecifiedKey));
    } else {
        myLastKeyPressed = myLastKeyPress;
        myLastKeyReleased = myLastKeyRelease;
        QVERIFY((myLastKeyExtendedPress == KNotSpecifiedKey));
        QVERIFY((myLastKeyExtendedRelease == KNotSpecifiedKey));
    }       
}

////////////////////////////////////////////////////////////////
// TEST KEY MAPPER FILE
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::testKeyMapperFile()
{
    // test only for emulator build
    #ifdef __WINSCW__   
    
    QString firstline("static const KeyMapping keyMapping[] = {");
    QString lastline("};");
    QString comment("//");
    
    QStringList qt;
    QStringList kc;

    QFile qtFile("c:\\qkeymapper_s60.cpp");
    QVERIFY2(qtFile.open(QIODevice::ReadOnly | QIODevice::Text), "Failed to open: qtFile");
    
    QFile kcFile("c:\\keymapper.cpp");
    QVERIFY2(kcFile.open(QIODevice::ReadOnly | QIODevice::Text), "Failed to open: kcFile");
    
    QTextStream inQtFile(&qtFile);
    bool test(false);
    while(!inQtFile.atEnd()) {
        QString line = inQtFile.readLine();
        // trim everything that is on the right side of comment and add to list if needed
        if(test) qt.append(clearString(line.split(comment).at(0)));
        if(line.contains(firstline)) {
            test = true;
        }
        if(line.contains(lastline)) {
            test = false;
        }
    }
    test = false;
    QTextStream inKcFile(&kcFile);
    while(!inKcFile.atEnd()) {
        QString line = inKcFile.readLine();
        // trim everything that is on the right side of comment and add to list if needed
        if(test) kc.append(clearString(line.split(comment).at(0)));
        if(line.contains(firstline)) {
            test = true;
        }
        if(line.contains(lastline)) {
            test = false;
        }
    }
    
    QVERIFY2(qt.count() == kc.count(), "Amount of lines inside key definition is different");
    
    for(int i = 0; i < kc.size(); i++) {
        QString keys = kc.at(i);
        QVERIFY2(qt.contains(keys), "qtFile does not contain key(s) from capture keys");
    }
    
    for(int i = 0; i < qt.size(); i++) {
        QString keys = qt.at(i);
        QVERIFY2(kc.contains(keys), "kcFile does not contain qt keys");
    }    
#else
    // Skip test on hw
    QSKIP("This test is valid only on emulator", SkipSingle);
#endif // __WINSCW__
}


////////////////////////////////////////////////////////////////
// REQUEST SLOT
//windowGroupAction
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::windowGroupAction(WindowGroupActionType wgat, QList<unsigned int> paramList)
{
    if(!ignoreWindowGroupAction)
    {
        QVERIFY(wgat == actionType);
        QVERIFY(paramList.count() == numOfArgs);
        
        for(int i = 0; i < numOfArgs; i++)
            {
            if(additionalResult)
                QVERIFY(paramList[i] == additionalResults[i]);
            else 
                QVERIFY(paramList[i] == results[i]);
            }
    }
    if(willBeAdditionalRequest){
        additionalResult = true;
        MyTestWindowGroup::Instance()->setRequestNumber(additionalRequestHandle);
        }
}

////////////////////////////////////////////////////////////////
//windowGroupActionCancel
////////////////////////////////////////////////////////////////
void TestXQKeyCapture::windowGroupActionCancel(WindowGroupActionType wgat, QList<long int> paramList)
{
    QVERIFY(wgat == actionType);
    QVERIFY(paramList.count() == numOfArgs);
    
    for(int i = 0; i < numOfArgs; i++){
        if(additionalResult) QVERIFY(paramList[i] == cancelAdditionalResults[i]);
        else QVERIFY(paramList[i] == cancelResults[i]);
    }

    if(willBeAdditionalRequest){
        additionalResult = true;
    }
}

bool TestXQKeyCapture::event(QEvent *ev)
{
    processEvent(ev);  
    return false;
}

bool TestXQKeyCapture::eventFilter(QObject *o, QEvent *ev)
{
    processEvent(ev);
    return qApp->eventFilter(o, ev);
}

void TestXQKeyCapture::processEvent(QEvent *ev)
{
    if(ev){
        if(ev->type() == QEvent::KeyPress) {
            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
            myLastKeyPress = static_cast<Qt::Key>(keyEvent->key());
        } else if(ev->type() == QEvent::KeyRelease) {
            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
            myLastKeyRelease = static_cast<Qt::Key>(keyEvent->key());
        } else if(ev->type() == XQKeyCapture::remoteEventType_KeyPress()) {
            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
            myLastKeyExtendedPress = static_cast<Qt::Key>(keyEvent->key());
        } else if(ev->type() == XQKeyCapture::remoteEventType_KeyRelease()) {
            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
            myLastKeyExtendedRelease = static_cast<Qt::Key>(keyEvent->key());
        } 
    }
}

////////////////////////////////////////////////////////////////
// MAIN
//main
////////////////////////////////////////////////////////////////

#ifdef _XQKEYCAPTURE_UNITTEST_LOG_TO_C_
    main(int argc, char* argv[]) 
    {
        QApplication app(argc, argv);
        TestXQKeyCapture tc;
        int c = 3;
        char* v[] = {argv[0], "-o", "c:/test.txt"};
        return QTest::qExec(&tc, c, v);
    }
#else
    QTEST_MAIN(TestXQKeyCapture)
#endif

#include "test_xqkeycapture.moc"