diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-11-27 17:30:04 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-11-27 17:30:04 +0100 |
commit | 5b41b26a349967acf2197f9f9228526193fd826e (patch) | |
tree | 166452bcc0757564deefe233bf031d2ccb0564d2 /tests/clientapitest.cpp | |
parent | 13af56e436f49df32d3b2f6f223cf1dec2eabaac (diff) | |
download | sink-5b41b26a349967acf2197f9f9228526193fd826e.tar.gz sink-5b41b26a349967acf2197f9f9228526193fd826e.zip |
Introduced a QueryRunner object
The QueryRunner object lives for the duration of the query (so just
for the initial query for non-live queries, and for the lifetime of the
result model for live queries).
It's supposed to handle all the threading internally and decouple the
lifetime of the facade.
Diffstat (limited to 'tests/clientapitest.cpp')
-rw-r--r-- | tests/clientapitest.cpp | 86 |
1 files changed, 51 insertions, 35 deletions
diff --git a/tests/clientapitest.cpp b/tests/clientapitest.cpp index 4883b5e..d76fac8 100644 --- a/tests/clientapitest.cpp +++ b/tests/clientapitest.cpp | |||
@@ -4,7 +4,6 @@ | |||
4 | 4 | ||
5 | #include "clientapi.h" | 5 | #include "clientapi.h" |
6 | #include "facade.h" | 6 | #include "facade.h" |
7 | #include "synclistresult.h" | ||
8 | #include "resourceconfig.h" | 7 | #include "resourceconfig.h" |
9 | #include "modelresult.h" | 8 | #include "modelresult.h" |
10 | #include "resultprovider.h" | 9 | #include "resultprovider.h" |
@@ -28,22 +27,35 @@ public: | |||
28 | KAsync::Job<void> create(const T &domainObject) Q_DECL_OVERRIDE { return KAsync::null<void>(); }; | 27 | KAsync::Job<void> create(const T &domainObject) Q_DECL_OVERRIDE { return KAsync::null<void>(); }; |
29 | KAsync::Job<void> modify(const T &domainObject) Q_DECL_OVERRIDE { return KAsync::null<void>(); }; | 28 | KAsync::Job<void> modify(const T &domainObject) Q_DECL_OVERRIDE { return KAsync::null<void>(); }; |
30 | KAsync::Job<void> remove(const T &domainObject) Q_DECL_OVERRIDE { return KAsync::null<void>(); }; | 29 | KAsync::Job<void> remove(const T &domainObject) Q_DECL_OVERRIDE { return KAsync::null<void>(); }; |
31 | KAsync::Job<void> load(const Akonadi2::Query &query, Akonadi2::ResultProviderInterface<typename T::Ptr> &resultProvider) Q_DECL_OVERRIDE | 30 | QPair<KAsync::Job<void>, typename Akonadi2::ResultEmitter<typename T::Ptr>::Ptr > load(const Akonadi2::Query &query) Q_DECL_OVERRIDE |
32 | { | 31 | { |
33 | capturedResultProvider = &resultProvider; | 32 | // capturedResultProvider = &resultProvider; |
34 | resultProvider.setFetcher([query, &resultProvider, this](const typename T::Ptr &) { | 33 | Trace() << "lkjsdflkjsdfljsdfljsdlfj"; |
35 | for (const auto &res : results) { | 34 | |
35 | auto resultProvider = new Akonadi2::ResultProvider<typename T::Ptr>(); | ||
36 | resultProvider->onDone([resultProvider]() { | ||
37 | Trace() << "Result provider is done"; | ||
38 | delete resultProvider; | ||
39 | }); | ||
40 | //We have to do it this way, otherwise we're not setting the fetcher right | ||
41 | auto emitter = resultProvider->emitter(); | ||
42 | |||
43 | resultProvider->setFetcher([query, resultProvider, this](const typename T::Ptr &) { | ||
44 | Trace() << "Running the fetcher"; | ||
45 | for (const auto &res : results) { | ||
36 | qDebug() << "Parent filter " << query.propertyFilter.value("parent").toByteArray() << res->identifier(); | 46 | qDebug() << "Parent filter " << query.propertyFilter.value("parent").toByteArray() << res->identifier(); |
37 | if (!query.propertyFilter.contains("parent") || query.propertyFilter.value("parent").toByteArray() == res->getProperty("parent").toByteArray()) { | 47 | if (!query.propertyFilter.contains("parent") || query.propertyFilter.value("parent").toByteArray() == res->getProperty("parent").toByteArray()) { |
38 | resultProvider.add(res); | 48 | resultProvider->add(res); |
39 | } | 49 | } |
40 | } | 50 | } |
41 | }); | 51 | }); |
42 | return KAsync::null<void>(); | 52 | auto job = KAsync::start<void>([query, resultProvider]() { |
53 | }); | ||
54 | return qMakePair(job, emitter); | ||
43 | } | 55 | } |
44 | 56 | ||
45 | QList<typename T::Ptr> results; | 57 | QList<typename T::Ptr> results; |
46 | Akonadi2::ResultProviderInterface<typename T::Ptr> *capturedResultProvider; | 58 | // Akonadi2::ResultProviderInterface<typename T::Ptr> *capturedResultProvider; |
47 | }; | 59 | }; |
48 | 60 | ||
49 | 61 | ||
@@ -61,24 +73,25 @@ private Q_SLOTS: | |||
61 | { | 73 | { |
62 | Akonadi2::FacadeFactory::instance().resetFactory(); | 74 | Akonadi2::FacadeFactory::instance().resetFactory(); |
63 | ResourceConfig::clear(); | 75 | ResourceConfig::clear(); |
76 | Akonadi2::Log::setDebugOutputLevel(Akonadi2::Log::Trace); | ||
64 | } | 77 | } |
65 | 78 | ||
66 | void testLoad() | 79 | // void testLoad() |
67 | { | 80 | // { |
68 | auto facade = DummyResourceFacade<Akonadi2::ApplicationDomain::Event>::registerFacade(); | 81 | // auto facade = DummyResourceFacade<Akonadi2::ApplicationDomain::Event>::registerFacade(); |
69 | facade->results << QSharedPointer<Akonadi2::ApplicationDomain::Event>::create("resource", "id", 0, QSharedPointer<Akonadi2::ApplicationDomain::MemoryBufferAdaptor>::create()); | 82 | // facade->results << QSharedPointer<Akonadi2::ApplicationDomain::Event>::create("resource", "id", 0, QSharedPointer<Akonadi2::ApplicationDomain::MemoryBufferAdaptor>::create()); |
70 | ResourceConfig::addResource("dummyresource.instance1", "dummyresource"); | 83 | // ResourceConfig::addResource("dummyresource.instance1", "dummyresource"); |
71 | 84 | // | |
72 | Akonadi2::Query query; | 85 | // Akonadi2::Query query; |
73 | query.resources << "dummyresource.instance1"; | 86 | // query.resources << "dummyresource.instance1"; |
74 | query.liveQuery = false; | 87 | // query.liveQuery = false; |
75 | 88 | // | |
76 | async::SyncListResult<Akonadi2::ApplicationDomain::Event::Ptr> result(Akonadi2::Store::load<Akonadi2::ApplicationDomain::Event>(query)); | 89 | // async::SyncListResult<Akonadi2::ApplicationDomain::Event::Ptr> result(Akonadi2::Store::load<Akonadi2::ApplicationDomain::Event>(query)); |
77 | result.exec(); | 90 | // result.exec(); |
78 | QCOMPARE(result.size(), 1); | 91 | // QCOMPARE(result.size(), 1); |
79 | } | 92 | // } |
80 | 93 | // | |
81 | //The query provider is supposed to delete itself | 94 | // //The query provider is supposed to delete itself |
82 | void testQueryLifetime() | 95 | void testQueryLifetime() |
83 | { | 96 | { |
84 | auto facade = DummyResourceFacade<Akonadi2::ApplicationDomain::Event>::registerFacade(); | 97 | auto facade = DummyResourceFacade<Akonadi2::ApplicationDomain::Event>::registerFacade(); |
@@ -90,12 +103,12 @@ private Q_SLOTS: | |||
90 | query.liveQuery = true; | 103 | query.liveQuery = true; |
91 | 104 | ||
92 | { | 105 | { |
93 | async::SyncListResult<Akonadi2::ApplicationDomain::Event::Ptr> result(Akonadi2::Store::load<Akonadi2::ApplicationDomain::Event>(query)); | 106 | auto model = Akonadi2::Store::loadModel<Akonadi2::ApplicationDomain::Event>(query); |
94 | result.exec(); | 107 | QTRY_COMPARE(model->rowCount(QModelIndex()), 1); |
95 | QCOMPARE(result.size(), 1); | ||
96 | } | 108 | } |
97 | //It's running in a separate thread, so we have to wait for a moment until the query provider deletes itself. | 109 | //It's running in a separate thread, so we have to wait for a moment until the query provider deletes itself. |
98 | // QTRY_VERIFY(!facade->capturedResultProvider); | 110 | // QTRY_VERIFY(!facade->capturedResultProvider); |
111 | QTest::qWait(300); | ||
99 | } | 112 | } |
100 | 113 | ||
101 | //TODO: This test doesn't belong to this testsuite | 114 | //TODO: This test doesn't belong to this testsuite |
@@ -112,18 +125,22 @@ private Q_SLOTS: | |||
112 | { | 125 | { |
113 | Akonadi2::Query query; | 126 | Akonadi2::Query query; |
114 | query.propertyFilter.insert("type", "dummyresource"); | 127 | query.propertyFilter.insert("type", "dummyresource"); |
115 | async::SyncListResult<Akonadi2::ApplicationDomain::AkonadiResource::Ptr> result(Akonadi2::Store::load<Akonadi2::ApplicationDomain::AkonadiResource>(query)); | 128 | // async::SyncListResult<Akonadi2::ApplicationDomain::AkonadiResource::Ptr> result(Akonadi2::Store::load<Akonadi2::ApplicationDomain::AkonadiResource>(query)); |
116 | result.exec(); | 129 | auto model = Akonadi2::Store::loadModel<Akonadi2::ApplicationDomain::AkonadiResource>(query); |
117 | QCOMPARE(result.size(), 1); | 130 | // result.exec(); |
131 | QTRY_COMPARE(model->rowCount(QModelIndex()), 1); | ||
118 | } | 132 | } |
119 | 133 | ||
120 | Akonadi2::Store::remove(res).exec().waitForFinished(); | 134 | Akonadi2::Store::remove(res).exec().waitForFinished(); |
121 | { | 135 | { |
122 | Akonadi2::Query query; | 136 | Akonadi2::Query query; |
123 | query.propertyFilter.insert("type", "dummyresource"); | 137 | query.propertyFilter.insert("type", "dummyresource"); |
124 | async::SyncListResult<Akonadi2::ApplicationDomain::AkonadiResource::Ptr> result(Akonadi2::Store::load<Akonadi2::ApplicationDomain::AkonadiResource>(query)); | 138 | // async::SyncListResult<Akonadi2::ApplicationDomain::AkonadiResource::Ptr> result(Akonadi2::Store::load<Akonadi2::ApplicationDomain::AkonadiResource>(query)); |
125 | result.exec(); | 139 | auto model = Akonadi2::Store::loadModel<Akonadi2::ApplicationDomain::AkonadiResource>(query); |
126 | QCOMPARE(result.size(), 0); | 140 | // result.exec(); |
141 | // QCOMPARE(result.size(), 0); | ||
142 | // QTRY_COMPARE(result.size(), 0); | ||
143 | QTRY_COMPARE(model->rowCount(QModelIndex()), 0); | ||
127 | } | 144 | } |
128 | } | 145 | } |
129 | 146 | ||
@@ -138,7 +155,6 @@ private Q_SLOTS: | |||
138 | query.liveQuery = false; | 155 | query.liveQuery = false; |
139 | 156 | ||
140 | auto model = Akonadi2::Store::loadModel<Akonadi2::ApplicationDomain::Folder>(query); | 157 | auto model = Akonadi2::Store::loadModel<Akonadi2::ApplicationDomain::Folder>(query); |
141 | model->fetchMore(QModelIndex()); | ||
142 | QTRY_COMPARE(model->rowCount(), 1); | 158 | QTRY_COMPARE(model->rowCount(), 1); |
143 | } | 159 | } |
144 | 160 | ||
@@ -155,9 +171,9 @@ private Q_SLOTS: | |||
155 | Akonadi2::Query query; | 171 | Akonadi2::Query query; |
156 | query.resources << "dummyresource.instance1"; | 172 | query.resources << "dummyresource.instance1"; |
157 | query.liveQuery = false; | 173 | query.liveQuery = false; |
174 | query.parentProperty = "parent"; | ||
158 | 175 | ||
159 | auto model = Akonadi2::Store::loadModel<Akonadi2::ApplicationDomain::Folder>(query); | 176 | auto model = Akonadi2::Store::loadModel<Akonadi2::ApplicationDomain::Folder>(query); |
160 | model->fetchMore(QModelIndex()); | ||
161 | QTRY_COMPARE(model->rowCount(), 1); | 177 | QTRY_COMPARE(model->rowCount(), 1); |
162 | model->fetchMore(model->index(0, 0)); | 178 | model->fetchMore(model->index(0, 0)); |
163 | QTRY_COMPARE(model->rowCount(model->index(0, 0)), 1); | 179 | QTRY_COMPARE(model->rowCount(model->index(0, 0)), 1); |