summaryrefslogtreecommitdiffstats
path: root/ui/views/widget/widget_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ui/views/widget/widget_unittest.cc')
-rw-r--r--ui/views/widget/widget_unittest.cc117
1 files changed, 117 insertions, 0 deletions
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc
index b8bb6c6..dc11612 100644
--- a/ui/views/widget/widget_unittest.cc
+++ b/ui/views/widget/widget_unittest.cc
@@ -122,6 +122,81 @@ class MouseView : public View {
DISALLOW_COPY_AND_ASSIGN(MouseView);
};
+// A view that keeps track of the events it receives, but consumes no events.
+class EventCountView : public View {
+ public:
+ EventCountView() {}
+ virtual ~EventCountView() {}
+
+ int GetEventCount(ui::EventType type) {
+ return event_count_[type];
+ }
+
+ void ResetCounts() {
+ event_count_.clear();
+ }
+
+ private:
+ void RecordEvent(const ui::Event& event) {
+ ++event_count_[event.type()];
+ }
+
+ // Overridden from View:
+ virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE {
+ RecordEvent(event);
+ return false;
+ }
+ virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE {
+ RecordEvent(event);
+ return false;
+ }
+ virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE {
+ RecordEvent(event);
+ }
+ virtual void OnMouseMoved(const ui::MouseEvent& event) OVERRIDE {
+ RecordEvent(event);
+ }
+ virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE {
+ RecordEvent(event);
+ }
+ virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE {
+ RecordEvent(event);
+ }
+ virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE {
+ RecordEvent(event);
+ return false;
+ }
+ virtual bool OnKeyReleased(const ui::KeyEvent& event) OVERRIDE {
+ RecordEvent(event);
+ return false;
+ }
+ virtual bool OnMouseWheel(const ui::MouseWheelEvent& event) OVERRIDE {
+ RecordEvent(event);
+ return false;
+ }
+
+ // Overridden from ui::EventHandler:
+ virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE {
+ RecordEvent(*event);
+ }
+ virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE {
+ RecordEvent(*event);
+ }
+ virtual void OnScrollEvent(ui::ScrollEvent* event) OVERRIDE {
+ RecordEvent(*event);
+ }
+ virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE {
+ RecordEvent(*event);
+ }
+ virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE {
+ RecordEvent(*event);
+ }
+
+ std::map<ui::EventType, int> event_count_;
+
+ DISALLOW_COPY_AND_ASSIGN(EventCountView);
+};
+
// A view that does a capture on gesture-begin events.
class GestureCaptureView : public View {
public:
@@ -1167,6 +1242,48 @@ TEST_F(WidgetTest, DesktopNativeWidgetAuraNoPaintAfterHideTest) {
#endif // !defined(OS_CHROMEOS)
+// Tests that wheel events generted from scroll events are targetted to the
+// views under the cursor when the focused view does not processed them.
+TEST_F(WidgetTest, WheelEventsFromScrollEventTarget) {
+ EventCountView* focused_view = new EventCountView;
+ focused_view->set_focusable(true);
+
+ EventCountView* cursor_view = new EventCountView;
+
+ focused_view->SetBounds(0, 0, 50, 40);
+ cursor_view->SetBounds(60, 0, 50, 40);
+
+ Widget* widget = CreateTopLevelPlatformWidget();
+ widget->GetRootView()->AddChildView(focused_view);
+ widget->GetRootView()->AddChildView(cursor_view);
+
+ focused_view->RequestFocus();
+ EXPECT_TRUE(focused_view->HasFocus());
+
+ // Generate a scroll event on the cursor view. The focused view will receive a
+ // wheel event, but since it doesn't process the event, the view under the
+ // cursor will receive the wheel event.
+ ui::ScrollEvent scroll(ui::ET_SCROLL, gfx::Point(65, 5), 0, 0, 20);
+ widget->OnScrollEvent(&scroll);
+
+ EXPECT_EQ(0, focused_view->GetEventCount(ui::ET_SCROLL));
+ EXPECT_EQ(1, focused_view->GetEventCount(ui::ET_MOUSEWHEEL));
+
+ EXPECT_EQ(1, cursor_view->GetEventCount(ui::ET_SCROLL));
+ EXPECT_EQ(1, cursor_view->GetEventCount(ui::ET_MOUSEWHEEL));
+
+ focused_view->ResetCounts();
+ cursor_view->ResetCounts();
+
+ ui::ScrollEvent scroll2(ui::ET_SCROLL, gfx::Point(5, 5), 0, 0, 20);
+ widget->OnScrollEvent(&scroll2);
+ EXPECT_EQ(1, focused_view->GetEventCount(ui::ET_SCROLL));
+ EXPECT_EQ(1, focused_view->GetEventCount(ui::ET_MOUSEWHEEL));
+
+ EXPECT_EQ(0, cursor_view->GetEventCount(ui::ET_SCROLL));
+ EXPECT_EQ(0, cursor_view->GetEventCount(ui::ET_MOUSEWHEEL));
+}
+
#endif // defined(USE_AURA)
} // namespace