Merge lp:~renatofilho/qtorganizer5-eds/fix-engine-crash into lp:qtorganizer5-eds
- fix-engine-crash
- Merge into trunk
Status: | Merged | ||||
---|---|---|---|---|---|
Merged at revision: | 59 | ||||
Proposed branch: | lp:~renatofilho/qtorganizer5-eds/fix-engine-crash | ||||
Merge into: | lp:qtorganizer5-eds | ||||
Diff against target: |
1190 lines (+374/-182) 33 files modified
CMakeLists.txt (+1/-1) buildOnDevice.sh (+2/-2) config.h.in (+1/-0) organizer/qorganizer-eds-engine.cpp (+29/-21) organizer/qorganizer-eds-engine.h (+5/-0) organizer/qorganizer-eds-fetchbyidrequestdata.cpp (+4/-2) organizer/qorganizer-eds-fetchbyidrequestdata.h (+2/-1) organizer/qorganizer-eds-fetchocurrencedata.cpp (+5/-2) organizer/qorganizer-eds-fetchocurrencedata.h (+2/-1) organizer/qorganizer-eds-fetchrequestdata.cpp (+5/-3) organizer/qorganizer-eds-fetchrequestdata.h (+2/-1) organizer/qorganizer-eds-removebyidrequestdata.cpp (+5/-2) organizer/qorganizer-eds-removebyidrequestdata.h (+2/-1) organizer/qorganizer-eds-removecollectionrequestdata.cpp (+6/-11) organizer/qorganizer-eds-removecollectionrequestdata.h (+2/-1) organizer/qorganizer-eds-removerequestdata.cpp (+4/-2) organizer/qorganizer-eds-removerequestdata.h (+2/-1) organizer/qorganizer-eds-requestdata.cpp (+69/-23) organizer/qorganizer-eds-requestdata.h (+14/-6) organizer/qorganizer-eds-savecollectionrequestdata.cpp (+10/-6) organizer/qorganizer-eds-savecollectionrequestdata.h (+3/-2) organizer/qorganizer-eds-saverequestdata.cpp (+5/-6) organizer/qorganizer-eds-saverequestdata.h (+2/-1) organizer/qorganizer-eds-source-registry.cpp (+1/-4) tests/unittest/CMakeLists.txt (+6/-5) tests/unittest/cancel-operation-test.cpp (+99/-0) tests/unittest/collections-test.cpp (+21/-7) tests/unittest/eds-base-test.cpp (+34/-60) tests/unittest/eds-base-test.h (+2/-3) tests/unittest/event-test.cpp (+2/-2) tests/unittest/fetchitem-test.cpp (+4/-3) tests/unittest/recurrence-test.cpp (+7/-2) tests/unittest/run-eds-test.sh (+16/-0) |
||||
To merge this branch: | bzr merge lp:~renatofilho/qtorganizer5-eds/fix-engine-crash | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
PS Jenkins bot | continuous-integration | Approve | |
Ubuntu Phablet Team | Pending | ||
Review via email: mp+219586@code.launchpad.net |
Commit message
Only destroy request data in the requestDestroyed function.
Return the items in the requested order.
Description of the change
PS Jenkins bot (ps-jenkins) wrote : | # |
- 61. By Renato Araujo Oliveira Filho
-
Fixed collection update signal.
Avoid delete request while wait to finish.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:61
http://
Executed test runs:
FAILURE: http://
SUCCESS: http://
deb: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
- 62. By Renato Araujo Oliveira Filho <renato@ubuntu>
-
Try t fix faling test.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:62
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
- 63. By Renato Araujo Oliveira Filho
-
Reduce the wait time during the test cleanup.
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:63
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 64. By Renato Araujo Oliveira Filho
-
WIP
- 65. By Renato Araujo Oliveira Filho <renato@ubuntu>
-
Make EDS tests more reliable.
- 66. By Renato Araujo Oliveira Filho
-
Test cancel operation.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:66
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
- 67. By Renato Araujo Oliveira Filho
-
Added missing file.
- 68. By Renato Araujo Oliveira Filho
-
Removed unused functions.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:68
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
- 69. By Renato Araujo Oliveira Filho
-
Fixed organizer plugin load during tests.
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:69
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 70. By Renato Araujo Oliveira Filho
-
Added test for select and unselect a collection.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:70
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:70
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 71. By Renato Araujo Oliveira Filho
-
Removed commented code.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:71
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:71
http://
Executed test runs:
FAILURE: http://
SUCCESS: http://
deb: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:71
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 72. By Renato Araujo Oliveira Filho
-
Return the item in the the correct sort order.
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:72
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Preview Diff
1 | === modified file 'CMakeLists.txt' |
2 | --- CMakeLists.txt 2013-12-05 15:30:17 +0000 |
3 | +++ CMakeLists.txt 2014-06-10 18:21:21 +0000 |
4 | @@ -70,7 +70,7 @@ |
5 | set(EVOLUTION_SOURCE_SERVICE_NAME "org.gnome.evolution.dataserver.Sources2") |
6 | endif() |
7 | |
8 | -add_subdirectory(qorganizer) |
9 | +add_subdirectory(organizer) |
10 | if(DBUS_RUNNER) |
11 | if(EVOLUTION_CALENDAR_FACTORY) |
12 | enable_testing() |
13 | |
14 | === modified file 'buildOnDevice.sh' |
15 | --- buildOnDevice.sh 2014-04-19 13:41:01 +0000 |
16 | +++ buildOnDevice.sh 2014-06-10 18:21:21 +0000 |
17 | @@ -72,9 +72,9 @@ |
18 | # same options as in debian/rules |
19 | #QMAKE_OPTIONS="-recursive MALIIT_DEFAULT_PROFILE=ubuntu CONFIG+=\\\"debug nodoc enable-presage enable-hunspell enable-pinyin\\\"" |
20 | exec_with_ssh "mkdir -p $CODE_DIR/build" |
21 | - exec_with_ssh "cd $CODE_DIR/build && cmake ../ -DCMAKE_BUILD_TYPE=Debug && make -j 4" |
22 | + exec_with_ssh "cd $CODE_DIR/build && cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug && make -j 4" |
23 | echo "Installing" |
24 | - exec_with_ssh "cd $CODE_DIR/build && " $SUDO " make install" |
25 | + exec_with_ssh "cd $CODE_DIR/build && " $SUDO " make install/fast" |
26 | } |
27 | |
28 | run() { |
29 | |
30 | === modified file 'config.h.in' |
31 | --- config.h.in 2013-12-02 01:42:41 +0000 |
32 | +++ config.h.in 2014-06-10 18:21:21 +0000 |
33 | @@ -4,5 +4,6 @@ |
34 | #define TMP_DIR "@TMP_DIR@" |
35 | #define EVOLUTION_CALENDAR_FACTORY "@EVOLUTION_CALENDAR_FACTORY@" |
36 | #define EVOLUTION_CALENDAR_SERVICE "org.gnome.evolution.dataserver.Calendar4" |
37 | +#define QORGANIZER_DEV_PATH "@CMAKE_BINARY_DIR@" |
38 | |
39 | #endif |
40 | |
41 | === renamed directory 'qorganizer' => 'organizer' |
42 | === modified file 'organizer/qorganizer-eds-engine.cpp' |
43 | --- qorganizer/qorganizer-eds-engine.cpp 2014-05-08 16:45:14 +0000 |
44 | +++ organizer/qorganizer-eds-engine.cpp 2014-06-10 18:21:21 +0000 |
45 | @@ -90,17 +90,17 @@ |
46 | } |
47 | connect(d->m_sourceRegistry, SIGNAL(sourceAdded(QString)), SLOT(onSourceAdded(QString))); |
48 | connect(d->m_sourceRegistry, SIGNAL(sourceRemoved(QString)), SLOT(onSourceRemoved(QString))); |
49 | + connect(d->m_sourceRegistry, SIGNAL(sourceUpdated(QString)), SLOT(onSourceUpdated(QString))); |
50 | d->m_sourceRegistry->load(); |
51 | } |
52 | |
53 | QOrganizerEDSEngine::~QOrganizerEDSEngine() |
54 | { |
55 | - QList<QOrganizerAbstractRequest*> reqs = m_runningRequests.keys(); |
56 | - Q_FOREACH(QOrganizerAbstractRequest *req, reqs) { |
57 | - req->cancel(); |
58 | + while(m_runningRequests.count()) { |
59 | + QOrganizerAbstractRequest *req = m_runningRequests.keys().first(); |
60 | + QOrganizerEDSEngine::requestDestroyed(req); |
61 | } |
62 | |
63 | - Q_ASSERT(m_runningRequests.count() == 0); |
64 | d->m_sharedEngines.remove(this); |
65 | if (!d->m_refCount.deref()) { |
66 | delete d; |
67 | @@ -811,9 +811,11 @@ |
68 | startRequest(req); |
69 | waitForRequestFinished(req, 0); |
70 | |
71 | - *error = req->error(); |
72 | + if (error) { |
73 | + *error = req->error(); |
74 | + } |
75 | |
76 | - if (*error == QOrganizerManager::NoError) { |
77 | + if (req->error() == QOrganizerManager::NoError) { |
78 | return req->collections(); |
79 | } else { |
80 | return QList<QOrganizerCollection>(); |
81 | @@ -941,8 +943,11 @@ |
82 | startRequest(req); |
83 | waitForRequestFinished(req, 0); |
84 | |
85 | - *error = req->error(); |
86 | - return(*error == QOrganizerManager::NoError); |
87 | + if (error) { |
88 | + *error = req->error(); |
89 | + } |
90 | + |
91 | + return(req->error() == QOrganizerManager::NoError); |
92 | } |
93 | |
94 | void QOrganizerEDSEngine::removeCollectionAsync(QtOrganizer::QOrganizerCollectionRemoveRequest *req) |
95 | @@ -1008,12 +1013,7 @@ |
96 | |
97 | void QOrganizerEDSEngine::releaseRequestData(RequestData *data) |
98 | { |
99 | - if (data->cancelled()) { |
100 | - // if request was cancelled data will be destroyed later |
101 | - data->continueCancel(); |
102 | - } else { |
103 | - delete data; |
104 | - } |
105 | + data->deleteLater(); |
106 | } |
107 | |
108 | void QOrganizerEDSEngine::requestDestroyed(QOrganizerAbstractRequest* req) |
109 | @@ -1021,7 +1021,7 @@ |
110 | RequestData *data = m_runningRequests.take(req); |
111 | if (data) { |
112 | data->cancel(); |
113 | - delete data; |
114 | + data->deleteLater(); |
115 | } |
116 | } |
117 | |
118 | @@ -1073,10 +1073,10 @@ |
119 | |
120 | bool QOrganizerEDSEngine::cancelRequest(QOrganizerAbstractRequest* req) |
121 | { |
122 | - RequestData *data = m_runningRequests.take(req); |
123 | + RequestData *data = m_runningRequests.value(req); |
124 | if (data) { |
125 | data->cancel(); |
126 | - delete data; |
127 | + data->deleteLater(); |
128 | return true; |
129 | } |
130 | return false; |
131 | @@ -1087,10 +1087,11 @@ |
132 | Q_ASSERT(req); |
133 | Q_UNUSED(msecs); |
134 | |
135 | - QPointer<QOrganizerAbstractRequest> r(req); |
136 | - |
137 | - while(r && (r->state() == QOrganizerAbstractRequest::ActiveState)) { |
138 | - QCoreApplication::processEvents(); |
139 | + RequestData *data = m_runningRequests.value(req); |
140 | + if (data) { |
141 | + data->wait(); |
142 | + // We can delete the operation already finished |
143 | + data->deleteLater(); |
144 | } |
145 | |
146 | return true; |
147 | @@ -1186,11 +1187,18 @@ |
148 | void QOrganizerEDSEngine::onSourceAdded(const QString &collectionId) |
149 | { |
150 | d->watch(collectionId); |
151 | + Q_EMIT collectionsAdded(QList<QOrganizerCollectionId>() << QOrganizerCollectionId::fromString(collectionId)); |
152 | } |
153 | |
154 | void QOrganizerEDSEngine::onSourceRemoved(const QString &collectionId) |
155 | { |
156 | d->unWatch(collectionId); |
157 | + Q_EMIT collectionsRemoved(QList<QOrganizerCollectionId>() << QOrganizerCollectionId::fromString(collectionId)); |
158 | +} |
159 | + |
160 | +void QOrganizerEDSEngine::onSourceUpdated(const QString &collectionId) |
161 | +{ |
162 | + Q_EMIT collectionsChanged(QList<QOrganizerCollectionId>() << QOrganizerCollectionId::fromString(collectionId)); |
163 | } |
164 | |
165 | void QOrganizerEDSEngine::onViewChanged(QOrganizerItemChangeSet *change) |
166 | |
167 | === modified file 'organizer/qorganizer-eds-engine.h' |
168 | --- qorganizer/qorganizer-eds-engine.h 2014-04-18 03:16:33 +0000 |
169 | +++ organizer/qorganizer-eds-engine.h 2014-06-10 18:21:21 +0000 |
170 | @@ -128,6 +128,7 @@ |
171 | protected Q_SLOTS: |
172 | void onSourceAdded(const QString &collectionId); |
173 | void onSourceRemoved(const QString &collectionId); |
174 | + void onSourceUpdated(const QString &collectionId); |
175 | void onViewChanged(QtOrganizer::QOrganizerItemChangeSet *change); |
176 | |
177 | protected: |
178 | @@ -247,5 +248,9 @@ |
179 | friend class FetchOcurrenceData; |
180 | }; |
181 | |
182 | +using namespace QtOrganizer; |
183 | +Q_DECLARE_METATYPE(QList<QOrganizerCollectionId>) |
184 | +Q_DECLARE_METATYPE(QList<QOrganizerItemId>) |
185 | + |
186 | #endif |
187 | |
188 | |
189 | === modified file 'organizer/qorganizer-eds-fetchbyidrequestdata.cpp' |
190 | --- qorganizer/qorganizer-eds-fetchbyidrequestdata.cpp 2013-12-03 20:01:45 +0000 |
191 | +++ organizer/qorganizer-eds-fetchbyidrequestdata.cpp 2014-06-10 18:21:21 +0000 |
192 | @@ -65,13 +65,15 @@ |
193 | return (m_current >= ids.count()); |
194 | } |
195 | |
196 | -void FetchByIdRequestData::finish(QOrganizerManager::Error error) |
197 | +void FetchByIdRequestData::finish(QOrganizerManager::Error error, |
198 | + QOrganizerAbstractRequest::State state) |
199 | { |
200 | QOrganizerManagerEngine::updateItemFetchByIdRequest(request<QOrganizerItemFetchByIdRequest>(), |
201 | m_results, |
202 | error, |
203 | m_errors, |
204 | - QOrganizerAbstractRequest::FinishedState); |
205 | + state); |
206 | + RequestData::finish(error, state); |
207 | } |
208 | |
209 | int FetchByIdRequestData::appendResult(const QOrganizerItem &result) |
210 | |
211 | === modified file 'organizer/qorganizer-eds-fetchbyidrequestdata.h' |
212 | --- qorganizer/qorganizer-eds-fetchbyidrequestdata.h 2013-12-03 20:01:45 +0000 |
213 | +++ organizer/qorganizer-eds-fetchbyidrequestdata.h 2014-06-10 18:21:21 +0000 |
214 | @@ -34,7 +34,8 @@ |
215 | QString currentCollectionId() const; |
216 | bool end() const; |
217 | |
218 | - void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); |
219 | + void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
220 | + QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); |
221 | int appendResult(const QtOrganizer::QOrganizerItem &result); |
222 | |
223 | private: |
224 | |
225 | === modified file 'organizer/qorganizer-eds-fetchocurrencedata.cpp' |
226 | --- qorganizer/qorganizer-eds-fetchocurrencedata.cpp 2014-02-25 18:43:06 +0000 |
227 | +++ organizer/qorganizer-eds-fetchocurrencedata.cpp 2014-06-10 18:21:21 +0000 |
228 | @@ -62,7 +62,8 @@ |
229 | return endDate.toTime_t(); |
230 | } |
231 | |
232 | -void FetchOcurrenceData::finish(QOrganizerManager::Error error) |
233 | +void FetchOcurrenceData::finish(QOrganizerManager::Error error, |
234 | + QtOrganizer::QOrganizerAbstractRequest::State state) |
235 | { |
236 | QList<QtOrganizer::QOrganizerItem> results; |
237 | |
238 | @@ -76,7 +77,9 @@ |
239 | QOrganizerManagerEngine::updateItemOccurrenceFetchRequest(request<QOrganizerItemOccurrenceFetchRequest>(), |
240 | results, |
241 | error, |
242 | - QOrganizerAbstractRequest::FinishedState); |
243 | + state); |
244 | + |
245 | + RequestData::finish(error, state); |
246 | } |
247 | |
248 | void FetchOcurrenceData::appendResult(icalcomponent *comp) |
249 | |
250 | === modified file 'organizer/qorganizer-eds-fetchocurrencedata.h' |
251 | --- qorganizer/qorganizer-eds-fetchocurrencedata.h 2014-02-25 18:43:06 +0000 |
252 | +++ organizer/qorganizer-eds-fetchocurrencedata.h 2014-06-10 18:21:21 +0000 |
253 | @@ -32,7 +32,8 @@ |
254 | time_t startDate() const; |
255 | time_t endDate() const; |
256 | |
257 | - void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); |
258 | + void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
259 | + QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); |
260 | void appendResult(icalcomponent *comp); |
261 | |
262 | private: |
263 | |
264 | === modified file 'organizer/qorganizer-eds-fetchrequestdata.cpp' |
265 | --- qorganizer/qorganizer-eds-fetchrequestdata.cpp 2014-04-14 18:43:25 +0000 |
266 | +++ organizer/qorganizer-eds-fetchrequestdata.cpp 2014-06-10 18:21:21 +0000 |
267 | @@ -97,13 +97,15 @@ |
268 | return (endDate.isValid() && startDate.isValid()); |
269 | } |
270 | |
271 | -void FetchRequestData::finish(QOrganizerManager::Error error) |
272 | +void FetchRequestData::finish(QOrganizerManager::Error error, |
273 | + QOrganizerAbstractRequest::State state) |
274 | { |
275 | QOrganizerManagerEngine::updateItemFetchRequest(request<QOrganizerItemFetchRequest>(), |
276 | m_results, |
277 | error, |
278 | - QOrganizerAbstractRequest::FinishedState); |
279 | + state); |
280 | // TODO: emit changeset??? |
281 | + RequestData::finish(error, state); |
282 | } |
283 | |
284 | void FetchRequestData::appendResult(icalcomponent *comp) |
285 | @@ -117,7 +119,7 @@ |
286 | QOrganizerItemFetchRequest *req = request<QOrganizerItemFetchRequest>(); |
287 | Q_FOREACH(const QOrganizerItem &item, results) { |
288 | if (QOrganizerManagerEngine::testFilter(req->filter(), item)) { |
289 | - m_results << item; |
290 | + QOrganizerManagerEngine::addSorted(&m_results, item, req->sorting()); |
291 | count++; |
292 | } |
293 | } |
294 | |
295 | === modified file 'organizer/qorganizer-eds-fetchrequestdata.h' |
296 | --- qorganizer/qorganizer-eds-fetchrequestdata.h 2014-02-25 17:12:32 +0000 |
297 | +++ organizer/qorganizer-eds-fetchrequestdata.h 2014-06-10 18:21:21 +0000 |
298 | @@ -36,7 +36,8 @@ |
299 | time_t endDate() const; |
300 | bool hasDateInterval() const; |
301 | |
302 | - void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); |
303 | + void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
304 | + QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); |
305 | void appendResult(icalcomponent *comp); |
306 | int appendResults(QList<QtOrganizer::QOrganizerItem> results); |
307 | QString dateFilter(); |
308 | |
309 | === modified file 'organizer/qorganizer-eds-removebyidrequestdata.cpp' |
310 | --- qorganizer/qorganizer-eds-removebyidrequestdata.cpp 2014-04-18 03:16:33 +0000 |
311 | +++ organizer/qorganizer-eds-removebyidrequestdata.cpp 2014-06-10 18:21:21 +0000 |
312 | @@ -46,15 +46,18 @@ |
313 | { |
314 | } |
315 | |
316 | -void RemoveByIdRequestData::finish(QtOrganizer::QOrganizerManager::Error error) |
317 | +void RemoveByIdRequestData::finish(QtOrganizer::QOrganizerManager::Error error, |
318 | + QtOrganizer::QOrganizerAbstractRequest::State state) |
319 | { |
320 | e_client_refresh_sync(m_client, 0, 0); |
321 | QOrganizerManagerEngine::updateItemRemoveByIdRequest(request<QOrganizerItemRemoveByIdRequest>(), |
322 | error, |
323 | QMap<int, QOrganizerManager::Error>(), |
324 | - QOrganizerAbstractRequest::FinishedState); |
325 | + state); |
326 | //The signal will be fired by the view watcher. Check ViewWatcher::onObjectsRemoved |
327 | //emitChangeset(&m_changeSet); |
328 | + |
329 | + RequestData::finish(error, state); |
330 | } |
331 | |
332 | GSList *RemoveByIdRequestData::compIds() const |
333 | |
334 | === modified file 'organizer/qorganizer-eds-removebyidrequestdata.h' |
335 | --- qorganizer/qorganizer-eds-removebyidrequestdata.h 2014-01-05 18:18:32 +0000 |
336 | +++ organizer/qorganizer-eds-removebyidrequestdata.h 2014-06-10 18:21:21 +0000 |
337 | @@ -31,7 +31,8 @@ |
338 | |
339 | QString collectionId() const; |
340 | |
341 | - void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); |
342 | + void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
343 | + QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); |
344 | |
345 | GSList *compIds() const; |
346 | |
347 | |
348 | === modified file 'organizer/qorganizer-eds-removecollectionrequestdata.cpp' |
349 | --- qorganizer/qorganizer-eds-removecollectionrequestdata.cpp 2013-12-03 01:23:34 +0000 |
350 | +++ organizer/qorganizer-eds-removecollectionrequestdata.cpp 2014-06-10 18:21:21 +0000 |
351 | @@ -39,21 +39,16 @@ |
352 | { |
353 | } |
354 | |
355 | -void RemoveCollectionRequestData::finish(QtOrganizer::QOrganizerManager::Error error) |
356 | +void RemoveCollectionRequestData::finish(QOrganizerManager::Error error, |
357 | + QOrganizerAbstractRequest::State state) |
358 | { |
359 | QOrganizerManagerEngine::updateCollectionRemoveRequest(request<QOrganizerCollectionRemoveRequest>(), |
360 | error, |
361 | m_errorMap, |
362 | - QOrganizerAbstractRequest::FinishedState); |
363 | - |
364 | - QList<QOrganizerCollectionId> removedIds = m_pendingCollections; |
365 | - Q_FOREACH(int index, m_errorMap.keys()) { |
366 | - removedIds.removeAt(index); |
367 | - } |
368 | - |
369 | - QOrganizerCollectionChangeSet cs; |
370 | - cs.insertRemovedCollections(removedIds); |
371 | - emitChangeset(&cs); |
372 | + state); |
373 | + |
374 | + // changes will be fired by source-registry |
375 | + RequestData::finish(error, state); |
376 | } |
377 | |
378 | void RemoveCollectionRequestData::commit(QtOrganizer::QOrganizerManager::Error error) |
379 | |
380 | === modified file 'organizer/qorganizer-eds-removecollectionrequestdata.h' |
381 | --- qorganizer/qorganizer-eds-removecollectionrequestdata.h 2013-12-03 01:23:34 +0000 |
382 | +++ organizer/qorganizer-eds-removecollectionrequestdata.h 2014-06-10 18:21:21 +0000 |
383 | @@ -29,7 +29,8 @@ |
384 | RemoveCollectionRequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req); |
385 | ~RemoveCollectionRequestData(); |
386 | |
387 | - void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); |
388 | + void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
389 | + QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); |
390 | |
391 | ESource* begin(); |
392 | void commit(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); |
393 | |
394 | === modified file 'organizer/qorganizer-eds-removerequestdata.cpp' |
395 | --- qorganizer/qorganizer-eds-removerequestdata.cpp 2014-04-18 03:16:33 +0000 |
396 | +++ organizer/qorganizer-eds-removerequestdata.cpp 2014-06-10 18:21:21 +0000 |
397 | @@ -65,16 +65,18 @@ |
398 | return ids; |
399 | } |
400 | |
401 | -void RemoveRequestData::finish(QtOrganizer::QOrganizerManager::Error error) |
402 | +void RemoveRequestData::finish(QOrganizerManager::Error error, |
403 | + QOrganizerAbstractRequest::State state) |
404 | { |
405 | e_client_refresh_sync(m_client, 0, 0); |
406 | QOrganizerManagerEngine::updateItemRemoveRequest(request<QOrganizerItemRemoveRequest>(), |
407 | error, |
408 | QMap<int, QOrganizerManager::Error>(), |
409 | - QOrganizerAbstractRequest::FinishedState); |
410 | + state); |
411 | |
412 | //The signal will be fired by the view watcher. Check ViewWatcher::onObjectsRemoved |
413 | //emitChangeset(&m_changeSet); |
414 | + RequestData::finish(error, state); |
415 | } |
416 | |
417 | GSList *RemoveRequestData::compIds() const |
418 | |
419 | === modified file 'organizer/qorganizer-eds-removerequestdata.h' |
420 | --- qorganizer/qorganizer-eds-removerequestdata.h 2013-12-31 15:42:33 +0000 |
421 | +++ organizer/qorganizer-eds-removerequestdata.h 2014-06-10 18:21:21 +0000 |
422 | @@ -32,7 +32,8 @@ |
423 | QList<QtOrganizer::QOrganizerCollectionId> pendingCollections() const; |
424 | QtOrganizer::QOrganizerCollectionId collectionId() const; |
425 | |
426 | - void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); |
427 | + void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
428 | + QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); |
429 | |
430 | GSList *compIds() const; |
431 | |
432 | |
433 | === modified file 'organizer/qorganizer-eds-requestdata.cpp' |
434 | --- qorganizer/qorganizer-eds-requestdata.cpp 2014-04-18 20:30:59 +0000 |
435 | +++ organizer/qorganizer-eds-requestdata.cpp 2014-06-10 18:21:21 +0000 |
436 | @@ -18,6 +18,9 @@ |
437 | |
438 | #include "qorganizer-eds-requestdata.h" |
439 | |
440 | +#include <QtCore/QDebug> |
441 | +#include <QtCore/QCoreApplication> |
442 | + |
443 | #include <QtOrganizer/QOrganizerAbstractRequest> |
444 | #include <QtOrganizer/QOrganizerManagerEngine> |
445 | |
446 | @@ -25,9 +28,9 @@ |
447 | |
448 | RequestData::RequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req) |
449 | : m_parent(engine), |
450 | - m_req(req), |
451 | m_client(0), |
452 | - m_canceling(false) |
453 | + m_finished(false), |
454 | + m_req(req) |
455 | { |
456 | QOrganizerManagerEngine::updateRequestState(req, QOrganizerAbstractRequest::ActiveState); |
457 | m_cancellable = g_cancellable_new(); |
458 | @@ -36,7 +39,6 @@ |
459 | |
460 | RequestData::~RequestData() |
461 | { |
462 | - Q_ASSERT(m_req->state() != QOrganizerAbstractRequest::ActiveState); |
463 | if (m_cancellable) { |
464 | g_clear_object(&m_cancellable); |
465 | } |
466 | @@ -44,14 +46,10 @@ |
467 | if (m_client) { |
468 | g_clear_object(&m_client); |
469 | } |
470 | - |
471 | - m_parent->m_runningRequests.remove(m_req); |
472 | } |
473 | |
474 | GCancellable* RequestData::cancellable() const |
475 | { |
476 | - g_cancellable_reset(m_cancellable); |
477 | - //g_object_ref(m_cancellable); |
478 | return m_cancellable; |
479 | } |
480 | |
481 | @@ -73,26 +71,74 @@ |
482 | |
483 | void RequestData::cancel() |
484 | { |
485 | - m_canceling = true; |
486 | + QMutexLocker locker(&m_canceling); |
487 | if (m_cancellable) { |
488 | + gulong id = g_cancellable_connect(m_cancellable, |
489 | + (GCallback) RequestData::onCancelled, |
490 | + this, NULL); |
491 | + // wait the cancel |
492 | + wait(); |
493 | + |
494 | + // cancel |
495 | g_cancellable_cancel(m_cancellable); |
496 | - m_parent->waitForRequestFinished(m_req, 0); |
497 | + |
498 | + // done |
499 | + g_cancellable_disconnect(m_cancellable, id); |
500 | m_cancellable = 0; |
501 | } |
502 | - m_canceling = false; |
503 | -} |
504 | - |
505 | -bool RequestData::cancelled() const |
506 | -{ |
507 | - if (!m_req.isNull()) { |
508 | - return m_canceling; |
509 | - } |
510 | - return false; |
511 | -} |
512 | - |
513 | -void RequestData::continueCancel() |
514 | -{ |
515 | - QOrganizerManagerEngine::updateRequestState(m_req, QOrganizerAbstractRequest::CanceledState); |
516 | +} |
517 | + |
518 | +void RequestData::wait() |
519 | +{ |
520 | + QMutexLocker locker(&m_waiting); |
521 | + while(!m_finished) { |
522 | + QCoreApplication::processEvents(QEventLoop::AllEvents, 100); |
523 | + } |
524 | +} |
525 | + |
526 | +bool RequestData::isWaiting() |
527 | +{ |
528 | + bool result = true; |
529 | + if (m_waiting.tryLock()) { |
530 | + result = false; |
531 | + m_waiting.unlock(); |
532 | + } |
533 | + return result; |
534 | +} |
535 | + |
536 | +bool RequestData::isCanceling() |
537 | +{ |
538 | + bool result = true; |
539 | + if (m_canceling.tryLock()) { |
540 | + result = false; |
541 | + m_canceling.unlock(); |
542 | + } |
543 | + return result; |
544 | +} |
545 | + |
546 | +void RequestData::deleteLater() |
547 | +{ |
548 | + if (isWaiting() || isCanceling()) { |
549 | + // still running |
550 | + return; |
551 | + } |
552 | + m_parent->m_runningRequests.remove(m_req); |
553 | + delete this; |
554 | +} |
555 | + |
556 | +void RequestData::finish(QOrganizerManager::Error error, QtOrganizer::QOrganizerAbstractRequest::State state) |
557 | +{ |
558 | + Q_UNUSED(error); |
559 | + Q_UNUSED(state); |
560 | + m_finished = true; |
561 | +} |
562 | + |
563 | +void RequestData::onCancelled(GCancellable *cancellable, RequestData *self) |
564 | +{ |
565 | + Q_UNUSED(cancellable); |
566 | + if (self->m_req) { |
567 | + self->finish(QOrganizerManager::UnspecifiedError, QOrganizerAbstractRequest::CanceledState); |
568 | + } |
569 | } |
570 | |
571 | void RequestData::setClient(EClient *client) |
572 | |
573 | === modified file 'organizer/qorganizer-eds-requestdata.h' |
574 | --- qorganizer/qorganizer-eds-requestdata.h 2014-04-18 19:55:27 +0000 |
575 | +++ organizer/qorganizer-eds-requestdata.h 2014-06-10 18:21:21 +0000 |
576 | @@ -24,6 +24,7 @@ |
577 | |
578 | #include <QtCore/QPointer> |
579 | #include <QtCore/QMutex> |
580 | +#include <QtCore/QEventLoop> |
581 | |
582 | #include <QtOrganizer/QOrganizerAbstractRequest> |
583 | #include <QtOrganizer/QOrganizerManager> |
584 | @@ -33,16 +34,17 @@ |
585 | { |
586 | public: |
587 | RequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req); |
588 | - virtual ~RequestData(); |
589 | GCancellable* cancellable() const; |
590 | bool isLive() const; |
591 | void setClient(EClient *client); |
592 | ECalClient *client() const; |
593 | - virtual void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError) = 0; |
594 | QOrganizerEDSEngine *parent() const; |
595 | virtual void cancel(); |
596 | - bool cancelled() const; |
597 | - void continueCancel(); |
598 | + void deleteLater(); |
599 | + virtual void finish(QtOrganizer::QOrganizerManager::Error error, QtOrganizer::QOrganizerAbstractRequest::State state) = 0; |
600 | + void wait(); |
601 | + bool isWaiting(); |
602 | + bool isCanceling(); |
603 | |
604 | template<class T> |
605 | T* request() const { |
606 | @@ -56,13 +58,19 @@ |
607 | |
608 | protected: |
609 | QOrganizerEDSEngine *m_parent; |
610 | + EClient *m_client; |
611 | QtOrganizer::QOrganizerItemChangeSet m_changeSet; |
612 | - EClient *m_client; |
613 | - bool m_canceling; |
614 | + QMutex m_waiting; |
615 | + QMutex m_canceling; |
616 | + bool m_finished; |
617 | + |
618 | + virtual ~RequestData(); |
619 | |
620 | private: |
621 | QPointer<QtOrganizer::QOrganizerAbstractRequest> m_req; |
622 | GCancellable *m_cancellable; |
623 | + |
624 | + static void onCancelled(GCancellable *cancellable, RequestData *self); |
625 | }; |
626 | |
627 | #endif |
628 | |
629 | === modified file 'organizer/qorganizer-eds-savecollectionrequestdata.cpp' |
630 | --- qorganizer/qorganizer-eds-savecollectionrequestdata.cpp 2014-03-21 18:04:50 +0000 |
631 | +++ organizer/qorganizer-eds-savecollectionrequestdata.cpp 2014-06-10 18:21:21 +0000 |
632 | @@ -50,16 +50,20 @@ |
633 | } |
634 | } |
635 | |
636 | -void SaveCollectionRequestData::finish(QtOrganizer::QOrganizerManager::Error error) |
637 | +void SaveCollectionRequestData::finish(QtOrganizer::QOrganizerManager::Error error, |
638 | + QtOrganizer::QOrganizerAbstractRequest::State state) |
639 | { |
640 | QOrganizerManagerEngine::updateCollectionSaveRequest(request<QOrganizerCollectionSaveRequest>(), |
641 | m_results.values(), |
642 | error, |
643 | m_errorMap, |
644 | - QOrganizerAbstractRequest::FinishedState); |
645 | - |
646 | - emitChangeset(&m_changeSet); |
647 | + state); |
648 | + |
649 | + |
650 | + // changes will be fired by source-registry |
651 | m_changeSet.clearAll(); |
652 | + |
653 | + RequestData::finish(error, state); |
654 | } |
655 | |
656 | void SaveCollectionRequestData::commitSourceCreated() |
657 | @@ -181,11 +185,11 @@ |
658 | |
659 | // update name |
660 | QString name = collection.metaData(QOrganizerCollection::KeyName).toString(); |
661 | - e_source_set_display_name(source, name.toUtf8().data()); |
662 | + e_source_set_display_name(source, name.toUtf8().constData()); |
663 | |
664 | // update color |
665 | QString color = collection.metaData(QOrganizerCollection::KeyColor).toString(); |
666 | - e_source_selectable_set_color(E_SOURCE_SELECTABLE(extCalendar), color.toUtf8().data()); |
667 | + e_source_selectable_set_color(E_SOURCE_SELECTABLE(extCalendar), color.toUtf8().constData()); |
668 | |
669 | // update selected |
670 | bool selected = collection.extendedMetaData(COLLECTION_SELECTED_METADATA).toBool(); |
671 | |
672 | === modified file 'organizer/qorganizer-eds-savecollectionrequestdata.h' |
673 | --- qorganizer/qorganizer-eds-savecollectionrequestdata.h 2014-03-21 18:04:50 +0000 |
674 | +++ organizer/qorganizer-eds-savecollectionrequestdata.h 2014-06-10 18:21:21 +0000 |
675 | @@ -28,7 +28,8 @@ |
676 | QtOrganizer::QOrganizerAbstractRequest *req); |
677 | ~SaveCollectionRequestData(); |
678 | |
679 | - void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); |
680 | + void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
681 | + QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); |
682 | bool isNew(int index) const; |
683 | bool prepareToCreate(); |
684 | bool prepareToUpdate(); |
685 | @@ -46,7 +47,7 @@ |
686 | |
687 | QMap<int, QtOrganizer::QOrganizerManager::Error> m_errorMap; |
688 | QMap<int, QtOrganizer::QOrganizerCollection> m_results; |
689 | - QMap<int, ESource*> m_sources; |
690 | + QMap<int, ESource*> m_sources; |
691 | QMap<int, ESource*> m_sourcesToCreate; |
692 | QMap<int, ESource*> m_sourcesToUpdate; |
693 | QtOrganizer::QOrganizerCollectionChangeSet m_changeSet; |
694 | |
695 | === modified file 'organizer/qorganizer-eds-saverequestdata.cpp' |
696 | --- qorganizer/qorganizer-eds-saverequestdata.cpp 2014-04-18 03:16:33 +0000 |
697 | +++ organizer/qorganizer-eds-saverequestdata.cpp 2014-06-10 18:21:21 +0000 |
698 | @@ -46,18 +46,17 @@ |
699 | { |
700 | } |
701 | |
702 | -void SaveRequestData::finish(QtOrganizer::QOrganizerManager::Error error) |
703 | +void SaveRequestData::finish(QtOrganizer::QOrganizerManager::Error error, |
704 | + QtOrganizer::QOrganizerAbstractRequest::State state) |
705 | { |
706 | e_client_refresh_sync(m_client, 0, 0); |
707 | QOrganizerManagerEngine::updateItemSaveRequest(request<QOrganizerItemSaveRequest>(), |
708 | m_result, |
709 | error, |
710 | m_erros, |
711 | - QOrganizerAbstractRequest::FinishedState); |
712 | - Q_FOREACH(const QOrganizerItem &item, m_result) { |
713 | - m_changeSet.insertAddedItem(item.id()); |
714 | - } |
715 | - emitChangeset(&m_changeSet); |
716 | + state); |
717 | + // Change will be fired by the viewwatcher |
718 | + RequestData::finish(error, state); |
719 | } |
720 | |
721 | void SaveRequestData::appendResults(QList<QOrganizerItem> result) |
722 | |
723 | === modified file 'organizer/qorganizer-eds-saverequestdata.h' |
724 | --- qorganizer/qorganizer-eds-saverequestdata.h 2014-04-14 01:44:59 +0000 |
725 | +++ organizer/qorganizer-eds-saverequestdata.h 2014-06-10 18:21:21 +0000 |
726 | @@ -29,7 +29,8 @@ |
727 | QtOrganizer::QOrganizerAbstractRequest *req); |
728 | ~SaveRequestData(); |
729 | |
730 | - void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError); |
731 | + void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError, |
732 | + QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState); |
733 | |
734 | |
735 | QString nextCollection(); |
736 | |
737 | === modified file 'organizer/qorganizer-eds-source-registry.cpp' |
738 | --- qorganizer/qorganizer-eds-source-registry.cpp 2014-03-21 18:54:45 +0000 |
739 | +++ organizer/qorganizer-eds-source-registry.cpp 2014-06-10 18:21:21 +0000 |
740 | @@ -300,10 +300,6 @@ |
741 | void SourceRegistry::updateCollection(QOrganizerCollection *collection, |
742 | ESource *source) |
743 | { |
744 | - //TODO get metadata (color, etc..) |
745 | - collection->setMetaData(QOrganizerCollection::KeyName, |
746 | - QString::fromUtf8(e_source_get_display_name(source))); |
747 | - |
748 | // name |
749 | collection->setMetaData(QOrganizerCollection::KeyName, |
750 | QString::fromUtf8(e_source_get_display_name(source))); |
751 | @@ -328,4 +324,5 @@ |
752 | // selected |
753 | bool selected = (e_source_selectable_get_selected(E_SOURCE_SELECTABLE(extCalendar)) == TRUE); |
754 | collection->setExtendedMetaData(COLLECTION_SELECTED_METADATA, selected); |
755 | + |
756 | } |
757 | |
758 | === modified file 'tests/unittest/CMakeLists.txt' |
759 | --- tests/unittest/CMakeLists.txt 2014-02-25 18:46:32 +0000 |
760 | +++ tests/unittest/CMakeLists.txt 2014-06-10 18:21:21 +0000 |
761 | @@ -21,16 +21,16 @@ |
762 | ) |
763 | |
764 | add_test(${TESTNAME} |
765 | - ${DBUS_RUNNER} --keep-env |
766 | - --task ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME} --task-name ${TESTNAME} --wait-until-complete --wait-for=org.gnome.evolution.dataserver.Calendar4 |
767 | - --task ${EVOLUTION_CALENDAR_FACTORY} --task-name "evolution" -r --wait-for=${EVOLUTION_SOURCE_SERVICE_NAME} |
768 | - --task ${EVOLUTION_SOURCE_REGISTRY} --task-name "source-registry" --wait-for=org.gtk.vfs.Daemon -r |
769 | - --task ${GVFSD} --task-name "gvfsd" -r) |
770 | + ${CMAKE_CURRENT_SOURCE_DIR}/run-eds-test.sh ${DBUS_RUNNER} ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME} ${TESTNAME} |
771 | + ${EVOLUTION_CALENDAR_FACTORY} ${EVOLUTION_SOURCE_SERVICE_NAME} |
772 | + ${EVOLUTION_SOURCE_REGISTRY} |
773 | + ${GVFSD}) |
774 | update_test_properties(${TESTNAME}) |
775 | endmacro(declare_test testname) |
776 | |
777 | macro(update_test_properties TESTNAME) |
778 | set(TEST_TMP_DIR "${TMP_DIR}/${TESTNAME}") |
779 | + set(ENV_VARS_LIST "") |
780 | list(APPEND ENV_VARS_LIST "QT_QPA_PLATFORM=minimal") |
781 | list(APPEND ENV_VARS_LIST "HOME=${TEST_TMP_DIR}") |
782 | list(APPEND ENV_VARS_LIST "XDG_RUNTIME_DIR=${TEST_TMP_DIR}") |
783 | @@ -74,3 +74,4 @@ |
784 | declare_test(event-test) |
785 | declare_test(fetchitem-test) |
786 | declare_test(recurrence-test) |
787 | +declare_test(cancel-operation-test) |
788 | |
789 | === added file 'tests/unittest/cancel-operation-test.cpp' |
790 | --- tests/unittest/cancel-operation-test.cpp 1970-01-01 00:00:00 +0000 |
791 | +++ tests/unittest/cancel-operation-test.cpp 2014-06-10 18:21:21 +0000 |
792 | @@ -0,0 +1,99 @@ |
793 | +/* |
794 | + * Copyright 2013 Canonical Ltd. |
795 | + * |
796 | + * This file is part of qtorganizer5-eds. |
797 | + * |
798 | + * contact-service-app is free software; you can redistribute it and/or modify |
799 | + * it under the terms of the GNU General Public License as published by |
800 | + * the Free Software Foundation; version 3. |
801 | + * |
802 | + * contact-service-app is distributed in the hope that it will be useful, |
803 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
804 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
805 | + * GNU General Public License for more details. |
806 | + * |
807 | + * You should have received a copy of the GNU General Public License |
808 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
809 | + */ |
810 | + |
811 | + |
812 | +#include <QObject> |
813 | +#include <QtTest> |
814 | +#include <QDebug> |
815 | + |
816 | +#include <QtOrganizer> |
817 | + |
818 | +#include "qorganizer-eds-engine.h" |
819 | +#include "eds-base-test.h" |
820 | + |
821 | + |
822 | +using namespace QtOrganizer; |
823 | + |
824 | +class CancelOperationTest : public QObject, public EDSBaseTest |
825 | +{ |
826 | + Q_OBJECT |
827 | +private: |
828 | + static const QString defaultCollectionName; |
829 | + |
830 | + QOrganizerEDSEngine *m_engine; |
831 | + QOrganizerCollection m_collection; |
832 | + |
833 | +private Q_SLOTS: |
834 | + void init() |
835 | + { |
836 | + EDSBaseTest::init(); |
837 | + m_engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); |
838 | + |
839 | + |
840 | + QtOrganizer::QOrganizerManager::Error error; |
841 | + m_collection = QOrganizerCollection(); |
842 | + m_collection.setMetaData(QOrganizerCollection::KeyName, defaultCollectionName); |
843 | + |
844 | + bool saveResult = m_engine->saveCollection(&m_collection, &error); |
845 | + QVERIFY(saveResult); |
846 | + QCOMPARE(error, QtOrganizer::QOrganizerManager::NoError); |
847 | + |
848 | + } |
849 | + |
850 | + void cleanup() |
851 | + { |
852 | + delete m_engine; |
853 | + m_engine = 0; |
854 | + EDSBaseTest::cleanup(); |
855 | + } |
856 | + |
857 | + void cancelOperationBeforeStart() |
858 | + { |
859 | + // initial collections |
860 | + QList<QOrganizerCollection> collections = m_engine->collections(0); |
861 | + int initialCollectionsCount = collections.count(); |
862 | + |
863 | + QOrganizerEvent event; |
864 | + event.setStartDateTime(QDateTime::currentDateTime()); |
865 | + event.setDisplayLabel("displayLabelValue"); |
866 | + event.setDescription("descriptionValue"); |
867 | + event.setCollectionId(m_collection.id()); |
868 | + |
869 | + // Try cancel a create item operation |
870 | + QSignalSpy createdItem(m_engine, SIGNAL(itemsAdded(QList<QOrganizerItemId>))); |
871 | + QOrganizerItemSaveRequest req; |
872 | + req.setItem(event); |
873 | + m_engine->startRequest(&req); |
874 | + QCOMPARE(req.state(), QOrganizerAbstractRequest::ActiveState); |
875 | + m_engine->cancelRequest(&req); |
876 | + QCOMPARE(req.state(), QOrganizerAbstractRequest::CanceledState); |
877 | + QTRY_COMPARE(createdItem.count(), 0); |
878 | + |
879 | + // check if collection was not create |
880 | + collections = m_engine->collections(0); |
881 | + QCOMPARE(collections.count(), initialCollectionsCount); |
882 | + } |
883 | + |
884 | +}; |
885 | + |
886 | +const QString CancelOperationTest::defaultCollectionName = QStringLiteral("CancelOperationTest COLLECTION"); |
887 | + |
888 | + |
889 | +QTEST_MAIN(CancelOperationTest) |
890 | + |
891 | +#include "cancel-operation-test.moc" |
892 | |
893 | === modified file 'tests/unittest/collections-test.cpp' |
894 | --- tests/unittest/collections-test.cpp 2014-03-21 18:04:50 +0000 |
895 | +++ tests/unittest/collections-test.cpp 2014-06-10 18:21:21 +0000 |
896 | @@ -44,7 +44,7 @@ |
897 | private Q_SLOTS: |
898 | void init() |
899 | { |
900 | - EDSBaseTest::init(0); |
901 | + EDSBaseTest::init(); |
902 | m_engineWrite = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); |
903 | m_engineRead = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); |
904 | } |
905 | @@ -52,9 +52,10 @@ |
906 | void cleanup() |
907 | { |
908 | delete m_engineRead; |
909 | + delete m_engineWrite; |
910 | m_engineRead = 0; |
911 | - EDSBaseTest::cleanup(m_engineWrite); |
912 | m_engineWrite = 0; |
913 | + EDSBaseTest::cleanup(); |
914 | } |
915 | |
916 | void testCreateCollection() |
917 | @@ -91,22 +92,35 @@ |
918 | QOrganizerCollection collection; |
919 | QtOrganizer::QOrganizerManager::Error error; |
920 | collection.setMetaData(QOrganizerCollection::KeyName, defaultCollectionName); |
921 | - collection.setMetaData(QOrganizerCollection::KeyColor, "red"); |
922 | + collection.setMetaData(QOrganizerCollection::KeyColor, QStringLiteral("red")); |
923 | + collection.setExtendedMetaData(QStringLiteral("collection-selected"), false); |
924 | |
925 | QVERIFY(m_engineWrite->saveCollection(&collection, &error)); |
926 | QCOMPARE(error, QOrganizerManager::NoError); |
927 | QVERIFY(!collection.id().isNull()); |
928 | |
929 | + // Check if the collection was stored correct |
930 | + QOrganizerCollection newCollection = m_engineRead->collection(collection.id(), &error); |
931 | + QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyName).toString(), defaultCollectionName); |
932 | + QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyColor).toString(), QStringLiteral("red")); |
933 | + QCOMPARE(newCollection.extendedMetaData(QStringLiteral("collection-selected")).toBool(), false); |
934 | + |
935 | + |
936 | // update the collection |
937 | QSignalSpy updateCollection(m_engineWrite, SIGNAL(collectionsChanged(QList<QOrganizerCollectionId>))); |
938 | collection.setMetaData(QOrganizerCollection::KeyColor, "blue"); |
939 | collection.setExtendedMetaData("collection-selected", true); |
940 | QVERIFY(m_engineWrite->saveCollection(&collection, &error)); |
941 | QCOMPARE(error, QOrganizerManager::NoError); |
942 | - QTRY_COMPARE(updateCollection.count(), 1); |
943 | - |
944 | - // Check if the collection was stored correct |
945 | - QOrganizerCollection newCollection = m_engineRead->collection(collection.id(), &error); |
946 | + |
947 | + QTRY_VERIFY(updateCollection.count() > 0); |
948 | + QList<QVariant> args = updateCollection.takeFirst(); |
949 | + QCOMPARE(args.count(), 1); |
950 | + QCOMPARE(args[0].value<QList<QOrganizerCollectionId> >().at(0).toString(), collection.id().toString()); |
951 | + |
952 | + |
953 | + // Check if the collection was updated correct |
954 | + newCollection = m_engineRead->collection(collection.id(), &error); |
955 | QCOMPARE(error, QOrganizerManager::NoError); |
956 | QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyName).toString(), defaultCollectionName); |
957 | QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyColor).toString(), QStringLiteral("blue")); |
958 | |
959 | === modified file 'tests/unittest/eds-base-test.cpp' |
960 | --- tests/unittest/eds-base-test.cpp 2013-12-11 13:16:50 +0000 |
961 | +++ tests/unittest/eds-base-test.cpp 2014-06-10 18:21:21 +0000 |
962 | @@ -29,71 +29,45 @@ |
963 | |
964 | EDSBaseTest::EDSBaseTest() |
965 | { |
966 | - GError *error = 0; |
967 | - m_sourceRegistry = e_source_registry_new_sync(0, &error); |
968 | - if (error) { |
969 | - qWarning() << "Fail to create sourge registry:" << error->message; |
970 | - g_error_free(error); |
971 | - Q_ASSERT(false); |
972 | - } |
973 | + qRegisterMetaType<QList<QOrganizerCollectionId> >(); |
974 | + qRegisterMetaType<QList<QOrganizerItemId> >(); |
975 | + QCoreApplication::addLibraryPath(QORGANIZER_DEV_PATH); |
976 | } |
977 | |
978 | EDSBaseTest::~EDSBaseTest() |
979 | { |
980 | - g_object_unref(m_sourceRegistry); |
981 | -} |
982 | - |
983 | -void EDSBaseTest::init(QOrganizerEDSEngine *engine) |
984 | -{ |
985 | - cleanup(engine); |
986 | - // wait to flush DBUS calls |
987 | - QTest::qWait(1000); |
988 | -} |
989 | - |
990 | -void EDSBaseTest::cleanup(QOrganizerEDSEngine *engine) |
991 | -{ |
992 | - // remove all new items, remove item by item because they can have diff collections |
993 | - Q_FOREACH(const QOrganizerItemId &id, m_newItems) { |
994 | - QtOrganizer::QOrganizerManager::Error error; |
995 | - QMap<int, QtOrganizer::QOrganizerManager::Error> errorMap; |
996 | - |
997 | - engine->removeItems(QList<QOrganizerItemId>() << id, |
998 | - &errorMap, |
999 | - &error); |
1000 | - } |
1001 | - m_newItems.clear(); |
1002 | +} |
1003 | + |
1004 | +void EDSBaseTest::init() |
1005 | +{ |
1006 | +} |
1007 | + |
1008 | + |
1009 | +void EDSBaseTest::cleanup() |
1010 | +{ |
1011 | + static QStringList defaultSources; |
1012 | + |
1013 | + if (defaultSources.isEmpty()) { |
1014 | + defaultSources << "qtorganizer:eds::birthdays" |
1015 | + << "qtorganizer:eds::system-calendar" |
1016 | + << "qtorganizer:eds::system-memo-list" |
1017 | + << "qtorganizer:eds::system-task-list"; |
1018 | + } |
1019 | + QOrganizerEDSEngine *engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); |
1020 | + Q_FOREACH(const QOrganizerCollection &col, engine->collections(0)) { |
1021 | + if (defaultSources.contains(col.id().toString())) { |
1022 | + continue; |
1023 | + } |
1024 | + QSignalSpy removeCollection(engine, SIGNAL(collectionsRemoved(QList<QOrganizerCollectionId>))); |
1025 | + QVERIFY(engine->removeCollection(col.id(), 0)); |
1026 | + QTRY_COMPARE(removeCollection.count(), 1); |
1027 | + |
1028 | + QList<QVariant> args = removeCollection.takeFirst(); |
1029 | + QCOMPARE(args.count(), 1); |
1030 | + QCOMPARE(args[0].value<QList<QOrganizerCollectionId> >().at(0).toString(), col.id().toString()); |
1031 | + } |
1032 | + |
1033 | delete engine; |
1034 | - |
1035 | - // remove all collections |
1036 | - GError *error; |
1037 | - gboolean status; |
1038 | - GList *sources = e_source_registry_list_sources(m_sourceRegistry, 0); |
1039 | - |
1040 | - for(GList *i = sources; i != 0; i = i->next) { |
1041 | - ESource *source = E_SOURCE(i->data); |
1042 | - error = 0; |
1043 | - status = true; |
1044 | - if (e_source_get_remote_deletable(source)) { |
1045 | - status = e_source_remote_delete_sync(source, 0, &error); |
1046 | - QTest::qWait(100); |
1047 | - } else if (e_source_get_removable(source)) { |
1048 | - status = e_source_remove_sync(source, 0, &error); |
1049 | - QTest::qWait(100); |
1050 | - // check if source was removed |
1051 | - const gchar *uid = e_source_get_uid(source); |
1052 | - Q_ASSERT(e_source_registry_ref_source(m_sourceRegistry, uid) == 0); |
1053 | - } |
1054 | - if (error) { |
1055 | - qWarning() << "Fail to remove source:" << error->message; |
1056 | - g_error_free(error); |
1057 | - Q_ASSERT(false); |
1058 | - } |
1059 | - |
1060 | - Q_ASSERT(status); |
1061 | - } |
1062 | - |
1063 | - g_list_free_full(sources, g_object_unref); |
1064 | - e_source_registry_debug_dump(m_sourceRegistry, 0); |
1065 | } |
1066 | |
1067 | void EDSBaseTest::appendToRemove(const QtOrganizer::QOrganizerItemId &id) |
1068 | |
1069 | === modified file 'tests/unittest/eds-base-test.h' |
1070 | --- tests/unittest/eds-base-test.h 2013-12-05 23:30:09 +0000 |
1071 | +++ tests/unittest/eds-base-test.h 2014-06-10 18:21:21 +0000 |
1072 | @@ -32,13 +32,12 @@ |
1073 | ~EDSBaseTest(); |
1074 | |
1075 | protected: |
1076 | - void init(QOrganizerEDSEngine *engine); |
1077 | - void cleanup(QOrganizerEDSEngine *engine); |
1078 | + void init(); |
1079 | + void cleanup(); |
1080 | |
1081 | void appendToRemove(const QtOrganizer::QOrganizerItemId &id); |
1082 | |
1083 | private: |
1084 | - ESourceRegistry *m_sourceRegistry; |
1085 | QList<QtOrganizer::QOrganizerItemId> m_newItems; |
1086 | }; |
1087 | |
1088 | |
1089 | === modified file 'tests/unittest/event-test.cpp' |
1090 | --- tests/unittest/event-test.cpp 2014-04-17 21:05:38 +0000 |
1091 | +++ tests/unittest/event-test.cpp 2014-06-10 18:21:21 +0000 |
1092 | @@ -48,7 +48,7 @@ |
1093 | private Q_SLOTS: |
1094 | void init() |
1095 | { |
1096 | - EDSBaseTest::init(0); |
1097 | + EDSBaseTest::init(); |
1098 | |
1099 | signalIndex = 0; |
1100 | m_itemRemovedTime = QDateTime(); |
1101 | @@ -67,7 +67,7 @@ |
1102 | |
1103 | void cleanup() |
1104 | { |
1105 | - EDSBaseTest::cleanup(m_engine); |
1106 | + EDSBaseTest::cleanup(); |
1107 | } |
1108 | |
1109 | //helper |
1110 | |
1111 | === modified file 'tests/unittest/fetchitem-test.cpp' |
1112 | --- tests/unittest/fetchitem-test.cpp 2014-01-29 18:10:44 +0000 |
1113 | +++ tests/unittest/fetchitem-test.cpp 2014-06-10 18:21:21 +0000 |
1114 | @@ -42,7 +42,7 @@ |
1115 | private Q_SLOTS: |
1116 | void initTestCase() |
1117 | { |
1118 | - EDSBaseTest::init(0); |
1119 | + EDSBaseTest::init(); |
1120 | m_engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); |
1121 | |
1122 | // create test collection |
1123 | @@ -87,9 +87,10 @@ |
1124 | { |
1125 | m_collection = QOrganizerCollection(); |
1126 | m_events.clear(); |
1127 | - |
1128 | - EDSBaseTest::cleanup(m_engine); |
1129 | + delete m_engine; |
1130 | m_engine = 0; |
1131 | + |
1132 | + EDSBaseTest::cleanup(); |
1133 | } |
1134 | |
1135 | void testFetchById() |
1136 | |
1137 | === modified file 'tests/unittest/recurrence-test.cpp' |
1138 | --- tests/unittest/recurrence-test.cpp 2014-04-15 19:42:59 +0000 |
1139 | +++ tests/unittest/recurrence-test.cpp 2014-06-10 18:21:21 +0000 |
1140 | @@ -64,6 +64,9 @@ |
1141 | QList<QtOrganizer::QOrganizerItemDetail::DetailType>(), |
1142 | &errorMap, |
1143 | &error); |
1144 | + if (!saveResult) { |
1145 | + qWarning() << "Fail to save items"; |
1146 | + } |
1147 | |
1148 | Q_ASSERT(saveResult); |
1149 | Q_ASSERT(error == QtOrganizer::QOrganizerManager::NoError); |
1150 | @@ -77,7 +80,7 @@ |
1151 | private Q_SLOTS: |
1152 | void init() |
1153 | { |
1154 | - EDSBaseTest::init(0); |
1155 | + EDSBaseTest::init(); |
1156 | |
1157 | m_engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); |
1158 | |
1159 | @@ -92,7 +95,9 @@ |
1160 | |
1161 | void cleanup() |
1162 | { |
1163 | - EDSBaseTest::cleanup(m_engine); |
1164 | + delete m_engine; |
1165 | + m_engine = 0; |
1166 | + EDSBaseTest::cleanup(); |
1167 | } |
1168 | |
1169 | void testCreateWeeklyEvent() |
1170 | |
1171 | === added file 'tests/unittest/run-eds-test.sh' |
1172 | --- tests/unittest/run-eds-test.sh 1970-01-01 00:00:00 +0000 |
1173 | +++ tests/unittest/run-eds-test.sh 2014-06-10 18:21:21 +0000 |
1174 | @@ -0,0 +1,16 @@ |
1175 | +#!/bin/sh |
1176 | + |
1177 | +#ARG1 - DBUS RUNNERN PATH |
1178 | +#ARG2 - TEST EXECUTABLE FULL PATH |
1179 | +#ARG3 - TEST NAME |
1180 | +#ARG4 - EVOLUTION_CALENDAR_FACTORY FULL PATH |
1181 | +#ARG5 - EVOLUTION_CALENDAR_FACTORY SERVICE NAME |
1182 | +#ARG6 - EVOLUTION_SOURCE_REGISTRY FULL PATH |
1183 | + |
1184 | +rm -rf $XDG_DATA_HOME |
1185 | +$1 --keep-env \ |
1186 | +--task $2 --task-name $3 --wait-until-complete --wait-for=org.gnome.evolution.dataserver.Calendar4 \ |
1187 | +--task $4 --task-name "evolution" -r --wait-for=$5 \ |
1188 | +--task $6 --task-name "source-registry" --wait-for=org.gtk.vfs.Daemon -r \ |
1189 | +--task $7 --task-name "gvfsd" -r |
1190 | +return $? |
PASSED: Continuous integration, rev:60 jenkins. qa.ubuntu. com/job/ qtorganizer5- eds-ci/ 143/ jenkins. qa.ubuntu. com/job/ qtorganizer5- eds-utopic- amd64-ci/ 1 jenkins. qa.ubuntu. com/job/ qtorganizer5- eds-utopic- armhf-ci/ 1 jenkins. qa.ubuntu. com/job/ qtorganizer5- eds-utopic- armhf-ci/ 1/artifact/ work/output/ *zip*/output. zip jenkins. qa.ubuntu. com/job/ qtorganizer5- eds-utopic- i386-ci/ 1
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild: s-jenkins. ubuntu- ci:8080/ job/qtorganizer 5-eds-ci/ 143/rebuild
http://