[Ktutorial-commits] SF.net SVN: ktutorial:[160] trunk/ktutorial/ktutorial-editor
Status: Alpha
Brought to you by:
danxuliu
From: <dan...@us...> - 2010-03-16 02:12:09
|
Revision: 160 http://ktutorial.svn.sourceforge.net/ktutorial/?rev=160&view=rev Author: danxuliu Date: 2010-03-16 02:12:03 +0000 (Tue, 16 Mar 2010) Log Message: ----------- Fix crash when a reaction was saved and there was no WaitFor in the reaction or in the data to save. Modified Paths: -------------- trunk/ktutorial/ktutorial-editor/src/view/ReactionWidget.cpp trunk/ktutorial/ktutorial-editor/tests/unit/view/ReactionWidgetTest.cpp Modified: trunk/ktutorial/ktutorial-editor/src/view/ReactionWidget.cpp =================================================================== --- trunk/ktutorial/ktutorial-editor/src/view/ReactionWidget.cpp 2010-03-16 00:16:31 UTC (rev 159) +++ trunk/ktutorial/ktutorial-editor/src/view/ReactionWidget.cpp 2010-03-16 02:12:03 UTC (rev 160) @@ -77,7 +77,8 @@ mReaction->setOptionName(ui->triggerOptionLineEdit->text()); } - if (*mReaction->waitFor() != *mWaitForWidget->waitFor()) { + if (!mReaction->waitFor() || !mWaitForWidget->waitFor() || + *mReaction->waitFor() != *mWaitForWidget->waitFor()) { WaitFor* oldWaitFor = mReaction->waitFor(); mReaction->setWaitFor(mWaitForWidget->waitFor()); delete oldWaitFor; Modified: trunk/ktutorial/ktutorial-editor/tests/unit/view/ReactionWidgetTest.cpp =================================================================== --- trunk/ktutorial/ktutorial-editor/tests/unit/view/ReactionWidgetTest.cpp 2010-03-16 00:16:31 UTC (rev 159) +++ trunk/ktutorial/ktutorial-editor/tests/unit/view/ReactionWidgetTest.cpp 2010-03-16 02:12:03 UTC (rev 160) @@ -48,6 +48,7 @@ void testSelectResponseTypeCustomCode(); void testSaveChanges(); + void testSaveChangesWithNoWaitFor(); private: @@ -60,6 +61,7 @@ QRadioButton* responseCodeRadioButton(ReactionWidget* widget) const; KTextEdit* responseCodeTextEdit(ReactionWidget* widget) const; + void addWaitForSignal(ReactionWidget* widget); void addWaitForSignalToRootWaitFor(ReactionWidget* widget); }; @@ -178,6 +180,23 @@ QCOMPARE(reaction.customCode(), QString("The custom code")); } +void ReactionWidgetTest::testSaveChangesWithNoWaitFor() { + Reaction reaction; + reaction.setTriggerType(Reaction::ConditionMet); + + ReactionWidget widget(&reaction); + + widget.saveChanges(); + + QCOMPARE(reaction.waitFor(), (WaitFor*)0); + + addWaitForSignal(&widget); + widget.saveChanges(); + + QVERIFY(reaction.waitFor() != 0); + QVERIFY(qobject_cast<WaitForSignal*>(reaction.waitFor())); +} + /////////////////////////////////// Helpers //////////////////////////////////// QRadioButton* ReactionWidgetTest::triggerOptionRadioButton( @@ -248,11 +267,7 @@ }; -void ReactionWidgetTest::addWaitForSignalToRootWaitFor(ReactionWidget* widget) { - QTreeView* tree = widget->findChild<QTreeView*>("waitForTreeView"); - QModelIndex index = tree->model()->index(0, 0); - tree->selectionModel()->select(index, QItemSelectionModel::SelectCurrent); - +void ReactionWidgetTest::addWaitForSignal(ReactionWidget* widget) { AddWaitForSignalHelper* helper = new AddWaitForSignalHelper(widget, this); //The dialog is modal, so it won't return to the test code until it is @@ -263,6 +278,14 @@ widget->findChild<KPushButton*>("addButton")->click(); } +void ReactionWidgetTest::addWaitForSignalToRootWaitFor(ReactionWidget* widget) { + QTreeView* tree = widget->findChild<QTreeView*>("waitForTreeView"); + QModelIndex index = tree->model()->index(0, 0); + tree->selectionModel()->select(index, QItemSelectionModel::SelectCurrent); + + addWaitForSignal(widget); +} + QTEST_MAIN(ReactionWidgetTest) #include "ReactionWidgetTest.moc" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |