@@ -26,6 +26,14 @@
27#include "dbusunitysessionservice.h"
27#include "dbusunitysessionservice.h"
29+enum class Action : unsigned
29class SessionBackendTest : public QObject
37class SessionBackendTest : public QObject
@@ -33,32 +41,96 @@ class SessionBackendTest : public QObject
33private Q_SLOTS:
41private Q_SLOTS:
35 void initTestCase() {
43 void initTestCase() {
44+ dbusUnitySession = new QDBusInterface ("com.canonical.Unity",
45+ "/com/canonical/Unity/Session",
46+ "com.canonical.Unity.Session",
47+ QDBusConnection::sessionBus());
38− void testDbusIfaceMethods_data() {
50+ void testUnitySessionLogoutRequested_data() {
39 QTest::addColumn<QString>("method");
51 QTest::addColumn<QString>("method");
41 QTest::newRow("Logout") << "RequestLogout";
53 QTest::newRow("Logout") << "RequestLogout";
44− void testDbusIfaceMethods() {
56+ void testUnitySessionLogoutRequested() {
45 QFETCH(QString, method);
57 QFETCH(QString, method);
47 DBusUnitySessionService dbusUnitySessionService;
59 DBusUnitySessionService dbusUnitySessionService;
48 QCoreApplication::processEvents(); // to let the service register on DBus
60 QCoreApplication::processEvents(); // to let the service register on DBus
50− QDBusConnection con = QDBusConnection::sessionBus();
62+ QSignalSpy spy(&dbusUnitySessionService, SIGNAL(logoutRequested(bool)));
64+ QDBusReply<void> reply = dbusUnitySession->call(method);
65+ QCOMPARE(reply.isValid(), true);
67+ QCOMPARE(spy.count(), 1);
70+ void testGnomeSessionWrapperLogoutRequested() {
71+ DBusUnitySessionService dbusUnitySessionService;
72+ QCoreApplication::processEvents(); // to let the service register on DBus
74+ // Spy on the logoutRequested signal on the /com/canonical/Unity/Session object
75+ // as proof we are actually calling the actual method.
76+ QSignalSpy spy(&dbusUnitySessionService, SIGNAL(logoutRequested(bool)));
78+ DBusGnomeSessionManagerWrapper dbusGnomeSessionManagerWrapper;
79+ QCoreApplication::processEvents(); // to let the service register on DBus
51− QDBusInterface interface ("com.canonical.Unity",
81+ QDBusInterface dbusGnomeSessionWrapper ("com.canonical.Unity",
52− "/com/canonical/Unity/Session",
82+ "/org/gnome/SessionManager/EndSessionDialog",
53− "com.canonical.Unity.Session",
83+ "org.gnome.SessionManager.EndSessionDialog",
54− con);
84+ QDBusConnection::sessionBus());
55− QDBusReply<void> reply;
85+
86+ QCOMPARE(dbusGnomeSessionWrapper.isValid(), true);
88+ // Set the QVariant as a QList<QDBusObjectPath> type
91+ inhibitors.setValue(var);
93+ QDBusReply<void> reply = dbusGnomeSessionWrapper.call("Open", (unsigned)Action::LOGOUT, (unsigned)0, (unsigned)0, inhibitors);
94+ QCOMPARE(reply.isValid(), true);
96+ // Make sure we see the signal being emitted.
97+ QCOMPARE(spy.count(), 1);
100+ void testGnomeSessionWrapperShutdownRequested() {
101+ DBusUnitySessionService dbusUnitySessionService;
102+ QCoreApplication::processEvents(); // to let the service register on DBus
104+ // Spy on the shutdownRequested signal on the /com/canonical/Unity/Session object
105+ // as proof we are actually calling the actual method.
106+ QSignalSpy spy(&dbusUnitySessionService, SIGNAL(shutdownRequested(bool)));
108+ DBusGnomeSessionManagerWrapper dbusGnomeSessionManagerWrapper;
109+ QCoreApplication::processEvents(); // to let the service register on DBus
111+ QDBusInterface dbusGnomeSessionWrapper ("com.canonical.Unity",
112+ "/org/gnome/SessionManager/EndSessionDialog",
113+ "org.gnome.SessionManager.EndSessionDialog",
114+ QDBusConnection::sessionBus());
57− QCOMPARE(interface.isValid(), true);
116+ QCOMPARE(dbusGnomeSessionWrapper.isValid(), true);
58− reply = interface.call(method);
117+
118+ // Set the QVariant as a QList<QDBusObjectPath> type
120+ QVariant inhibitors;
121+ inhibitors.setValue(var);
123+ // * Reboot action translates to the shutdown signal due to some weird idiosyncracy
124+ // in the indicator-session/Unity interaction. *
125+ QDBusReply<void> reply = dbusGnomeSessionWrapper.call("Open", (unsigned)Action::REBOOT, (unsigned)0, (unsigned)0, inhibitors);
59 QCOMPARE(reply.isValid(), true);
126 QCOMPARE(reply.isValid(), true);
128+ // Make sure we see the signal being emitted.
129+ QCOMPARE(spy.count(), 1);
133+ QDBusInterface *dbusUnitySession;
64QTEST_GUILESS_MAIN(SessionBackendTest)
136QTEST_GUILESS_MAIN(SessionBackendTest)