--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonesettings/cpphonesettingsplugins/divertplugin/tsrc/ut_cpdivertplugin/ut_cpdivertplugin.cpp Fri Mar 19 09:28:42 2010 +0200
@@ -0,0 +1,529 @@
+/*
+* 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:
+*
+*/
+
+#include "ut_cpdivertplugin.h"
+#include "qtestmains60ui.h"
+#include <psetcalldivertingwrapper.h>
+#include <hbdialog.h>
+#include <qaction>
+#include <hblabel.h>
+#include <HbListWidgetItem>
+#include <HbListWidget>
+#include <HbDialog>
+#include <HbLineEdit>
+#include <HbAbstractViewItem>
+#include <HbDataFormModel>
+#include "cpitemdatahelper.h"
+#include "cpdivertitemdata.h"
+#include "psetwrappertypes.h"
+
+#define private public
+#include "cpdivertplugin.h"
+#include "cpdivertplugingroup.h"
+
+
+
+Q_EXTERN_C const char * qt_plugin_query_verification_data();
+Q_EXTERN_C ::QObject * qt_plugin_instance();
+
+class CPsetContainer
+{
+public:
+ CPsetContainer(){};
+ ~CPsetContainer(){};
+};
+
+/*!
+ UT_CpDivertPlugin::UT_CpDivertPlugin
+ */
+UT_CpDivertPlugin::UT_CpDivertPlugin()
+ : m_divertplugin(NULL)
+{
+ const char * verificationData = qt_plugin_query_verification_data();
+}
+
+/*!
+ UT_CpDivertPlugin::~UT_CpDivertPlugin
+ */
+UT_CpDivertPlugin::~UT_CpDivertPlugin()
+{
+ delete m_divertplugin;
+}
+
+/*!
+ UT_CpDivertPlugin::init
+ */
+void UT_CpDivertPlugin::init()
+{
+ initialize();
+
+ CPsetContainer tmpPsetContainer;
+ PSetCallDivertingWrapper *tmpDivWrapper =
+ new PSetCallDivertingWrapper(tmpPsetContainer, this);
+ expect("PSetWrapper::callDivertingWrapper").returns(tmpDivWrapper); // FIXME to mock framework
+ m_divertplugin = (CpDivertPlugin*)qt_plugin_instance();
+
+ QVERIFY(m_divertplugin);
+
+ m_helper = new CpItemDataHelper;
+ m_divertpluginGroup = qobject_cast<CpDivertPluginGroup *>(
+ m_divertplugin->createSettingFormItemData(*m_helper));
+ QVERIFY(m_divertpluginGroup);
+
+ QVERIFY(verify());
+}
+
+/*!
+ UT_CpDivertPlugin::cleanup
+ */
+void UT_CpDivertPlugin::cleanup()
+{
+ reset();
+
+ delete m_divertplugin;
+ m_divertplugin = NULL;
+
+ delete m_divertpluginGroup;
+ m_divertpluginGroup = NULL;
+
+ delete m_helper;
+ m_helper = NULL;
+}
+
+/*!
+ UT_CpDivertPlugin::t_memleak
+ */
+void UT_CpDivertPlugin::t_memleak()
+{
+
+}
+
+/*!
+ UT_CpDivertPlugin::t_createSettingFormItemData
+ */
+void UT_CpDivertPlugin::t_createSettingFormItemData()
+{
+ CpItemDataHelper itemDataHelper;
+ CPsetContainer tmpContainer;
+ PSetCallDivertingWrapper tmpDivWrapper(tmpContainer);
+
+ expect("PSetWrapper::callDivertingWrapper").returns(&tmpDivWrapper);
+
+ CpDivertPlugin* p = (CpDivertPlugin*)qt_plugin_instance();
+ CpSettingFormItemData *pSettingFormItemData = p->createSettingFormItemData(itemDataHelper);
+
+ QVERIFY(verify());
+}
+
+/*!
+ UT_CpDivertPlugin::t_changeDivertingStateRequested
+ */
+void UT_CpDivertPlugin::t_changeDivertingStateRequested()
+{
+ //except user cancels
+ appendAction("All voice calls:", selectAction, "Cancel");
+ expect("PSetCallDivertingWrapper::getDefaultNumbers");
+ m_divertpluginGroup->m_DataItemAllVoiceCalls->setContentWidgetData("number", "");
+ m_divertpluginGroup->m_DataItemAllVoiceCalls->thisItemClicked();
+ QVERIFY(verify());
+
+ //except user selects vmb and inserts number
+ appendAction("All voice calls:", selectItem, "Voice mail box");
+ appendAction("Voice mail box number:", insertText, "12345");
+ appendAction("Voice mail box number:", selectAction, "OK");
+ expect("PSetCallDivertingWrapper::getDefaultNumbers");
+ expect("SsSettingsWrapper::get");
+ expect("PSetCallDivertingWrapper::setCallDiverting");
+ expect("CpPhoneNotes::noteShowing").returns(false);
+ expect("CpPhoneNotes::showGlobalProgressNote");
+ m_divertpluginGroup->m_DataItemAllVoiceCalls->thisItemClicked();
+ PSCallDivertingCommand command;
+ command.iNumber = "12345";
+ command.iStatus = DivertingStatusActive;
+ command.iCondition = m_divertpluginGroup->m_DataItemAllVoiceCalls->condition();
+ expect("CpPhoneNotes::showGlobalNote");
+ m_divertpluginGroup->handleDivertingChanged(command, false);
+ expect("CpPhoneNotes::cancelNote");
+ m_divertpluginGroup->divertRequestProcessed();
+ QVERIFY(verify());
+
+ //except user selects one of the default numbers
+ m_divertpluginGroup->m_DataItemAllVoiceCalls->setContentWidgetData("number","");
+ appendAction("All voice calls:", selectItem, "0401234567");
+ expect("PSetCallDivertingWrapper::getDefaultNumbers");
+ expect("SsSettingsWrapper::get");
+ expect("PSetCallDivertingWrapper::setCallDiverting");
+ expect("CpPhoneNotes::noteShowing").returns(false);
+ expect("CpPhoneNotes::showGlobalProgressNote");
+ m_divertpluginGroup->m_DataItemAllVoiceCalls->thisItemClicked();
+ command.iNumber = "0401234567";
+ command.iStatus = DivertingStatusActive;
+ command.iCondition = m_divertpluginGroup->m_DataItemAllVoiceCalls->condition();
+ expect("CpPhoneNotes::cancelNote");
+ expect("CpPhoneNotes::showGlobalNote");
+ expect("PSetCallDivertingWrapper::setNewDefaultNumber").with(QString("0401234567"));
+ expect("Tools::voipSupported").returns(false);
+ m_divertpluginGroup->handleDivertingChanged(command, true);
+ expect("CpPhoneNotes::cancelNote");
+ m_divertpluginGroup->divertRequestProcessed();
+ QVERIFY(verify());
+
+ // Divert is disabled
+ expect("SsSettingsWrapper::get");
+ expect("PSetCallDivertingWrapper::setCallDiverting"); // Disable divert
+ expect("CpPhoneNotes::noteShowing").returns(false);
+ expect("CpPhoneNotes::showGlobalProgressNote");
+ m_divertpluginGroup->m_DataItemAllVoiceCalls->thisItemClicked();
+ command.iNumber = "";
+ command.iStatus = DivertingStatusInactive;
+ command.iCondition = m_divertpluginGroup->m_DataItemAllVoiceCalls->condition();
+ expect("CpPhoneNotes::showGlobalNote");
+ m_divertpluginGroup->handleDivertingChanged(command, false);
+ expect("CpPhoneNotes::cancelNote");
+ m_divertpluginGroup->divertRequestProcessed();
+ QVERIFY(verify());
+
+ //except user selects other number, inserts number and cancels
+ appendAction("All voice calls:", selectItem, "Other number");
+ appendAction("Number:", insertText, "12345");
+ appendAction("Number:", selectAction, "Cancel");
+ expect("PSetCallDivertingWrapper::getDefaultNumbers");
+ m_divertpluginGroup->m_DataItemAllVoiceCalls->thisItemClicked();
+ QVERIFY(verify());
+}
+
+/*!
+ UT_CpDivertPlugin::t_itemShown
+ */
+void UT_CpDivertPlugin::t_itemShown()
+{
+ HbDataFormModel* model =
+ qobject_cast<HbDataFormModel*>(m_divertpluginGroup->model());
+
+ expect("PSetCallDivertingWrapper::getCallDivertingStatus");
+ expect("CpPhoneNotes::noteShowing").returns(false);
+ expect("CpPhoneNotes::showGlobalProgressNote");
+ m_divertpluginGroup->itemShown(
+ model->indexFromItem(m_divertpluginGroup->m_DataItemAllVoiceCalls));
+ m_divertpluginGroup->itemShown(
+ model->indexFromItem(m_divertpluginGroup->m_DataItemIfBusy));
+ m_divertpluginGroup->itemShown(
+ model->indexFromItem(m_divertpluginGroup->m_DataItemIfNotAnswered));
+ m_divertpluginGroup->itemShown(
+ model->indexFromItem(m_divertpluginGroup->m_DataItemIfOutOfReach));
+ m_divertpluginGroup->itemShown(
+ model->indexFromItem(m_divertpluginGroup->m_DataItemIfNotAvailable));
+
+ QList<PSCallDivertingStatus*> list;
+ PSCallDivertingStatus divertStatus;
+ list.append(&divertStatus);
+ divertStatus.iCondition = m_divertpluginGroup->m_DataItemAllVoiceCalls->condition();
+ m_divertpluginGroup->handleDivertingStatus(list, true);
+ m_divertpluginGroup->divertRequestProcessed();
+ divertStatus.iCondition = m_divertpluginGroup->m_DataItemIfBusy->condition();
+ m_divertpluginGroup->handleDivertingStatus(list, true);
+ m_divertpluginGroup->divertRequestProcessed();
+ divertStatus.iCondition = m_divertpluginGroup->m_DataItemIfNotAnswered->condition();
+ m_divertpluginGroup->handleDivertingStatus(list, true);
+ m_divertpluginGroup->divertRequestProcessed();
+ divertStatus.iCondition = m_divertpluginGroup->m_DataItemIfOutOfReach->condition();
+ m_divertpluginGroup->handleDivertingStatus(list, true);
+ m_divertpluginGroup->divertRequestProcessed();
+ divertStatus.iCondition = m_divertpluginGroup->m_DataItemIfNotAvailable->condition();
+ m_divertpluginGroup->handleDivertingStatus(list, true);
+ m_divertpluginGroup->divertRequestProcessed();
+
+ m_divertpluginGroup->divertRequestProcessed(); // Test overflow
+
+ // Test, Do not check status again
+ m_divertpluginGroup->itemShown(
+ model->indexFromItem(m_divertpluginGroup->m_DataItemAllVoiceCalls));
+ m_divertpluginGroup->itemShown(
+ model->indexFromItem(m_divertpluginGroup->m_DataItemIfBusy));
+ m_divertpluginGroup->itemShown(
+ model->indexFromItem(m_divertpluginGroup->m_DataItemIfNotAnswered));
+ m_divertpluginGroup->itemShown(
+ model->indexFromItem(m_divertpluginGroup->m_DataItemIfOutOfReach));
+ m_divertpluginGroup->itemShown(
+ model->indexFromItem(m_divertpluginGroup->m_DataItemIfNotAvailable));
+
+
+ QVERIFY(verify());
+}
+
+/*!
+ UT_CpDivertPlugin::t_popUpTimerQuery
+ */
+void UT_CpDivertPlugin::t_popUpTimerQuery()
+{
+ appendAction("If not answered:", selectItem, "0401234567");
+ appendAction("Time out", selectAction, "Cancel");
+ expect("PSetCallDivertingWrapper::getDefaultNumbers");
+ m_divertpluginGroup->m_DataItemIfNotAnswered->thisItemClicked();
+ QVERIFY(verify());
+
+ appendAction("If not answered:", selectItem, "Other number");
+ appendAction("Number:", insertText, "12345");
+ appendAction("Number:", selectAction, "OK");
+ appendAction("Time out", selectItem, "15 second");
+ //except user chooses other number and inserts number and timeout
+ expect("PSetCallDivertingWrapper::getDefaultNumbers");
+ expect("SsSettingsWrapper::get");
+ expect("PSetCallDivertingWrapper::setCallDiverting");
+ m_divertpluginGroup->m_DataItemIfNotAnswered->thisItemClicked();
+ PSCallDivertingCommand command;
+ command.iNumber = "12345";
+ command.iNoReplyTimer = 15;
+ command.iStatus = DivertingStatusActive;
+ command.iCondition = m_divertpluginGroup->m_DataItemIfNotAnswered->condition();
+ expect("CpPhoneNotes::showGlobalNote");
+ m_divertpluginGroup->handleDivertingChanged(command, false);
+ expect("CpPhoneNotes::cancelNote");
+ m_divertpluginGroup->divertRequestProcessed();
+ QVERIFY(verify());
+
+ expect("SsSettingsWrapper::get");
+ expect("PSetCallDivertingWrapper::setCallDiverting");
+ m_divertpluginGroup->m_DataItemIfNotAnswered->thisItemClicked();
+ command.iNumber = "";
+ command.iNoReplyTimer = 0;
+ command.iStatus = DivertingStatusInactive;
+ command.iCondition = m_divertpluginGroup->m_DataItemIfNotAnswered->condition();
+ expect("CpPhoneNotes::showGlobalNote");
+ m_divertpluginGroup->handleDivertingChanged(command, false);
+ expect("CpPhoneNotes::cancelNote");
+ m_divertpluginGroup->divertRequestProcessed();
+ QVERIFY(verify());
+
+}
+
+/*!
+ UT_CpDivertPlugin::t_handleDivertingChanged
+ */
+void UT_CpDivertPlugin::t_handleDivertingChanged()
+{
+ PSCallDivertingCommand c;
+
+ c.iStatus = DivertingStatusActive;
+ bool bRet = false;
+ expect("PSetCallDivertingWrapper::setNewDefaultNumber");
+ expect("Tools::voipSupported").returns(bRet);
+ m_divertpluginGroup->handleDivertingChanged(c, true);
+
+ expect("PSetCallDivertingWrapper::setNewDefaultNumber");
+ bRet = true;
+ c.iServiceGroup = ServiceGroupVoice;
+ expect("Tools::voipSupported").returns(bRet);
+ m_divertpluginGroup->handleDivertingChanged(c, false);
+
+ c.iStatus = DivertingStatusInactive;
+ m_divertpluginGroup->handleDivertingChanged(c, true);
+ m_divertpluginGroup->handleDivertingChanged(c, false);
+
+ c.iStatus = DivertingStatusNotRegistered;
+ m_divertpluginGroup->handleDivertingChanged(c, true);
+
+ c.iStatus = DivertingStatusNotProvisioned;
+ m_divertpluginGroup->handleDivertingChanged(c, true);
+
+ c.iStatus = DivertingStatusUnknown;
+ m_divertpluginGroup->handleDivertingChanged(c, true);
+
+ c.iStatus = (PsCallDivertingStatus)5;
+ m_divertpluginGroup->handleDivertingChanged(c, true);
+
+ QVERIFY(verify());
+}
+
+/*!
+ UT_CpDivertPlugin::t_handleDivertingStatus
+ */
+void UT_CpDivertPlugin::t_handleDivertingStatus()
+{
+ QList<PSCallDivertingStatus*> list;
+ PSCallDivertingStatus divertStatus;
+
+ divertStatus.iTimeout =5;
+ divertStatus.iStatus = DivertingStatusActive;
+ list.append(&divertStatus);
+ m_divertpluginGroup->handleDivertingStatus(list, true);
+ divertStatus.iTimeout =0;
+ list.replace(0, &divertStatus);
+ m_divertpluginGroup->handleDivertingStatus(list, true);
+
+ divertStatus.iStatus = DivertingStatusInactive;
+ list.replace(0, &divertStatus);
+ m_divertpluginGroup->handleDivertingStatus(list, true);
+
+ divertStatus.iStatus = DivertingStatusNotRegistered;
+ list.replace(0, &divertStatus);
+ m_divertpluginGroup->handleDivertingStatus(list, true);
+ m_divertpluginGroup->handleDivertingStatus(list, false);
+
+ divertStatus.iStatus = DivertingStatusNotProvisioned;
+ list.replace(0, &divertStatus);
+ m_divertpluginGroup->handleDivertingStatus(list, true);
+
+ divertStatus.iStatus = DivertingStatusUnknown;
+ list.replace(0, &divertStatus);
+ m_divertpluginGroup->handleDivertingStatus(list, true);
+
+ divertStatus.iStatus = (PsCallDivertingStatus)5;
+ list.replace(0, &divertStatus);
+ m_divertpluginGroup->handleDivertingStatus(list, true);
+
+}
+
+/*!
+ UT_CpDivertPlugin::t_handleDivertingError
+ */
+void UT_CpDivertPlugin::t_handleDivertingError()
+{
+ m_divertpluginGroup->handleDivertingError(-1);
+}
+
+/*!
+ UT_CpDivertPlugin::appendAction
+ */
+void UT_CpDivertPlugin::appendAction(
+ const QString& dialog, actionType actionType, const QString& action)
+{
+ if (!actionQueue.count()) {
+ startTimer(2000);
+ }
+ actionQueue.append(new dialogAction(dialog, actionType, action));
+}
+
+/*!
+ UT_CpDivertPlugin::executeAction
+ */
+void UT_CpDivertPlugin::executeAction( const dialogAction &action )
+{
+ switch (action.type) {
+ case selectAction:
+ doAndVerifyAction(action.dialog, action.item);
+ break;
+ case selectItem:
+ selectItemFromListWidget(action.dialog, action.item);
+ break;
+ case insertText:
+ HbDialog *dialog = visibleDialog(action.dialog);
+ QVERIFY( dialog );
+ HbLineEdit* editor = qobject_cast<HbLineEdit*>(
+ dialog->contentWidget() );
+ QVERIFY( editor );
+ editor->setText(action.item);
+ break;
+ default:
+ break;
+ }
+}
+
+/*!
+ UT_CpDivertPlugin::visibleDialog
+ */
+HbDialog *UT_CpDivertPlugin::visibleDialog( const QString &heading )
+{
+ QList<QGraphicsItem*> items = mainWindow->scene()->items();
+ foreach (QGraphicsItem* item, items) {
+ HbDialog *w = qobject_cast<HbDialog*>(item->parentWidget());
+ if (w && w->isVisible() && ( qobject_cast<HbLabel*>(w->headingWidget())->plainText() == heading )) {
+ qDebug() << "visibleDialog: " << w->getStaticMetaObject().className() <<
+ "contentWidget: " << w->contentWidget()->getStaticMetaObject().className();
+ return w;
+ }
+ }
+
+ return 0;
+}
+
+/*!
+ UT_CpDivertPlugin::selectItemFromListWidget
+ */
+void UT_CpDivertPlugin::selectItemFromListWidget(
+ const QString& dialog, const QString& item )
+{
+ HbDialog* d = visibleDialog(dialog);
+ QVERIFY(d);
+ HbListWidget *list = qobject_cast<HbListWidget*>(d->contentWidget());
+ QVERIFY(list);
+
+ bool ok=true;
+ HbListWidgetItem *itemObject = 0;
+ for (int i=0; i < list->count();i++) {
+ itemObject = list->item(i);
+ if (itemObject->text() == item) {
+ ok=true;
+ QSignalSpy spy( d, SIGNAL(aboutToClose()));
+ list->setCurrentItem(itemObject);
+ d->close();
+ qDebug() << "selectItemFromListWidget: " << itemObject->text();
+ while (!spy.count()) {
+ QTest::qWait(50);
+ }
+ QTest::qWait(50);
+ }
+
+ }
+
+ QVERIFY(ok);
+}
+
+/*!
+ UT_CpDivertPlugin::doAndVerifyAction
+ */
+void UT_CpDivertPlugin::doAndVerifyAction(
+ const QString& dialog, const QString& action )
+{
+ HbDialog* d = visibleDialog(dialog);
+ QVERIFY(d);
+
+ QAction* o;
+ bool ok=false;
+ foreach (o, d->actions()) {
+ if (o->text() == action) {
+ ok=true;
+ QSignalSpy spy( d, SIGNAL(aboutToClose()));
+ o->trigger();
+ qDebug() << "doAndVerifyAction: " << o->text();
+ while (!spy.count()) {
+ QTest::qWait(50);
+ }
+ QTest::qWait(50);
+ }
+ }
+ QVERIFY(ok);
+}
+
+/*!
+ UT_CpDivertPlugin::timerEvent
+ */
+void UT_CpDivertPlugin::timerEvent(
+ QTimerEvent* event )
+{
+ QString currentTest(QTest::currentTestFunction());
+ qDebug() << "timerEvent:" << currentTest;
+ killTimer(event->timerId());
+ executeAction(*actionQueue.takeFirst());
+ if (actionQueue.count()) {
+ startTimer(1000);
+ }
+
+ qDebug() << "timerEvent, OUT";
+}
+
+QTEST_MAIN_S60UI(UT_CpDivertPlugin)