--- /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 <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 <keyguardaccessapi.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;
+
+#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<PhoneAction*>& ) {};
+ 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<PhoneAction*>& ) {};
+ 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"