Chromium Code Reviews| Index: ash/wm/maximize_mode/maximize_mode_controller_unittest.cc |
| diff --git a/ash/wm/maximize_mode/maximize_mode_controller_unittest.cc b/ash/wm/maximize_mode/maximize_mode_controller_unittest.cc |
| index 3237524bf4b61f0007049067068f1fa1078d5008..6cf53fb52ff5f30c44ea6efe31c1b381bf22e8de 100644 |
| --- a/ash/wm/maximize_mode/maximize_mode_controller_unittest.cc |
| +++ b/ash/wm/maximize_mode/maximize_mode_controller_unittest.cc |
| @@ -9,6 +9,8 @@ |
| #include "ash/shell.h" |
| #include "ash/test/ash_test_base.h" |
| #include "ash/test/display_manager_test_api.h" |
| +#include "ui/aura/test/event_generator.h" |
| +#include "ui/events/event_handler.h" |
| #include "ui/gfx/vector3d_f.h" |
| namespace ash { |
| @@ -17,6 +19,39 @@ namespace { |
| const float kDegreesToRadians = 3.14159265f / 180.0f; |
| +// Filter to count the number of events seen. |
| +class EventCounter : public ui::EventHandler { |
| + public: |
| + EventCounter(); |
| + virtual ~EventCounter(); |
| + |
| + // Overridden from ui::EventHandler: |
| + virtual void OnEvent(ui::Event* event) OVERRIDE; |
| + |
| + void reset() { |
| + event_count_ = 0; |
| + } |
| + |
| + size_t event_count() { return event_count_; } |
|
oshima
2014/04/10 20:52:57
const
flackr
2014/04/10 21:24:55
Done.
|
| + |
| + private: |
| + size_t event_count_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(EventCounter); |
| +}; |
| + |
| +EventCounter::EventCounter() : event_count_(0) { |
| + Shell::GetInstance()->AddPreTargetHandler(this); |
| +} |
| + |
| +EventCounter::~EventCounter() { |
| + Shell::GetInstance()->RemovePreTargetHandler(this); |
| +} |
| + |
| +void EventCounter::OnEvent(ui::Event* event) { |
| + event_count_++; |
| +} |
| + |
| } // namespace |
| class MaximizeModeControllerTest : public test::AshTestBase { |
| @@ -232,4 +267,50 @@ TEST_F(MaximizeModeControllerTest, RotationOnlyInMaximizeMode) { |
| EXPECT_EQ(gfx::Display::ROTATE_0, GetInternalDisplayRotation()); |
| } |
| +// Tests that maximize mode blocks keyboard events but not touch events. Mouse |
| +// events are blocked too but EventGenerator does not construct mouse events |
| +// with a NativeEvent so they would not be blocked in testing. |
| +TEST_F(MaximizeModeControllerTest, BlocksKeyboard) { |
| + aura::Window* root = Shell::GetPrimaryRootWindow(); |
| + aura::test::EventGenerator event_generator(root, root); |
| + EventCounter counter; |
| + |
| + event_generator.PressKey(ui::VKEY_ESCAPE, 0); |
| + event_generator.ReleaseKey(ui::VKEY_ESCAPE, 0); |
| + EXPECT_GT(counter.event_count(), 0u); |
| + counter.reset(); |
| + |
| + event_generator.PressTouch(); |
| + event_generator.ReleaseTouch(); |
| + EXPECT_GT(counter.event_count(), 0u); |
| + counter.reset(); |
| + |
| + // Open up 270 degrees. |
| + TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), |
| + gfx::Vector3dF(1.0f, 0.0f, 0.0f)); |
| + ASSERT_TRUE(IsMaximizeModeStarted()); |
| + |
| + event_generator.PressKey(ui::VKEY_ESCAPE, 0); |
| + event_generator.ReleaseKey(ui::VKEY_ESCAPE, 0); |
| + EXPECT_EQ(0u, counter.event_count()); |
| + counter.reset(); |
| + |
| + // Touch should not be blocked. |
| + event_generator.PressTouch(); |
| + event_generator.ReleaseTouch(); |
| + EXPECT_GT(counter.event_count(), 0u); |
| + counter.reset(); |
| + |
| + gfx::Vector3dF base; |
| + |
| + // Lid open 90 degrees. |
| + TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), |
| + gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); |
| + |
| + event_generator.PressKey(ui::VKEY_ESCAPE, 0); |
| + event_generator.ReleaseKey(ui::VKEY_ESCAPE, 0); |
| + EXPECT_GT(counter.event_count(), 0u); |
| + counter.reset(); |
| +} |
| + |
| } // namespace ash |