Skip to content

Commit 95597e3

Browse files
committedMay 11, 2017
Add tests for QgsTask::waitForFinished()
1 parent ed747ed commit 95597e3

File tree

1 file changed

+48
-2
lines changed

1 file changed

+48
-2
lines changed
 

‎tests/src/core/testqgstaskmanager.cpp

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,14 @@ class ProgressReportingTask : public QgsTask
5656
ProgressReportingTask( const QString &desc = QString() ) : QgsTask( desc ), finished( false ), terminated( false ) {}
5757

5858
void emitProgressChanged( double progress ) { setProgress( progress ); }
59-
void finish() { finished = true; }
60-
void terminate() { terminated = true; }
6159

6260
bool finished;
6361
bool terminated;
6462

63+
public slots:
64+
void finish() { finished = true; }
65+
void terminate() { terminated = true; }
66+
6567
protected:
6668

6769
bool run() override
@@ -198,6 +200,7 @@ class TestQgsTaskManager : public QObject
198200
void addTask();
199201
void taskTerminationBeforeDelete();
200202
void taskId();
203+
void waitForFinished();
201204
void progressChanged();
202205
void statusChanged();
203206
void allTasksFinished();
@@ -654,6 +657,49 @@ void TestQgsTaskManager::taskId()
654657
delete task3;
655658
}
656659

660+
void TestQgsTaskManager::waitForFinished()
661+
{
662+
QgsTaskManager manager;
663+
QEventLoop loop;
664+
665+
ProgressReportingTask *finishedTask = new ProgressReportingTask();
666+
connect( finishedTask, &ProgressReportingTask::begun, &loop, &QEventLoop::quit );
667+
manager.addTask( finishedTask );
668+
if ( finishedTask->status() != QgsTask::Running )
669+
loop.exec();
670+
671+
QTimer timer;
672+
connect( &timer, &QTimer::timeout, finishedTask, &ProgressReportingTask::finish );
673+
timer.start( 100 );
674+
QCOMPARE( finishedTask->status(), QgsTask::Running );
675+
QCOMPARE( finishedTask->waitForFinished(), true );
676+
QCOMPARE( finishedTask->status(), QgsTask::Complete );
677+
678+
ProgressReportingTask *failedTask = new ProgressReportingTask();
679+
connect( failedTask, &ProgressReportingTask::begun, &loop, &QEventLoop::quit );
680+
manager.addTask( failedTask );
681+
if ( failedTask->status() != QgsTask::Running )
682+
loop.exec();
683+
684+
connect( &timer, &QTimer::timeout, failedTask, &ProgressReportingTask::terminate );
685+
timer.start( 100 );
686+
QCOMPARE( failedTask->status(), QgsTask::Running );
687+
QCOMPARE( failedTask->waitForFinished(), true );
688+
QCOMPARE( failedTask->status(), QgsTask::Terminated );
689+
690+
ProgressReportingTask *timeoutTooShortTask = new ProgressReportingTask();
691+
connect( timeoutTooShortTask, &ProgressReportingTask::begun, &loop, &QEventLoop::quit );
692+
manager.addTask( timeoutTooShortTask );
693+
if ( timeoutTooShortTask->status() != QgsTask::Running )
694+
loop.exec();
695+
696+
connect( &timer, &QTimer::timeout, timeoutTooShortTask, &ProgressReportingTask::finish );
697+
timer.start( 1000 );
698+
QCOMPARE( timeoutTooShortTask->status(), QgsTask::Running );
699+
QCOMPARE( timeoutTooShortTask->waitForFinished( 20 ), false );
700+
QCOMPARE( timeoutTooShortTask->status(), QgsTask::Running );
701+
}
702+
657703
void TestQgsTaskManager::progressChanged()
658704
{
659705
// check that progressChanged signals emitted by tasks result in progressChanged signal from manager

0 commit comments

Comments
 (0)
Please sign in to comment.