Chromium Code Reviews| Index: ui/views/event_monitor_mac_unittest.mm |
| diff --git a/ui/views/event_monitor_mac_unittest.mm b/ui/views/event_monitor_mac_unittest.mm |
| index c6879a7967ad0670c03eb8e5f350c1addfc42689..13dde4d3aec21f52119765ffc239babd616108bd 100644 |
| --- a/ui/views/event_monitor_mac_unittest.mm |
| +++ b/ui/views/event_monitor_mac_unittest.mm |
| @@ -2,66 +2,89 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -#include "ui/views/event_monitor_mac.h" |
| +#import <Cocoa/Cocoa.h> |
| -#include "ui/events/event.h" |
| -#include "ui/events/event_handler.h" |
| -#include "ui/events/event_constants.h" |
| #import "ui/events/test/cocoa_test_event_utils.h" |
| -#import "ui/gfx/test/ui_cocoa_test_helper.h" |
| - |
| -namespace views { |
| +#include "ui/events/test/test_event_handler.h" |
| +#include "ui/views/event_monitor.h" |
| +#include "ui/views/test/widget_test.h" |
| namespace { |
| -class EventMonitorMacTest : public ui::CocoaTest { |
| +class TestEventGenerator { |
| public: |
| - EventMonitorMacTest() {} |
| + TestEventGenerator(gfx::NativeWindow window) : window_(window) {} |
|
tapted
2014/12/10 02:58:27
nit: explicit
Andre
2014/12/10 22:58:05
Deleted, no longer needed.
|
| + |
| + void ClickLeftButton() { |
|
tapted
2014/12/10 02:58:27
Could this just be a member function of EventMonit
|
| + auto events = |
| + cocoa_test_event_utils::MouseClickInView([window_ contentView], 1); |
| + [NSApp sendEvent:events.first]; |
| + [NSApp sendEvent:events.second]; |
|
tapted
2014/12/10 02:58:27
I'm not totally confident that this is non-flaky.
|
| + } |
| private: |
| - DISALLOW_COPY_AND_ASSIGN(EventMonitorMacTest); |
| + gfx::NativeWindow window_; |
| }; |
|
tapted
2014/12/10 02:58:27
nit: DISALLOW_COPY_AND_ASSIGN
|
| -class EventCounter : public ui::EventHandler { |
| +} // namespace |
| + |
| +namespace views { |
| +namespace test { |
| + |
| +class EventMonitorMacTest : public WidgetTest { |
| public: |
| - EventCounter() : event_count_(0), last_event_type_(ui::ET_UNKNOWN) {} |
| - int event_count() const { return event_count_; } |
| - ui::EventType last_event_type() { return last_event_type_; } |
| - |
| - // ui::EventHandler implementation: |
| - virtual void OnEvent(ui::Event* event) override { |
| - ++event_count_; |
| - last_event_type_ = event->type(); |
| + void SetUp() override { |
|
tapted
2014/12/10 02:58:27
nit: // testing::Test:
|
| + WidgetTest::SetUp(); |
| + widget_ = CreateTopLevelNativeWidget(); |
| + widget_->SetSize(gfx::Size(100, 100)); |
| + widget_->Show(); |
| + generator_.reset(new TestEventGenerator(widget_->GetNativeWindow())); |
| + } |
| + void TearDown() override { |
| + widget_->CloseNow(); |
| + WidgetTest::TearDown(); |
| } |
| - private: |
| - int event_count_; |
| - ui::EventType last_event_type_; |
| + protected: |
| + Widget* widget_; |
|
tapted
2014/12/10 02:58:27
nit: initialize widget_(nullptr)
|
| + scoped_ptr<TestEventGenerator> generator_; |
| + ui::test::TestEventHandler handler_; |
| }; |
|
tapted
2014/12/10 02:58:27
nit: private: DISALLOW.. + constructor
|
| -} // namespace |
| +TEST_F(EventMonitorMacTest, ShouldReceiveAppEventsWhileInstalled) { |
| + scoped_ptr<EventMonitor> monitor( |
| + EventMonitor::CreateApplicationMonitor(&handler_)); |
| + |
| + generator_->ClickLeftButton(); |
| + EXPECT_EQ(2, handler_.num_mouse_events()); |
| + |
| + monitor.reset(); |
| + generator_->ClickLeftButton(); |
| + EXPECT_EQ(2, handler_.num_mouse_events()); |
| +} |
| + |
| +TEST_F(EventMonitorMacTest, ShouldReceiveWindowEventsWhileInstalled) { |
| + scoped_ptr<EventMonitor> monitor( |
| + EventMonitor::CreateWindowMonitor(&handler_, widget_->GetNativeWindow())); |
| + |
| + generator_->ClickLeftButton(); |
| + EXPECT_EQ(2, handler_.num_mouse_events()); |
| + |
| + monitor.reset(); |
| + generator_->ClickLeftButton(); |
| + EXPECT_EQ(2, handler_.num_mouse_events()); |
| +} |
| + |
| +TEST_F(EventMonitorMacTest, ShouldNotReceiveEventsFromOtherWindow) { |
| + Widget* widget2 = CreateTopLevelNativeWidget(); |
| + scoped_ptr<EventMonitor> monitor( |
| + EventMonitor::CreateWindowMonitor(&handler_, widget2->GetNativeWindow())); |
| + |
| + generator_->ClickLeftButton(); |
| + EXPECT_EQ(0, handler_.num_mouse_events()); |
| -TEST_F(EventMonitorMacTest, CountEvents) { |
| - EventCounter counter; |
| - NSEvent* event = |
| - cocoa_test_event_utils::EnterExitEventWithType(NSMouseExited); |
| - |
| - // No monitor installed yet, should not receive events. |
| - [NSApp sendEvent:event]; |
| - EXPECT_EQ(0, counter.event_count()); |
| - EXPECT_EQ(ui::ET_UNKNOWN, counter.last_event_type()); |
| - |
| - // Install monitor, should start receiving event. |
| - scoped_ptr<EventMonitor> event_monitor(EventMonitor::Create(&counter)); |
| - [NSApp sendEvent:event]; |
| - EXPECT_EQ(1, counter.event_count()); |
| - EXPECT_EQ(ui::ET_MOUSE_EXITED, counter.last_event_type()); |
| - |
| - // Uninstall monitor, should stop receiving events. |
| - event_monitor.reset(); |
| - [NSApp sendEvent:event]; |
| - EXPECT_EQ(1, counter.event_count()); |
| - EXPECT_EQ(ui::ET_MOUSE_EXITED, counter.last_event_type()); |
| + widget2->CloseNow(); |
| } |
| +} // namespace test |
| } // namespace views |