@@ -56,12 +56,14 @@ class ProgressReportingTask : public QgsTask
56
56
ProgressReportingTask ( const QString &desc = QString() ) : QgsTask( desc ), finished( false ), terminated( false ) {}
57
57
58
58
void emitProgressChanged ( double progress ) { setProgress ( progress ); }
59
- void finish () { finished = true ; }
60
- void terminate () { terminated = true ; }
61
59
62
60
bool finished;
63
61
bool terminated;
64
62
63
+ public slots:
64
+ void finish () { finished = true ; }
65
+ void terminate () { terminated = true ; }
66
+
65
67
protected:
66
68
67
69
bool run () override
@@ -198,6 +200,7 @@ class TestQgsTaskManager : public QObject
198
200
void addTask ();
199
201
void taskTerminationBeforeDelete ();
200
202
void taskId ();
203
+ void waitForFinished ();
201
204
void progressChanged ();
202
205
void statusChanged ();
203
206
void allTasksFinished ();
@@ -654,6 +657,49 @@ void TestQgsTaskManager::taskId()
654
657
delete task3;
655
658
}
656
659
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
+
657
703
void TestQgsTaskManager::progressChanged ()
658
704
{
659
705
// check that progressChanged signals emitted by tasks result in progressChanged signal from manager
0 commit comments