phoneapp/phoneuiqtviewadapter/tsrc/ut_phonevisibilityhandler/unit_tests.cpp
author hgs
Fri, 15 Oct 2010 12:58:46 +0300
changeset 78 baacf668fe89
parent 76 cfea66083b62
permissions -rw-r--r--
201041

/*!
* 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 <ccallinformation.h>
#include <keyguardaccessapi.h>
#include <phoneuitestmain.h>
#include "phoneuiqtviewif.h"
#define private public
#include "phonevisibilityhandler.h"
#undef public

int m_callCount = 0;
int g_keyGuardEnabled = false;
int g_enableKeyGuardCalled = false;
int g_disableKeyGuardCalled = false;
CCallInformation* CCallInformation::NewL() {};
CCallInfoIter * CCallInfoIter::NewL(class CCallInfos &) {};

CCallInformation::CCallInformation() {}
CCallInformation::~CCallInformation() {}
CCallInfoIter& CCallInformation::GetCallsL( ){}

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 , HbAction * ) {};
    void clearBubbleCommands (int ) {};
    void addParticipantListAction(
            int ,  
            const QString &, 
            const HbIcon &) {};
    void clearParticipantListActions() {};
    void hideToolbar () {};
    void showToolbar () {};
    void setToolbarActions (const QList<HbAction *> & ) {};
    int volumeSliderValue () {};
    void removeVolumeSlider () {};
    void setVolumeSliderValue (
            int , 
            int , 
            int , 
            int  ) {};

    void setExpandAction(int , int ) {};
    void removeExpandAction(int ) {};
    void showDialpad() {};
    void hideDialpad() {};
    bool isDialpadVisible() {};
    QString dialpadText() {};
    void clearAndHideDialpad() {};
    void clearDialpad() {};
    void bringToForeground() { m_bringToForegroundCalled = true;};
	  void hide() {};
    void setMenuActions(const QList<HbAction *> & ) {};
    void shutdownPhoneApp() {};
    void setBackButtonVisible(bool ) {};
    HbMenu &menuReference() {};
    void captureKey(Qt::Key , bool ) {};
    void setRestrictedMode(bool ) {};
    
public slots:
    void initTestCase();

    void cleanupTestCase();

    void init();

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

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

CKeyguardAccessApi* CKeyguardAccessApi::NewL()
{
    return new CKeyguardAccessApi;
}
CKeyguardAccessApi::~CKeyguardAccessApi( ) {}
CKeyguardAccessApi::CKeyguardAccessApi( ) {}


TBool CKeyguardAccessApi::IsKeyguardEnabled()
{
    return g_keyGuardEnabled;
}

TInt CKeyguardAccessApi::EnableKeyguard( TBool  )
{
    g_enableKeyGuardCalled = true;
    return 0;
}

TInt CKeyguardAccessApi::DisableKeyguard( TBool  )
{
    g_disableKeyGuardCalled = true;
    return 0;
}



TestPhoneVisibilityHandler::TestPhoneVisibilityHandler ()
{
}

TestPhoneVisibilityHandler::~TestPhoneVisibilityHandler ()
{
}

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

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

void TestPhoneVisibilityHandler::init ()
{
}

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

void TestPhoneVisibilityHandler::t_memleak()
{
}

void TestPhoneVisibilityHandler::t_normal()
{
    // Test hide device dialogs when background ( false )
    m_handler->hideDeviceDialogs(false);
    QVERIFY(CEikonEnv::Static()->RootWin().OrdinalPosition() > 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
    
    // Test hide device dialogs when background ( true )
    m_handler->hideDeviceDialogs(true);
    QVERIFY(CEikonEnv::Static()->RootWin().OrdinalPosition() > 0);
    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 + 100);
    
    // 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 + 100);
    
    // send backgroud is called last
    m_handler->sendToBackground();
    QVERIFY(CEikonEnv::Static()->RootWin().OrdinalPosition() > 0);
    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);
    
    // send backgroud is called last
    m_handler->sendToBackground();
    QVERIFY(CEikonEnv::Static()->RootWin().OrdinalPosition() > 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
}

void TestPhoneVisibilityHandler::t_devicelock()
{
    m_handler->HandlePropertyChangedL(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, ETimerLocked);
    QVERIFY(CEikonEnv::Static()->RootWin().OrdinalPosition() > 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
    
    // Test hide device dialogs when background ( false )
    m_handler->hideDeviceDialogs(false);
    QVERIFY(CEikonEnv::Static()->RootWin().OrdinalPosition() > 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
    
    // Test hide device dialogs when background ( true )
    m_handler->hideDeviceDialogs(true);
    QVERIFY(CEikonEnv::Static()->RootWin().OrdinalPosition() > 0);
    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 + 100);
    
    // Test hide device dialogs when foreground ( false )
    m_handler->hideDeviceDialogs(false);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 1);

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

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


void TestPhoneVisibilityHandler::t_keyGuardHandling()
{
    // Test when keyguard is not enabled before call
    g_keyGuardEnabled = false; 
    
    // bringToForeground is call
    m_handler->bringToForeground();
    m_handler->windowVisibilityChange(true);
    QVERIFY(m_bringToForegroundCalled);
    QVERIFY(g_disableKeyGuardCalled);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 100);
    
    cleanup();
    // send backgroud is called last
    m_handler->sendToBackground();
    m_handler->windowVisibilityChange(false);
    QVERIFY(!g_enableKeyGuardCalled);
    QVERIFY(CEikonEnv::Static()->RootWin().OrdinalPosition() > 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
    
    
    // Test when keyguard is enabled before call
    cleanup();
    g_keyGuardEnabled = true; 
    
    // bringToForeground is call
    m_handler->bringToForeground();
    m_handler->windowVisibilityChange(true);
    QVERIFY(m_bringToForegroundCalled);
    QVERIFY(g_disableKeyGuardCalled);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 100);
    
    cleanup();
    // send backgroud is called last
    m_handler->sendToBackground();
    m_handler->windowVisibilityChange(false);
    QVERIFY(g_enableKeyGuardCalled);
    QVERIFY(CEikonEnv::Static()->RootWin().OrdinalPosition() > 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
    
    // Test when keyguard is enabled before call +
    // keyguard is not enabled when phone is background
    cleanup();
    g_keyGuardEnabled = true;
    
    // bringToForeground is call
    m_handler->bringToForeground();
    m_handler->windowVisibilityChange(true);
    QVERIFY(m_bringToForegroundCalled);
    QVERIFY(g_disableKeyGuardCalled);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 100);

    cleanup();
    // Test that keyguard is not enabled when phone is background
    CEikonEnv::Static()->RootWin().SetOrdinalPosition(-1, ECoeWinPriorityNormal);
    m_handler->windowVisibilityChange(false);
    m_handler->sendToBackground();
    m_handler->windowVisibilityChange(false);
    QVERIFY(!g_enableKeyGuardCalled);
    QVERIFY(CEikonEnv::Static()->RootWin().OrdinalPosition() > 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
    
    
    // Test case where two calls is created and key guard is enabled
    cleanup();
    g_keyGuardEnabled = true; 
    
    // bringToForeground is call
    m_handler->bringToForeground();
    m_handler->windowVisibilityChange(true);
    QVERIFY(m_bringToForegroundCalled);
    QVERIFY(g_disableKeyGuardCalled);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 100);
    
    cleanup();
    m_handler->bringToForeground();
    m_handler->windowVisibilityChange(true);
    QVERIFY(m_bringToForegroundCalled);
    QVERIFY(g_disableKeyGuardCalled);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 100);
    
    cleanup();
    m_handler->sendToBackground();
    m_handler->windowVisibilityChange(false);
    QVERIFY(g_enableKeyGuardCalled);
    QVERIFY(CEikonEnv::Static()->RootWin().OrdinalPosition() > 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
    
    // Test case where two calls is created and key guard is enabled during middle
    cleanup();
    
    // bringToForeground is call
    m_handler->bringToForeground();
    m_handler->windowVisibilityChange(true);
    QVERIFY(m_bringToForegroundCalled);
    QVERIFY(g_disableKeyGuardCalled);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 100);
    
    cleanup();
    g_keyGuardEnabled = true; 
    m_handler->bringToForeground();
    m_handler->windowVisibilityChange(true);
    QVERIFY(m_bringToForegroundCalled);
    QVERIFY(g_disableKeyGuardCalled);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 100);
    
    cleanup();
    m_handler->sendToBackground();
    m_handler->windowVisibilityChange(false);
    QVERIFY(g_enableKeyGuardCalled);
    QVERIFY(CEikonEnv::Static()->RootWin().OrdinalPosition() > 0);
    QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority);
}


PHONE_UITEST_MAIN(TestPhoneVisibilityHandler)
#include "unit_tests.moc"