Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(168)

Side by Side Diff: ui/views/view_unittest.cc

Issue 10790019: Add gesture target fuzzing to views (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: No longer using screen coordinates Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <map> 5 #include <map>
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/rand_util.h" 8 #include "base/rand_util.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 v1->last_gesture_event_type_ = ui::ET_UNKNOWN; 640 v1->last_gesture_event_type_ = ui::ET_UNKNOWN;
641 v3->last_gesture_event_type_ = ui::ET_UNKNOWN; 641 v3->last_gesture_event_type_ = ui::ET_UNKNOWN;
642 root->OnGestureEvent(g1); 642 root->OnGestureEvent(g1);
643 EXPECT_EQ(ui::ET_GESTURE_TAP, v1->last_gesture_event_type_); 643 EXPECT_EQ(ui::ET_GESTURE_TAP, v1->last_gesture_event_type_);
644 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); 644 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_);
645 EXPECT_EQ("110,110", v1->location_.ToString()); 645 EXPECT_EQ("110,110", v1->location_.ToString());
646 646
647 widget->CloseNow(); 647 widget->CloseNow();
648 } 648 }
649 649
650
651 TEST_F(ViewTest, GestureEventWithFuzzing) {
652 scoped_ptr<Widget> widget(new Widget());
653 Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
654 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
655 params.bounds = gfx::Rect(0, 0, 500, 500);
656 widget->Init(params);
657 View* root_view = widget->GetRootView();
658
659 // Have this hierarchy of views (the coords here are all in root coord):
660 // v1 (0, 0, 100, 100)
661 // v2 (150, 0, 250, 100)
662 // v3 (0, 200, 150, 100)
663 // v31 (10, 210, 80, 80)
664 // v32 (110, 210, 30, 80)
665 // v4 (300, 200, 100, 100)
666 // v41 (310, 210, 80, 80)
667 // v411 (370, 275, 10, 5)
668
669 // The coordinates used for SetBounds are in parent coordinates
670
671 TestView* v1 = new TestViewConsumeGesture();
672 v1->SetBounds(0, 0, 100, 100);
673 root_view->AddChildView(v1);
674
675 TestView* v2 = new TestViewConsumeGesture();
676 v2->SetBounds(150, 0, 250, 100);
677 root_view->AddChildView(v2);
678
679 TestView* v3 = new TestViewConsumeGesture();
680 v3->SetBounds(0, 200, 150, 100);
681 root_view->AddChildView(v3);
682
683 TestView* v4 = new TestViewConsumeGesture();
684 v4->SetBounds(300, 200, 100, 100);
685 root_view->AddChildView(v4);
686
687 TestView* v31 = new TestViewIgnoreGesture();
688 v31->SetBounds(10, 10, 80, 80);
689 v3->AddChildView(v31);
690
691 TestView* v32 = new TestViewConsumeGesture();
692 v32->SetBounds(110, 10, 30, 80);
693 v3->AddChildView(v32);
694
695 TestView* v41 = new TestViewConsumeGesture();
696 v41->SetBounds(10, 10, 80, 80);
697 v4->AddChildView(v41);
698
699 TestView* v411 = new TestViewIgnoreGesture();
700 v411->SetBounds(60, 65, 10, 5);
701 v41->AddChildView(v411);
702
703 v1->Reset();
704 v2->Reset();
705 v3->Reset();
706 v4->Reset();
707 v31->Reset();
708 v32->Reset();
709 v41->Reset();
710 v411->Reset();
711
712 // Covers v1 by enough
713 ui::GestureEventDetails gesture_details(ui::ET_GESTURE_TAP, 0, 0);
714 gesture_details.set_bounding_box(gfx::Rect(15, 15, 100, 100));
715 GestureEventForTest g1(ui::ET_GESTURE_TAP, 65, 65, 0);
716 g1.set_details(gesture_details);
717 root_view->OnGestureEvent(g1);
718 EXPECT_EQ(ui::ET_GESTURE_TAP, v1->last_gesture_event_type_);
719 GestureEventForTest g1_up(ui::ET_GESTURE_END, 65, 65, 0);
720 root_view->OnGestureEvent(g1_up);
721 v1->Reset();
722
723 // Intersects v1 but does not cover by enough, center point is in v1
724 gesture_details.set_bounding_box(gfx::Rect(80, 80, 20, 20));
725 GestureEventForTest g2(ui::ET_GESTURE_TAP, 90, 90, 0);
726 g2.set_details(gesture_details);
727 root_view->OnGestureEvent(g2);
728 EXPECT_EQ(ui::ET_GESTURE_TAP, v1->last_gesture_event_type_);
729 GestureEventForTest g2_up(ui::ET_GESTURE_END, 90, 90, 0);
730 root_view->OnGestureEvent(g2_up);
731 v1->Reset();
732
733 // Intersects nothing
734 gesture_details.set_bounding_box(gfx::Rect(105, 105, 30, 45));
735 GestureEventForTest g3(ui::ET_GESTURE_TAP, 120, 127, 0);
736 g3.set_details(gesture_details);
737 root_view->OnGestureEvent(g3);
738 EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_);
739 EXPECT_EQ(ui::ET_UNKNOWN, v2->last_gesture_event_type_);
740 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_);
741 EXPECT_EQ(ui::ET_UNKNOWN, v32->last_gesture_event_type_);
742 EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_);
743 EXPECT_EQ(ui::ET_UNKNOWN, v41->last_gesture_event_type_);
744 GestureEventForTest g3_up(ui::ET_GESTURE_END, 120, 127, 0);
745 root_view->OnGestureEvent(g3_up);
746
747 // Intersects v2 and covers by enough,
748 // Intersects v1 but does not cover by enough
749 gesture_details.set_bounding_box(gfx::Rect(95, 10, 300, 120));
750 GestureEventForTest g4(ui::ET_GESTURE_TAP, 245, 70, 0);
751 g4.set_details(gesture_details);
752 root_view->OnGestureEvent(g4);
753 EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_);
754 EXPECT_EQ(ui::ET_GESTURE_TAP, v2->last_gesture_event_type_);
755 GestureEventForTest g4_up(ui::ET_GESTURE_END, 245, 70, 0);
756 root_view->OnGestureEvent(g4_up);
757 v1->Reset();
758 v2->Reset();
759
760 // Intersects v1 and v2 and covers by enough, closer to v2
761 gesture_details.set_bounding_box(gfx::Rect(20, 20, 400, 100));
762 GestureEventForTest g5(ui::ET_GESTURE_TAP, 220, 70, 0);
763 g5.set_details(gesture_details);
764 root_view->OnGestureEvent(g5);
765 EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_);
766 EXPECT_EQ(ui::ET_GESTURE_TAP, v2->last_gesture_event_type_);
767 GestureEventForTest g5_up(ui::ET_GESTURE_END, 220, 70, 0);
768 root_view->OnGestureEvent(g5_up);
769 v1->Reset();
770 v2->Reset();
771
772 // Covers all of v3 up to left side of v32
773 gesture_details.set_bounding_box(gfx::Rect(0, 200, 110, 100));
774 GestureEventForTest g6(ui::ET_GESTURE_TAP, 55, 250, 0);
775 g6.set_details(gesture_details);
776 root_view->OnGestureEvent(g6);
777 EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_);
778 EXPECT_EQ(ui::ET_UNKNOWN, v32->last_gesture_event_type_);
779 EXPECT_EQ(ui::ET_GESTURE_TAP, v3->last_gesture_event_type_);
780 GestureEventForTest g6_up(ui::ET_GESTURE_END, 55, 250, 0);
781 root_view->OnGestureEvent(g6_up);
782 v31->Reset();
783 v32->Reset();
784 v3->Reset();
785
786 // Covers all of v3
787 gesture_details.set_bounding_box(gfx::Rect(0, 200, 150, 100));
788 GestureEventForTest g7(ui::ET_GESTURE_TAP, 75, 250, 0);
789 g7.set_details(gesture_details);
790 root_view->OnGestureEvent(g7);
791 EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_);
792 EXPECT_EQ(ui::ET_UNKNOWN, v32->last_gesture_event_type_);
793 EXPECT_EQ(ui::ET_GESTURE_TAP, v3->last_gesture_event_type_);
794 GestureEventForTest g7_up(ui::ET_GESTURE_END, 75, 250, 0);
795 root_view->OnGestureEvent(g7_up);
796 v31->Reset();
797 v32->Reset();
798 v3->Reset();
799
800 // Covers right half of v3
801 gesture_details.set_bounding_box(gfx::Rect(75, 200, 75, 100));
802 GestureEventForTest g8(ui::ET_GESTURE_TAP, 112, 250, 0);
803 g8.set_details(gesture_details);
804 root_view->OnGestureEvent(g8);
805 EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_);
806 EXPECT_EQ(ui::ET_GESTURE_TAP, v32->last_gesture_event_type_);
807 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_);
808 GestureEventForTest g8_up(ui::ET_GESTURE_END, 112, 250, 0);
809 root_view->OnGestureEvent(g8_up);
810 v31->Reset();
811 v32->Reset();
812 v3->Reset();
813
814 // Covers v31 and v32 by enough, but closer to v32
815 gesture_details.set_bounding_box(gfx::Rect(30, 225, 180, 115));
816 GestureEventForTest g9(ui::ET_GESTURE_TAP, 120, 282, 0);
817 g9.set_details(gesture_details);
818 root_view->OnGestureEvent(g9);
819 EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_);
820 EXPECT_EQ(ui::ET_GESTURE_TAP, v32->last_gesture_event_type_);
821 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_);
822 GestureEventForTest g9_up(ui::ET_GESTURE_END, 120, 282, 0);
823 root_view->OnGestureEvent(g9_up);
824 v31->Reset();
825 v32->Reset();
826 v3->Reset();
827
828 // Covers all of v41
829 gesture_details.set_bounding_box(gfx::Rect(310, 210, 80, 80));
830 GestureEventForTest g10(ui::ET_GESTURE_TAP, 350, 250, 0);
831 g10.set_details(gesture_details);
832 root_view->OnGestureEvent(g10);
833 EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_);
834 EXPECT_EQ(ui::ET_GESTURE_TAP, v41->last_gesture_event_type_);
835 EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_);
836 GestureEventForTest g10_up(ui::ET_GESTURE_END, 350, 250, 0);
837 root_view->OnGestureEvent(g10_up);
838 v4->Reset();
839 v41->Reset();
840 v411->Reset();
841
842 // Covers all of v411
843 gesture_details.set_bounding_box(gfx::Rect(370, 275, 10, 5));
844 GestureEventForTest g11(ui::ET_GESTURE_TAP, 375, 277, 0);
845 g11.set_details(gesture_details);
846 root_view->OnGestureEvent(g11);
847 EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_);
848 EXPECT_EQ(ui::ET_GESTURE_TAP, v41->last_gesture_event_type_);
849 EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_);
850 GestureEventForTest g11_up(ui::ET_GESTURE_END, 375, 277, 0);
851 root_view->OnGestureEvent(g11_up);
852 v4->Reset();
853 v41->Reset();
854 v411->Reset();
855
856 // Intersects v41 and v411 but covers neither by enough
857 gesture_details.set_bounding_box(gfx::Rect(368, 272, 5, 8));
858 GestureEventForTest g12(ui::ET_GESTURE_TAP, 370, 276, 0);
859 g12.set_details(gesture_details);
860 root_view->OnGestureEvent(g12);
861 EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_);
862 EXPECT_EQ(ui::ET_GESTURE_TAP, v41->last_gesture_event_type_);
863 EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_);
864 GestureEventForTest g12_up(ui::ET_GESTURE_END, 370, 276, 0);
865 root_view->OnGestureEvent(g12_up);
866 v4->Reset();
867 v41->Reset();
868 v411->Reset();
869
870 // Center point in v4, intersects v41 but not by enough
871 gesture_details.set_bounding_box(gfx::Rect(285, 185, 40, 40));
872 GestureEventForTest g13(ui::ET_GESTURE_TAP, 305, 205, 0);
873 g13.set_details(gesture_details);
874 root_view->OnGestureEvent(g13);
875 EXPECT_EQ(ui::ET_GESTURE_TAP, v4->last_gesture_event_type_);
876 EXPECT_EQ(ui::ET_UNKNOWN, v41->last_gesture_event_type_);
877 EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_);
878 GestureEventForTest g13_up(ui::ET_GESTURE_END, 305, 205, 0);
879 root_view->OnGestureEvent(g13_up);
880 v4->Reset();
881 v41->Reset();
882 v411->Reset();
883
884 // Intersects v31, v32 (covers by enough), v411 (does not cover
885 // by enough) and is closest to v32
886 gesture_details.set_bounding_box(gfx::Rect(20, 222, 352, 250));
887 GestureEventForTest g14(ui::ET_GESTURE_TAP, 196, 347, 0);
888 g14.set_details(gesture_details);
889 root_view->OnGestureEvent(g14);
890 EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_);
891 EXPECT_EQ(ui::ET_UNKNOWN, v2->last_gesture_event_type_);
892 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_);
893 EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_);
894 EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_);
895 EXPECT_EQ(ui::ET_GESTURE_TAP, v32->last_gesture_event_type_);
896 EXPECT_EQ(ui::ET_UNKNOWN, v41->last_gesture_event_type_);
897 EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_);
898 GestureEventForTest g14_up(ui::ET_GESTURE_END, 196, 347, 0);
899 root_view->OnGestureEvent(g14_up);
900 v1->Reset();
901 v2->Reset();
902 v3->Reset();
903 v4->Reset();
904 v31->Reset();
905 v32->Reset();
906 v41->Reset();
907 v411->Reset();
908
909 // Covers all views completely
910 gesture_details.set_bounding_box(gfx::Rect(0, 0, 400, 300));
911 GestureEventForTest g15(ui::ET_GESTURE_TAP, 200, 150, 0);
912 g15.set_details(gesture_details);
913 root_view->OnGestureEvent(g15);
914 EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_);
915 EXPECT_EQ(ui::ET_GESTURE_TAP, v2->last_gesture_event_type_);
916 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_);
917 EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_);
918 EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_);
919 EXPECT_EQ(ui::ET_UNKNOWN, v32->last_gesture_event_type_);
920 EXPECT_EQ(ui::ET_UNKNOWN, v41->last_gesture_event_type_);
921 EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_);
922 GestureEventForTest g15_up(ui::ET_GESTURE_END, 200, 150, 0);
923 root_view->OnGestureEvent(g15_up);
924 v1->Reset();
925 v2->Reset();
926 v3->Reset();
927 v4->Reset();
928 v31->Reset();
929 v32->Reset();
930 v41->Reset();
931 v411->Reset();
932
933 // Covers enough of v32, v2, v411 (closest to v411)
934 gesture_details.set_bounding_box(gfx::Rect(110, 15, 375, 450));
935 GestureEventForTest g16(ui::ET_GESTURE_TAP, 307, 240, 0);
936 g16.set_details(gesture_details);
937 root_view->OnGestureEvent(g16);
938 EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_);
939 EXPECT_EQ(ui::ET_UNKNOWN, v2->last_gesture_event_type_);
940 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_);
941 EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_);
942 EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_);
943 EXPECT_EQ(ui::ET_UNKNOWN, v32->last_gesture_event_type_);
944 EXPECT_EQ(ui::ET_GESTURE_TAP, v41->last_gesture_event_type_);
945 EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_);
946 GestureEventForTest g16_up(ui::ET_GESTURE_END, 307, 240, 0);
947 root_view->OnGestureEvent(g16_up);
948 v1->Reset();
949 v2->Reset();
950 v3->Reset();
951 v4->Reset();
952 v31->Reset();
953 v32->Reset();
954 v41->Reset();
955 v411->Reset();
956
957 widget->CloseNow();
958 }
959
650 TEST_F(ViewTest, ScrollGestureEvent) { 960 TEST_F(ViewTest, ScrollGestureEvent) {
651 // Views hierarchy for non delivery of GestureEvent. 961 // Views hierarchy for non delivery of GestureEvent.
652 TestView* v1 = new TestViewConsumeGesture(); 962 TestView* v1 = new TestViewConsumeGesture();
653 v1->SetBoundsRect(gfx::Rect(0, 0, 300, 300)); 963 v1->SetBoundsRect(gfx::Rect(0, 0, 300, 300));
654 964
655 TestView* v2 = new TestViewIgnoreScrollGestures(); 965 TestView* v2 = new TestViewIgnoreScrollGestures();
656 v2->SetBoundsRect(gfx::Rect(100, 100, 100, 100)); 966 v2->SetBoundsRect(gfx::Rect(100, 100, 100, 100));
657 967
658 TestView* v3 = new TestViewIgnoreGesture(); 968 TestView* v3 = new TestViewIgnoreGesture();
659 v3->SetBoundsRect(gfx::Rect(0, 0, 100, 100)); 969 v3->SetBoundsRect(gfx::Rect(0, 0, 100, 100));
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
989 1299
990 // Test GetEventHandlerForPoint 1300 // Test GetEventHandlerForPoint
991 EXPECT_EQ(v1, root_view->GetEventHandlerForPoint(v1_centerpoint)); 1301 EXPECT_EQ(v1, root_view->GetEventHandlerForPoint(v1_centerpoint));
992 EXPECT_EQ(v2, root_view->GetEventHandlerForPoint(v2_centerpoint)); 1302 EXPECT_EQ(v2, root_view->GetEventHandlerForPoint(v2_centerpoint));
993 EXPECT_EQ(v1, root_view->GetEventHandlerForPoint(v1_origin)); 1303 EXPECT_EQ(v1, root_view->GetEventHandlerForPoint(v1_origin));
994 EXPECT_EQ(root_view, root_view->GetEventHandlerForPoint(v2_origin)); 1304 EXPECT_EQ(root_view, root_view->GetEventHandlerForPoint(v2_origin));
995 1305
996 widget->CloseNow(); 1306 widget->CloseNow();
997 } 1307 }
998 1308
1309 TEST_F(ViewTest, GetEventHandlerForRect) {
1310 Widget* widget = new Widget;
1311 widget->Init(Widget::InitParams(Widget::InitParams::TYPE_POPUP));
1312 View* root_view = widget->GetRootView();
1313 root_view->SetBoundsRect(gfx::Rect(0, 0, 500, 500));
1314
1315 // Have this hierarchy of views (the coords here are all in root coord):
1316 // v1 (0, 0, 100, 100)
1317 // v2 (150, 0, 250, 100)
1318 // v3 (0, 200, 150, 100)
1319 // v31 (10, 210, 80, 80)
1320 // v32 (110, 210, 30, 80)
1321 // v4 (300, 200, 100, 100)
1322 // v41 (310, 210, 80, 80)
1323 // v411 (370, 275, 10, 5)
1324
1325 // The coordinates used for SetBounds are in parent coordinates
1326
1327 TestView* v1 = new TestView;
1328 v1->SetBounds(0, 0, 100, 100);
1329 root_view->AddChildView(v1);
1330
1331 TestView* v2 = new TestView;
1332 v2->SetBounds(150, 0, 250, 100);
1333 root_view->AddChildView(v2);
1334
1335 TestView* v3 = new TestView;
1336 v3->SetBounds(0, 200, 150, 100);
1337 root_view->AddChildView(v3);
1338
1339 TestView* v4 = new TestView;
1340 v4->SetBounds(300, 200, 100, 100);
1341 root_view->AddChildView(v4);
1342
1343 TestView* v31 = new TestView;
1344 v31->SetBounds(10, 10, 80, 80);
1345 v3->AddChildView(v31);
1346
1347 TestView* v32 = new TestView;
1348 v32->SetBounds(110, 10, 30, 80);
1349 v3->AddChildView(v32);
1350
1351 TestView* v41 = new TestView;
1352 v41->SetBounds(10, 10, 80, 80);
1353 v4->AddChildView(v41);
1354
1355 TestView* v411 = new TestView;
1356 v411->SetBounds(60, 65, 10, 5);
1357 v41->AddChildView(v411);
1358
1359 // Covers v1 by enough
1360 gfx::Rect touch_rect(15, 15, 100, 100);
1361 View* result_view = root_view->GetEventHandlerForRect(touch_rect);
1362 EXPECT_EQ(result_view, v1);
1363
1364 // Intersects v1 but does not cover by enough
1365 touch_rect.SetRect(80, 90, 20, 20);
1366 result_view = root_view->GetEventHandlerForRect(touch_rect);
1367 EXPECT_FALSE(result_view);
1368
1369 // Intersects nothing
1370 touch_rect.SetRect(105, 105, 30, 45);
1371 result_view = root_view->GetEventHandlerForRect(touch_rect);
1372 EXPECT_FALSE(result_view);
1373
1374 // Intersects v2 and covers by enough,
1375 // Intersects v1 but does not cover by enough
1376 touch_rect.SetRect(95, 10, 300, 120);
1377 result_view = root_view->GetEventHandlerForRect(touch_rect);
1378 EXPECT_EQ(result_view, v2);
1379
1380 // Intersects v1 and v2 and covers by enough, closer to v2
1381 touch_rect.SetRect(20, 20, 400, 100);
1382 result_view = root_view->GetEventHandlerForRect(touch_rect);
1383 EXPECT_EQ(result_view, v2);
1384
1385 // Covers all of v3 up to left side of v32
1386 touch_rect.SetRect(0, 200, 110, 100);
1387 result_view = root_view->GetEventHandlerForRect(touch_rect);
1388 EXPECT_EQ(result_view, v31);
1389
1390 // Covers all of v3
1391 touch_rect.SetRect(0, 200, 150, 100);
1392 result_view = root_view->GetEventHandlerForRect(touch_rect);
1393 EXPECT_EQ(result_view, v31);
1394
1395 // Covers right half of v3
1396 touch_rect.SetRect(75, 200, 75, 100);
1397 result_view = root_view->GetEventHandlerForRect(touch_rect);
1398 EXPECT_EQ(result_view, v32);
1399
1400 // Covers v31 and v32 by enough, but closer to v32
1401 touch_rect.SetRect(30, 225, 180, 115);
1402 result_view = root_view->GetEventHandlerForRect(touch_rect);
1403 EXPECT_EQ(result_view, v32);
1404
1405 // Covers all of v41
1406 touch_rect.SetRect(310, 210, 80, 80);
1407 result_view = root_view->GetEventHandlerForRect(touch_rect);
1408 EXPECT_EQ(result_view, v411);
1409
1410 // Covers all of v411
1411 touch_rect.SetRect(370, 275, 10, 5);
1412 result_view = root_view->GetEventHandlerForRect(touch_rect);
1413 EXPECT_EQ(result_view, v411);
1414
1415 // Intersects v41 and v411 but covers neither by enough
1416 touch_rect.SetRect(368, 272, 5, 8);
1417 result_view = root_view->GetEventHandlerForRect(touch_rect);
1418 EXPECT_FALSE(result_view);
1419
1420 // Covers enough of v41 but not enough of v411
1421 touch_rect.SetRect(315, 212, 62, 64);
1422 result_view = root_view->GetEventHandlerForRect(touch_rect);
1423 EXPECT_FALSE(result_view);
1424
1425 // Intersects v31, v32 (covers by enough), v4111 (does not cover
1426 // by enough) and is closest to v32
1427 touch_rect.SetRect(20, 222, 352, 250);
1428 result_view = root_view->GetEventHandlerForRect(touch_rect);
1429 EXPECT_EQ(result_view, v32);
1430
1431 // Covers all views completely
1432 touch_rect.SetRect(0, 0, 400, 300);
1433 result_view = root_view->GetEventHandlerForRect(touch_rect);
1434 EXPECT_EQ(result_view, v2);
1435
1436 // Covers enough of v32, v2, v411 (closest to v411)
1437 touch_rect.SetRect(110, 15, 375, 450);
1438 result_view = root_view->GetEventHandlerForRect(touch_rect);
1439 EXPECT_EQ(result_view, v411);
1440
1441 widget->CloseNow();
1442 }
1443
999 TEST_F(ViewTest, NotifyEnterExitOnChild) { 1444 TEST_F(ViewTest, NotifyEnterExitOnChild) {
1000 Widget* widget = new Widget; 1445 Widget* widget = new Widget;
1001 widget->Init(Widget::InitParams(Widget::InitParams::TYPE_POPUP)); 1446 widget->Init(Widget::InitParams(Widget::InitParams::TYPE_POPUP));
1002 View* root_view = widget->GetRootView(); 1447 View* root_view = widget->GetRootView();
1003 root_view->SetBoundsRect(gfx::Rect(0, 0, 500, 500)); 1448 root_view->SetBoundsRect(gfx::Rect(0, 0, 500, 500));
1004 1449
1005 // Have this hierarchy of views (the coords here are in root coord): 1450 // Have this hierarchy of views (the coords here are in root coord):
1006 // v1 (0, 0, 100, 100) 1451 // v1 (0, 0, 100, 100)
1007 // - v11 (0, 0, 20, 30) 1452 // - v11 (0, 0, 20, 30)
1008 // - v111 (5, 5, 5, 15) 1453 // - v111 (5, 5, 5, 15)
(...skipping 2328 matching lines...) Expand 10 before | Expand all | Expand 10 after
3337 // Set to non default value. 3782 // Set to non default value.
3338 v->layer()->set_scale_content(false); 3783 v->layer()->set_scale_content(false);
3339 scoped_ptr<ui::Layer> old_layer(v->RecreateLayer()); 3784 scoped_ptr<ui::Layer> old_layer(v->RecreateLayer());
3340 ui::Layer* new_layer = v->layer(); 3785 ui::Layer* new_layer = v->layer();
3341 EXPECT_FALSE(new_layer->scale_content()); 3786 EXPECT_FALSE(new_layer->scale_content());
3342 } 3787 }
3343 3788
3344 #endif // USE_AURA 3789 #endif // USE_AURA
3345 3790
3346 } // namespace views 3791 } // namespace views
OLDNEW
« ui/views/view.cc ('K') | « ui/views/view_constants.cc ('k') | ui/views/widget/root_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698