phoneapp/phoneuiqtviewadapter/tsrc/ut_phonevisibilityhandler/unit_tests.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 23 Jun 2010 18:12:20 +0300
changeset 45 6b911d05207e
child 46 bc5a64e5bc3c
permissions -rw-r--r--
Revision: 201023 Kit: 2010125

/*!
* 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 tests for PhoneUIQtViewAdapter.
*
*/

#include <QtTest/QtTest>
#include <QtGui>
#include <QList>
#include <QKeyEvent>
#include <QSignalSpy>
#include <HbApplication>
#include <xqcallinfo.h>
#include <callinformation.h>
#include <MediatorDomainUIDs.h>
#include <telinformationpskeys.h>
#include <coreapplicationuisdomainpskeys.h>
#include <ccallinfoiter.h>
#include "phoneuiqtviewif.h"
#define private public
#include "phonevisibilityhandler.h"
#undef public

int m_callCount = 0;

#define PHONE_TEST_MAIN(TestObject) \
int main(int argc, char *argv[]) \
    { \
        HbApplication app(argc, argv); \
        TestObject tc; \
        QResource::registerResource("../hbcore.rcc"); \
        int ret = QTest::qExec(&tc, argc, argv); \
        /* Core dump if HbIconLoader instance is not destroyed before the application instance. */ \
        /* HbIconLoader uses QCoreApplication::aboutToQuit() signal to destroy itself. */ \
        /* app.exec() where the signal is normally emitted is not called here. */ \
        /* So, invoking the signal explicitly. */ \
        QMetaObject::invokeMethod(&app, "aboutToQuit", Qt::DirectConnection); \
        return ret; \
    }

TInt CCallInfoIter::Count() const
{
    return m_callCount;
}

class TestPhoneVisibilityHandler : public QObject, public PhoneUIQtViewIF
{
    Q_OBJECT
public:
    TestPhoneVisibilityHandler();
    virtual ~TestPhoneVisibilityHandler();

    // From PhoneUIQtViewIF
    BubbleManagerIF& bubbleManager () {};
    void addBubbleCommand (int bubbleId, const PhoneAction& action) {};
    void clearBubbleCommands (int bubbleId) {};
    void addParticipantListAction(
            int commandId,  
            const QString &text, 
            const HbIcon &icon) {};
    void clearParticipantListActions() {};
    void hideToolbar () {};
    void showToolbar () {};
    void setToolbarActions (const QList<PhoneAction*>& actions) {};
    int volumeSliderValue () {};
    void removeVolumeSlider () {};
    void setVolumeSliderValue (
            int value, 
            int commandId, 
            int maxVolumeValue, 
            int minVolumeValue ) {};

    void setExpandAction(int bubbleId, int commandId) {};
    void removeExpandAction(int bubbleId) {};
    void showDialpad() {};
    void hideDialpad() {};
    bool isDialpadVisible() {};
    QString dialpadText() {};
    void clearAndHideDialpad() {};
    void clearDialpad() {};
    void bringToForeground() { m_bringToForegroundCalled = true;};
    void setMenuActions(const QList<PhoneAction*>& actions) {};
    void shutdownPhoneApp() {};
    void setBackButtonVisible(bool visible) {};
    HbMenu &menuReference() {};
public slots:
    void initTestCase();

    void cleanupTestCase();

    void init();

    void cleanup();
    
private slots:
    void t_memleak();
    
    void t_normal();
    
    void t_carmode();
    
    void t_devicelock();

    
private:
    PhoneVisibilityHandler *m_handler;
    bool m_bringToForegroundCalled;
    int m_startPosition;
    int m_startPriority;
    int m_normalPriority;
};

TestPhoneVisibilityHandler::TestPhoneVisibilityHandler ()
{
}

TestPhoneVisibilityHandler::~TestPhoneVisibilityHandler ()
{
}

void TestPhoneVisibilityHandler::initTestCase ()
{
    m_normalPriority = CEikonEnv::Static()->RootWin().OrdinalPriority();
    
    m_handler = new PhoneVisibilityHandler (*this, this);
    
    m_startPosition = m_handler->ordinalPosition();
    QVERIFY(m_startPosition > 0); // Expect OrdinalPosition higher than 0
    m_startPriority = CEikonEnv::Static()->RootWin().OrdinalPriority();
    QCOMPARE(m_startPriority, (int)ECoeWinPriorityNeverAtFront);
}

void TestPhoneVisibilityHandler::cleanupTestCase ()
{
    delete m_handler;
}

void TestPhoneVisibilityHandler::init ()
{

}

void TestPhoneVisibilityHandler::cleanup ()
{
    m_bringToForegroundCalled = false;
}

void TestPhoneVisibilityHandler::t_memleak()
{
}

void TestPhoneVisibilityHandler::t_normal()
{
    // Test hide device dialogs when background ( false )
    m_handler->hideDeviceDialogs(false);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), m_startPosition);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
    
    // Test hide device dialogs when background ( true )
    m_handler->hideDeviceDialogs(true);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), m_startPosition);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
    
    // bringToForeground is call
    m_handler->bringToForeground();
    QVERIFY(m_bringToForegroundCalled);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 1);
    
    // Test hide device dialogs when foreground ( false )
    m_handler->hideDeviceDialogs(false);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_normalPriority);

    // Test hide device dialogs when foreground ( true )
    m_handler->hideDeviceDialogs(true);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 1);
    
    // send backgroud is called last
    m_handler->sendToBackground(false);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), m_startPosition);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
}

void TestPhoneVisibilityHandler::t_carmode()
{
    QValueSpaceSubscriber* subscriber = new QValueSpaceSubscriber("/phone/carmode", this);
    QValueSpacePublisher* publisher = new QValueSpacePublisher("/phone",this);

    QVERIFY(m_handler->m_carModeEnabled == false);
    
    // 1 ongoing call and car mode switched on
    m_callCount = 1;
    publisher->setValue(QString("/carmode"),QVariant(true));
    QTest::qWait(100);
    QVERIFY(m_handler->m_carModeEnabled == true);
    QVERIFY(m_bringToForegroundCalled == false);

    // 1 ongoing call and car mode switched off
    publisher->setValue(QString("/carmode"),QVariant(false));
    QTest::qWait(100);
    QVERIFY(m_handler->m_carModeEnabled == false);
    QVERIFY(m_bringToForegroundCalled == true);
    
    // 0 ongoing calls and car mode switched on
    m_callCount = 0;
    m_bringToForegroundCalled = false;
    publisher->setValue(QString("/carmode"),QVariant(true));
    QTest::qWait(100);
    QVERIFY(m_handler->m_carModeEnabled == true);
    QVERIFY(m_bringToForegroundCalled == false);

    // 0 ongoing calls and car mode switched off
    publisher->setValue(QString("/carmode"),QVariant(false));
    QTest::qWait(100);
    QVERIFY(m_handler->m_carModeEnabled == false);
    QVERIFY(m_bringToForegroundCalled == false);
}

void TestPhoneVisibilityHandler::t_devicelock()
{
    m_handler->HandlePropertyChangedL(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, ETimerLocked);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), m_startPosition);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
    
    // Test hide device dialogs when background ( false )
    m_handler->hideDeviceDialogs(false);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), m_startPosition);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
    
    // Test hide device dialogs when background ( true )
    m_handler->hideDeviceDialogs(true);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), m_startPosition);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
    
    // bringToForeground is call
    m_handler->bringToForeground();
    QVERIFY(m_bringToForegroundCalled);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 1);
    
    // Test hide device dialogs when foreground ( false )
    m_handler->hideDeviceDialogs(false);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), (int)ECoeWinPriorityAlwaysAtFront);

    // Test hide device dialogs when foreground ( true )
    m_handler->hideDeviceDialogs(true);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 1);
    
    // Test lock status change
    m_handler->HandlePropertyChangedL(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, EAutolockOff);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 1);

    
    // send backgroud is called last
    m_handler->sendToBackground(false);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), m_startPosition);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
    
}


PHONE_TEST_MAIN(TestPhoneVisibilityHandler)
#include "unit_tests.moc"