Index: ui/views/view_unittest.cc |
diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc |
index 9dff1c646325008d7fb95147aa064282bb8a6cbc..629974e4919586bafc6c15518c340de4ffad4c18 100644 |
--- a/ui/views/view_unittest.cc |
+++ b/ui/views/view_unittest.cc |
@@ -647,6 +647,315 @@ TEST_F(ViewTest, GestureEvent) { |
widget->CloseNow(); |
} |
+TEST_F(ViewTest, GestureEventWithFuzzing) { |
+ scoped_ptr<Widget> widget(new Widget()); |
+ Widget::InitParams params(Widget::InitParams::TYPE_POPUP); |
+ params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
+ params.bounds = gfx::Rect(0, 0, 500, 500); |
+ widget->Init(params); |
+ View* root_view = widget->GetRootView(); |
+ |
+ // Have this hierarchy of views (the coords here are all in root coord): |
+ // v1 (0, 0, 100, 100) |
+ // v2 (150, 0, 250, 100) |
+ // v3 (0, 200, 150, 100) |
+ // v31 (10, 210, 80, 80) |
+ // v32 (110, 210, 30, 80) |
+ // v4 (300, 200, 100, 100) |
+ // v41 (310, 210, 80, 80) |
+ // v411 (370, 275, 10, 5) |
+ |
+ // The coordinates used for SetBounds are in parent coordinates |
+ |
+ TestView* v1 = new TestViewConsumeGesture(); |
+ v1->SetBounds(0, 0, 100, 100); |
+ root_view->AddChildView(v1); |
+ |
+ TestView* v2 = new TestViewConsumeGesture(); |
+ v2->SetBounds(150, 0, 250, 100); |
+ root_view->AddChildView(v2); |
+ |
+ TestView* v3 = new TestViewConsumeGesture(); |
+ v3->SetBounds(0, 200, 150, 100); |
+ root_view->AddChildView(v3); |
+ |
+ TestView* v4 = new TestViewConsumeGesture(); |
+ v4->SetBounds(300, 200, 100, 100); |
+ root_view->AddChildView(v4); |
+ |
+ TestView* v31 = new TestViewIgnoreGesture(); |
+ v31->SetBounds(10, 10, 80, 80); |
+ v3->AddChildView(v31); |
+ |
+ TestView* v32 = new TestViewConsumeGesture(); |
+ v32->SetBounds(110, 10, 30, 80); |
+ v3->AddChildView(v32); |
+ |
+ TestView* v41 = new TestViewConsumeGesture(); |
+ v41->SetBounds(10, 10, 80, 80); |
+ v4->AddChildView(v41); |
+ |
+ TestView* v411 = new TestViewIgnoreGesture(); |
+ v411->SetBounds(60, 65, 10, 5); |
+ v41->AddChildView(v411); |
+ |
+ v1->Reset(); |
+ v2->Reset(); |
+ v3->Reset(); |
+ v4->Reset(); |
+ v31->Reset(); |
+ v32->Reset(); |
+ v41->Reset(); |
+ v411->Reset(); |
+ |
+ // Covers v1 by enough |
+ ui::GestureEventDetails gesture_details(ui::ET_GESTURE_TAP, 0, 0); |
+ gesture_details.set_bounding_box(gfx::Rect(15, 15, 100, 100)); |
+ GestureEventForTest g1(ui::ET_GESTURE_TAP, 65, 65, 0); |
+ g1.set_details(gesture_details); |
+ root_view->OnGestureEvent(g1); |
+ EXPECT_EQ(ui::ET_GESTURE_TAP, v1->last_gesture_event_type_); |
+ GestureEventForTest g1_up(ui::ET_GESTURE_END, 65, 65, 0); |
+ root_view->OnGestureEvent(g1_up); |
+ v1->Reset(); |
+ |
+ // Intersects v1 but does not cover by enough, center point is in v1 |
+ gesture_details.set_bounding_box(gfx::Rect(80, 80, 20, 20)); |
+ GestureEventForTest g2(ui::ET_GESTURE_TAP, 90, 90, 0); |
+ g2.set_details(gesture_details); |
+ root_view->OnGestureEvent(g2); |
+ EXPECT_EQ(ui::ET_GESTURE_TAP, v1->last_gesture_event_type_); |
+ GestureEventForTest g2_up(ui::ET_GESTURE_END, 90, 90, 0); |
+ root_view->OnGestureEvent(g2_up); |
+ v1->Reset(); |
+ |
+ // Intersects nothing |
+ gesture_details.set_bounding_box(gfx::Rect(105, 105, 30, 45)); |
+ GestureEventForTest g3(ui::ET_GESTURE_TAP, 120, 127, 0); |
+ g3.set_details(gesture_details); |
+ root_view->OnGestureEvent(g3); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v2->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v32->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v41->last_gesture_event_type_); |
+ GestureEventForTest g3_up(ui::ET_GESTURE_END, 120, 127, 0); |
+ root_view->OnGestureEvent(g3_up); |
+ |
+ // Intersects v2 and covers by enough, |
+ // Intersects v1 but does not cover by enough |
+ gesture_details.set_bounding_box(gfx::Rect(95, 10, 300, 120)); |
+ GestureEventForTest g4(ui::ET_GESTURE_TAP, 245, 70, 0); |
+ g4.set_details(gesture_details); |
+ root_view->OnGestureEvent(g4); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_GESTURE_TAP, v2->last_gesture_event_type_); |
+ GestureEventForTest g4_up(ui::ET_GESTURE_END, 245, 70, 0); |
+ root_view->OnGestureEvent(g4_up); |
+ v1->Reset(); |
+ v2->Reset(); |
+ |
+ // Intersects v1 and v2 and covers by enough, closer to v2 |
+ gesture_details.set_bounding_box(gfx::Rect(20, 20, 400, 100)); |
+ GestureEventForTest g5(ui::ET_GESTURE_TAP, 220, 70, 0); |
+ g5.set_details(gesture_details); |
+ root_view->OnGestureEvent(g5); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_GESTURE_TAP, v2->last_gesture_event_type_); |
+ GestureEventForTest g5_up(ui::ET_GESTURE_END, 220, 70, 0); |
+ root_view->OnGestureEvent(g5_up); |
+ v1->Reset(); |
+ v2->Reset(); |
+ |
+ // Covers all of v3 up to left side of v32 |
+ gesture_details.set_bounding_box(gfx::Rect(0, 200, 110, 100)); |
+ GestureEventForTest g6(ui::ET_GESTURE_TAP, 55, 250, 0); |
+ g6.set_details(gesture_details); |
+ root_view->OnGestureEvent(g6); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v32->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_GESTURE_TAP, v3->last_gesture_event_type_); |
+ GestureEventForTest g6_up(ui::ET_GESTURE_END, 55, 250, 0); |
+ root_view->OnGestureEvent(g6_up); |
+ v31->Reset(); |
+ v32->Reset(); |
+ v3->Reset(); |
+ |
+ // Covers all of v3 |
+ gesture_details.set_bounding_box(gfx::Rect(0, 200, 150, 100)); |
+ GestureEventForTest g7(ui::ET_GESTURE_TAP, 75, 250, 0); |
+ g7.set_details(gesture_details); |
+ root_view->OnGestureEvent(g7); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v32->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_GESTURE_TAP, v3->last_gesture_event_type_); |
+ GestureEventForTest g7_up(ui::ET_GESTURE_END, 75, 250, 0); |
+ root_view->OnGestureEvent(g7_up); |
+ v31->Reset(); |
+ v32->Reset(); |
+ v3->Reset(); |
+ |
+ // Covers right half of v3 |
+ gesture_details.set_bounding_box(gfx::Rect(75, 200, 75, 100)); |
+ GestureEventForTest g8(ui::ET_GESTURE_TAP, 112, 250, 0); |
+ g8.set_details(gesture_details); |
+ root_view->OnGestureEvent(g8); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_GESTURE_TAP, v32->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); |
+ GestureEventForTest g8_up(ui::ET_GESTURE_END, 112, 250, 0); |
+ root_view->OnGestureEvent(g8_up); |
+ v31->Reset(); |
+ v32->Reset(); |
+ v3->Reset(); |
+ |
+ // Covers v31 and v32 by enough, but closer to v32 |
+ gesture_details.set_bounding_box(gfx::Rect(30, 225, 180, 115)); |
+ GestureEventForTest g9(ui::ET_GESTURE_TAP, 120, 282, 0); |
+ g9.set_details(gesture_details); |
+ root_view->OnGestureEvent(g9); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_GESTURE_TAP, v32->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); |
+ GestureEventForTest g9_up(ui::ET_GESTURE_END, 120, 282, 0); |
+ root_view->OnGestureEvent(g9_up); |
+ v31->Reset(); |
+ v32->Reset(); |
+ v3->Reset(); |
+ |
+ // Covers all of v41 |
+ gesture_details.set_bounding_box(gfx::Rect(310, 210, 80, 80)); |
+ GestureEventForTest g10(ui::ET_GESTURE_TAP, 350, 250, 0); |
+ g10.set_details(gesture_details); |
+ root_view->OnGestureEvent(g10); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_GESTURE_TAP, v41->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_); |
+ GestureEventForTest g10_up(ui::ET_GESTURE_END, 350, 250, 0); |
+ root_view->OnGestureEvent(g10_up); |
+ v4->Reset(); |
+ v41->Reset(); |
+ v411->Reset(); |
+ |
+ // Covers all of v411 |
+ gesture_details.set_bounding_box(gfx::Rect(370, 275, 10, 5)); |
+ GestureEventForTest g11(ui::ET_GESTURE_TAP, 375, 277, 0); |
+ g11.set_details(gesture_details); |
+ root_view->OnGestureEvent(g11); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_GESTURE_TAP, v41->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_); |
+ GestureEventForTest g11_up(ui::ET_GESTURE_END, 375, 277, 0); |
+ root_view->OnGestureEvent(g11_up); |
+ v4->Reset(); |
+ v41->Reset(); |
+ v411->Reset(); |
+ |
+ // Intersects v41 and v411 but covers neither by enough |
+ gesture_details.set_bounding_box(gfx::Rect(368, 272, 5, 8)); |
+ GestureEventForTest g12(ui::ET_GESTURE_TAP, 370, 276, 0); |
+ g12.set_details(gesture_details); |
+ root_view->OnGestureEvent(g12); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_GESTURE_TAP, v41->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_); |
+ GestureEventForTest g12_up(ui::ET_GESTURE_END, 370, 276, 0); |
+ root_view->OnGestureEvent(g12_up); |
+ v4->Reset(); |
+ v41->Reset(); |
+ v411->Reset(); |
+ |
+ // Center point in v4, intersects v41 but not by enough |
+ gesture_details.set_bounding_box(gfx::Rect(285, 185, 40, 40)); |
+ GestureEventForTest g13(ui::ET_GESTURE_TAP, 305, 205, 0); |
+ g13.set_details(gesture_details); |
+ root_view->OnGestureEvent(g13); |
+ EXPECT_EQ(ui::ET_GESTURE_TAP, v4->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v41->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_); |
+ GestureEventForTest g13_up(ui::ET_GESTURE_END, 305, 205, 0); |
+ root_view->OnGestureEvent(g13_up); |
+ v4->Reset(); |
+ v41->Reset(); |
+ v411->Reset(); |
+ |
+ // Intersects v31, v32 (covers by enough), v411 (does not cover |
+ // by enough) and is closest to v32 |
+ gesture_details.set_bounding_box(gfx::Rect(20, 222, 352, 250)); |
+ GestureEventForTest g14(ui::ET_GESTURE_TAP, 196, 347, 0); |
+ g14.set_details(gesture_details); |
+ root_view->OnGestureEvent(g14); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v2->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_GESTURE_TAP, v32->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v41->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_); |
+ GestureEventForTest g14_up(ui::ET_GESTURE_END, 196, 347, 0); |
+ root_view->OnGestureEvent(g14_up); |
+ v1->Reset(); |
+ v2->Reset(); |
+ v3->Reset(); |
+ v4->Reset(); |
+ v31->Reset(); |
+ v32->Reset(); |
+ v41->Reset(); |
+ v411->Reset(); |
+ |
+ // Covers all views completely |
+ gesture_details.set_bounding_box(gfx::Rect(0, 0, 400, 300)); |
+ GestureEventForTest g15(ui::ET_GESTURE_TAP, 200, 150, 0); |
+ g15.set_details(gesture_details); |
+ root_view->OnGestureEvent(g15); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_GESTURE_TAP, v2->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v32->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v41->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_); |
+ GestureEventForTest g15_up(ui::ET_GESTURE_END, 200, 150, 0); |
+ root_view->OnGestureEvent(g15_up); |
+ v1->Reset(); |
+ v2->Reset(); |
+ v3->Reset(); |
+ v4->Reset(); |
+ v31->Reset(); |
+ v32->Reset(); |
+ v41->Reset(); |
+ v411->Reset(); |
+ |
+ // Covers enough of v32, v2, v411 (closest to v411) |
+ gesture_details.set_bounding_box(gfx::Rect(120, 15, 375, 450)); |
+ GestureEventForTest g16(ui::ET_GESTURE_TAP, 307, 240, 0); |
+ g16.set_details(gesture_details); |
+ root_view->OnGestureEvent(g16); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v2->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v32->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_GESTURE_TAP, v41->last_gesture_event_type_); |
+ EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_); |
+ GestureEventForTest g16_up(ui::ET_GESTURE_END, 307, 240, 0); |
+ root_view->OnGestureEvent(g16_up); |
+ v1->Reset(); |
+ v2->Reset(); |
+ v3->Reset(); |
+ v4->Reset(); |
+ v31->Reset(); |
+ v32->Reset(); |
+ v41->Reset(); |
+ v411->Reset(); |
+ |
+ widget->CloseNow(); |
+} |
+ |
TEST_F(ViewTest, ScrollGestureEvent) { |
// Views hierarchy for non delivery of GestureEvent. |
TestView* v1 = new TestViewConsumeGesture(); |
@@ -996,6 +1305,142 @@ TEST_F(ViewTest, HitTestMasks) { |
widget->CloseNow(); |
} |
+TEST_F(ViewTest, GetEventHandlerForRect) { |
+ Widget* widget = new Widget; |
+ widget->Init(Widget::InitParams(Widget::InitParams::TYPE_POPUP)); |
+ View* root_view = widget->GetRootView(); |
+ root_view->SetBoundsRect(gfx::Rect(0, 0, 500, 500)); |
+ |
+ // Have this hierarchy of views (the coords here are all in root coord): |
+ // v1 (0, 0, 100, 100) |
+ // v2 (150, 0, 250, 100) |
+ // v3 (0, 200, 150, 100) |
+ // v31 (10, 210, 80, 80) |
+ // v32 (110, 210, 30, 80) |
+ // v4 (300, 200, 100, 100) |
+ // v41 (310, 210, 80, 80) |
+ // v411 (370, 275, 10, 5) |
+ |
+ // The coordinates used for SetBounds are in parent coordinates |
+ |
+ TestView* v1 = new TestView; |
+ v1->SetBounds(0, 0, 100, 100); |
+ root_view->AddChildView(v1); |
+ |
+ TestView* v2 = new TestView; |
+ v2->SetBounds(150, 0, 250, 100); |
+ root_view->AddChildView(v2); |
+ |
+ TestView* v3 = new TestView; |
+ v3->SetBounds(0, 200, 150, 100); |
+ root_view->AddChildView(v3); |
+ |
+ TestView* v4 = new TestView; |
+ v4->SetBounds(300, 200, 100, 100); |
+ root_view->AddChildView(v4); |
+ |
+ TestView* v31 = new TestView; |
+ v31->SetBounds(10, 10, 80, 80); |
+ v3->AddChildView(v31); |
+ |
+ TestView* v32 = new TestView; |
+ v32->SetBounds(110, 10, 30, 80); |
+ v3->AddChildView(v32); |
+ |
+ TestView* v41 = new TestView; |
+ v41->SetBounds(10, 10, 80, 80); |
+ v4->AddChildView(v41); |
+ |
+ TestView* v411 = new TestView; |
+ v411->SetBounds(60, 65, 10, 5); |
+ v41->AddChildView(v411); |
+ |
+ |
+ // Covers v1 by enough |
+ gfx::Rect touch_rect(15, 15, 100, 100); |
+ View* result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_EQ(result_view, v1); |
+ |
+ // Intersects v1 but does not cover by enough |
+ touch_rect.SetRect(80, 90, 20, 20); |
+ result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_FALSE(result_view); |
+ |
+ // Intersects nothing |
+ touch_rect.SetRect(105, 105, 30, 45); |
+ result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_FALSE(result_view); |
+ |
+ // Intersects v2 and covers by enough, |
+ // Intersects v1 but does not cover by enough |
+ touch_rect.SetRect(95, 10, 300, 120); |
+ result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_EQ(result_view, v2); |
+ |
+ // Intersects v1 and v2 and covers by enough, closer to v2 |
+ touch_rect.SetRect(20, 20, 400, 100); |
+ result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_EQ(result_view, v2); |
+ |
+ // Covers all of v3 up to left side of v32 |
+ touch_rect.SetRect(0, 200, 110, 100); |
+ result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_EQ(result_view, v31); |
+ |
+ // Covers all of v3 |
+ touch_rect.SetRect(0, 200, 150, 100); |
+ result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_EQ(result_view, v31); |
+ |
+ // Covers right half of v3 |
+ touch_rect.SetRect(75, 200, 75, 100); |
+ result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_EQ(result_view, v32); |
+ |
+ // Covers v31 and v32 by enough, but closer to v32 |
+ touch_rect.SetRect(30, 225, 180, 115); |
+ result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_EQ(result_view, v32); |
+ |
+ // Covers all of v41 |
+ touch_rect.SetRect(310, 210, 80, 80); |
+ result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_EQ(result_view, v411); |
+ |
+ // Covers all of v411 |
+ touch_rect.SetRect(370, 275, 10, 5); |
+ result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_EQ(result_view, v411); |
+ |
+ // Intersects v41 and v411 but covers neither by enough |
+ touch_rect.SetRect(368, 272, 5, 8); |
+ result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_FALSE(result_view); |
+ |
+ // Covers enough of v41 but not enough of v411 |
+ touch_rect.SetRect(315, 212, 62, 64); |
+ result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_FALSE(result_view); |
+ |
+ // Intersects v31, v32 (covers by enough), v4111 (does not cover |
+ // by enough) and is closest to v32 |
+ touch_rect.SetRect(20, 222, 352, 250); |
+ result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_EQ(result_view, v32); |
+ |
+ // Covers all views completely |
+ touch_rect.SetRect(0, 0, 400, 300); |
+ result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_EQ(result_view, v2); |
+ |
+ // Covers enough of v32, v2, v411 (closest to v411) |
+ touch_rect.SetRect(120, 15, 375, 450); |
+ result_view = root_view->GetEventHandlerForRect(touch_rect); |
+ EXPECT_EQ(result_view, v411); |
+ |
+ widget->CloseNow(); |
+} |
+ |
TEST_F(ViewTest, NotifyEnterExitOnChild) { |
Widget* widget = new Widget; |
widget->Init(Widget::InitParams(Widget::InitParams::TYPE_POPUP)); |