summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-10 05:02:24 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-10 05:02:24 +0000
commit9353037bd4eb771874fe3567929b81a726a005df (patch)
tree889683165b9120767eb519b5ab51c1ff81062b7c /ui
parent57aee0e1a6556241144b31c82b09cfcbf0ca9f2f (diff)
downloadchromium_src-9353037bd4eb771874fe3567929b81a726a005df.zip
chromium_src-9353037bd4eb771874fe3567929b81a726a005df.tar.gz
chromium_src-9353037bd4eb771874fe3567929b81a726a005df.tar.bz2
events: Add some test.
Add a test to verify that the event-handlers are called in the right order. BUG=none Review URL: https://chromiumcodereview.appspot.com/10912168 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@155663 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r--ui/base/events/event.h6
-rw-r--r--ui/base/events/event_constants.h6
-rw-r--r--ui/base/events/event_dispatcher.h6
-rw-r--r--ui/base/events/event_dispatcher_unittest.cc185
-rw-r--r--ui/base/events/event_handler.h6
-rw-r--r--ui/base/events/event_target.h6
-rw-r--r--ui/ui_unittests.gypi1
7 files changed, 201 insertions, 15 deletions
diff --git a/ui/base/events/event.h b/ui/base/events/event.h
index d2cec15..a370c391 100644
--- a/ui/base/events/event.h
+++ b/ui/base/events/event.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef UI_BASE_EVENTS_EVENT_CONSTANTS_EVENT_H_
-#define UI_BASE_EVENTS_EVENT_CONSTANTS_EVENT_H_
+#ifndef UI_BASE_EVENTS_EVENT_H_
+#define UI_BASE_EVENTS_EVENT_H_
#include "base/basictypes.h"
#include "base/compiler_specific.h"
@@ -620,4 +620,4 @@ class UI_EXPORT GestureEvent : public LocatedEvent {
} // namespace ui
-#endif // UI_BASE_EVENTS_EVENT_CONSTANTS_EVENT_H_
+#endif // UI_BASE_EVENTS_EVENT_H_
diff --git a/ui/base/events/event_constants.h b/ui/base/events/event_constants.h
index e213bf8..91d0be5 100644
--- a/ui/base/events/event_constants.h
+++ b/ui/base/events/event_constants.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef UI_BASE_EVENTS_EVENT_CONSTANTS_EVENTS_H_
-#define UI_BASE_EVENTS_EVENT_CONSTANTS_EVENTS_H_
+#ifndef UI_BASE_EVENTS_EVENT_CONSTANTS_H_
+#define UI_BASE_EVENTS_EVENT_CONSTANTS_H_
#include "base/event_types.h"
#include "ui/base/keycodes/keyboard_codes.h"
@@ -228,4 +228,4 @@ UI_EXPORT bool IsMouseEventFromTouch(UINT message);
} // namespace ui
-#endif // UI_BASE_EVENTS_EVENT_CONSTANTS_EVENTS_H_
+#endif // UI_BASE_EVENTS_EVENT_CONSTANTS_H_
diff --git a/ui/base/events/event_dispatcher.h b/ui/base/events/event_dispatcher.h
index 976a124..8e475be 100644
--- a/ui/base/events/event_dispatcher.h
+++ b/ui/base/events/event_dispatcher.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef UI_BASE_EVENTS_EVENT_CONSTANTS_EVENTS_EVENT_DISPATCHER_H_
-#define UI_BASE_EVENTS_EVENT_CONSTANTS_EVENTS_EVENT_DISPATCHER_H_
+#ifndef UI_BASE_EVENTS_EVENT_DISPATCHER_H_
+#define UI_BASE_EVENTS_EVENT_DISPATCHER_H_
#include "ui/base/events/event.h"
#include "ui/base/events/event_constants.h"
@@ -111,4 +111,4 @@ class UI_EXPORT EventDispatcher {
} // namespace ui
-#endif // UI_BASE_EVENTS_EVENT_CONSTANTS_EVENTS_EVENT_DISPATCHER_H_
+#endif // UI_BASE_EVENTS_EVENT_DISPATCHER_H_
diff --git a/ui/base/events/event_dispatcher_unittest.cc b/ui/base/events/event_dispatcher_unittest.cc
new file mode 100644
index 0000000..9230cb5
--- /dev/null
+++ b/ui/base/events/event_dispatcher_unittest.cc
@@ -0,0 +1,185 @@
+// Copyright (c) 2012 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/base/events/event_dispatcher.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace ui {
+
+namespace {
+
+class TestEventDispatcher : public EventDispatcher {
+ public:
+ TestEventDispatcher() {}
+ virtual ~TestEventDispatcher() {}
+
+ private:
+ // Overridden from EventDispatcher:
+ virtual bool CanDispatchToTarget(EventTarget* target) OVERRIDE {
+ return true;
+ }
+
+ virtual void ProcessPreTargetList(EventHandlerList* list) OVERRIDE {
+ }
+
+ virtual void ProcessPostTargetList(EventHandlerList* list) OVERRIDE {
+ }
+
+ DISALLOW_COPY_AND_ASSIGN(TestEventDispatcher);
+};
+
+class TestTarget : public EventTarget {
+ public:
+ TestTarget() : parent_(NULL) {}
+ virtual ~TestTarget() {}
+
+ void set_parent(TestTarget* parent) { parent_ = parent; }
+
+ void AddHandlerId(int id) {
+ handler_list_.push_back(id);
+ }
+
+ const std::vector<int>& handler_list() const { return handler_list_; }
+
+ void Reset() {
+ handler_list_.clear();
+ }
+
+ private:
+ // Overridden from EventTarget:
+ virtual bool CanAcceptEvents() OVERRIDE {
+ return true;
+ }
+
+ virtual EventTarget* GetParentTarget() OVERRIDE {
+ return parent_;
+ }
+
+ TestTarget* parent_;
+ std::vector<int> handler_list_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestTarget);
+};
+
+class TestEventHandler : public EventHandler {
+ public:
+ TestEventHandler(int id)
+ : id_(id),
+ event_result_(ER_UNHANDLED) {
+ }
+
+ virtual ~TestEventHandler() {}
+
+ void ReceivedEventForTarget(EventTarget* target) {
+ static_cast<TestTarget*>(target)->AddHandlerId(id_);
+ }
+
+ void set_event_result(EventResult result) { event_result_ = result; }
+
+ private:
+ // Overridden from EventHandler:
+ virtual EventResult OnKeyEvent(KeyEvent* event) OVERRIDE {
+ ReceivedEventForTarget(event->target());
+ return event_result_;
+ }
+
+ virtual EventResult OnMouseEvent(MouseEvent* event) OVERRIDE {
+ ReceivedEventForTarget(event->target());
+ return event_result_;
+ }
+
+ virtual EventResult OnScrollEvent(ScrollEvent* event) OVERRIDE {
+ ReceivedEventForTarget(event->target());
+ return event_result_;
+ }
+
+ virtual TouchStatus OnTouchEvent(TouchEvent* event) OVERRIDE {
+ ReceivedEventForTarget(event->target());
+ return ui::TOUCH_STATUS_UNKNOWN;
+ }
+
+ virtual EventResult OnGestureEvent(GestureEvent* event) OVERRIDE {
+ ReceivedEventForTarget(event->target());
+ return event_result_;
+ }
+
+ int id_;
+ EventResult event_result_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestEventHandler);
+};
+
+} // namespace
+
+TEST(EventDispatcherTest, EventDispatchOrder) {
+ TestEventDispatcher dispatcher;
+ TestTarget parent, child;
+ TestEventHandler h1(1), h2(2), h3(3), h4(4);
+ TestEventHandler h5(5), h6(6), h7(7), h8(8);
+
+ child.set_parent(&parent);
+
+ parent.AddPreTargetHandler(&h1);
+ parent.AddPreTargetHandler(&h2);
+
+ child.AddPreTargetHandler(&h3);
+ child.AddPreTargetHandler(&h4);
+
+ child.AddPostTargetHandler(&h5);
+ child.AddPostTargetHandler(&h6);
+
+ parent.AddPostTargetHandler(&h7);
+ parent.AddPostTargetHandler(&h8);
+
+ ui::MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(3, 4),
+ gfx::Point(3, 4), 0);
+ int result = dispatcher.ProcessEvent(&child, &mouse);
+ EXPECT_FALSE(result & ER_CONSUMED);
+ EXPECT_FALSE(result & ER_HANDLED);
+
+ // Note that the pre-handlers for the target itself (i.e. |child|) will not
+ // receive these events. This is for compatibility reasons for how
+ // event-filters behave in aura. The desired behaviour is that the
+ // pre-handlers for the target will receive the events before the target.
+ // http://crbug.com/147523
+ int expected[] = { 1, 2, 5, 6, 7, 8 };
+ EXPECT_EQ(
+ std::vector<int>(expected, expected + sizeof(expected) / sizeof(int)),
+ child.handler_list());
+
+ child.Reset();
+
+ h1.set_event_result(ER_HANDLED);
+ result = dispatcher.ProcessEvent(&child, &mouse);
+ EXPECT_FALSE(result & ER_CONSUMED);
+ EXPECT_TRUE(result & ER_HANDLED);
+ EXPECT_EQ(
+ std::vector<int>(expected, expected + sizeof(expected) / sizeof(int)),
+ child.handler_list());
+
+ child.Reset();
+
+ int nexpected[] = { 1, 2, 5 };
+ h5.set_event_result(ER_CONSUMED);
+ result = dispatcher.ProcessEvent(&child, &mouse);
+ EXPECT_TRUE(result & ER_CONSUMED);
+ EXPECT_TRUE(result & ER_HANDLED);
+ EXPECT_EQ(
+ std::vector<int>(nexpected, nexpected + sizeof(nexpected) / sizeof(int)),
+ child.handler_list());
+
+ child.Reset();
+
+ int exp[] = { 1 };
+ h1.set_event_result(ER_CONSUMED);
+ result = dispatcher.ProcessEvent(&child, &mouse);
+ EXPECT_TRUE(result & ER_CONSUMED);
+ EXPECT_FALSE(result & ER_HANDLED);
+ EXPECT_EQ(
+ std::vector<int>(exp, exp + sizeof(exp) / sizeof(int)),
+ child.handler_list());
+}
+
+} // namespace ui
diff --git a/ui/base/events/event_handler.h b/ui/base/events/event_handler.h
index 4d881dd..3e2e9c52 100644
--- a/ui/base/events/event_handler.h
+++ b/ui/base/events/event_handler.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef UI_BASE_EVENTS_EVENT_CONSTANTS_EVENTS_EVENT_HANDLER_H_
-#define UI_BASE_EVENTS_EVENT_CONSTANTS_EVENTS_EVENT_HANDLER_H_
+#ifndef UI_BASE_EVENTS_EVENT_HANDLER_H_
+#define UI_BASE_EVENTS_EVENT_HANDLER_H_
#include <vector>
@@ -41,4 +41,4 @@ typedef std::vector<EventHandler*> EventHandlerList;
} // namespace ui
-#endif // UI_BASE_EVENTS_EVENT_CONSTANTS_EVENTS_EVENT_HANDLER_H_
+#endif // UI_BASE_EVENTS_EVENT_HANDLER_H_
diff --git a/ui/base/events/event_target.h b/ui/base/events/event_target.h
index 0c914b7..22962d4 100644
--- a/ui/base/events/event_target.h
+++ b/ui/base/events/event_target.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef UI_BASE_EVENTS_EVENT_CONSTANTS_EVENTS_EVENT_TARGET_H_
-#define UI_BASE_EVENTS_EVENT_CONSTANTS_EVENTS_EVENT_TARGET_H_
+#ifndef UI_BASE_EVENTS_EVENT_TARGET_H_
+#define UI_BASE_EVENTS_EVENT_TARGET_H_
#include "base/compiler_specific.h"
#include "ui/base/events/event_handler.h"
@@ -72,4 +72,4 @@ class UI_EXPORT EventTarget : public EventHandler {
} // namespace ui
-#endif // UI_BASE_EVENTS_EVENT_CONSTANTS_EVENTS_EVENT_TARGET_H_
+#endif // UI_BASE_EVENTS_EVENT_TARGET_H_
diff --git a/ui/ui_unittests.gypi b/ui/ui_unittests.gypi
index 0d569f4..83fb7e3 100644
--- a/ui/ui_unittests.gypi
+++ b/ui/ui_unittests.gypi
@@ -74,6 +74,7 @@
'base/cocoa/events_mac_unittest.mm',
'base/cocoa/focus_tracker_unittest.mm',
'base/dialogs/select_file_dialog_win_unittest.cc',
+ 'base/events/event_dispatcher_unittest.cc',
'base/events/event_unittest.cc',
'base/gtk/gtk_expanded_container_unittest.cc',
'base/gtk/gtk_im_context_util_unittest.cc',