diff -r c84cf270c54f -r 92ab7f8d0eab phonesettings/cpphonesettingsplugins/divertplugin/tsrc/ut_cpdivertplugin/ut_cpdivertplugin.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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( + 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(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 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 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( + dialog->contentWidget() ); + QVERIFY( editor ); + editor->setText(action.item); + break; + default: + break; + } +} + +/*! + UT_CpDivertPlugin::visibleDialog + */ +HbDialog *UT_CpDivertPlugin::visibleDialog( const QString &heading ) +{ + QList items = mainWindow->scene()->items(); + foreach (QGraphicsItem* item, items) { + HbDialog *w = qobject_cast(item->parentWidget()); + if (w && w->isVisible() && ( qobject_cast(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(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)