diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2012-11-15 13:46:01 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2012-11-15 13:46:27 +1000 |
commit | b241f777300b8ca2ae3a07b002dde50df77ffaa7 (patch) | |
tree | 6386195b9a5218b610df9b9b8f28d69a50c8521f | |
parent | b8f4aa9bca3d3532c370bc38e82676725ef71160 (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.ac | 1 | ||||
-rw-r--r-- | tests/server/Makefile.am | 2 | ||||
-rw-r--r-- | tests/server/misc.cpp | 86 |
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(); |