diff -r 3ab5c078b490 -r c63ee96dbe5f hswidgetmodel/tsrc/t_hswidgetmodelexe/src/testwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hswidgetmodel/tsrc/t_hswidgetmodelexe/src/testwidget.cpp Thu Sep 16 12:11:40 2010 +0100 @@ -0,0 +1,865 @@ +/* +* Copyright (c) 2008 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: Tests for WidgetBase class. +* +*/ + + +#include "testwidgetmodel.h" +#include "hswidget.h" +#include "hswidget_p.h" +#include "ihswidgetpreferenceservice.h" + + + + + + +void TestWidgetModel::testWidgetInterface() +{ + QGraphicsWidget parent; + + TestWidget3 *w = new TestWidget3(&parent); + w->mStartResult = HsWidget::StartResultRunning; + w->mStopResult = HsWidget::StopResultFinished; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + w->start(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 0); + + w->suspend(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 0); + + w->resume(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 0); + + w->stop(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 1); + QCOMPARE(faultedSpy.count(), 0); + stoppedSpy.clear(); + + w->start(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 0); + + w->setFinishedState(); + + QCOMPARE(succeededSpy.count(), 1); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 0); + succeededSpy.clear(); + + w->start(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 0); + + w->setFaultingState(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 0); + + w->setFaultedState(); + + QCOMPARE(succeededSpy.count(), 0); + QCOMPARE(stoppedSpy.count(), 0); + QCOMPARE(faultedSpy.count(), 1); + + faultedSpy.clear(); +} + + +void TestWidgetModel::testWidgetConstructor() +{ + { + TestWidget w(0); + QVERIFY(!w.widgetPreferenceService()); + } + + { + HsWidget *parent = new TestWidget(0); + QVERIFY(parent); + HsWidget *child = new TestWidget(parent); + QVERIFY(child); + QVERIFY(child->parentItem() == parent); + delete parent; + } +} + + +void TestWidgetModel::testWidgetPreferenceService() +{ + QGraphicsWidget parent; + + HsWidget *w = new TestWidget(&parent); + QObject invalid; + w->setProperty("http://homescreen.nokia.com/runtimeservices/widgetpreferenceservice", qVariantFromValue(&invalid)); + QVERIFY(!w->widgetPreferenceService()); + +} + + +void TestWidgetModel::testWidgetStart_data() +{ + QTest::addColumn("fromState"); + QTest::addColumn("toState"); + QTest::addColumn("startResult"); + QTest::addColumn("succeededEmitCount"); + QTest::addColumn("stoppedEmitCount"); + QTest::addColumn("faultedEmitCount"); + + // --- + + QTest::newRow("Constructed -> Running") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidget::StartResultRunning + << 0 + << 0 + << 0; + + QTest::newRow("Finished -> Running") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidget::StartResultRunning + << 0 + << 0 + << 0; + + // --- + + QTest::newRow("Constructed -> Finished") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StartResultFinished + << 1 + << 0 + << 0; + + QTest::newRow("Finished -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StartResultFinished + << 1 + << 0 + << 0; + + // --- + + QTest::newRow("Constructed -> Faulted") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StartResultFaulted + << 0 + << 0 + << 1; + + QTest::newRow("Finished -> Faulted") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StartResultFaulted + << 0 + << 0 + << 1; + + // --- + + QTest::newRow("Running -> Running") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidget::StartResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Faulting -> Faulting") + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::StartResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Finishing -> Finishing") + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidget::StartResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Suspended -> Suspended") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidget::StartResultFaulted + << 0 + << 0 + << 0; +} + + +void TestWidgetModel::testWidgetStart() +{ + QFETCH(int, fromState); + QFETCH(int, toState); + QFETCH(int, startResult); + QFETCH(int, succeededEmitCount); + QFETCH(int, stoppedEmitCount); + QFETCH(int, faultedEmitCount); + + TestWidget* w = new TestWidget(); + HsWidgetPrivate *wp = new HsWidgetPrivate(w); + + wp->mState = (HsWidgetPrivate::WidgetState)fromState; + w->mStartResult = (HsWidget::StartResult)startResult; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + wp->start(); + + QVERIFY(wp->mState == toState); + QCOMPARE(succeededSpy.count(), succeededEmitCount); + QCOMPARE(stoppedSpy.count(), stoppedEmitCount); + QCOMPARE(faultedSpy.count(), faultedEmitCount); + + delete w; +} + + +void TestWidgetModel::testWidgetSuspend_data() +{ + QTest::addColumn("fromState"); + QTest::addColumn("toState"); + QTest::addColumn("suspendResult"); + QTest::addColumn("succeededEmitCount"); + QTest::addColumn("stoppedEmitCount"); + QTest::addColumn("faultedEmitCount"); + + // --- + + QTest::newRow("Running -> Suspended") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidget::SuspendResultSuspended + << 0 + << 0 + << 0; + + QTest::newRow("Running -> Faulted") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::SuspendResultFaulted + << 0 + << 0 + << 1; + + QTest::newRow("Running -> Faulting") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::SuspendResultFaulting + << 0 + << 0 + << 0; + + // --- + + QTest::newRow("Constructed -> Constructed") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidget::SuspendResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Finished -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::SuspendResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Faulting -> Faulting") + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::SuspendResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Finishing -> Finishing") + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidget::SuspendResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Suspended -> Suspended") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidget::SuspendResultFaulted + << 0 + << 0 + << 0; +} + + +void TestWidgetModel::testWidgetSuspend() +{ + QFETCH(int, fromState); + QFETCH(int, toState); + QFETCH(int, suspendResult); + QFETCH(int, succeededEmitCount); + QFETCH(int, stoppedEmitCount); + QFETCH(int, faultedEmitCount); + + TestWidget* w = new TestWidget(); + HsWidgetPrivate *wp = new HsWidgetPrivate(w); + + wp->mState = (HsWidgetPrivate::WidgetState)fromState; + w->mSuspendResult = (HsWidget::SuspendResult)suspendResult; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + wp->suspend(); + + QVERIFY(wp->mState == toState); + QCOMPARE(succeededSpy.count(), succeededEmitCount); + QCOMPARE(stoppedSpy.count(), stoppedEmitCount); + QCOMPARE(faultedSpy.count(), faultedEmitCount); + + delete w; +} + + +void TestWidgetModel::testWidgetResume_data() +{ + QTest::addColumn("fromState"); + QTest::addColumn("toState"); + QTest::addColumn("resumeResult"); + QTest::addColumn("succeededEmitCount"); + QTest::addColumn("stoppedEmitCount"); + QTest::addColumn("faultedEmitCount"); + + // --- + + QTest::newRow("Suspended -> Running") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidget::ResumeResultRunning + << 0 + << 0 + << 0; + + QTest::newRow("Suspended -> Faulted") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::ResumeResultFaulted + << 0 + << 0 + << 1; + + QTest::newRow("Suspended -> Faulting") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::ResumeResultFaulting + << 0 + << 0 + << 0; + + // --- + + QTest::newRow("Constructed -> Constructed") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidget::ResumeResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Running -> Running") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidget::ResumeResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Finished -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::ResumeResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Faulting -> Faulting") + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::ResumeResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Finishing -> Finishing") + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidget::ResumeResultFaulted + << 0 + << 0 + << 0; +} + + +void TestWidgetModel::testWidgetResume() +{ + QFETCH(int, fromState); + QFETCH(int, toState); + QFETCH(int, resumeResult); + QFETCH(int, succeededEmitCount); + QFETCH(int, stoppedEmitCount); + QFETCH(int, faultedEmitCount); + + TestWidget* w = new TestWidget(); + HsWidgetPrivate *wp = new HsWidgetPrivate(w); + + wp->mState = (HsWidgetPrivate::WidgetState)fromState; + w->mResumeResult = (HsWidget::ResumeResult)resumeResult; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + wp->resume(); + + QVERIFY(wp->mState == toState); + QCOMPARE(succeededSpy.count(), succeededEmitCount); + QCOMPARE(stoppedSpy.count(), stoppedEmitCount); + QCOMPARE(faultedSpy.count(), faultedEmitCount); + + delete w; +} + + +void TestWidgetModel::testWidgetStop_data() +{ + QTest::addColumn("fromState"); + QTest::addColumn("toState"); + QTest::addColumn("stopResult"); + QTest::addColumn("succeededEmitCount"); + QTest::addColumn("stoppedEmitCount"); + QTest::addColumn("faultedEmitCount"); + + // --- + + QTest::newRow("Running -> Finished") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StopResultFinished + << 0 + << 1 + << 0; + + QTest::newRow("Running -> Finishing") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidget::StopResultFinishing + << 0 + << 0 + << 0; + + QTest::newRow("Running -> Faulted") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StopResultFaulted + << 0 + << 0 + << 1; + + QTest::newRow("Running -> Faulting") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::StopResultFaulting + << 0 + << 0 + << 0; + + // --- + + QTest::newRow("Suspended -> Finished") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StopResultFinished + << 0 + << 1 + << 0; + + QTest::newRow("Suspended -> Finishing") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidget::StopResultFinishing + << 0 + << 0 + << 0; + + QTest::newRow("Suspended -> Faulted") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StopResultFaulted + << 0 + << 0 + << 1; + + QTest::newRow("Suspended -> Faulting") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::StopResultFaulting + << 0 + << 0 + << 0; + + // --- + + QTest::newRow("Constructed -> Constructed") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidget::StopResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Finished -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidget::StopResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Faulting -> Faulting") + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidget::StopResultFaulted + << 0 + << 0 + << 0; + + QTest::newRow("Finishing -> Finishing") + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidget::StopResultFaulted + << 0 + << 0 + << 0; +} + + +void TestWidgetModel::testWidgetStop() +{ + QFETCH(int, fromState); + QFETCH(int, toState); + QFETCH(int, stopResult); + QFETCH(int, succeededEmitCount); + QFETCH(int, stoppedEmitCount); + QFETCH(int, faultedEmitCount); + + TestWidget* w = new TestWidget(); + HsWidgetPrivate *wp = new HsWidgetPrivate(w); + + wp->mState = (HsWidgetPrivate::WidgetState)fromState; + w->mStopResult = (HsWidget::StopResult)stopResult; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + wp->stop(); + + QVERIFY(wp->mState == toState); + QCOMPARE(succeededSpy.count(), succeededEmitCount); + QCOMPARE(stoppedSpy.count(), stoppedEmitCount); + QCOMPARE(faultedSpy.count(), faultedEmitCount); + + delete w; +} + + +void TestWidgetModel::testWidgetSetFinished_data() +{ + QTest::addColumn("fromState"); + QTest::addColumn("toState"); + QTest::addColumn("succeededEmitCount"); + QTest::addColumn("stoppedEmitCount"); + QTest::addColumn("faultedEmitCount"); + + // --- + + QTest::newRow("Constructed -> Constructed") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateConstructed + << 0 + << 0 + << 0; + + QTest::newRow("Finished -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 0; + + QTest::newRow("Running -> Finished") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFinished + << 1 + << 0 + << 0; + + QTest::newRow("Suspended -> Finished") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFinished + << 1 + << 0 + << 0; + + QTest::newRow("Finishing -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 1 + << 0; + + QTest::newRow("Faulting -> Finished") + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 1; +} + + +void TestWidgetModel::testWidgetSetFinished() +{ + QFETCH(int, fromState); + QFETCH(int, toState); + QFETCH(int, succeededEmitCount); + QFETCH(int, stoppedEmitCount); + QFETCH(int, faultedEmitCount); + + TestWidget* w = new TestWidget(); + HsWidgetPrivate *wp = new HsWidgetPrivate(w); + + wp->mState = (HsWidgetPrivate::WidgetState)fromState; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + wp->setFinished(); + + QVERIFY(wp->mState == toState); + QCOMPARE(succeededSpy.count(), succeededEmitCount); + QCOMPARE(stoppedSpy.count(), stoppedEmitCount); + QCOMPARE(faultedSpy.count(), faultedEmitCount); + + delete w; +} + + +void TestWidgetModel::testWidgetSetFaulted_data() +{ + QTest::addColumn("fromState"); + QTest::addColumn("toState"); + QTest::addColumn("succeededEmitCount"); + QTest::addColumn("stoppedEmitCount"); + QTest::addColumn("faultedEmitCount"); + + // --- + + QTest::newRow("Constructed -> Constructed") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateConstructed + << 0 + << 0 + << 0; + + QTest::newRow("Finished -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 0; + + QTest::newRow("Running -> Finished") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 1; + + QTest::newRow("Suspended -> Finished") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 1; + + QTest::newRow("Finishing -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 1; + + QTest::newRow("Faulting -> Finished") + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 1; +} + + +void TestWidgetModel::testWidgetSetFaulted() +{ + QFETCH(int, fromState); + QFETCH(int, toState); + QFETCH(int, succeededEmitCount); + QFETCH(int, stoppedEmitCount); + QFETCH(int, faultedEmitCount); + + TestWidget* w = new TestWidget(); + HsWidgetPrivate *wp = new HsWidgetPrivate(w); + + wp->mState = (HsWidgetPrivate::WidgetState)fromState; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + wp->setFaulted(); + + QVERIFY(wp->mState == toState); + QCOMPARE(succeededSpy.count(), succeededEmitCount); + QCOMPARE(stoppedSpy.count(), stoppedEmitCount); + QCOMPARE(faultedSpy.count(), faultedEmitCount); + + delete w; +} + + +void TestWidgetModel::testWidgetSetFaulting_data() +{ + QTest::addColumn("fromState"); + QTest::addColumn("toState"); + QTest::addColumn("succeededEmitCount"); + QTest::addColumn("stoppedEmitCount"); + QTest::addColumn("faultedEmitCount"); + + // --- + + QTest::newRow("Constructed -> Constructed") + << (int)HsWidgetPrivate::WidgetStateConstructed + << (int)HsWidgetPrivate::WidgetStateConstructed + << 0 + << 0 + << 0; + + QTest::newRow("Finished -> Finished") + << (int)HsWidgetPrivate::WidgetStateFinished + << (int)HsWidgetPrivate::WidgetStateFinished + << 0 + << 0 + << 0; + + QTest::newRow("Faulting -> Faulting") + << (int)HsWidgetPrivate::WidgetStateFaulting + << (int)HsWidgetPrivate::WidgetStateFaulting + << 0 + << 0 + << 0; + + QTest::newRow("Running -> Faulting") + << (int)HsWidgetPrivate::WidgetStateRunning + << (int)HsWidgetPrivate::WidgetStateFaulting + << 0 + << 0 + << 0; + + QTest::newRow("Suspended -> Faulting") + << (int)HsWidgetPrivate::WidgetStateSuspended + << (int)HsWidgetPrivate::WidgetStateFaulting + << 0 + << 0 + << 0; + + QTest::newRow("Finishing -> Faulting") + << (int)HsWidgetPrivate::WidgetStateFinishing + << (int)HsWidgetPrivate::WidgetStateFaulting + << 0 + << 0 + << 0; +} + + +void TestWidgetModel::testWidgetSetFaulting() +{ + QFETCH(int, fromState); + QFETCH(int, toState); + QFETCH(int, succeededEmitCount); + QFETCH(int, stoppedEmitCount); + QFETCH(int, faultedEmitCount); + + TestWidget* w = new TestWidget(); + HsWidgetPrivate *wp = new HsWidgetPrivate(w); + + wp->mState = (HsWidgetPrivate::WidgetState)fromState; + + QSignalSpy succeededSpy(w, SIGNAL(succeeded())); + QSignalSpy stoppedSpy(w, SIGNAL(stopped())); + QSignalSpy faultedSpy(w, SIGNAL(faulted())); + + wp->setFaulting(); + + QVERIFY(wp->mState == toState); + QCOMPARE(succeededSpy.count(), succeededEmitCount); + QCOMPARE(stoppedSpy.count(), stoppedEmitCount); + QCOMPARE(faultedSpy.count(), faultedEmitCount); + + delete w; +} +