diff -r 40a3f856b14d -r 41a7f70b3818 phoneapp/phoneuiqtviewadapter/tsrc/ut_phonevisibilityhandler/unit_tests.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiqtviewadapter/tsrc/ut_phonevisibilityhandler/unit_tests.cpp Tue Aug 31 15:14:29 2010 +0300 @@ -0,0 +1,432 @@ +/*! +* 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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; + +#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 , const PhoneAction& ) {}; + void clearBubbleCommands (int ) {}; + void addParticipantListAction( + int , + const QString &, + const HbIcon &) {}; + void clearParticipantListActions() {}; + void hideToolbar () {}; + void showToolbar () {}; + void setToolbarActions (const QList& ) {}; + 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 setMenuActions(const QList& ) {}; + 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_startPosition; + 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); + + m_startPosition = CEikonEnv::Static()->RootWin().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 () +{ + 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); + 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 + 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(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); + + // 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_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 + 100); + + // 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 + 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(false); + QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), m_startPosition); + 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(); + 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(false); + QVERIFY(!g_enableKeyGuardCalled); + QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), m_startPosition); + QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority); + + + // Test when keyguard is enabled before call + cleanup(); + g_keyGuardEnabled = true; + + // bringToForeground is call + m_handler->bringToForeground(); + 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(false); + QVERIFY(g_enableKeyGuardCalled); + QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), m_startPosition); + 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(); + 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->sendToBackground(false); + QVERIFY(!g_enableKeyGuardCalled); + QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), m_startPosition); + 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(); + QVERIFY(m_bringToForegroundCalled); + QVERIFY(g_disableKeyGuardCalled); + QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0); + QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 100); + + cleanup(); + m_handler->bringToForeground(); + QVERIFY(m_bringToForegroundCalled); + QVERIFY(g_disableKeyGuardCalled); + QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0); + QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 100); + + cleanup(); + m_handler->sendToBackground(false); + QVERIFY(g_enableKeyGuardCalled); + QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), m_startPosition); + 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(); + 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(); + QVERIFY(m_bringToForegroundCalled); + QVERIFY(g_disableKeyGuardCalled); + QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), 0); + QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), ECoeWinPriorityAlwaysAtFront + 100); + + cleanup(); + m_handler->sendToBackground(false); + QVERIFY(g_enableKeyGuardCalled); + QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPosition(), m_startPosition); + QCOMPARE(CEikonEnv::Static()->RootWin().OrdinalPriority(), m_startPriority); +} + + +PHONE_TEST_MAIN(TestPhoneVisibilityHandler) +#include "unit_tests.moc"