Index: src/platform/power_manager/xidle_unittest.cc |
diff --git a/src/platform/power_manager/xidle_unittest.cc b/src/platform/power_manager/xidle_unittest.cc |
index ef6a8c5eafda5fd2d4cbb420a8ee70f670487ddc..16f07a5c0139b347b5ef4a172de6a49eb61621b2 100644 |
--- a/src/platform/power_manager/xidle_unittest.cc |
+++ b/src/platform/power_manager/xidle_unittest.cc |
@@ -4,22 +4,64 @@ |
#include <gtest/gtest.h> |
#include <unistd.h> |
+#include <X11/extensions/XTest.h> |
+#include <cstdio> |
-#include <base/command_line.h> |
-#include <base/logging.h> |
- |
+#include "base/command_line.h" |
+#include "base/logging.h" |
#include "power_manager/xidle.h" |
namespace power_manager { |
-class XIdleTest : public ::testing::Test { }; |
+class XIdleTest : public ::testing::Test { |
+ protected: |
+ virtual void SetUp() { |
+ display_ = XOpenDisplay(NULL); |
+ ASSERT_TRUE(idle_.Init(display_)); |
+ } |
+ virtual void TearDown() { |
+ idle_.ClearTimeouts(); |
+ XCloseDisplay(display_); |
+ } |
+ Display *display_; |
+ power_manager::XIdle idle_; |
+}; |
+ |
+static void FakeMotionEvent(Display* display) { |
+ XTestFakeMotionEvent(display, 0, 0, 0, 0); |
Daniel Erat
2010/03/16 21:40:01
i think that this will warp the user's pointer to
davidjames
2010/03/16 22:27:09
Aha, good catch. I didn't notice the warping becau
|
+ XSync(display, false); |
+} |
+ |
+TEST_F(XIdleTest, GetIdleTimeTest) { |
+ int64 idle_time = kint64max; |
+ ASSERT_TRUE(idle_.GetIdleTime(&idle_time)); |
+ ASSERT_NE(idle_time, kint64max); |
+} |
+ |
+TEST_F(XIdleTest, GetIdleTimeWhenNonIdleTest) { |
+ int64 idle_time = kint64max; |
+ FakeMotionEvent(display_); |
+ ASSERT_TRUE(idle_.GetIdleTime(&idle_time)); |
+ ASSERT_LT(idle_time, 50); |
+} |
-TEST(XIdleTest, GetIdleTimeTest) { |
+TEST_F(XIdleTest, MonitorTest) { |
int64 idle_time = kint64max; |
- power_manager::XIdle idle; |
- if (idle.Init()) { |
- ASSERT_TRUE(idle.GetIdleTime(&idle_time)); |
- ASSERT_NE(kint64max, idle_time); |
+ bool is_idle; |
+ FakeMotionEvent(display_); |
+ idle_.AddIdleTimeout(50); |
+ idle_.AddIdleTimeout(100); |
+ for (int i = 0; i < 10; i++) { |
+ ASSERT_TRUE(idle_.GetIdleTime(&idle_time)); |
+ ASSERT_LT(idle_time, 50); |
+ ASSERT_TRUE(idle_.Monitor(&is_idle, &idle_time)); |
+ ASSERT_GT(idle_time, 49); |
+ ASSERT_LT(idle_time, 100); |
+ ASSERT_TRUE(is_idle); |
+ FakeMotionEvent(display_); |
+ ASSERT_TRUE(idle_.Monitor(&is_idle, &idle_time)); |
+ ASSERT_LT(idle_time, 50); |
+ ASSERT_FALSE(is_idle); |
} |
} |