// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ui/events/test/event_generator.h" #include "ui/events/test/test_event_handler.h" #include "ui/views/event_monitor.h" #include "ui/views/test/widget_test.h" namespace views { namespace test { class EventMonitorTest : public WidgetTest { public: EventMonitorTest() : widget_(nullptr) {} // testing::Test: void SetUp() override { WidgetTest::SetUp(); widget_ = CreateTopLevelNativeWidget(); widget_->SetSize(gfx::Size(100, 100)); widget_->Show(); generator_.reset( new ui::test::EventGenerator(GetContext(), widget_->GetNativeWindow())); generator_->set_targeting_application(true); } void TearDown() override { widget_->CloseNow(); WidgetTest::TearDown(); } protected: Widget* widget_; scoped_ptr generator_; ui::test::TestEventHandler handler_; private: DISALLOW_COPY_AND_ASSIGN(EventMonitorTest); }; TEST_F(EventMonitorTest, ShouldReceiveAppEventsWhileInstalled) { scoped_ptr 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(EventMonitorTest, ShouldReceiveWindowEventsWhileInstalled) { scoped_ptr 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(EventMonitorTest, ShouldNotReceiveEventsFromOtherWindow) { Widget* widget2 = CreateTopLevelNativeWidget(); scoped_ptr monitor( EventMonitor::CreateWindowMonitor(&handler_, widget2->GetNativeWindow())); generator_->ClickLeftButton(); EXPECT_EQ(0, handler_.num_mouse_events()); monitor.reset(); widget2->CloseNow(); } } // namespace test } // namespace views