Merge lp:~renatofilho/qtorganizer5-eds/fix-engine-crash into lp:qtorganizer5-eds

Proposed by Renato Araujo Oliveira Filho
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
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.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
61. By Renato Araujo Oliveira Filho

Fixed collection update signal.
Avoid delete request while wait to finish.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
62. By Renato Araujo Oliveira Filho <renato@ubuntu>

Try t fix faling test.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
63. By Renato Araujo Oliveira Filho

Reduce the wait time during the test cleanup.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
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.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
67. By Renato Araujo Oliveira Filho

Added missing file.

68. By Renato Araujo Oliveira Filho

Removed unused functions.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
69. By Renato Araujo Oliveira Filho

Fixed organizer plugin load during tests.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
70. By Renato Araujo Oliveira Filho

Added test for select and unselect a collection.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
71. By Renato Araujo Oliveira Filho

Removed commented code.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
72. By Renato Araujo Oliveira Filho

Return the item in the the correct sort order.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'CMakeLists.txt'
--- CMakeLists.txt 2013-12-05 15:30:17 +0000
+++ CMakeLists.txt 2014-06-10 18:21:21 +0000
@@ -70,7 +70,7 @@
70 set(EVOLUTION_SOURCE_SERVICE_NAME "org.gnome.evolution.dataserver.Sources2")70 set(EVOLUTION_SOURCE_SERVICE_NAME "org.gnome.evolution.dataserver.Sources2")
71endif()71endif()
7272
73add_subdirectory(qorganizer)73add_subdirectory(organizer)
74if(DBUS_RUNNER)74if(DBUS_RUNNER)
75 if(EVOLUTION_CALENDAR_FACTORY)75 if(EVOLUTION_CALENDAR_FACTORY)
76 enable_testing()76 enable_testing()
7777
=== modified file 'buildOnDevice.sh'
--- buildOnDevice.sh 2014-04-19 13:41:01 +0000
+++ buildOnDevice.sh 2014-06-10 18:21:21 +0000
@@ -72,9 +72,9 @@
72 # same options as in debian/rules72 # same options as in debian/rules
73 #QMAKE_OPTIONS="-recursive MALIIT_DEFAULT_PROFILE=ubuntu CONFIG+=\\\"debug nodoc enable-presage enable-hunspell enable-pinyin\\\""73 #QMAKE_OPTIONS="-recursive MALIIT_DEFAULT_PROFILE=ubuntu CONFIG+=\\\"debug nodoc enable-presage enable-hunspell enable-pinyin\\\""
74 exec_with_ssh "mkdir -p $CODE_DIR/build"74 exec_with_ssh "mkdir -p $CODE_DIR/build"
75 exec_with_ssh "cd $CODE_DIR/build && cmake ../ -DCMAKE_BUILD_TYPE=Debug && make -j 4"75 exec_with_ssh "cd $CODE_DIR/build && cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug && make -j 4"
76 echo "Installing"76 echo "Installing"
77 exec_with_ssh "cd $CODE_DIR/build && " $SUDO " make install"77 exec_with_ssh "cd $CODE_DIR/build && " $SUDO " make install/fast"
78}78}
7979
80run() {80run() {
8181
=== modified file 'config.h.in'
--- config.h.in 2013-12-02 01:42:41 +0000
+++ config.h.in 2014-06-10 18:21:21 +0000
@@ -4,5 +4,6 @@
4#define TMP_DIR "@TMP_DIR@"4#define TMP_DIR "@TMP_DIR@"
5#define EVOLUTION_CALENDAR_FACTORY "@EVOLUTION_CALENDAR_FACTORY@"5#define EVOLUTION_CALENDAR_FACTORY "@EVOLUTION_CALENDAR_FACTORY@"
6#define EVOLUTION_CALENDAR_SERVICE "org.gnome.evolution.dataserver.Calendar4"6#define EVOLUTION_CALENDAR_SERVICE "org.gnome.evolution.dataserver.Calendar4"
7#define QORGANIZER_DEV_PATH "@CMAKE_BINARY_DIR@"
78
8#endif9#endif
910
=== renamed directory 'qorganizer' => 'organizer'
=== modified file 'organizer/qorganizer-eds-engine.cpp'
--- qorganizer/qorganizer-eds-engine.cpp 2014-05-08 16:45:14 +0000
+++ organizer/qorganizer-eds-engine.cpp 2014-06-10 18:21:21 +0000
@@ -90,17 +90,17 @@
90 }90 }
91 connect(d->m_sourceRegistry, SIGNAL(sourceAdded(QString)), SLOT(onSourceAdded(QString)));91 connect(d->m_sourceRegistry, SIGNAL(sourceAdded(QString)), SLOT(onSourceAdded(QString)));
92 connect(d->m_sourceRegistry, SIGNAL(sourceRemoved(QString)), SLOT(onSourceRemoved(QString)));92 connect(d->m_sourceRegistry, SIGNAL(sourceRemoved(QString)), SLOT(onSourceRemoved(QString)));
93 connect(d->m_sourceRegistry, SIGNAL(sourceUpdated(QString)), SLOT(onSourceUpdated(QString)));
93 d->m_sourceRegistry->load();94 d->m_sourceRegistry->load();
94}95}
9596
96QOrganizerEDSEngine::~QOrganizerEDSEngine()97QOrganizerEDSEngine::~QOrganizerEDSEngine()
97{98{
98 QList<QOrganizerAbstractRequest*> reqs = m_runningRequests.keys();99 while(m_runningRequests.count()) {
99 Q_FOREACH(QOrganizerAbstractRequest *req, reqs) {100 QOrganizerAbstractRequest *req = m_runningRequests.keys().first();
100 req->cancel();101 QOrganizerEDSEngine::requestDestroyed(req);
101 }102 }
102103
103 Q_ASSERT(m_runningRequests.count() == 0);
104 d->m_sharedEngines.remove(this);104 d->m_sharedEngines.remove(this);
105 if (!d->m_refCount.deref()) {105 if (!d->m_refCount.deref()) {
106 delete d;106 delete d;
@@ -811,9 +811,11 @@
811 startRequest(req);811 startRequest(req);
812 waitForRequestFinished(req, 0);812 waitForRequestFinished(req, 0);
813813
814 *error = req->error();814 if (error) {
815 *error = req->error();
816 }
815817
816 if (*error == QOrganizerManager::NoError) {818 if (req->error() == QOrganizerManager::NoError) {
817 return req->collections();819 return req->collections();
818 } else {820 } else {
819 return QList<QOrganizerCollection>();821 return QList<QOrganizerCollection>();
@@ -941,8 +943,11 @@
941 startRequest(req);943 startRequest(req);
942 waitForRequestFinished(req, 0);944 waitForRequestFinished(req, 0);
943945
944 *error = req->error();946 if (error) {
945 return(*error == QOrganizerManager::NoError);947 *error = req->error();
948 }
949
950 return(req->error() == QOrganizerManager::NoError);
946}951}
947952
948void QOrganizerEDSEngine::removeCollectionAsync(QtOrganizer::QOrganizerCollectionRemoveRequest *req)953void QOrganizerEDSEngine::removeCollectionAsync(QtOrganizer::QOrganizerCollectionRemoveRequest *req)
@@ -1008,12 +1013,7 @@
10081013
1009void QOrganizerEDSEngine::releaseRequestData(RequestData *data)1014void QOrganizerEDSEngine::releaseRequestData(RequestData *data)
1010{1015{
1011 if (data->cancelled()) {1016 data->deleteLater();
1012 // if request was cancelled data will be destroyed later
1013 data->continueCancel();
1014 } else {
1015 delete data;
1016 }
1017}1017}
10181018
1019void QOrganizerEDSEngine::requestDestroyed(QOrganizerAbstractRequest* req)1019void QOrganizerEDSEngine::requestDestroyed(QOrganizerAbstractRequest* req)
@@ -1021,7 +1021,7 @@
1021 RequestData *data = m_runningRequests.take(req);1021 RequestData *data = m_runningRequests.take(req);
1022 if (data) {1022 if (data) {
1023 data->cancel();1023 data->cancel();
1024 delete data;1024 data->deleteLater();
1025 }1025 }
1026}1026}
10271027
@@ -1073,10 +1073,10 @@
10731073
1074bool QOrganizerEDSEngine::cancelRequest(QOrganizerAbstractRequest* req)1074bool QOrganizerEDSEngine::cancelRequest(QOrganizerAbstractRequest* req)
1075{1075{
1076 RequestData *data = m_runningRequests.take(req);1076 RequestData *data = m_runningRequests.value(req);
1077 if (data) {1077 if (data) {
1078 data->cancel();1078 data->cancel();
1079 delete data;1079 data->deleteLater();
1080 return true;1080 return true;
1081 }1081 }
1082 return false;1082 return false;
@@ -1087,10 +1087,11 @@
1087 Q_ASSERT(req);1087 Q_ASSERT(req);
1088 Q_UNUSED(msecs);1088 Q_UNUSED(msecs);
10891089
1090 QPointer<QOrganizerAbstractRequest> r(req);1090 RequestData *data = m_runningRequests.value(req);
10911091 if (data) {
1092 while(r && (r->state() == QOrganizerAbstractRequest::ActiveState)) {1092 data->wait();
1093 QCoreApplication::processEvents();1093 // We can delete the operation already finished
1094 data->deleteLater();
1094 }1095 }
10951096
1096 return true;1097 return true;
@@ -1186,11 +1187,18 @@
1186void QOrganizerEDSEngine::onSourceAdded(const QString &collectionId)1187void QOrganizerEDSEngine::onSourceAdded(const QString &collectionId)
1187{1188{
1188 d->watch(collectionId);1189 d->watch(collectionId);
1190 Q_EMIT collectionsAdded(QList<QOrganizerCollectionId>() << QOrganizerCollectionId::fromString(collectionId));
1189}1191}
11901192
1191void QOrganizerEDSEngine::onSourceRemoved(const QString &collectionId)1193void QOrganizerEDSEngine::onSourceRemoved(const QString &collectionId)
1192{1194{
1193 d->unWatch(collectionId);1195 d->unWatch(collectionId);
1196 Q_EMIT collectionsRemoved(QList<QOrganizerCollectionId>() << QOrganizerCollectionId::fromString(collectionId));
1197}
1198
1199void QOrganizerEDSEngine::onSourceUpdated(const QString &collectionId)
1200{
1201 Q_EMIT collectionsChanged(QList<QOrganizerCollectionId>() << QOrganizerCollectionId::fromString(collectionId));
1194}1202}
11951203
1196void QOrganizerEDSEngine::onViewChanged(QOrganizerItemChangeSet *change)1204void QOrganizerEDSEngine::onViewChanged(QOrganizerItemChangeSet *change)
11971205
=== modified file 'organizer/qorganizer-eds-engine.h'
--- qorganizer/qorganizer-eds-engine.h 2014-04-18 03:16:33 +0000
+++ organizer/qorganizer-eds-engine.h 2014-06-10 18:21:21 +0000
@@ -128,6 +128,7 @@
128protected Q_SLOTS:128protected Q_SLOTS:
129 void onSourceAdded(const QString &collectionId);129 void onSourceAdded(const QString &collectionId);
130 void onSourceRemoved(const QString &collectionId);130 void onSourceRemoved(const QString &collectionId);
131 void onSourceUpdated(const QString &collectionId);
131 void onViewChanged(QtOrganizer::QOrganizerItemChangeSet *change);132 void onViewChanged(QtOrganizer::QOrganizerItemChangeSet *change);
132133
133protected:134protected:
@@ -247,5 +248,9 @@
247 friend class FetchOcurrenceData;248 friend class FetchOcurrenceData;
248};249};
249250
251using namespace QtOrganizer;
252Q_DECLARE_METATYPE(QList<QOrganizerCollectionId>)
253Q_DECLARE_METATYPE(QList<QOrganizerItemId>)
254
250#endif255#endif
251256
252257
=== modified file 'organizer/qorganizer-eds-fetchbyidrequestdata.cpp'
--- qorganizer/qorganizer-eds-fetchbyidrequestdata.cpp 2013-12-03 20:01:45 +0000
+++ organizer/qorganizer-eds-fetchbyidrequestdata.cpp 2014-06-10 18:21:21 +0000
@@ -65,13 +65,15 @@
65 return (m_current >= ids.count());65 return (m_current >= ids.count());
66}66}
6767
68void FetchByIdRequestData::finish(QOrganizerManager::Error error)68void FetchByIdRequestData::finish(QOrganizerManager::Error error,
69 QOrganizerAbstractRequest::State state)
69{70{
70 QOrganizerManagerEngine::updateItemFetchByIdRequest(request<QOrganizerItemFetchByIdRequest>(),71 QOrganizerManagerEngine::updateItemFetchByIdRequest(request<QOrganizerItemFetchByIdRequest>(),
71 m_results,72 m_results,
72 error,73 error,
73 m_errors,74 m_errors,
74 QOrganizerAbstractRequest::FinishedState);75 state);
76 RequestData::finish(error, state);
75}77}
7678
77int FetchByIdRequestData::appendResult(const QOrganizerItem &result)79int FetchByIdRequestData::appendResult(const QOrganizerItem &result)
7880
=== modified file 'organizer/qorganizer-eds-fetchbyidrequestdata.h'
--- qorganizer/qorganizer-eds-fetchbyidrequestdata.h 2013-12-03 20:01:45 +0000
+++ organizer/qorganizer-eds-fetchbyidrequestdata.h 2014-06-10 18:21:21 +0000
@@ -34,7 +34,8 @@
34 QString currentCollectionId() const;34 QString currentCollectionId() const;
35 bool end() const;35 bool end() const;
3636
37 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError);37 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError,
38 QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState);
38 int appendResult(const QtOrganizer::QOrganizerItem &result);39 int appendResult(const QtOrganizer::QOrganizerItem &result);
3940
40private:41private:
4142
=== modified file 'organizer/qorganizer-eds-fetchocurrencedata.cpp'
--- qorganizer/qorganizer-eds-fetchocurrencedata.cpp 2014-02-25 18:43:06 +0000
+++ organizer/qorganizer-eds-fetchocurrencedata.cpp 2014-06-10 18:21:21 +0000
@@ -62,7 +62,8 @@
62 return endDate.toTime_t();62 return endDate.toTime_t();
63}63}
6464
65void FetchOcurrenceData::finish(QOrganizerManager::Error error)65void FetchOcurrenceData::finish(QOrganizerManager::Error error,
66 QtOrganizer::QOrganizerAbstractRequest::State state)
66{67{
67 QList<QtOrganizer::QOrganizerItem> results;68 QList<QtOrganizer::QOrganizerItem> results;
6869
@@ -76,7 +77,9 @@
76 QOrganizerManagerEngine::updateItemOccurrenceFetchRequest(request<QOrganizerItemOccurrenceFetchRequest>(),77 QOrganizerManagerEngine::updateItemOccurrenceFetchRequest(request<QOrganizerItemOccurrenceFetchRequest>(),
77 results,78 results,
78 error,79 error,
79 QOrganizerAbstractRequest::FinishedState);80 state);
81
82 RequestData::finish(error, state);
80}83}
8184
82void FetchOcurrenceData::appendResult(icalcomponent *comp)85void FetchOcurrenceData::appendResult(icalcomponent *comp)
8386
=== modified file 'organizer/qorganizer-eds-fetchocurrencedata.h'
--- qorganizer/qorganizer-eds-fetchocurrencedata.h 2014-02-25 18:43:06 +0000
+++ organizer/qorganizer-eds-fetchocurrencedata.h 2014-06-10 18:21:21 +0000
@@ -32,7 +32,8 @@
32 time_t startDate() const;32 time_t startDate() const;
33 time_t endDate() const;33 time_t endDate() const;
3434
35 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError);35 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError,
36 QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState);
36 void appendResult(icalcomponent *comp);37 void appendResult(icalcomponent *comp);
3738
38private:39private:
3940
=== modified file 'organizer/qorganizer-eds-fetchrequestdata.cpp'
--- qorganizer/qorganizer-eds-fetchrequestdata.cpp 2014-04-14 18:43:25 +0000
+++ organizer/qorganizer-eds-fetchrequestdata.cpp 2014-06-10 18:21:21 +0000
@@ -97,13 +97,15 @@
97 return (endDate.isValid() && startDate.isValid());97 return (endDate.isValid() && startDate.isValid());
98}98}
9999
100void FetchRequestData::finish(QOrganizerManager::Error error)100void FetchRequestData::finish(QOrganizerManager::Error error,
101 QOrganizerAbstractRequest::State state)
101{102{
102 QOrganizerManagerEngine::updateItemFetchRequest(request<QOrganizerItemFetchRequest>(),103 QOrganizerManagerEngine::updateItemFetchRequest(request<QOrganizerItemFetchRequest>(),
103 m_results,104 m_results,
104 error,105 error,
105 QOrganizerAbstractRequest::FinishedState);106 state);
106 // TODO: emit changeset???107 // TODO: emit changeset???
108 RequestData::finish(error, state);
107}109}
108110
109void FetchRequestData::appendResult(icalcomponent *comp)111void FetchRequestData::appendResult(icalcomponent *comp)
@@ -117,7 +119,7 @@
117 QOrganizerItemFetchRequest *req = request<QOrganizerItemFetchRequest>();119 QOrganizerItemFetchRequest *req = request<QOrganizerItemFetchRequest>();
118 Q_FOREACH(const QOrganizerItem &item, results) {120 Q_FOREACH(const QOrganizerItem &item, results) {
119 if (QOrganizerManagerEngine::testFilter(req->filter(), item)) {121 if (QOrganizerManagerEngine::testFilter(req->filter(), item)) {
120 m_results << item;122 QOrganizerManagerEngine::addSorted(&m_results, item, req->sorting());
121 count++;123 count++;
122 }124 }
123 }125 }
124126
=== modified file 'organizer/qorganizer-eds-fetchrequestdata.h'
--- qorganizer/qorganizer-eds-fetchrequestdata.h 2014-02-25 17:12:32 +0000
+++ organizer/qorganizer-eds-fetchrequestdata.h 2014-06-10 18:21:21 +0000
@@ -36,7 +36,8 @@
36 time_t endDate() const;36 time_t endDate() const;
37 bool hasDateInterval() const;37 bool hasDateInterval() const;
3838
39 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError);39 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError,
40 QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState);
40 void appendResult(icalcomponent *comp);41 void appendResult(icalcomponent *comp);
41 int appendResults(QList<QtOrganizer::QOrganizerItem> results);42 int appendResults(QList<QtOrganizer::QOrganizerItem> results);
42 QString dateFilter();43 QString dateFilter();
4344
=== modified file 'organizer/qorganizer-eds-removebyidrequestdata.cpp'
--- qorganizer/qorganizer-eds-removebyidrequestdata.cpp 2014-04-18 03:16:33 +0000
+++ organizer/qorganizer-eds-removebyidrequestdata.cpp 2014-06-10 18:21:21 +0000
@@ -46,15 +46,18 @@
46{46{
47}47}
4848
49void RemoveByIdRequestData::finish(QtOrganizer::QOrganizerManager::Error error)49void RemoveByIdRequestData::finish(QtOrganizer::QOrganizerManager::Error error,
50 QtOrganizer::QOrganizerAbstractRequest::State state)
50{51{
51 e_client_refresh_sync(m_client, 0, 0);52 e_client_refresh_sync(m_client, 0, 0);
52 QOrganizerManagerEngine::updateItemRemoveByIdRequest(request<QOrganizerItemRemoveByIdRequest>(),53 QOrganizerManagerEngine::updateItemRemoveByIdRequest(request<QOrganizerItemRemoveByIdRequest>(),
53 error,54 error,
54 QMap<int, QOrganizerManager::Error>(),55 QMap<int, QOrganizerManager::Error>(),
55 QOrganizerAbstractRequest::FinishedState);56 state);
56 //The signal will be fired by the view watcher. Check ViewWatcher::onObjectsRemoved57 //The signal will be fired by the view watcher. Check ViewWatcher::onObjectsRemoved
57 //emitChangeset(&m_changeSet);58 //emitChangeset(&m_changeSet);
59
60 RequestData::finish(error, state);
58}61}
5962
60GSList *RemoveByIdRequestData::compIds() const63GSList *RemoveByIdRequestData::compIds() const
6164
=== modified file 'organizer/qorganizer-eds-removebyidrequestdata.h'
--- qorganizer/qorganizer-eds-removebyidrequestdata.h 2014-01-05 18:18:32 +0000
+++ organizer/qorganizer-eds-removebyidrequestdata.h 2014-06-10 18:21:21 +0000
@@ -31,7 +31,8 @@
3131
32 QString collectionId() const;32 QString collectionId() const;
3333
34 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError);34 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError,
35 QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState);
3536
36 GSList *compIds() const;37 GSList *compIds() const;
3738
3839
=== modified file 'organizer/qorganizer-eds-removecollectionrequestdata.cpp'
--- qorganizer/qorganizer-eds-removecollectionrequestdata.cpp 2013-12-03 01:23:34 +0000
+++ organizer/qorganizer-eds-removecollectionrequestdata.cpp 2014-06-10 18:21:21 +0000
@@ -39,21 +39,16 @@
39{39{
40}40}
4141
42void RemoveCollectionRequestData::finish(QtOrganizer::QOrganizerManager::Error error)42void RemoveCollectionRequestData::finish(QOrganizerManager::Error error,
43 QOrganizerAbstractRequest::State state)
43{44{
44 QOrganizerManagerEngine::updateCollectionRemoveRequest(request<QOrganizerCollectionRemoveRequest>(),45 QOrganizerManagerEngine::updateCollectionRemoveRequest(request<QOrganizerCollectionRemoveRequest>(),
45 error,46 error,
46 m_errorMap,47 m_errorMap,
47 QOrganizerAbstractRequest::FinishedState);48 state);
4849
49 QList<QOrganizerCollectionId> removedIds = m_pendingCollections;50 // changes will be fired by source-registry
50 Q_FOREACH(int index, m_errorMap.keys()) {51 RequestData::finish(error, state);
51 removedIds.removeAt(index);
52 }
53
54 QOrganizerCollectionChangeSet cs;
55 cs.insertRemovedCollections(removedIds);
56 emitChangeset(&cs);
57}52}
5853
59void RemoveCollectionRequestData::commit(QtOrganizer::QOrganizerManager::Error error)54void RemoveCollectionRequestData::commit(QtOrganizer::QOrganizerManager::Error error)
6055
=== modified file 'organizer/qorganizer-eds-removecollectionrequestdata.h'
--- qorganizer/qorganizer-eds-removecollectionrequestdata.h 2013-12-03 01:23:34 +0000
+++ organizer/qorganizer-eds-removecollectionrequestdata.h 2014-06-10 18:21:21 +0000
@@ -29,7 +29,8 @@
29 RemoveCollectionRequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req);29 RemoveCollectionRequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req);
30 ~RemoveCollectionRequestData();30 ~RemoveCollectionRequestData();
3131
32 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError);32 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError,
33 QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState);
3334
34 ESource* begin();35 ESource* begin();
35 void commit(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError);36 void commit(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError);
3637
=== modified file 'organizer/qorganizer-eds-removerequestdata.cpp'
--- qorganizer/qorganizer-eds-removerequestdata.cpp 2014-04-18 03:16:33 +0000
+++ organizer/qorganizer-eds-removerequestdata.cpp 2014-06-10 18:21:21 +0000
@@ -65,16 +65,18 @@
65 return ids;65 return ids;
66}66}
6767
68void RemoveRequestData::finish(QtOrganizer::QOrganizerManager::Error error)68void RemoveRequestData::finish(QOrganizerManager::Error error,
69 QOrganizerAbstractRequest::State state)
69{70{
70 e_client_refresh_sync(m_client, 0, 0);71 e_client_refresh_sync(m_client, 0, 0);
71 QOrganizerManagerEngine::updateItemRemoveRequest(request<QOrganizerItemRemoveRequest>(),72 QOrganizerManagerEngine::updateItemRemoveRequest(request<QOrganizerItemRemoveRequest>(),
72 error,73 error,
73 QMap<int, QOrganizerManager::Error>(),74 QMap<int, QOrganizerManager::Error>(),
74 QOrganizerAbstractRequest::FinishedState);75 state);
7576
76 //The signal will be fired by the view watcher. Check ViewWatcher::onObjectsRemoved77 //The signal will be fired by the view watcher. Check ViewWatcher::onObjectsRemoved
77 //emitChangeset(&m_changeSet);78 //emitChangeset(&m_changeSet);
79 RequestData::finish(error, state);
78}80}
7981
80GSList *RemoveRequestData::compIds() const82GSList *RemoveRequestData::compIds() const
8183
=== modified file 'organizer/qorganizer-eds-removerequestdata.h'
--- qorganizer/qorganizer-eds-removerequestdata.h 2013-12-31 15:42:33 +0000
+++ organizer/qorganizer-eds-removerequestdata.h 2014-06-10 18:21:21 +0000
@@ -32,7 +32,8 @@
32 QList<QtOrganizer::QOrganizerCollectionId> pendingCollections() const;32 QList<QtOrganizer::QOrganizerCollectionId> pendingCollections() const;
33 QtOrganizer::QOrganizerCollectionId collectionId() const;33 QtOrganizer::QOrganizerCollectionId collectionId() const;
3434
35 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError);35 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError,
36 QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState);
3637
37 GSList *compIds() const;38 GSList *compIds() const;
3839
3940
=== modified file 'organizer/qorganizer-eds-requestdata.cpp'
--- qorganizer/qorganizer-eds-requestdata.cpp 2014-04-18 20:30:59 +0000
+++ organizer/qorganizer-eds-requestdata.cpp 2014-06-10 18:21:21 +0000
@@ -18,6 +18,9 @@
1818
19#include "qorganizer-eds-requestdata.h"19#include "qorganizer-eds-requestdata.h"
2020
21#include <QtCore/QDebug>
22#include <QtCore/QCoreApplication>
23
21#include <QtOrganizer/QOrganizerAbstractRequest>24#include <QtOrganizer/QOrganizerAbstractRequest>
22#include <QtOrganizer/QOrganizerManagerEngine>25#include <QtOrganizer/QOrganizerManagerEngine>
2326
@@ -25,9 +28,9 @@
2528
26RequestData::RequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req)29RequestData::RequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req)
27 : m_parent(engine),30 : m_parent(engine),
28 m_req(req),
29 m_client(0),31 m_client(0),
30 m_canceling(false)32 m_finished(false),
33 m_req(req)
31{34{
32 QOrganizerManagerEngine::updateRequestState(req, QOrganizerAbstractRequest::ActiveState);35 QOrganizerManagerEngine::updateRequestState(req, QOrganizerAbstractRequest::ActiveState);
33 m_cancellable = g_cancellable_new();36 m_cancellable = g_cancellable_new();
@@ -36,7 +39,6 @@
3639
37RequestData::~RequestData()40RequestData::~RequestData()
38{41{
39 Q_ASSERT(m_req->state() != QOrganizerAbstractRequest::ActiveState);
40 if (m_cancellable) {42 if (m_cancellable) {
41 g_clear_object(&m_cancellable);43 g_clear_object(&m_cancellable);
42 }44 }
@@ -44,14 +46,10 @@
44 if (m_client) {46 if (m_client) {
45 g_clear_object(&m_client);47 g_clear_object(&m_client);
46 }48 }
47
48 m_parent->m_runningRequests.remove(m_req);
49}49}
5050
51GCancellable* RequestData::cancellable() const51GCancellable* RequestData::cancellable() const
52{52{
53 g_cancellable_reset(m_cancellable);
54 //g_object_ref(m_cancellable);
55 return m_cancellable;53 return m_cancellable;
56}54}
5755
@@ -73,26 +71,74 @@
7371
74void RequestData::cancel()72void RequestData::cancel()
75{73{
76 m_canceling = true;74 QMutexLocker locker(&m_canceling);
77 if (m_cancellable) {75 if (m_cancellable) {
76 gulong id = g_cancellable_connect(m_cancellable,
77 (GCallback) RequestData::onCancelled,
78 this, NULL);
79 // wait the cancel
80 wait();
81
82 // cancel
78 g_cancellable_cancel(m_cancellable);83 g_cancellable_cancel(m_cancellable);
79 m_parent->waitForRequestFinished(m_req, 0);84
85 // done
86 g_cancellable_disconnect(m_cancellable, id);
80 m_cancellable = 0;87 m_cancellable = 0;
81 }88 }
82 m_canceling = false;89}
83}90
8491void RequestData::wait()
85bool RequestData::cancelled() const92{
86{93 QMutexLocker locker(&m_waiting);
87 if (!m_req.isNull()) {94 while(!m_finished) {
88 return m_canceling;95 QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
89 }96 }
90 return false;97}
91}98
9299bool RequestData::isWaiting()
93void RequestData::continueCancel()100{
94{101 bool result = true;
95 QOrganizerManagerEngine::updateRequestState(m_req, QOrganizerAbstractRequest::CanceledState);102 if (m_waiting.tryLock()) {
103 result = false;
104 m_waiting.unlock();
105 }
106 return result;
107}
108
109bool RequestData::isCanceling()
110{
111 bool result = true;
112 if (m_canceling.tryLock()) {
113 result = false;
114 m_canceling.unlock();
115 }
116 return result;
117}
118
119void RequestData::deleteLater()
120{
121 if (isWaiting() || isCanceling()) {
122 // still running
123 return;
124 }
125 m_parent->m_runningRequests.remove(m_req);
126 delete this;
127}
128
129void RequestData::finish(QOrganizerManager::Error error, QtOrganizer::QOrganizerAbstractRequest::State state)
130{
131 Q_UNUSED(error);
132 Q_UNUSED(state);
133 m_finished = true;
134}
135
136void RequestData::onCancelled(GCancellable *cancellable, RequestData *self)
137{
138 Q_UNUSED(cancellable);
139 if (self->m_req) {
140 self->finish(QOrganizerManager::UnspecifiedError, QOrganizerAbstractRequest::CanceledState);
141 }
96}142}
97143
98void RequestData::setClient(EClient *client)144void RequestData::setClient(EClient *client)
99145
=== modified file 'organizer/qorganizer-eds-requestdata.h'
--- qorganizer/qorganizer-eds-requestdata.h 2014-04-18 19:55:27 +0000
+++ organizer/qorganizer-eds-requestdata.h 2014-06-10 18:21:21 +0000
@@ -24,6 +24,7 @@
2424
25#include <QtCore/QPointer>25#include <QtCore/QPointer>
26#include <QtCore/QMutex>26#include <QtCore/QMutex>
27#include <QtCore/QEventLoop>
2728
28#include <QtOrganizer/QOrganizerAbstractRequest>29#include <QtOrganizer/QOrganizerAbstractRequest>
29#include <QtOrganizer/QOrganizerManager>30#include <QtOrganizer/QOrganizerManager>
@@ -33,16 +34,17 @@
33{34{
34public:35public:
35 RequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req);36 RequestData(QOrganizerEDSEngine *engine, QtOrganizer::QOrganizerAbstractRequest *req);
36 virtual ~RequestData();
37 GCancellable* cancellable() const;37 GCancellable* cancellable() const;
38 bool isLive() const;38 bool isLive() const;
39 void setClient(EClient *client);39 void setClient(EClient *client);
40 ECalClient *client() const;40 ECalClient *client() const;
41 virtual void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError) = 0;
42 QOrganizerEDSEngine *parent() const;41 QOrganizerEDSEngine *parent() const;
43 virtual void cancel();42 virtual void cancel();
44 bool cancelled() const;43 void deleteLater();
45 void continueCancel();44 virtual void finish(QtOrganizer::QOrganizerManager::Error error, QtOrganizer::QOrganizerAbstractRequest::State state) = 0;
45 void wait();
46 bool isWaiting();
47 bool isCanceling();
4648
47 template<class T>49 template<class T>
48 T* request() const {50 T* request() const {
@@ -56,13 +58,19 @@
5658
57protected:59protected:
58 QOrganizerEDSEngine *m_parent;60 QOrganizerEDSEngine *m_parent;
61 EClient *m_client;
59 QtOrganizer::QOrganizerItemChangeSet m_changeSet;62 QtOrganizer::QOrganizerItemChangeSet m_changeSet;
60 EClient *m_client;63 QMutex m_waiting;
61 bool m_canceling;64 QMutex m_canceling;
65 bool m_finished;
66
67 virtual ~RequestData();
6268
63private:69private:
64 QPointer<QtOrganizer::QOrganizerAbstractRequest> m_req;70 QPointer<QtOrganizer::QOrganizerAbstractRequest> m_req;
65 GCancellable *m_cancellable;71 GCancellable *m_cancellable;
72
73 static void onCancelled(GCancellable *cancellable, RequestData *self);
66};74};
6775
68#endif76#endif
6977
=== modified file 'organizer/qorganizer-eds-savecollectionrequestdata.cpp'
--- qorganizer/qorganizer-eds-savecollectionrequestdata.cpp 2014-03-21 18:04:50 +0000
+++ organizer/qorganizer-eds-savecollectionrequestdata.cpp 2014-06-10 18:21:21 +0000
@@ -50,16 +50,20 @@
50 }50 }
51}51}
5252
53void SaveCollectionRequestData::finish(QtOrganizer::QOrganizerManager::Error error)53void SaveCollectionRequestData::finish(QtOrganizer::QOrganizerManager::Error error,
54 QtOrganizer::QOrganizerAbstractRequest::State state)
54{55{
55 QOrganizerManagerEngine::updateCollectionSaveRequest(request<QOrganizerCollectionSaveRequest>(),56 QOrganizerManagerEngine::updateCollectionSaveRequest(request<QOrganizerCollectionSaveRequest>(),
56 m_results.values(),57 m_results.values(),
57 error,58 error,
58 m_errorMap,59 m_errorMap,
59 QOrganizerAbstractRequest::FinishedState);60 state);
6061
61 emitChangeset(&m_changeSet);62
63 // changes will be fired by source-registry
62 m_changeSet.clearAll();64 m_changeSet.clearAll();
65
66 RequestData::finish(error, state);
63}67}
6468
65void SaveCollectionRequestData::commitSourceCreated()69void SaveCollectionRequestData::commitSourceCreated()
@@ -181,11 +185,11 @@
181185
182 // update name186 // update name
183 QString name = collection.metaData(QOrganizerCollection::KeyName).toString();187 QString name = collection.metaData(QOrganizerCollection::KeyName).toString();
184 e_source_set_display_name(source, name.toUtf8().data());188 e_source_set_display_name(source, name.toUtf8().constData());
185189
186 // update color190 // update color
187 QString color = collection.metaData(QOrganizerCollection::KeyColor).toString();191 QString color = collection.metaData(QOrganizerCollection::KeyColor).toString();
188 e_source_selectable_set_color(E_SOURCE_SELECTABLE(extCalendar), color.toUtf8().data());192 e_source_selectable_set_color(E_SOURCE_SELECTABLE(extCalendar), color.toUtf8().constData());
189193
190 // update selected194 // update selected
191 bool selected = collection.extendedMetaData(COLLECTION_SELECTED_METADATA).toBool();195 bool selected = collection.extendedMetaData(COLLECTION_SELECTED_METADATA).toBool();
192196
=== modified file 'organizer/qorganizer-eds-savecollectionrequestdata.h'
--- qorganizer/qorganizer-eds-savecollectionrequestdata.h 2014-03-21 18:04:50 +0000
+++ organizer/qorganizer-eds-savecollectionrequestdata.h 2014-06-10 18:21:21 +0000
@@ -28,7 +28,8 @@
28 QtOrganizer::QOrganizerAbstractRequest *req);28 QtOrganizer::QOrganizerAbstractRequest *req);
29 ~SaveCollectionRequestData();29 ~SaveCollectionRequestData();
3030
31 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError);31 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError,
32 QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState);
32 bool isNew(int index) const;33 bool isNew(int index) const;
33 bool prepareToCreate();34 bool prepareToCreate();
34 bool prepareToUpdate();35 bool prepareToUpdate();
@@ -46,7 +47,7 @@
4647
47 QMap<int, QtOrganizer::QOrganizerManager::Error> m_errorMap;48 QMap<int, QtOrganizer::QOrganizerManager::Error> m_errorMap;
48 QMap<int, QtOrganizer::QOrganizerCollection> m_results;49 QMap<int, QtOrganizer::QOrganizerCollection> m_results;
49 QMap<int, ESource*> m_sources; 50 QMap<int, ESource*> m_sources;
50 QMap<int, ESource*> m_sourcesToCreate;51 QMap<int, ESource*> m_sourcesToCreate;
51 QMap<int, ESource*> m_sourcesToUpdate;52 QMap<int, ESource*> m_sourcesToUpdate;
52 QtOrganizer::QOrganizerCollectionChangeSet m_changeSet;53 QtOrganizer::QOrganizerCollectionChangeSet m_changeSet;
5354
=== modified file 'organizer/qorganizer-eds-saverequestdata.cpp'
--- qorganizer/qorganizer-eds-saverequestdata.cpp 2014-04-18 03:16:33 +0000
+++ organizer/qorganizer-eds-saverequestdata.cpp 2014-06-10 18:21:21 +0000
@@ -46,18 +46,17 @@
46{46{
47}47}
4848
49void SaveRequestData::finish(QtOrganizer::QOrganizerManager::Error error)49void SaveRequestData::finish(QtOrganizer::QOrganizerManager::Error error,
50 QtOrganizer::QOrganizerAbstractRequest::State state)
50{51{
51 e_client_refresh_sync(m_client, 0, 0);52 e_client_refresh_sync(m_client, 0, 0);
52 QOrganizerManagerEngine::updateItemSaveRequest(request<QOrganizerItemSaveRequest>(),53 QOrganizerManagerEngine::updateItemSaveRequest(request<QOrganizerItemSaveRequest>(),
53 m_result,54 m_result,
54 error,55 error,
55 m_erros,56 m_erros,
56 QOrganizerAbstractRequest::FinishedState);57 state);
57 Q_FOREACH(const QOrganizerItem &item, m_result) {58 // Change will be fired by the viewwatcher
58 m_changeSet.insertAddedItem(item.id());59 RequestData::finish(error, state);
59 }
60 emitChangeset(&m_changeSet);
61}60}
6261
63void SaveRequestData::appendResults(QList<QOrganizerItem> result)62void SaveRequestData::appendResults(QList<QOrganizerItem> result)
6463
=== modified file 'organizer/qorganizer-eds-saverequestdata.h'
--- qorganizer/qorganizer-eds-saverequestdata.h 2014-04-14 01:44:59 +0000
+++ organizer/qorganizer-eds-saverequestdata.h 2014-06-10 18:21:21 +0000
@@ -29,7 +29,8 @@
29 QtOrganizer::QOrganizerAbstractRequest *req);29 QtOrganizer::QOrganizerAbstractRequest *req);
30 ~SaveRequestData();30 ~SaveRequestData();
3131
32 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError);32 void finish(QtOrganizer::QOrganizerManager::Error error = QtOrganizer::QOrganizerManager::NoError,
33 QtOrganizer::QOrganizerAbstractRequest::State state = QtOrganizer::QOrganizerAbstractRequest::FinishedState);
3334
3435
35 QString nextCollection();36 QString nextCollection();
3637
=== modified file 'organizer/qorganizer-eds-source-registry.cpp'
--- qorganizer/qorganizer-eds-source-registry.cpp 2014-03-21 18:54:45 +0000
+++ organizer/qorganizer-eds-source-registry.cpp 2014-06-10 18:21:21 +0000
@@ -300,10 +300,6 @@
300void SourceRegistry::updateCollection(QOrganizerCollection *collection,300void SourceRegistry::updateCollection(QOrganizerCollection *collection,
301 ESource *source)301 ESource *source)
302{302{
303 //TODO get metadata (color, etc..)
304 collection->setMetaData(QOrganizerCollection::KeyName,
305 QString::fromUtf8(e_source_get_display_name(source)));
306
307 // name303 // name
308 collection->setMetaData(QOrganizerCollection::KeyName,304 collection->setMetaData(QOrganizerCollection::KeyName,
309 QString::fromUtf8(e_source_get_display_name(source)));305 QString::fromUtf8(e_source_get_display_name(source)));
@@ -328,4 +324,5 @@
328 // selected324 // selected
329 bool selected = (e_source_selectable_get_selected(E_SOURCE_SELECTABLE(extCalendar)) == TRUE);325 bool selected = (e_source_selectable_get_selected(E_SOURCE_SELECTABLE(extCalendar)) == TRUE);
330 collection->setExtendedMetaData(COLLECTION_SELECTED_METADATA, selected);326 collection->setExtendedMetaData(COLLECTION_SELECTED_METADATA, selected);
327
331}328}
332329
=== modified file 'tests/unittest/CMakeLists.txt'
--- tests/unittest/CMakeLists.txt 2014-02-25 18:46:32 +0000
+++ tests/unittest/CMakeLists.txt 2014-06-10 18:21:21 +0000
@@ -21,16 +21,16 @@
21 )21 )
2222
23 add_test(${TESTNAME}23 add_test(${TESTNAME}
24 ${DBUS_RUNNER} --keep-env24 ${CMAKE_CURRENT_SOURCE_DIR}/run-eds-test.sh ${DBUS_RUNNER} ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME} ${TESTNAME}
25 --task ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME} --task-name ${TESTNAME} --wait-until-complete --wait-for=org.gnome.evolution.dataserver.Calendar425 ${EVOLUTION_CALENDAR_FACTORY} ${EVOLUTION_SOURCE_SERVICE_NAME}
26 --task ${EVOLUTION_CALENDAR_FACTORY} --task-name "evolution" -r --wait-for=${EVOLUTION_SOURCE_SERVICE_NAME}26 ${EVOLUTION_SOURCE_REGISTRY}
27 --task ${EVOLUTION_SOURCE_REGISTRY} --task-name "source-registry" --wait-for=org.gtk.vfs.Daemon -r27 ${GVFSD})
28 --task ${GVFSD} --task-name "gvfsd" -r)
29 update_test_properties(${TESTNAME})28 update_test_properties(${TESTNAME})
30endmacro(declare_test testname)29endmacro(declare_test testname)
3130
32macro(update_test_properties TESTNAME)31macro(update_test_properties TESTNAME)
33 set(TEST_TMP_DIR "${TMP_DIR}/${TESTNAME}")32 set(TEST_TMP_DIR "${TMP_DIR}/${TESTNAME}")
33 set(ENV_VARS_LIST "")
34 list(APPEND ENV_VARS_LIST "QT_QPA_PLATFORM=minimal")34 list(APPEND ENV_VARS_LIST "QT_QPA_PLATFORM=minimal")
35 list(APPEND ENV_VARS_LIST "HOME=${TEST_TMP_DIR}")35 list(APPEND ENV_VARS_LIST "HOME=${TEST_TMP_DIR}")
36 list(APPEND ENV_VARS_LIST "XDG_RUNTIME_DIR=${TEST_TMP_DIR}")36 list(APPEND ENV_VARS_LIST "XDG_RUNTIME_DIR=${TEST_TMP_DIR}")
@@ -74,3 +74,4 @@
74declare_test(event-test)74declare_test(event-test)
75declare_test(fetchitem-test)75declare_test(fetchitem-test)
76declare_test(recurrence-test)76declare_test(recurrence-test)
77declare_test(cancel-operation-test)
7778
=== added file 'tests/unittest/cancel-operation-test.cpp'
--- tests/unittest/cancel-operation-test.cpp 1970-01-01 00:00:00 +0000
+++ tests/unittest/cancel-operation-test.cpp 2014-06-10 18:21:21 +0000
@@ -0,0 +1,99 @@
1/*
2 * Copyright 2013 Canonical Ltd.
3 *
4 * This file is part of qtorganizer5-eds.
5 *
6 * contact-service-app is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 3.
9 *
10 * contact-service-app is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19
20#include <QObject>
21#include <QtTest>
22#include <QDebug>
23
24#include <QtOrganizer>
25
26#include "qorganizer-eds-engine.h"
27#include "eds-base-test.h"
28
29
30using namespace QtOrganizer;
31
32class CancelOperationTest : public QObject, public EDSBaseTest
33{
34 Q_OBJECT
35private:
36 static const QString defaultCollectionName;
37
38 QOrganizerEDSEngine *m_engine;
39 QOrganizerCollection m_collection;
40
41private Q_SLOTS:
42 void init()
43 {
44 EDSBaseTest::init();
45 m_engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>());
46
47
48 QtOrganizer::QOrganizerManager::Error error;
49 m_collection = QOrganizerCollection();
50 m_collection.setMetaData(QOrganizerCollection::KeyName, defaultCollectionName);
51
52 bool saveResult = m_engine->saveCollection(&m_collection, &error);
53 QVERIFY(saveResult);
54 QCOMPARE(error, QtOrganizer::QOrganizerManager::NoError);
55
56 }
57
58 void cleanup()
59 {
60 delete m_engine;
61 m_engine = 0;
62 EDSBaseTest::cleanup();
63 }
64
65 void cancelOperationBeforeStart()
66 {
67 // initial collections
68 QList<QOrganizerCollection> collections = m_engine->collections(0);
69 int initialCollectionsCount = collections.count();
70
71 QOrganizerEvent event;
72 event.setStartDateTime(QDateTime::currentDateTime());
73 event.setDisplayLabel("displayLabelValue");
74 event.setDescription("descriptionValue");
75 event.setCollectionId(m_collection.id());
76
77 // Try cancel a create item operation
78 QSignalSpy createdItem(m_engine, SIGNAL(itemsAdded(QList<QOrganizerItemId>)));
79 QOrganizerItemSaveRequest req;
80 req.setItem(event);
81 m_engine->startRequest(&req);
82 QCOMPARE(req.state(), QOrganizerAbstractRequest::ActiveState);
83 m_engine->cancelRequest(&req);
84 QCOMPARE(req.state(), QOrganizerAbstractRequest::CanceledState);
85 QTRY_COMPARE(createdItem.count(), 0);
86
87 // check if collection was not create
88 collections = m_engine->collections(0);
89 QCOMPARE(collections.count(), initialCollectionsCount);
90 }
91
92};
93
94const QString CancelOperationTest::defaultCollectionName = QStringLiteral("CancelOperationTest COLLECTION");
95
96
97QTEST_MAIN(CancelOperationTest)
98
99#include "cancel-operation-test.moc"
0100
=== modified file 'tests/unittest/collections-test.cpp'
--- tests/unittest/collections-test.cpp 2014-03-21 18:04:50 +0000
+++ tests/unittest/collections-test.cpp 2014-06-10 18:21:21 +0000
@@ -44,7 +44,7 @@
44private Q_SLOTS:44private Q_SLOTS:
45 void init()45 void init()
46 {46 {
47 EDSBaseTest::init(0);47 EDSBaseTest::init();
48 m_engineWrite = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>());48 m_engineWrite = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>());
49 m_engineRead = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>());49 m_engineRead = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>());
50 }50 }
@@ -52,9 +52,10 @@
52 void cleanup()52 void cleanup()
53 {53 {
54 delete m_engineRead;54 delete m_engineRead;
55 delete m_engineWrite;
55 m_engineRead = 0;56 m_engineRead = 0;
56 EDSBaseTest::cleanup(m_engineWrite);
57 m_engineWrite = 0;57 m_engineWrite = 0;
58 EDSBaseTest::cleanup();
58 }59 }
5960
60 void testCreateCollection()61 void testCreateCollection()
@@ -91,22 +92,35 @@
91 QOrganizerCollection collection;92 QOrganizerCollection collection;
92 QtOrganizer::QOrganizerManager::Error error;93 QtOrganizer::QOrganizerManager::Error error;
93 collection.setMetaData(QOrganizerCollection::KeyName, defaultCollectionName);94 collection.setMetaData(QOrganizerCollection::KeyName, defaultCollectionName);
94 collection.setMetaData(QOrganizerCollection::KeyColor, "red");95 collection.setMetaData(QOrganizerCollection::KeyColor, QStringLiteral("red"));
96 collection.setExtendedMetaData(QStringLiteral("collection-selected"), false);
9597
96 QVERIFY(m_engineWrite->saveCollection(&collection, &error));98 QVERIFY(m_engineWrite->saveCollection(&collection, &error));
97 QCOMPARE(error, QOrganizerManager::NoError);99 QCOMPARE(error, QOrganizerManager::NoError);
98 QVERIFY(!collection.id().isNull());100 QVERIFY(!collection.id().isNull());
99101
102 // Check if the collection was stored correct
103 QOrganizerCollection newCollection = m_engineRead->collection(collection.id(), &error);
104 QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyName).toString(), defaultCollectionName);
105 QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyColor).toString(), QStringLiteral("red"));
106 QCOMPARE(newCollection.extendedMetaData(QStringLiteral("collection-selected")).toBool(), false);
107
108
100 // update the collection109 // update the collection
101 QSignalSpy updateCollection(m_engineWrite, SIGNAL(collectionsChanged(QList<QOrganizerCollectionId>)));110 QSignalSpy updateCollection(m_engineWrite, SIGNAL(collectionsChanged(QList<QOrganizerCollectionId>)));
102 collection.setMetaData(QOrganizerCollection::KeyColor, "blue");111 collection.setMetaData(QOrganizerCollection::KeyColor, "blue");
103 collection.setExtendedMetaData("collection-selected", true);112 collection.setExtendedMetaData("collection-selected", true);
104 QVERIFY(m_engineWrite->saveCollection(&collection, &error));113 QVERIFY(m_engineWrite->saveCollection(&collection, &error));
105 QCOMPARE(error, QOrganizerManager::NoError);114 QCOMPARE(error, QOrganizerManager::NoError);
106 QTRY_COMPARE(updateCollection.count(), 1);115
107116 QTRY_VERIFY(updateCollection.count() > 0);
108 // Check if the collection was stored correct117 QList<QVariant> args = updateCollection.takeFirst();
109 QOrganizerCollection newCollection = m_engineRead->collection(collection.id(), &error);118 QCOMPARE(args.count(), 1);
119 QCOMPARE(args[0].value<QList<QOrganizerCollectionId> >().at(0).toString(), collection.id().toString());
120
121
122 // Check if the collection was updated correct
123 newCollection = m_engineRead->collection(collection.id(), &error);
110 QCOMPARE(error, QOrganizerManager::NoError);124 QCOMPARE(error, QOrganizerManager::NoError);
111 QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyName).toString(), defaultCollectionName);125 QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyName).toString(), defaultCollectionName);
112 QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyColor).toString(), QStringLiteral("blue"));126 QCOMPARE(newCollection.metaData(QOrganizerCollection::KeyColor).toString(), QStringLiteral("blue"));
113127
=== modified file 'tests/unittest/eds-base-test.cpp'
--- tests/unittest/eds-base-test.cpp 2013-12-11 13:16:50 +0000
+++ tests/unittest/eds-base-test.cpp 2014-06-10 18:21:21 +0000
@@ -29,71 +29,45 @@
2929
30EDSBaseTest::EDSBaseTest()30EDSBaseTest::EDSBaseTest()
31{31{
32 GError *error = 0;32 qRegisterMetaType<QList<QOrganizerCollectionId> >();
33 m_sourceRegistry = e_source_registry_new_sync(0, &error);33 qRegisterMetaType<QList<QOrganizerItemId> >();
34 if (error) {34 QCoreApplication::addLibraryPath(QORGANIZER_DEV_PATH);
35 qWarning() << "Fail to create sourge registry:" << error->message;
36 g_error_free(error);
37 Q_ASSERT(false);
38 }
39}35}
4036
41EDSBaseTest::~EDSBaseTest()37EDSBaseTest::~EDSBaseTest()
42{38{
43 g_object_unref(m_sourceRegistry);39}
44}40
4541void EDSBaseTest::init()
46void EDSBaseTest::init(QOrganizerEDSEngine *engine)42{
47{43}
48 cleanup(engine);44
49 // wait to flush DBUS calls45
50 QTest::qWait(1000);46void EDSBaseTest::cleanup()
51}47{
5248 static QStringList defaultSources;
53void EDSBaseTest::cleanup(QOrganizerEDSEngine *engine)49
54{50 if (defaultSources.isEmpty()) {
55 // remove all new items, remove item by item because they can have diff collections51 defaultSources << "qtorganizer:eds::birthdays"
56 Q_FOREACH(const QOrganizerItemId &id, m_newItems) {52 << "qtorganizer:eds::system-calendar"
57 QtOrganizer::QOrganizerManager::Error error;53 << "qtorganizer:eds::system-memo-list"
58 QMap<int, QtOrganizer::QOrganizerManager::Error> errorMap;54 << "qtorganizer:eds::system-task-list";
5955 }
60 engine->removeItems(QList<QOrganizerItemId>() << id,56 QOrganizerEDSEngine *engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>());
61 &errorMap,57 Q_FOREACH(const QOrganizerCollection &col, engine->collections(0)) {
62 &error);58 if (defaultSources.contains(col.id().toString())) {
63 }59 continue;
64 m_newItems.clear();60 }
61 QSignalSpy removeCollection(engine, SIGNAL(collectionsRemoved(QList<QOrganizerCollectionId>)));
62 QVERIFY(engine->removeCollection(col.id(), 0));
63 QTRY_COMPARE(removeCollection.count(), 1);
64
65 QList<QVariant> args = removeCollection.takeFirst();
66 QCOMPARE(args.count(), 1);
67 QCOMPARE(args[0].value<QList<QOrganizerCollectionId> >().at(0).toString(), col.id().toString());
68 }
69
65 delete engine;70 delete engine;
66
67 // remove all collections
68 GError *error;
69 gboolean status;
70 GList *sources = e_source_registry_list_sources(m_sourceRegistry, 0);
71
72 for(GList *i = sources; i != 0; i = i->next) {
73 ESource *source = E_SOURCE(i->data);
74 error = 0;
75 status = true;
76 if (e_source_get_remote_deletable(source)) {
77 status = e_source_remote_delete_sync(source, 0, &error);
78 QTest::qWait(100);
79 } else if (e_source_get_removable(source)) {
80 status = e_source_remove_sync(source, 0, &error);
81 QTest::qWait(100);
82 // check if source was removed
83 const gchar *uid = e_source_get_uid(source);
84 Q_ASSERT(e_source_registry_ref_source(m_sourceRegistry, uid) == 0);
85 }
86 if (error) {
87 qWarning() << "Fail to remove source:" << error->message;
88 g_error_free(error);
89 Q_ASSERT(false);
90 }
91
92 Q_ASSERT(status);
93 }
94
95 g_list_free_full(sources, g_object_unref);
96 e_source_registry_debug_dump(m_sourceRegistry, 0);
97}71}
9872
99void EDSBaseTest::appendToRemove(const QtOrganizer::QOrganizerItemId &id)73void EDSBaseTest::appendToRemove(const QtOrganizer::QOrganizerItemId &id)
10074
=== modified file 'tests/unittest/eds-base-test.h'
--- tests/unittest/eds-base-test.h 2013-12-05 23:30:09 +0000
+++ tests/unittest/eds-base-test.h 2014-06-10 18:21:21 +0000
@@ -32,13 +32,12 @@
32 ~EDSBaseTest();32 ~EDSBaseTest();
3333
34protected:34protected:
35 void init(QOrganizerEDSEngine *engine);35 void init();
36 void cleanup(QOrganizerEDSEngine *engine);36 void cleanup();
3737
38 void appendToRemove(const QtOrganizer::QOrganizerItemId &id);38 void appendToRemove(const QtOrganizer::QOrganizerItemId &id);
3939
40private:40private:
41 ESourceRegistry *m_sourceRegistry;
42 QList<QtOrganizer::QOrganizerItemId> m_newItems;41 QList<QtOrganizer::QOrganizerItemId> m_newItems;
43};42};
4443
4544
=== modified file 'tests/unittest/event-test.cpp'
--- tests/unittest/event-test.cpp 2014-04-17 21:05:38 +0000
+++ tests/unittest/event-test.cpp 2014-06-10 18:21:21 +0000
@@ -48,7 +48,7 @@
48private Q_SLOTS:48private Q_SLOTS:
49 void init()49 void init()
50 {50 {
51 EDSBaseTest::init(0);51 EDSBaseTest::init();
5252
53 signalIndex = 0;53 signalIndex = 0;
54 m_itemRemovedTime = QDateTime();54 m_itemRemovedTime = QDateTime();
@@ -67,7 +67,7 @@
6767
68 void cleanup()68 void cleanup()
69 {69 {
70 EDSBaseTest::cleanup(m_engine);70 EDSBaseTest::cleanup();
71 }71 }
7272
73 //helper73 //helper
7474
=== modified file 'tests/unittest/fetchitem-test.cpp'
--- tests/unittest/fetchitem-test.cpp 2014-01-29 18:10:44 +0000
+++ tests/unittest/fetchitem-test.cpp 2014-06-10 18:21:21 +0000
@@ -42,7 +42,7 @@
42private Q_SLOTS:42private Q_SLOTS:
43 void initTestCase()43 void initTestCase()
44 {44 {
45 EDSBaseTest::init(0);45 EDSBaseTest::init();
46 m_engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>());46 m_engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>());
4747
48 // create test collection48 // create test collection
@@ -87,9 +87,10 @@
87 {87 {
88 m_collection = QOrganizerCollection();88 m_collection = QOrganizerCollection();
89 m_events.clear();89 m_events.clear();
9090 delete m_engine;
91 EDSBaseTest::cleanup(m_engine);
92 m_engine = 0;91 m_engine = 0;
92
93 EDSBaseTest::cleanup();
93 }94 }
9495
95 void testFetchById()96 void testFetchById()
9697
=== modified file 'tests/unittest/recurrence-test.cpp'
--- tests/unittest/recurrence-test.cpp 2014-04-15 19:42:59 +0000
+++ tests/unittest/recurrence-test.cpp 2014-06-10 18:21:21 +0000
@@ -64,6 +64,9 @@
64 QList<QtOrganizer::QOrganizerItemDetail::DetailType>(),64 QList<QtOrganizer::QOrganizerItemDetail::DetailType>(),
65 &errorMap,65 &errorMap,
66 &error);66 &error);
67 if (!saveResult) {
68 qWarning() << "Fail to save items";
69 }
6770
68 Q_ASSERT(saveResult);71 Q_ASSERT(saveResult);
69 Q_ASSERT(error == QtOrganizer::QOrganizerManager::NoError);72 Q_ASSERT(error == QtOrganizer::QOrganizerManager::NoError);
@@ -77,7 +80,7 @@
77private Q_SLOTS:80private Q_SLOTS:
78 void init()81 void init()
79 {82 {
80 EDSBaseTest::init(0);83 EDSBaseTest::init();
8184
82 m_engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>());85 m_engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>());
8386
@@ -92,7 +95,9 @@
9295
93 void cleanup()96 void cleanup()
94 {97 {
95 EDSBaseTest::cleanup(m_engine);98 delete m_engine;
99 m_engine = 0;
100 EDSBaseTest::cleanup();
96 }101 }
97102
98 void testCreateWeeklyEvent()103 void testCreateWeeklyEvent()
99104
=== added file 'tests/unittest/run-eds-test.sh'
--- tests/unittest/run-eds-test.sh 1970-01-01 00:00:00 +0000
+++ tests/unittest/run-eds-test.sh 2014-06-10 18:21:21 +0000
@@ -0,0 +1,16 @@
1#!/bin/sh
2
3#ARG1 - DBUS RUNNERN PATH
4#ARG2 - TEST EXECUTABLE FULL PATH
5#ARG3 - TEST NAME
6#ARG4 - EVOLUTION_CALENDAR_FACTORY FULL PATH
7#ARG5 - EVOLUTION_CALENDAR_FACTORY SERVICE NAME
8#ARG6 - EVOLUTION_SOURCE_REGISTRY FULL PATH
9
10rm -rf $XDG_DATA_HOME
11$1 --keep-env \
12--task $2 --task-name $3 --wait-until-complete --wait-for=org.gnome.evolution.dataserver.Calendar4 \
13--task $4 --task-name "evolution" -r --wait-for=$5 \
14--task $6 --task-name "source-registry" --wait-for=org.gtk.vfs.Daemon -r \
15--task $7 --task-name "gvfsd" -r
16return $?

Subscribers

People subscribed via source and target branches