diff options
author | Dan Vrátil <dvratil@redhat.com> | 2015-03-30 17:49:26 +0200 |
---|---|---|
committer | Dan Vrátil <dvratil@redhat.com> | 2015-03-30 17:49:28 +0200 |
commit | 8f2fed8d2a1b23a8f318047b6592ad64b6ecbd22 (patch) | |
tree | 6f8d5ea2dc8695dfc6c3c641c2ef044ad5810bd8 /async/autotests/kjobtest.cpp | |
parent | 1d946c166cc7a4a2556e8bfaab7dc66695b555e1 (diff) | |
download | sink-8f2fed8d2a1b23a8f318047b6592ad64b6ecbd22.tar.gz sink-8f2fed8d2a1b23a8f318047b6592ad64b6ecbd22.zip |
Async: initial support for native chaining of KJobs
It is now possible use KJob-derived jobs with libasync without having to write
lambda wrappers.
auto job = Async::start<ReturnType, MyKJob, MyKJob::result, Args ...)
.then<ReturnType, OtherKJob, OtherKJob::result, PrevKJobReturnType>();
job.exec(arg1, arg2, ...);
The reason for this approach (instead of taking KJob* as an argument is that
we usually want the KJob ctor arguments to depend on result of previous job.
At least in case of Async::start() however it makes sense to support passing
KJob* as an argument (not yet implemented).
In future we should also support custom error handlers.
The KJob integration is build-time optional, but enabled by default (pass
-DWITH_KJOB=FALSE to CMake to disable).
Adds KCoreAddons dependency.
Diffstat (limited to 'async/autotests/kjobtest.cpp')
-rw-r--r-- | async/autotests/kjobtest.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/async/autotests/kjobtest.cpp b/async/autotests/kjobtest.cpp new file mode 100644 index 0000000..be92d68 --- /dev/null +++ b/async/autotests/kjobtest.cpp | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * Copyright 2015 Daniel Vrátil <dvratil@redhat.com> | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or | ||
5 | * modify it under the terms of the GNU General Public License as | ||
6 | * published by the Free Software Foundation; either version 2 of | ||
7 | * the License or (at your option) version 3 or any later version | ||
8 | * accepted by the membership of KDE e.V. (or its successor approved | ||
9 | * by the membership of KDE e.V.), which shall act as a proxy | ||
10 | * defined in Section 14 of version 3 of the license. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
19 | * | ||
20 | */ | ||
21 | |||
22 | #include "../src/async.h" | ||
23 | #include "testkjob.h" | ||
24 | |||
25 | #include <QtTest/QTest> | ||
26 | |||
27 | class KJobTest : public QObject | ||
28 | { | ||
29 | Q_OBJECT | ||
30 | |||
31 | public: | ||
32 | KJobTest() | ||
33 | {} | ||
34 | |||
35 | ~KJobTest() | ||
36 | {} | ||
37 | |||
38 | private Q_SLOTS: | ||
39 | void testSingleKJob(); | ||
40 | void testKJobChain(); | ||
41 | |||
42 | }; | ||
43 | |||
44 | void KJobTest::testSingleKJob() | ||
45 | { | ||
46 | auto job = Async::start<int, TestKJob, &TestKJob::result, int>(); | ||
47 | |||
48 | auto future = job.exec(42); | ||
49 | future.waitForFinished(); | ||
50 | |||
51 | QVERIFY(future.isFinished()); | ||
52 | QCOMPARE(future.value(), 42); | ||
53 | } | ||
54 | |||
55 | void KJobTest::testKJobChain() | ||
56 | { | ||
57 | auto job = Async::start<int, TestKJob, &TestKJob::result, int>() | ||
58 | .then<int, TestKJob, &TestKJob::result, int>(); | ||
59 | |||
60 | auto future = job.exec(42); | ||
61 | future.waitForFinished(); | ||
62 | |||
63 | QVERIFY(future.isFinished()); | ||
64 | QCOMPARE(future.value(), 42); | ||
65 | } | ||
66 | |||
67 | QTEST_MAIN(KJobTest) | ||
68 | |||
69 | #include "kjobtest.moc" \ No newline at end of file | ||