[SCM] kdeconnect packaging branch, master, updated. debian/0.9g-1-1183-g9d69498
Maximiliano Curia
maxy at moszumanska.debian.org
Fri Oct 14 14:29:25 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/kdeconnect.git;a=commitdiff;h=4fc3960
The following commit has been merged in the master branch:
commit 4fc39601dd6b94bb9797e087980dc0015f19aec4
Author: Holger Kaelberer <holger.k at elberer.de>
Date: Sat Dec 5 23:13:34 2015 +0100
tests: add test-case for NotificationsListener
---
plugins/notifications/notificationslistener.h | 2 +-
plugins/notifications/notificationsplugin.h | 2 +-
tests/CMakeLists.txt | 10 +-
tests/testnotificationlistener.cpp | 289 ++++++++++++++++++++++++++
4 files changed, 300 insertions(+), 3 deletions(-)
diff --git a/plugins/notifications/notificationslistener.h b/plugins/notifications/notificationslistener.h
index bb37ead..b3d2b46 100644
--- a/plugins/notifications/notificationslistener.h
+++ b/plugins/notifications/notificationslistener.h
@@ -36,7 +36,7 @@ public:
NotificationsDbusInterface* aDbusInterface);
virtual ~NotificationsListener();
-private:
+protected:
KdeConnectPlugin* mPlugin;
NotificationsDbusInterface* dbusInterface;
QHash<QString, NotifyingApplication> applications;
diff --git a/plugins/notifications/notificationsplugin.h b/plugins/notifications/notificationsplugin.h
index 599c89c..a0e2405 100644
--- a/plugins/notifications/notificationsplugin.h
+++ b/plugins/notifications/notificationsplugin.h
@@ -47,7 +47,7 @@ public Q_SLOTS:
virtual bool receivePackage(const NetworkPackage& np) override;
virtual void connected() override;
-private:
+protected:
NotificationsDbusInterface* notificationsDbusInterface;
NotificationsListener* notificationsListener;
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index d585d2b..66aeb5f 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,5 +1,5 @@
find_package(Qt5 REQUIRED COMPONENTS Test)
-find_package(KF5 REQUIRED COMPONENTS KIO)
+find_package(KF5 REQUIRED COMPONENTS KIO Notifications)
include_directories(
${KDEConnectCore_BINARY_DIR}
@@ -19,3 +19,11 @@ ecm_add_test(sendfiletest.cpp LINK_LIBRARIES ${kdeconnect_libraries})
ecm_add_test(networkpackagetests.cpp LINK_LIBRARIES ${kdeconnect_libraries})
ecm_add_test(testsocketlinereader.cpp ../core/backends/lan/socketlinereader.cpp TEST_NAME testsocketlinereader LINK_LIBRARIES ${kdeconnect_libraries})
ecm_add_test(downloadjobtest.cpp ../core/backends/lan/downloadjob.cpp TEST_NAME downloadjobtest LINK_LIBRARIES ${kdeconnect_libraries})
+ecm_add_test(testnotificationlistener.cpp
+ ../plugins/notifications/notificationslistener.cpp
+ ../plugins/notifications/notificationsplugin.cpp
+ ../plugins/notifications/notification.cpp
+ ../plugins/notifications/notifyingapplication.cpp
+ ../plugins/notifications/notificationsdbusinterface.cpp
+ TEST_NAME testnotificationlistener
+ LINK_LIBRARIES ${kdeconnect_libraries} Qt5::DBus KF5::Notifications)
diff --git a/tests/testnotificationlistener.cpp b/tests/testnotificationlistener.cpp
new file mode 100644
index 0000000..6219d27
--- /dev/null
+++ b/tests/testnotificationlistener.cpp
@@ -0,0 +1,289 @@
+/**
+ * Copyright 2015 Holger Kaelberer <holger.k at elberer.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <QSocketNotifier>
+#include <QApplication>
+#include <QNetworkAccessManager>
+#include <QTest>
+#include <QTemporaryFile>
+#include <QSignalSpy>
+#include <QStandardPaths>
+
+#include <KIO/AccessManager>
+
+#include "core/daemon.h"
+#include "core/device.h"
+#include "core/kdeconnectplugin.h"
+#include "kdeconnect-version.h"
+#include "plugins/notifications/notificationsplugin.h"
+#include "plugins/notifications/notificationslistener.h"
+#include "plugins/notifications/notificationsdbusinterface.h"
+#include "plugins/notifications/notifyingapplication.h"
+
+// Tweaked NotificationsPlugin for testing
+class TestNotificationsPlugin : public NotificationsPlugin
+{
+ Q_OBJECT
+public:
+ explicit TestNotificationsPlugin(QObject *parent, const QVariantList &args)
+ : NotificationsPlugin(parent, args)
+ {
+ // make notificationPosted() inspectable:
+ connect(notificationsDbusInterface, &NotificationsDbusInterface::notificationPosted,
+ this, &TestNotificationsPlugin::notificationPosted);
+ }
+
+ virtual ~TestNotificationsPlugin() {};
+
+ // allow to access notificationsListener for testing:
+ NotificationsListener* getNotificationsListener() const
+ {
+ return notificationsListener;
+ }
+
+ void setNotificationsListener(NotificationsListener* value)
+ {
+ notificationsListener = value;
+ }
+
+ NotificationsDbusInterface* getNotificationsDbusInterface() const
+ {
+ return notificationsDbusInterface;
+ }
+
+Q_SIGNALS:
+ void notificationPosted(const QString& publicId);
+};
+
+// Tweaked NotificationsListener for testing:
+class TestedNotificationsListener: public NotificationsListener
+{
+
+public:
+ explicit TestedNotificationsListener(KdeConnectPlugin* aPlugin,
+ NotificationsDbusInterface* aDbusInterface)
+ : NotificationsListener(aPlugin, aDbusInterface)
+ {}
+
+ virtual ~TestedNotificationsListener()
+ {}
+
+ QHash<QString, NotifyingApplication>& getApplications()
+ {
+ return applications;
+ }
+
+ void setApplications(const QHash<QString, NotifyingApplication>& value)
+ {
+ applications = value;
+ }
+
+};
+
+class TestNotificationListener : public QObject
+{
+ Q_OBJECT
+ public:
+ TestNotificationListener()
+ : plugin(nullptr)
+ {
+ QStandardPaths::setTestModeEnabled(true);
+ }
+
+ private Q_SLOTS:
+ void testNotify();
+
+ private:
+ TestNotificationsPlugin* plugin;
+};
+
+void TestNotificationListener::testNotify()
+{
+ //
+ // set things up:
+ //
+
+ QString dId("testid");
+ Device *d = new Device(nullptr, dId); // not setting any parent or we will double free the dbusInterface
+ plugin = new TestNotificationsPlugin(this,
+ QVariantList({ QVariant::fromValue<Device*>(d),
+ "notifications_plugin",
+ {"kdeconnect.notification"}}));
+ QVERIFY(plugin->getNotificationsListener());
+ delete plugin->getNotificationsListener();
+
+ // inject our tweaked NotificationsListener:
+ TestedNotificationsListener* listener = new TestedNotificationsListener(plugin, plugin->getNotificationsDbusInterface());
+ QVERIFY(listener);
+ plugin->setNotificationsListener(listener);
+ QCOMPARE(listener, plugin->getNotificationsListener());
+
+ // make sure config is default:
+ plugin->config()->set("generalPersistent", false);
+ plugin->config()->set("generalIncludeBody", true);
+ plugin->config()->set("generalUrgency", 0);
+ QCOMPARE(plugin->config()->get<bool>("generalPersistent"), false);
+ QCOMPARE(plugin->config()->get<bool>("generalIncludeBody"), true);
+ QCOMPARE(plugin->config()->get<bool>("generalUrgency"), 0);
+
+ // applications are modified directly:
+ listener->getApplications().clear();
+ QCOMPARE(listener->getApplications().count(), 0);
+
+ //
+ // Go !!!
+ //
+
+ uint replacesId = 99;
+ uint retId;
+ int notificationId = 0;
+ QSignalSpy spy(plugin, &TestNotificationsPlugin::notificationPosted);
+
+ // regular Notify call that is synchronized ...
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary", "body", {}, {{}}, 0);
+ // ... should return replacesId,
+ QCOMPARE(retId, replacesId);
+ // ... trigger a notificationPosted signal with incremented id
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst().at(0).toString(), QString::number(++notificationId));
+ // ... and create a new application internally that is initialized correctly:
+ QCOMPARE(listener->getApplications().count(), 1);
+ QVERIFY(listener->getApplications().contains("testApp"));
+ QVERIFY(listener->getApplications()["testApp"].active);
+ QCOMPARE(listener->getApplications()["testApp"].name, QStringLiteral("testApp"));
+ QVERIFY(listener->getApplications()["testApp"].blacklistExpression.pattern().isEmpty());
+ QCOMPARE(listener->getApplications()["testApp"].name, QStringLiteral("testApp"));
+ QCOMPARE(listener->getApplications()["testApp"].icon, QStringLiteral("some-icon"));
+
+ // another one, with other timeout and urgency values:
+ retId = listener->Notify("testApp2", replacesId+1, "some-icon2", "summary2", "body2", {}, {{"urgency", 2}}, 10);
+ QCOMPARE(retId, replacesId+1);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst().at(0).toString(), QString::number(++notificationId));
+ QCOMPARE(listener->getApplications().count(), 2);
+ QVERIFY(listener->getApplications().contains("testApp2"));
+ QVERIFY(listener->getApplications().contains("testApp"));
+
+ // if persistent-only is set, timeouts > 0 are not synced:
+ plugin->config()->set("generalPersistent", true);
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary", "body", {}, {{}}, 1);
+ QCOMPARE(retId, 0U);
+ QCOMPARE(spy.count(), 0);
+ retId = listener->Notify("testApp2", replacesId, "some-icon2", "summary2", "body2", {}, {{}}, 3);
+ QCOMPARE(retId, 0U);
+ QCOMPARE(spy.count(), 0);
+ // but timeout == 0 is
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary", "body", {}, {{}}, 0);
+ QCOMPARE(retId, replacesId);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst().at(0).toString(), QString::number(++notificationId));
+ plugin->config()->set("generalPersistent", false);
+
+ // if min-urgency is set, lower urgency levels are not synced:
+ plugin->config()->set("generalUrgency", 1);
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary", "body", {}, {{"urgency", 0}}, 0);
+ QCOMPARE(retId, 0U);
+ QCOMPARE(spy.count(), 0);
+ // equal urgency is
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary", "body", {}, {{"urgency", 1}}, 0);
+ QCOMPARE(retId, replacesId);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst().at(0).toString(), QString::number(++notificationId));
+ // higher urgency as well
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary", "body", {}, {{"urgency", 2}}, 0);
+ QCOMPARE(retId, replacesId);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst().at(0).toString(), QString::number(++notificationId));
+ plugin->config()->set("generalUrgency", 0);
+
+ // notifications for a deactivated application are not synced:
+ QVERIFY(listener->getApplications().contains("testApp"));
+ listener->getApplications()["testApp"].active = false;
+ QVERIFY(!listener->getApplications()["testApp"].active);
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary", "body", {}, {{"urgency", 0}}, 0);
+ QCOMPARE(retId, 0U);
+ QCOMPARE(spy.count(), 0);
+ // others are still:
+ retId = listener->Notify("testApp2", replacesId+1, "some-icon2", "summary2", "body2", {}, {{}}, 0);
+ QCOMPARE(retId, replacesId+1);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst().at(0).toString(), QString::number(++notificationId));
+ // back to normal:
+ listener->getApplications()["testApp"].active = true;
+ QVERIFY(listener->getApplications()["testApp"].active);
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary", "body", {}, {{}}, 0);
+ QCOMPARE(retId, replacesId);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst().at(0).toString(), QString::number(++notificationId));
+
+ // notifications with blacklisted subjects are not synced:
+ QVERIFY(listener->getApplications().contains("testApp"));
+ listener->getApplications()["testApp"].blacklistExpression.setPattern("black[12]|foo(bar|baz)");
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary black1", "body", {}, {{}}, 0);
+ QCOMPARE(retId, 0U);
+ QCOMPARE(spy.count(), 0);
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary foobar", "body", {}, {{}}, 0);
+ QCOMPARE(retId, 0U);
+ QCOMPARE(spy.count(), 0);
+ // other subjects are synced:
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary foo", "body", {}, {{}}, 0);
+ QCOMPARE(retId, replacesId);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst().at(0).toString(), QString::number(++notificationId));
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary black3", "body", {}, {{}}, 0);
+ QCOMPARE(retId, replacesId);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst().at(0).toString(), QString::number(++notificationId));
+ // also body is checked by blacklist if requested:
+ plugin->config()->set("generalIncludeBody", true);
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary", "body black1", {}, {{}}, 0);
+ QCOMPARE(retId, 0U);
+ QCOMPARE(spy.count(), 0);
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary", "body foobaz", {}, {{}}, 0);
+ QCOMPARE(retId, 0U);
+ QCOMPARE(spy.count(), 0);
+ // body does not matter if inclusion was not requested:
+ plugin->config()->set("generalIncludeBody", false);
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary", "body black1", {}, {{}}, 0);
+ QCOMPARE(retId, replacesId);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst().at(0).toString(), QString::number(++notificationId));
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary", "body foobaz", {}, {{}}, 0);
+ QCOMPARE(retId, replacesId);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst().at(0).toString(), QString::number(++notificationId));
+
+ // back to normal:
+ listener->getApplications()["testApp"].blacklistExpression.setPattern("");
+ plugin->config()->set("generalIncludeBody", true);
+ retId = listener->Notify("testApp", replacesId, "some-icon", "summary", "body", {}, {{}}, 0);
+ QCOMPARE(retId, replacesId);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst().at(0).toString(), QString::number(++notificationId));
+ retId = listener->Notify("testApp2", replacesId, "some-icon2", "summary2", "body2", {}, {{}}, 0);
+ QCOMPARE(retId, replacesId);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.takeFirst().at(0).toString(), QString::number(++notificationId));
+}
+
+
+QTEST_GUILESS_MAIN(TestNotificationListener);
+
+#include "testnotificationlistener.moc"
--
kdeconnect packaging
More information about the pkg-kde-commits
mailing list