@@ -81,7 +81,99 @@ private Q_SLOTS:
8181 QTRY_COMPARE(spy.count(), 1);
8282 }
8383
84− void testGnomeSessionWrapper_data() {
84+ void testGnomeSessionWrapperWithoutConfirmation_data() {
85+ QTest::addColumn<QString>("method");
86+ QTest::addColumn<QString>("signal");
87+
88+ QTest::newRow("Reboot") << "RequestReboot" << SIGNAL(RebootCalled(bool));
89+ QTest::newRow("Shutdown") << "RequestShutdown" << SIGNAL(PowerOffCalled(bool));
90+ }
91+
92+ void testGnomeSessionWrapperWithoutConfirmation() {
93+ QFETCH(QString, method);
94+ QFETCH(QString, signal);
95+
96+ DBusUnitySessionService dbusUnitySessionService;
97+ DBusGnomeSessionManagerWrapper dbusGnomeSessionManagerWrapper;
98+ QCoreApplication::processEvents(); // to let the services register on DBus
99+
100+ QDBusInterface login1Interface("org.freedesktop.login1",
101+ "/logindsession",
102+ "org.freedesktop.login1.Manager");
103+ QSignalSpy spy(&login1Interface, signal.toUtf8().data());
104+
105+ QDBusInterface dbusGnomeSessionWrapper("org.gnome.SessionManager",
106+ "/org/gnome/SessionManager",
107+ "org.gnome.SessionManager",
108+ QDBusConnection::sessionBus());
109+ QVERIFY(dbusGnomeSessionWrapper.isValid());
110+
111+ QDBusReply<void> reply = dbusGnomeSessionWrapper.call(method);
112+ QVERIFY(reply.isValid());
113+ QTRY_COMPARE(spy.count(), 1);
114+ }
115+
116+ void testGnomeSessionWrapperWithConfirmation_data() {
117+ QTest::addColumn<QString>("method");
118+ QTest::addColumn<QString>("signal");
119+
120+ QTest::newRow("Reboot") << "Reboot" << SIGNAL(RebootRequested(bool));
121+ QTest::newRow("Shutdown") << "Shutdown" << SIGNAL(ShutdownRequested(bool));
122+ }
123+
124+ void testGnomeSessionWrapperWithConfirmation() {
125+ QFETCH(QString, method);
126+ QFETCH(QString, signal);
127+
128+ DBusUnitySessionService dbusUnitySessionService;
129+ DBusGnomeSessionManagerWrapper dbusGnomeSessionManagerWrapper;
130+ QCoreApplication::processEvents(); // to let the services register on DBus
131+
132+ QSignalSpy spy(&dbusUnitySessionService, signal.toUtf8().data());
133+
134+ QDBusInterface dbusGnomeSessionWrapper("org.gnome.SessionManager",
135+ "/org/gnome/SessionManager",
136+ "org.gnome.SessionManager",
137+ QDBusConnection::sessionBus());
138+ QVERIFY(dbusGnomeSessionWrapper.isValid());
139+
140+ QDBusReply<void> reply = dbusGnomeSessionWrapper.call(method);
141+ QVERIFY(reply.isValid());
142+ QCOMPARE(spy.count(), 1);
143+ }
144+
145+ void testGnomeSessionWrapperLogout_data() {
146+ QTest::addColumn<int>("mode");
147+ QTest::addColumn<QString>("signal");
148+
149+ QTest::newRow("Logout") << 0 << SIGNAL(LogoutRequested(bool));
150+ QTest::newRow("LogoutNoDialog") << 1 << SIGNAL(LogoutReady());
151+ QTest::newRow("LogoutNoInhibits") << 2 << SIGNAL(LogoutReady());
152+ QTest::newRow("LogoutNoDialogNoInhibits") << 3 << SIGNAL(LogoutReady());
153+ }
154+
155+ void testGnomeSessionWrapperLogout() {
156+ QFETCH(int, mode);
157+ QFETCH(QString, signal);
158+
159+ DBusUnitySessionService dbusUnitySessionService;
160+ DBusGnomeSessionManagerWrapper dbusGnomeSessionManagerWrapper;
161+ QCoreApplication::processEvents(); // to let the services register on DBus
162+
163+ QSignalSpy spy(&dbusUnitySessionService, signal.toUtf8().data());
164+
165+ QDBusInterface dbusGnomeSessionWrapper("org.gnome.SessionManager",
166+ "/org/gnome/SessionManager",
167+ "org.gnome.SessionManager",
168+ QDBusConnection::sessionBus());
169+ QVERIFY(dbusGnomeSessionWrapper.isValid());
170+
171+ QDBusReply<void> reply = dbusGnomeSessionWrapper.call("Logout", (quint32)mode);
172+ QVERIFY(reply.isValid());
173+ QCOMPARE(spy.count(), 1);
174+ }
175+
176+ void testGnomeSessionDialogWrapper_data() {
85177 QTest::addColumn<uint>("method");
86178 QTest::addColumn<QString>("signal");
87179
@@ -90,7 +182,7 @@ private Q_SLOTS:
90182 QTest::newRow("Reboot") << (uint)Action::REBOOT << "RebootRequested(bool)";
91183 }
92184
93− void testGnomeSessionWrapper() {
185+ void testGnomeSessionDialogWrapper() {
94186 QFETCH(uint, method);
95187 QFETCH(QString, signal);
96188
@@ -102,7 +194,7 @@ private Q_SLOTS:
102194 // .. because QSignalSpy checks the signal signature like this: "if (((aSignal[0] - '0') & 0x03) != QSIGNAL_CODE)"
103195 QSignalSpy spy(&dbusUnitySessionService, qPrintable(signal.prepend(QSIGNAL_CODE)));
104196
105− DBusGnomeSessionManagerWrapper dbusGnomeSessionManagerWrapper;
197+ DBusGnomeSessionManagerDialogWrapper dbusGnomeSessionManagerDialogWrapper;
106198 QCoreApplication::processEvents(); // to let the service register on DBus
107199
108200 QDBusInterface dbusGnomeSessionWrapper("com.canonical.Unity",