| Index: views/view_unittest.cc
|
| diff --git a/views/view_unittest.cc b/views/view_unittest.cc
|
| index a44ce6f260fee2d78c94013ef7e5ba32a56ccd4d..e768b1f7810882b58d0746fa8e2519eeee4dd417 100644
|
| --- a/views/view_unittest.cc
|
| +++ b/views/view_unittest.cc
|
| @@ -14,9 +14,6 @@
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "views/background.h"
|
| #include "views/controls/button/checkbox.h"
|
| -#if defined(OS_WIN)
|
| -#include "views/controls/button/native_button_win.h"
|
| -#endif
|
| #include "views/controls/native/native_view_host.h"
|
| #include "views/controls/scroll_view.h"
|
| #include "views/controls/textfield/textfield.h"
|
| @@ -26,14 +23,19 @@
|
| #include "views/view.h"
|
| #include "views/views_delegate.h"
|
| #include "views/widget/root_view.h"
|
| +#include "views/window/dialog_delegate.h"
|
| +#include "views/window/window.h"
|
| +
|
| #if defined(OS_WIN)
|
| #include "views/widget/widget_win.h"
|
| +#include "views/controls/button/native_button_win.h"
|
| #elif defined(OS_LINUX)
|
| #include "views/widget/widget_gtk.h"
|
| #include "views/window/window_gtk.h"
|
| #endif
|
| -#include "views/window/dialog_delegate.h"
|
| -#include "views/window/window.h"
|
| +#if defined(TOUCH_UI)
|
| +#include "views/touchui/gesture_manager.h"
|
| +#endif
|
|
|
| using namespace views;
|
|
|
| @@ -155,6 +157,10 @@ class TestView : public View {
|
| child_removed_ = false;
|
| last_mouse_event_type_ = 0;
|
| location_.SetPoint(0, 0);
|
| +#if defined(TOUCH_UI)
|
| + last_touch_event_type_ = 0;
|
| + last_touch_event_was_handled_ = false;
|
| +#endif
|
| last_clip_.setEmpty();
|
| accelerator_count_map_.clear();
|
| }
|
| @@ -165,6 +171,9 @@ class TestView : public View {
|
| virtual bool OnMousePressed(const MouseEvent& event);
|
| virtual bool OnMouseDragged(const MouseEvent& event);
|
| virtual void OnMouseReleased(const MouseEvent& event, bool canceled);
|
| +#if defined(TOUCH_UI)
|
| + virtual bool OnTouchEvent(const TouchEvent& event);
|
| +#endif
|
| virtual void Paint(gfx::Canvas* canvas);
|
| virtual bool AcceleratorPressed(const Accelerator& accelerator);
|
|
|
| @@ -183,6 +192,12 @@ class TestView : public View {
|
| int last_mouse_event_type_;
|
| gfx::Point location_;
|
|
|
| +#if defined(TOUCH_UI)
|
| + // TouchEvent
|
| + int last_touch_event_type_;
|
| + bool last_touch_event_was_handled_;
|
| +#endif
|
| +
|
| // Painting
|
| SkRect last_clip_;
|
|
|
| @@ -190,6 +205,31 @@ class TestView : public View {
|
| std::map<Accelerator, int> accelerator_count_map_;
|
| };
|
|
|
| +#if defined(TOUCH_UI)
|
| +// Mock instance of the GestureManager for testing.
|
| +class MockGestureManager : public GestureManager {
|
| + public:
|
| + // Reset all test state
|
| + void Reset() {
|
| + last_touch_event_ = 0;
|
| + last_view_ = NULL;
|
| + previously_handled_flag_ = false;
|
| + }
|
| +
|
| + bool previously_handled_flag_;
|
| + bool ProcessTouchEventForGesture(const TouchEvent& event,
|
| + View* source,
|
| + bool previouslyHandled);
|
| + MockGestureManager();
|
| +
|
| + int last_touch_event_;
|
| + View *last_view_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MockGestureManager);
|
| +};
|
| +
|
| +#endif
|
| +
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // DidChangeBounds
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -383,6 +423,114 @@ TEST_F(ViewTest, MouseEvent) {
|
| window->CloseNow();
|
| }
|
|
|
| +#if defined(TOUCH_UI)
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// TouchEvent
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +bool MockGestureManager::ProcessTouchEventForGesture(
|
| + const TouchEvent& event,
|
| + View* source,
|
| + bool previouslyHandled) {
|
| + last_touch_event_ = event.GetType();
|
| + last_view_ = source;
|
| + previously_handled_flag_ = previouslyHandled;
|
| + return true;
|
| +}
|
| +
|
| +MockGestureManager::MockGestureManager() {
|
| +}
|
| +
|
| +bool TestView::OnTouchEvent(const TouchEvent& event) {
|
| + last_touch_event_type_ = event.GetType();
|
| + location_.SetPoint(event.x(), event.y());
|
| + return last_touch_event_was_handled_;
|
| +}
|
| +
|
| +TEST_F(ViewTest, TouchEvent) {
|
| + MockGestureManager* gm = new MockGestureManager();
|
| +
|
| + TestView* v1 = new TestView();
|
| + v1->SetBounds(0, 0, 300, 300);
|
| +
|
| + TestView* v2 = new TestView();
|
| + v2->SetBounds(100, 100, 100, 100);
|
| +
|
| + scoped_ptr<Widget> window(CreateWidget());
|
| +#if defined(OS_WIN)
|
| + // This code would need to be here when we support
|
| + // touch on windows?
|
| + WidgetWin* window_win = static_cast<WidgetWin*>(window.get());
|
| + window_win->set_delete_on_destroy(false);
|
| + window_win->set_window_style(WS_OVERLAPPEDWINDOW);
|
| + window_win->Init(NULL, gfx::Rect(50, 50, 650, 650));
|
| +#endif
|
| + RootView* root = window->GetRootView();
|
| +
|
| + root->AddChildView(v1);
|
| + root->SetGestureManager(gm);
|
| + v1->AddChildView(v2);
|
| +
|
| + v1->Reset();
|
| + v2->Reset();
|
| + gm->Reset();
|
| +
|
| + TouchEvent pressed(Event::ET_TOUCH_PRESSED,
|
| + 110,
|
| + 120,
|
| + 0, /* no flags */
|
| + 0 /* first finger touch */);
|
| + v2->last_touch_event_was_handled_ = true;
|
| + root->OnTouchEvent(pressed);
|
| +
|
| + EXPECT_EQ(v2->last_touch_event_type_, Event::ET_TOUCH_PRESSED);
|
| + EXPECT_EQ(v2->location_.x(), 10);
|
| + EXPECT_EQ(v2->location_.y(), 20);
|
| + // Make sure v1 did not receive the event
|
| + EXPECT_EQ(v1->last_touch_event_type_, 0);
|
| +
|
| + EXPECT_EQ(gm->last_touch_event_, Event::ET_TOUCH_PRESSED);
|
| + EXPECT_EQ(gm->last_view_, root);
|
| + EXPECT_EQ(gm->previously_handled_flag_, true);
|
| +
|
| + // Drag event out of bounds. Should still go to v2
|
| + v1->Reset();
|
| + v2->Reset();
|
| + TouchEvent dragged(Event::ET_TOUCH_MOVED,
|
| + 50,
|
| + 40,
|
| + 0, /* no flags */
|
| + 0 /* first finger touch */);
|
| + root->OnTouchEvent(dragged);
|
| + EXPECT_EQ(v2->last_touch_event_type_, Event::ET_TOUCH_MOVED);
|
| + EXPECT_EQ(v2->location_.x(), -50);
|
| + EXPECT_EQ(v2->location_.y(), -60);
|
| + // Make sure v1 did not receive the event
|
| + EXPECT_EQ(v1->last_touch_event_type_, 0);
|
| +
|
| + EXPECT_EQ(gm->last_touch_event_, Event::ET_TOUCH_MOVED);
|
| + EXPECT_EQ(gm->last_view_, root);
|
| + EXPECT_EQ(gm->previously_handled_flag_, true);
|
| +
|
| + // Releasted event out of bounds. Should still go to v2
|
| + v1->Reset();
|
| + v2->Reset();
|
| + TouchEvent released(Event::ET_TOUCH_RELEASED, 0, 0, 0, 0 /* first finger */);
|
| + v2->last_touch_event_was_handled_ = true;
|
| + root->OnTouchEvent(released);
|
| + EXPECT_EQ(v2->last_touch_event_type_, Event::ET_TOUCH_RELEASED);
|
| + EXPECT_EQ(v2->location_.x(), -100);
|
| + EXPECT_EQ(v2->location_.y(), -100);
|
| + // Make sure v1 did not receive the event
|
| + EXPECT_EQ(v1->last_touch_event_type_, 0);
|
| +
|
| + EXPECT_EQ(gm->last_touch_event_, Event::ET_TOUCH_RELEASED);
|
| + EXPECT_EQ(gm->last_view_, root);
|
| + EXPECT_EQ(gm->previously_handled_flag_, true);
|
| +
|
| + window->CloseNow();
|
| +}
|
| +#endif
|
| +
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // Painting
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|