2022-04-07 23:03:29 +01:00
|
|
|
#include <QTest>
|
|
|
|
|
2022-07-22 05:21:57 +01:00
|
|
|
#include "ConcurrentTask.h"
|
|
|
|
#include "MultipleOptionsTask.h"
|
|
|
|
#include "SequentialTask.h"
|
2022-04-07 23:03:29 +01:00
|
|
|
#include "Task.h"
|
|
|
|
|
|
|
|
/* Does nothing. Only used for testing. */
|
|
|
|
class BasicTask : public Task {
|
|
|
|
Q_OBJECT
|
2022-04-07 23:42:26 +01:00
|
|
|
|
|
|
|
friend class TaskTest;
|
|
|
|
|
|
|
|
private:
|
2022-07-22 05:21:57 +01:00
|
|
|
void executeTask() override
|
|
|
|
{
|
|
|
|
emitSucceeded();
|
|
|
|
};
|
2022-04-07 23:42:26 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Does nothing. Only used for testing. */
|
|
|
|
class BasicTask_MultiStep : public Task {
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
friend class TaskTest;
|
|
|
|
|
2022-04-07 23:03:29 +01:00
|
|
|
private:
|
2022-04-07 23:42:26 +01:00
|
|
|
auto isMultiStep() const -> bool override { return true; }
|
|
|
|
|
2022-04-07 23:03:29 +01:00
|
|
|
void executeTask() override {};
|
|
|
|
};
|
|
|
|
|
|
|
|
class TaskTest : public QObject {
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
private slots:
|
2022-04-07 23:42:26 +01:00
|
|
|
void test_SetStatus_NoMultiStep(){
|
2022-04-07 23:03:29 +01:00
|
|
|
BasicTask t;
|
|
|
|
QString status {"test status"};
|
|
|
|
|
|
|
|
t.setStatus(status);
|
|
|
|
|
|
|
|
QCOMPARE(t.getStatus(), status);
|
2022-04-07 23:42:26 +01:00
|
|
|
QCOMPARE(t.getStepStatus(), status);
|
|
|
|
}
|
|
|
|
|
|
|
|
void test_SetStatus_MultiStep(){
|
|
|
|
BasicTask_MultiStep t;
|
|
|
|
QString status {"test status"};
|
|
|
|
|
|
|
|
t.setStatus(status);
|
|
|
|
|
|
|
|
QCOMPARE(t.getStatus(), status);
|
|
|
|
// Even though it is multi step, it does not override the getStepStatus method,
|
|
|
|
// so it should remain the same.
|
|
|
|
QCOMPARE(t.getStepStatus(), status);
|
2022-04-07 23:03:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void test_SetProgress(){
|
|
|
|
BasicTask t;
|
|
|
|
int current = 42;
|
|
|
|
int total = 207;
|
|
|
|
|
|
|
|
t.setProgress(current, total);
|
|
|
|
|
|
|
|
QCOMPARE(t.getProgress(), current);
|
|
|
|
QCOMPARE(t.getTotalProgress(), total);
|
|
|
|
}
|
2022-07-22 05:21:57 +01:00
|
|
|
|
|
|
|
void test_basicRun(){
|
|
|
|
BasicTask t;
|
|
|
|
QObject::connect(&t, &Task::finished, [&]{ QVERIFY2(t.wasSuccessful(), "Task finished but was not successful when it should have been."); });
|
|
|
|
t.start();
|
|
|
|
|
|
|
|
QVERIFY2(QTest::qWaitFor([&]() {
|
|
|
|
return t.isFinished();
|
|
|
|
}, 1000), "Task didn't finish as it should.");
|
|
|
|
}
|
|
|
|
|
|
|
|
void test_basicConcurrentRun(){
|
|
|
|
BasicTask t1;
|
|
|
|
BasicTask t2;
|
|
|
|
BasicTask t3;
|
|
|
|
|
|
|
|
ConcurrentTask t;
|
|
|
|
|
|
|
|
t.addTask(&t1);
|
|
|
|
t.addTask(&t2);
|
|
|
|
t.addTask(&t3);
|
|
|
|
|
|
|
|
QObject::connect(&t, &Task::finished, [&]{
|
|
|
|
QVERIFY2(t.wasSuccessful(), "Task finished but was not successful when it should have been.");
|
|
|
|
QVERIFY(t1.wasSuccessful());
|
|
|
|
QVERIFY(t2.wasSuccessful());
|
|
|
|
QVERIFY(t3.wasSuccessful());
|
|
|
|
});
|
|
|
|
|
|
|
|
t.start();
|
|
|
|
QVERIFY2(QTest::qWaitFor([&]() {
|
|
|
|
return t.isFinished();
|
|
|
|
}, 1000), "Task didn't finish as it should.");
|
|
|
|
}
|
|
|
|
|
|
|
|
// Tests if starting new tasks after the 6 initial ones is working
|
|
|
|
void test_moreConcurrentRun(){
|
|
|
|
BasicTask t1, t2, t3, t4, t5, t6, t7, t8, t9;
|
|
|
|
|
|
|
|
ConcurrentTask t;
|
|
|
|
|
|
|
|
t.addTask(&t1);
|
|
|
|
t.addTask(&t2);
|
|
|
|
t.addTask(&t3);
|
|
|
|
t.addTask(&t4);
|
|
|
|
t.addTask(&t5);
|
|
|
|
t.addTask(&t6);
|
|
|
|
t.addTask(&t7);
|
|
|
|
t.addTask(&t8);
|
|
|
|
t.addTask(&t9);
|
|
|
|
|
|
|
|
QObject::connect(&t, &Task::finished, [&]{
|
|
|
|
QVERIFY2(t.wasSuccessful(), "Task finished but was not successful when it should have been.");
|
|
|
|
QVERIFY(t1.wasSuccessful());
|
|
|
|
QVERIFY(t2.wasSuccessful());
|
|
|
|
QVERIFY(t3.wasSuccessful());
|
|
|
|
QVERIFY(t4.wasSuccessful());
|
|
|
|
QVERIFY(t5.wasSuccessful());
|
|
|
|
QVERIFY(t6.wasSuccessful());
|
|
|
|
QVERIFY(t7.wasSuccessful());
|
|
|
|
QVERIFY(t8.wasSuccessful());
|
|
|
|
QVERIFY(t9.wasSuccessful());
|
|
|
|
});
|
|
|
|
|
|
|
|
t.start();
|
|
|
|
QVERIFY2(QTest::qWaitFor([&]() {
|
|
|
|
return t.isFinished();
|
|
|
|
}, 1000), "Task didn't finish as it should.");
|
|
|
|
}
|
|
|
|
|
|
|
|
void test_basicSequentialRun(){
|
|
|
|
BasicTask t1;
|
|
|
|
BasicTask t2;
|
|
|
|
BasicTask t3;
|
|
|
|
|
|
|
|
SequentialTask t;
|
|
|
|
|
|
|
|
t.addTask(&t1);
|
|
|
|
t.addTask(&t2);
|
|
|
|
t.addTask(&t3);
|
|
|
|
|
|
|
|
QObject::connect(&t, &Task::finished, [&]{
|
|
|
|
QVERIFY2(t.wasSuccessful(), "Task finished but was not successful when it should have been.");
|
|
|
|
QVERIFY(t1.wasSuccessful());
|
|
|
|
QVERIFY(t2.wasSuccessful());
|
|
|
|
QVERIFY(t3.wasSuccessful());
|
|
|
|
});
|
|
|
|
|
|
|
|
t.start();
|
|
|
|
QVERIFY2(QTest::qWaitFor([&]() {
|
|
|
|
return t.isFinished();
|
|
|
|
}, 1000), "Task didn't finish as it should.");
|
|
|
|
}
|
|
|
|
|
|
|
|
void test_basicMultipleOptionsRun(){
|
|
|
|
BasicTask t1;
|
|
|
|
BasicTask t2;
|
|
|
|
BasicTask t3;
|
|
|
|
|
|
|
|
MultipleOptionsTask t;
|
|
|
|
|
|
|
|
t.addTask(&t1);
|
|
|
|
t.addTask(&t2);
|
|
|
|
t.addTask(&t3);
|
|
|
|
|
|
|
|
QObject::connect(&t, &Task::finished, [&]{
|
|
|
|
QVERIFY2(t.wasSuccessful(), "Task finished but was not successful when it should have been.");
|
|
|
|
QVERIFY(t1.wasSuccessful());
|
|
|
|
QVERIFY(!t2.wasSuccessful());
|
|
|
|
QVERIFY(!t3.wasSuccessful());
|
|
|
|
});
|
|
|
|
|
|
|
|
t.start();
|
|
|
|
QVERIFY2(QTest::qWaitFor([&]() {
|
|
|
|
return t.isFinished();
|
|
|
|
}, 1000), "Task didn't finish as it should.");
|
|
|
|
}
|
2022-04-07 23:03:29 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
QTEST_GUILESS_MAIN(TaskTest)
|
|
|
|
|
|
|
|
#include "Task_test.moc"
|