diff -r 40a3f856b14d -r 41a7f70b3818 phoneapp/phoneuiqtviewadapter/tsrc/ut_phoneuicommandcontroller/unit_tests.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiqtviewadapter/tsrc/ut_phoneuicommandcontroller/unit_tests.cpp Tue Aug 31 15:14:29 2010 +0300 @@ -0,0 +1,830 @@ +/*! +* 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 "phoneuiqtviewif.h" +#include "pevirtualengine.h" +#include "bubblemanagerif.h" +#include "phonebubblewrapper.h" +#include "phoneuicommandcontroller.h" +#include "phoneresourceids.h" +#include "phoneresourceadapter.h" +#include "phoneuiqtbuttonscontroller.h" + +extern bool m_setActions; +extern bool m_setInvalidCommand; +extern QList m_menuActions; +extern bool m_setInvalidButtonCommands; +extern bool m_setInvalidToolBarCommands; +extern bool m_setCustomToolBarCommands; +extern int m_phoneButtonFlags; + +#define PHONE_QT_VIEW_ADAPTER_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; \ + } + + +class TestPhoneUiCommandController : public QObject, public PhoneUIQtViewIF, public BubbleManagerIF +{ + Q_OBJECT +public: + TestPhoneUiCommandController(); + virtual ~TestPhoneUiCommandController(); + + // 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 () { m_showToolbarCalled = true; }; + void setToolbarActions (const QList& actions) {m_toolbarActionCount = actions.count(); }; + int volumeSliderValue () { m_volumeSliderValueCalled = true; return 5; }; + void removeVolumeSlider () { m_removeVolumeSliderCalled = true; }; + void setVolumeSliderValue ( + int value, + int , + int , + int ) { m_setVolumeSliderValueCalled = true; m_volumeSliderValue = value; }; + + void setExpandAction(int bubbleId, int commandId) {m_expandAction[bubbleId]=commandId;}; + void removeExpandAction(int ) {}; + void showDialpad() {m_showDialpadCalled = true;}; + void hideDialpad() {m_hideDialpadCalled = true;}; + bool isDialpadVisible() + {m_dialpadVisibilityCalled = true; + return m_isDialpadVisible; } + QString dialpadText() {return m_dialpadText;}; + void clearAndHideDialpad() { m_clearAndHideDialpadCalled = true;}; + void clearDialpad() {}; + void bringToForeground() {}; + void setMenuActions(const QList& ) { m_setMenuActionsCalled = true;}; + void shutdownPhoneApp() {}; + void setBackButtonVisible(bool ) {}; + HbMenu &menuReference(){return m_menu;}; + void captureKey(Qt::Key , bool ) {}; + + // From BubbleManagerIF + void startChanges () { m_startChangesCalled=true; }; + void endChanges () { m_endChangesCalled=true; }; + int createCallHeader () { return 0; }; + void removeCallHeader (int ) {}; + void setState (int , PhoneCallState ) {}; + void setLabel ( + int , + const QString& , + Qt::TextElideMode ) {}; + void setCli (int , + const QString& , + Qt::TextElideMode ) {}; + void updateCLI ( + int , + const QString& , + Qt::TextElideMode ) {}; + void setSecondaryCli ( + int , + const QString& , + Qt::TextElideMode clipDirection = Qt::ElideLeft) {}; + void setCallTime (int , const QString& ) {}; + void updateCallTime (int bubbleId, const QString& callTime) { m_updateCallTimeCalled=true; m_int=bubbleId; m_string=callTime; }; + void setCallObjectImage (int , const QString &) {}; + void setCallObjectFromTheme (int ) {}; + void setCallObjectText (int , const QString &) {}; + void setCallFlags (int , int ) {}; + void setCallFlag (int , PhoneCallFlags , bool ) {}; + void setNumberType (int , PhoneNumberType ) {}; + void updateCallHeaderText( + int , + const QString &, + const QString &, + Qt::TextElideMode ) {}; + void setPhoneMuted (bool muted) { m_setPhoneMutedCalled = muted; }; + int createConference (int , int ) { return 1; }; + void removeConference () {}; + void addRowToConference (int bubbleId) {}; + void removeRowFromConference (int bubbleId) {}; + int conferenceRowCount () const { return 2; }; + void setSelectionInConference (int rowNumber) {}; + void setSelectionIdInConference (int bubbleId) {}; + int selectionInConference () const { return 0; }; + int selectionIdInConference () const { return 0; }; + void moveHighlightOneUpInConference () {}; + void moveHighlightOneDownInConference () {}; + void setExpandedConferenceCallHeader (bool ) { m_ExpandConferenceCalled = true; }; + bool isConferenceExpanded () const { return false; }; + int shownHeaderCount () const { return 1; }; + void setParticipantListCli (int , ParticipantListCli ) {}; + void addAction (int , HbAction *) {}; + void clearActions (int ) {}; + QGraphicsWidget* graphicsWidgetForAction (HbAction *) const { return 0;}; + void addParticipantListAction (HbAction *) {}; + int expandedBubble() const { return 1; }; + void setExpandAction(int , HbAction* ) {}; + void setBubbleSelectionDisabled(bool ) {}; + void setRestrictedMode(bool ) {}; + +signals: + void dialpadAboutToClose(); + void keyPressReleased(QKeyEvent *event); + +public slots: + void initTestCase (); + void cleanupTestCase (); + void init (); + void cleanup (); + +private slots: + void testSetCallMenuActions(); + void testSetDialpadMenuActions(); + void testPushButtonActionsForCall(); + void testToolBarActionsForCall(); + + +private: + PhoneUiCommandController *m_commandController; // class under test + + bool m_showToolbarCalled; + bool m_updateCallTimeCalled; + int m_int; + QString m_string; + HbAction *m_action; + int m_toolbarActionCount; + bool m_startChangesCalled; + bool m_endChangesCalled; + bool m_volumeSliderValueCalled; + bool m_removeVolumeSliderCalled; + bool m_setVolumeSliderValueCalled; + int m_volumeSliderValue; + bool m_setPhoneMutedCalled; + QMap *> m_actionMap; + QMap m_expandAction; + bool m_showDialpadCalled; + bool m_hideDialpadCalled; + bool m_dialpadVisibilityCalled; + bool m_clearAndHideDialpadCalled; + bool m_ExpandConferenceCalled; + bool m_setMenuActionsCalled; + bool m_isDialpadVisible; + QString m_dialpadText; + HbMenu m_menu; + +}; + +TestPhoneUiCommandController::TestPhoneUiCommandController () +{ +} + +TestPhoneUiCommandController::~TestPhoneUiCommandController () +{ +} + +void TestPhoneUiCommandController::initTestCase () +{ + m_commandController = new PhoneUiCommandController (*this); +} + +void TestPhoneUiCommandController::cleanupTestCase () +{ + delete m_commandController; +} + +void TestPhoneUiCommandController::init () +{ + m_startChangesCalled = false; + m_endChangesCalled = false; +} + +void TestPhoneUiCommandController::cleanup () +{ +} + +BubbleManagerIF& TestPhoneUiCommandController::bubbleManager () +{ + return *this; +} + +void TestPhoneUiCommandController::addBubbleCommand ( + int bubbleId, const PhoneAction& action) +{ + +} + +void TestPhoneUiCommandController::clearBubbleCommands (int bubbleId) +{ + +} + +void TestPhoneUiCommandController::addParticipantListAction( + int commandId, + const QString& text, + const HbIcon& icon) +{ + +} + +void TestPhoneUiCommandController::clearParticipantListActions() +{ + +} + +void TestPhoneUiCommandController::testSetCallMenuActions() +{ + QMap callStates; + QMap serviceIds; + int serviceId(2); + int expandedCallId(1); + callStates[expandedCallId] = EPEStateConnected; + serviceIds[expandedCallId] = serviceId; + + + m_commandController->setCallMenuActions(callStates,serviceIds,serviceId,expandedCallId); + QVERIFY(m_setMenuActionsCalled); + m_setMenuActionsCalled = false; + + m_setActions = true; + m_commandController->setCallMenuActions(callStates,serviceIds,serviceId,expandedCallId); + QVERIFY(m_setMenuActionsCalled); + m_setMenuActionsCalled = false; + m_setActions = false; + + m_setInvalidCommand = true; + callStates[expandedCallId] = EPEStateHeld; + m_commandController->setCallMenuActions(callStates,serviceIds,serviceId,expandedCallId); + QVERIFY(m_setMenuActionsCalled); + m_setMenuActionsCalled = false; + m_setInvalidCommand = false; + + callStates[0] = EPEStateConnected; + serviceIds[0] = serviceId; + + m_commandController->setCallMenuActions(callStates,serviceIds,serviceId,expandedCallId); + QVERIFY(m_setMenuActionsCalled); + m_setMenuActionsCalled = false; + + callStates[0] = EPEStateRinging; + + m_commandController->setCallMenuActions(callStates,serviceIds,serviceId,expandedCallId); + QVERIFY(m_setMenuActionsCalled); + m_setMenuActionsCalled = false; + + serviceIds[0] = 3; + callStates[0] = EPEStateConnected; + + m_commandController->setCallMenuActions(callStates,serviceIds,3,expandedCallId); + QVERIFY(m_setMenuActionsCalled); + m_setMenuActionsCalled = false; + + callStates[2] = EPEStateRinging; + serviceIds[2] = 3; + + m_commandController->setCallMenuActions(callStates,serviceIds,serviceId,expandedCallId); + QVERIFY(m_setMenuActionsCalled); + m_setMenuActionsCalled = false; + + callStates[3] = EPEStateDisconnecting; + serviceIds[3] = 3; + + m_commandController->setCallMenuActions(callStates,serviceIds,serviceId,expandedCallId); + QVERIFY(m_setMenuActionsCalled); + m_setMenuActionsCalled = false; +} + +void TestPhoneUiCommandController::testSetDialpadMenuActions() +{ + m_setMenuActionsCalled = false; + m_commandController->setDialpadMenuActions(); + QVERIFY(m_setMenuActionsCalled); +} + +void TestPhoneUiCommandController::testPushButtonActionsForCall() +{ + int callState = EPEStateConnected; + bool emergencyCall = false; + QMap callStates; + QMap serviceIds; + int serviceId(2); + int callId(1); + callStates[callId] = EPEStateConnected; + serviceIds[callId] = serviceId; + + QMap actions = + m_commandController->pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0==actions.values().count()); + qDeleteAll(actions.values()); + actions.clear(); + m_setInvalidButtonCommands = false; + + actions = m_commandController->pushButtonActionsForCall( + callState, + true, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0buttonsController()-> + setButtonFlags(PhoneUIQtButtonsController::Ihf, true); + + callStates[callId] = EPEStateHeld; + callState = EPEStateHeld; + actions = m_commandController->pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0==actions.values().count()); + qDeleteAll(actions.values()); + actions.clear(); + + callStates[callId] = EPEStateDisconnecting; + callState = EPEStateDisconnecting; + actions = m_commandController->pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0==actions.values().count()); + qDeleteAll(actions.values()); + actions.clear(); + + callStates[callId] = EPEStateConferenceIdle; + callState = EPEStateConferenceIdle; + actions = m_commandController->pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0==actions.values().count()); + qDeleteAll(actions.values()); + actions.clear(); + + callStates[callId] = EPEStateUnknown; + callState = EPEStateUnknown; + actions = m_commandController->pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0==actions.values().count()); + qDeleteAll(actions.values()); + actions.clear(); + + callStates[callId] = EPEStateDialing; + callState = EPEStateDialing; + actions = m_commandController->pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0buttonsController()-> + setButtonFlags(PhoneUIQtButtonsController::BluetoothAvailable, true); + + callStates[2] = EPEStateHeldConference; + actions = m_commandController->pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0pushButtonActionsForCall( + callState, + true, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0buttonsController()-> + setButtonFlags(PhoneUIQtButtonsController::Btaa, true); + + callStates[callId] = EPEStateConnected; + callStates[2] = EPEStateHeldConference; + callState = EPEStateHeldConference; + + ////////////////////////////////////////////////////////////////////////// + //3 calls + ////////////////////////////////////////////////////////////////////////// + callStates[3] = EPEStateRinging; + serviceIds[3] = serviceId; + actions = m_commandController->pushButtonActionsForCall( + callState, + emergencyCall, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0pushButtonActionsForCall( + EPEStateRinging, + emergencyCall, + callStates, + serviceIds, + serviceId, + 3); + + QVERIFY(0pushButtonActionsForCall( + EPEStateHeld, + emergencyCall, + callStates, + serviceIds, + serviceId, + 2); + + QVERIFY(0 callStates; + QMap serviceIds; + int serviceId(2); + int callId(1); + callStates[callId] = EPEStateConnected; + serviceIds[callId] = serviceId; + m_setInvalidToolBarCommands = false; + m_setCustomToolBarCommands = false; + PhoneResourceAdapter::Instance()->buttonsController()-> + setButtonFlags(PhoneUIQtButtonsController::Btaa, false); + PhoneResourceAdapter::Instance()->buttonsController()-> + setButtonFlags(PhoneUIQtButtonsController::BluetoothAvailable, false); + PhoneResourceAdapter::Instance()->buttonsController()-> + setButtonFlags(PhoneUIQtButtonsController::IhfAsPushButton, false); + PhoneResourceAdapter::Instance()->buttonsController()-> + setButtonFlags(PhoneUIQtButtonsController::Ihf, false); + + + QList actions = + m_commandController->toolBarActions( + R_PHONEUI_DIALER_CBA, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(4==actions.count()); + QVERIFY(EPhoneInCallCmdActivateIhf == actions.at(0)->command()); + QVERIFY(EPhoneInCallCmdHold == actions.at(1)->command()); + QVERIFY(EPhoneInCallCmdContacts == actions.at(2)->command()); + QVERIFY(EPhoneInCallCmdDialer == actions.at(3)->command()); + + qDeleteAll(actions); + actions.clear(); + + // Invalid resource id + actions = m_commandController->toolBarActions( + -1, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(0==actions.count()); + + qDeleteAll(actions); + actions.clear(); + + // Service not found + actions = m_commandController->toolBarActions( + R_PHONEUI_DIALER_CBA, + callStates, + serviceIds, + -1, + -1); + + QVERIFY(4==actions.count()); + + qDeleteAll(actions); + actions.clear(); + + // Invalid toolbar command by extension + m_setInvalidToolBarCommands = true; + + actions = m_commandController->toolBarActions( + R_PHONEUI_DIALER_CBA, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(3==actions.count()); + + qDeleteAll(actions); + actions.clear(); + + + // Command list modified by extension + m_setInvalidToolBarCommands = false; + m_setCustomToolBarCommands = true; + + actions = m_commandController->toolBarActions( + R_PHONEUI_DIALER_CBA, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(4==actions.count()); + QVERIFY(EPhoneInCallCmdJoin == actions.at(0)->command()); + QVERIFY(EPhoneInCallCmdUnhold == actions.at(1)->command()); + QVERIFY(EPhoneInCallCmdEndThisOutgoingCall == actions.at(2)->command()); + QVERIFY(EPhoneCallComingCmdSilent == actions.at(3)->command()); + + qDeleteAll(actions); + actions.clear(); + + m_setCustomToolBarCommands =false; + + // Multi call + callStates[2] = EPEStateHeld; + serviceIds[2] = 2; + + actions = m_commandController->toolBarActions( + R_PHONEUI_INCALL_DIALER_CBA, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(4==actions.count()); + + // No extension + serviceIds[1] = 1; + serviceIds[2] = 1; + serviceId = 1; + + actions = m_commandController->toolBarActions( + R_PHONEUI_INCALL_DIALER_CBA, + callStates, + serviceIds, + serviceId, + callId); + + QVERIFY(4==actions.count()); +} + +PHONE_QT_VIEW_ADAPTER_TEST_MAIN(TestPhoneUiCommandController) +#include "unit_tests.moc"