summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2012-11-15 13:46:01 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2012-11-15 13:46:27 +1000
commitb241f777300b8ca2ae3a07b002dde50df77ffaa7 (patch)
tree6386195b9a5218b610df9b9b8f28d69a50c8521f
parentb8f4aa9bca3d3532c370bc38e82676725ef71160 (diff)
server/misc: add screen saver test
https://bugs.freedesktop.org/show_bug.cgi?id=56649 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--configure.ac1
-rw-r--r--tests/server/Makefile.am2
-rw-r--r--tests/server/misc.cpp86
3 files changed, 88 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index f9459a7..6ea260c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -51,6 +51,7 @@ PKG_CHECK_MODULES(XI22, [inputproto >= 2.2] [xi >= 1.6],
[noop=noop])
PKG_CHECK_MODULES(XTEST, [xtst])
PKG_CHECK_MODULES(XFIXES, [xfixes])
+PKG_CHECK_MODULES(XSCREENSAVER, [xscrnsaver])
PKG_CHECK_MODULES(XORGGTEST, [xorg-gtest >= 0.6.0])
PKG_CHECK_MODULES(WACOM, xorg-wacom)
diff --git a/tests/server/Makefile.am b/tests/server/Makefile.am
index e5060ba..eadea96 100644
--- a/tests/server/Makefile.am
+++ b/tests/server/Makefile.am
@@ -16,7 +16,7 @@ multihead_SOURCES = multihead.cpp $(common_sources)
multihead_LDADD = $(GTEST_LDADDS)
misc_SOURCES = misc.cpp $(common_sources)
-misc_LDADD = $(GTEST_LDADDS)
+misc_LDADD = $(GTEST_LDADDS) $(XSCREENSAVER_LIBS)
barriers_SOURCES = barrires-common.h barriers-validity.cpp barriers-directions.cpp $(common_sources)
barriers_LDADD = $(GTEST_LDADDS) $(XFIXES_LIBS)
diff --git a/tests/server/misc.cpp b/tests/server/misc.cpp
index 3210ebe..883c6a5 100644
--- a/tests/server/misc.cpp
+++ b/tests/server/misc.cpp
@@ -5,6 +5,7 @@
#include <fstream>
#include <xorg/gtest/xorg-gtest.h>
+#include <X11/extensions/scrnsaver.h>
#include "xit-server-input-test.h"
#include "device-interface.h"
@@ -110,6 +111,91 @@ TEST(MiscServerTest, DoubleSegfault)
only get one warning */
}
+class ScreenSaverTest : public XITServerInputTest,
+ public DeviceInterface {
+public:
+ /**
+ * Initializes a standard mouse device.
+ */
+ virtual void SetUp() {
+ SetDevice("mice/PIXART-USB-OPTICAL-MOUSE-HWHEEL.desc");
+ XITServerInputTest::SetUp();
+
+ ASSERT_TRUE(XScreenSaverQueryExtension(Display(), &screensaver_opcode, &screensaver_error_base));
+ }
+
+ /**
+ * Sets up an xorg.conf for a single evdev CoreKeyboard device based on
+ * the evemu device. The input from GetParam() is used as XkbLayout.
+ */
+ virtual void SetUpConfigAndLog() {
+ config.AddDefaultScreenWithDriver();
+ config.AddInputSection("evdev", "--device--",
+ "Option \"CorePointer\" \"on\"\n"
+ "Option \"Device\" \"" + dev->GetDeviceNode() + "\"");
+ /* add default keyboard device to avoid server adding our device again */
+ config.AddInputSection("kbd", "kbd-device",
+ "Option \"CoreKeyboard\" \"on\"\n");
+ config.WriteConfig();
+ }
+
+ int screensaver_opcode;
+ int screensaver_error_base;
+};
+
+
+/* Screen saver activation takes a while, so this test does more things to
+ avoid slowing down the test suite too much */
+TEST_F(ScreenSaverTest, ScreenSaverActivateDeactivate)
+{
+ XORG_TESTCASE("Set screen saver timeout to 1 second.\n"
+ "Register for ScreensaverNotify events.\n"
+ "Wait 1 second\n"
+ "Ensure event is received with state on.\n"
+ "Query server for screensaver info, make sure saver is on\n"
+ "Force screen saver off\n"
+ "Ensure event is received with state off\n"
+ "Query server for screensaver info, make sure saver is off\n"
+ "https://bugs.freedesktop.org/show_bug.cgi?id=56649"
+ );
+
+ ::Display *dpy = Display();
+ XScreenSaverSelectInput(dpy, DefaultRootWindow(dpy), ScreenSaverNotifyMask);
+ XSetScreenSaver(dpy, 1, 0, DontPreferBlanking, DefaultExposures);
+ XSync(dpy, False);
+
+ EXPECT_TRUE(xorg::testing::XServer::WaitForEventOfType(Display(),
+ screensaver_opcode + ScreenSaverNotify,
+ -1,
+ -1,
+ 2000));
+ XEvent ev;
+ XNextEvent(dpy, &ev);
+ XScreenSaverNotifyEvent *scev = reinterpret_cast<XScreenSaverNotifyEvent*>(&ev);
+ EXPECT_EQ(scev->state, ScreenSaverOn);
+
+ XScreenSaverInfo info;
+ XScreenSaverQueryInfo(dpy, DefaultRootWindow(dpy), &info);
+ ASSERT_EQ(info.state, ScreenSaverOn);
+ EXPECT_GT(info.til_or_since, 0U);
+
+ XResetScreenSaver(dpy);
+ XSync(dpy, False);
+
+ EXPECT_TRUE(xorg::testing::XServer::WaitForEventOfType(Display(),
+ screensaver_opcode + ScreenSaverNotify,
+ -1,
+ -1,
+ 2000));
+ XNextEvent(dpy, &ev);
+ EXPECT_EQ(scev->state, ScreenSaverOff);
+
+ XScreenSaverQueryInfo(dpy, DefaultRootWindow(dpy), &info);
+ ASSERT_EQ(info.state, ScreenSaverOff);
+ EXPECT_LE(info.til_or_since, 1000U);
+ EXPECT_LT(info.idle, 1000U);
+}
+
int main(int argc, char **argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();