[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