From 54e450f7c117e3cbced5773eb732808338b40c0d Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 15 Apr 2015 23:36:37 +0200 Subject: Moved clientapitest to tests --- common/CMakeLists.txt | 2 - common/test/CMakeLists.txt | 15 ----- common/test/clientapitest.cpp | 151 ------------------------------------------ tests/CMakeLists.txt | 1 + tests/clientapitest.cpp | 151 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 152 insertions(+), 168 deletions(-) delete mode 100644 common/test/CMakeLists.txt delete mode 100644 common/test/clientapitest.cpp create mode 100644 tests/clientapitest.cpp diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index a97c7f9..ce237c5 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -46,5 +46,3 @@ SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX) qt5_use_modules(${PROJECT_NAME} Widgets Network) target_link_libraries(${PROJECT_NAME} ${storage_LIBS} akonadi2async) install(TARGETS ${PROJECT_NAME} ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) - -add_subdirectory(test) diff --git a/common/test/CMakeLists.txt b/common/test/CMakeLists.txt deleted file mode 100644 index 98d4ecc..0000000 --- a/common/test/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -set(CMAKE_AUTOMOC ON) -include_directories(${CMAKE_CURRENT_BINARY_DIR}) - -macro(auto_tests) - foreach(_testname ${ARGN}) - add_executable(${_testname} ${_testname}.cpp ${store_SRCS}) - qt5_use_modules(${_testname} Core Test) - target_link_libraries(${_testname} akonadi2common) - add_test(NAME ${_testname} COMMAND ${_testname}) - endforeach(_testname) -endmacro(auto_tests) - -auto_tests ( - clientapitest -) diff --git a/common/test/clientapitest.cpp b/common/test/clientapitest.cpp deleted file mode 100644 index 789c656..0000000 --- a/common/test/clientapitest.cpp +++ /dev/null @@ -1,151 +0,0 @@ -#include -#include -#include - -#include "../clientapi.h" -#include "../facade.h" -#include "../synclistresult.h" - -class RevisionNotifier : public QObject -{ - Q_OBJECT -public: - RevisionNotifier() : QObject() {}; - void notify(qint64 revision) - { - emit revisionChanged(revision); - } - -Q_SIGNALS: - void revisionChanged(qint64); -}; - -class DummyResourceFacade : public Akonadi2::StoreFacade -{ -public: - ~DummyResourceFacade(){}; - virtual Async::Job create(const Akonadi2::ApplicationDomain::Event &domainObject){ return Async::null(); }; - virtual Async::Job modify(const Akonadi2::ApplicationDomain::Event &domainObject){ return Async::null(); }; - virtual Async::Job remove(const Akonadi2::ApplicationDomain::Event &domainObject){ return Async::null(); }; - virtual Async::Job load(const Akonadi2::Query &query, const std::function &resultCallback) - { - return Async::start([this, resultCallback](Async::Future &future) { - qDebug() << "load called"; - for(const auto &result : results) { - resultCallback(result); - } - future.setValue(0); - future.setFinished(); - }); - } - - Async::Job load(const Akonadi2::Query &query, const QSharedPointer > &resultProvider) - { - auto runner = QSharedPointer::create(query); - //The runner only lives as long as the resultProvider - resultProvider->setQueryRunner(runner); - runner->setQuery([this, resultProvider, query](qint64 oldRevision, qint64 newRevision) -> Async::Job { - qDebug() << "Creating query for revisions: " << oldRevision << newRevision; - return Async::start([this, resultProvider, query](Async::Future &future) { - //TODO only emit changes and don't replace everything - resultProvider->clear(); - //rerun query - std::function addCallback = std::bind(&Akonadi2::ResultProvider::add, resultProvider, std::placeholders::_1); - load(query, addCallback).then([resultProvider, &future](qint64 queriedRevision) { - //TODO set revision in result provider? - //TODO update all existing results with new revision - resultProvider->complete(); - future.setValue(queriedRevision); - future.setFinished(); - }).exec(); - }); - }); - - //Ensure the notification is emitted in the right thread - //Otherwise we get crashes as we call revisionChanged from the test. - if (!notifier) { - notifier.reset(new RevisionNotifier); - } - - //TODO somehow disconnect as resultNotifier is destroyed. Otherwise we keep the runner alive forever. - if (query.liveQuery) { - QObject::connect(notifier.data(), &RevisionNotifier::revisionChanged, [runner](qint64 newRevision) { - runner->revisionChanged(newRevision); - }); - } - - return Async::start([runner](Async::Future &future) { - runner->run().then([&future]() { - //TODO if not live query, destroy runner. - future.setFinished(); - }).exec(); - }); - } - - QList results; - QSharedPointer notifier; -}; - -class ClientAPITest : public QObject -{ - Q_OBJECT -private Q_SLOTS: - - void initTestCase() - { - Akonadi2::FacadeFactory::instance().resetFactory(); - } - - void testLoad() - { - DummyResourceFacade facade; - facade.results << QSharedPointer::create("resource", "id", 0, QSharedPointer()); - - Akonadi2::FacadeFactory::instance().registerFacade("dummyresource", - [&facade](bool &externallyManaged) { - externallyManaged = true; - return &facade; - } - ); - - Akonadi2::Query query; - query.resources << "dummyresource"; - query.liveQuery = false; - - async::SyncListResult result(Akonadi2::Store::load(query)); - result.exec(); - QCOMPARE(result.size(), 1); - } - - void testLiveQuery() - { - DummyResourceFacade facade; - facade.results << QSharedPointer::create("resource", "id", 0, QSharedPointer()); - - Akonadi2::FacadeFactory::instance().registerFacade("dummyresource", - [&facade](bool &externallManage){ - externallManage = true; - return &facade; - } - ); - - Akonadi2::Query query; - query.resources << "dummyresource"; - query.liveQuery = true; - - async::SyncListResult result(Akonadi2::Store::load(query)); - result.exec(); - QCOMPARE(result.size(), 1); - - //Enter a second result - facade.results << QSharedPointer::create("resource", "id2", 0, QSharedPointer()); - qWarning() << &facade; - QVERIFY(facade.notifier); - facade.notifier->revisionChanged(2); - QTRY_COMPARE(result.size(), 2); - } - -}; - -QTEST_MAIN(ClientAPITest) -#include "clientapitest.moc" diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index d3e6870..24912f5 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -29,6 +29,7 @@ manual_tests ( ) auto_tests ( + clientapitest storagetest dummyresourcetest domainadaptortest diff --git a/tests/clientapitest.cpp b/tests/clientapitest.cpp new file mode 100644 index 0000000..7bcd7b0 --- /dev/null +++ b/tests/clientapitest.cpp @@ -0,0 +1,151 @@ +#include +#include +#include + +#include "clientapi.h" +#include "facade.h" +#include "synclistresult.h" + +class RevisionNotifier : public QObject +{ + Q_OBJECT +public: + RevisionNotifier() : QObject() {}; + void notify(qint64 revision) + { + emit revisionChanged(revision); + } + +Q_SIGNALS: + void revisionChanged(qint64); +}; + +class DummyResourceFacade : public Akonadi2::StoreFacade +{ +public: + ~DummyResourceFacade(){}; + virtual Async::Job create(const Akonadi2::ApplicationDomain::Event &domainObject){ return Async::null(); }; + virtual Async::Job modify(const Akonadi2::ApplicationDomain::Event &domainObject){ return Async::null(); }; + virtual Async::Job remove(const Akonadi2::ApplicationDomain::Event &domainObject){ return Async::null(); }; + virtual Async::Job load(const Akonadi2::Query &query, const std::function &resultCallback) + { + return Async::start([this, resultCallback](Async::Future &future) { + qDebug() << "load called"; + for(const auto &result : results) { + resultCallback(result); + } + future.setValue(0); + future.setFinished(); + }); + } + + Async::Job load(const Akonadi2::Query &query, const QSharedPointer > &resultProvider) + { + auto runner = QSharedPointer::create(query); + //The runner only lives as long as the resultProvider + resultProvider->setQueryRunner(runner); + runner->setQuery([this, resultProvider, query](qint64 oldRevision, qint64 newRevision) -> Async::Job { + qDebug() << "Creating query for revisions: " << oldRevision << newRevision; + return Async::start([this, resultProvider, query](Async::Future &future) { + //TODO only emit changes and don't replace everything + resultProvider->clear(); + //rerun query + std::function addCallback = std::bind(&Akonadi2::ResultProvider::add, resultProvider, std::placeholders::_1); + load(query, addCallback).then([resultProvider, &future](qint64 queriedRevision) { + //TODO set revision in result provider? + //TODO update all existing results with new revision + resultProvider->complete(); + future.setValue(queriedRevision); + future.setFinished(); + }).exec(); + }); + }); + + //Ensure the notification is emitted in the right thread + //Otherwise we get crashes as we call revisionChanged from the test. + if (!notifier) { + notifier.reset(new RevisionNotifier); + } + + //TODO somehow disconnect as resultNotifier is destroyed. Otherwise we keep the runner alive forever. + if (query.liveQuery) { + QObject::connect(notifier.data(), &RevisionNotifier::revisionChanged, [runner](qint64 newRevision) { + runner->revisionChanged(newRevision); + }); + } + + return Async::start([runner](Async::Future &future) { + runner->run().then([&future]() { + //TODO if not live query, destroy runner. + future.setFinished(); + }).exec(); + }); + } + + QList results; + QSharedPointer notifier; +}; + +class ClientAPITest : public QObject +{ + Q_OBJECT +private Q_SLOTS: + + void initTestCase() + { + Akonadi2::FacadeFactory::instance().resetFactory(); + } + + void testLoad() + { + DummyResourceFacade facade; + facade.results << QSharedPointer::create("resource", "id", 0, QSharedPointer()); + + Akonadi2::FacadeFactory::instance().registerFacade("dummyresource", + [&facade](bool &externallyManaged) { + externallyManaged = true; + return &facade; + } + ); + + Akonadi2::Query query; + query.resources << "dummyresource"; + query.liveQuery = false; + + async::SyncListResult result(Akonadi2::Store::load(query)); + result.exec(); + QCOMPARE(result.size(), 1); + } + + void testLiveQuery() + { + DummyResourceFacade facade; + facade.results << QSharedPointer::create("resource", "id", 0, QSharedPointer()); + + Akonadi2::FacadeFactory::instance().registerFacade("dummyresource", + [&facade](bool &externallManage){ + externallManage = true; + return &facade; + } + ); + + Akonadi2::Query query; + query.resources << "dummyresource"; + query.liveQuery = true; + + async::SyncListResult result(Akonadi2::Store::load(query)); + result.exec(); + QCOMPARE(result.size(), 1); + + //Enter a second result + facade.results << QSharedPointer::create("resource", "id2", 0, QSharedPointer()); + qWarning() << &facade; + QVERIFY(facade.notifier); + facade.notifier->revisionChanged(2); + QTRY_COMPARE(result.size(), 2); + } + +}; + +QTEST_MAIN(ClientAPITest) +#include "clientapitest.moc" -- cgit v1.2.3