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

Unified Diff: ash/shelf/shelf_view_unittest.cc

Issue 338833008: Require the cursor to move a minimum distance after the mouse press before initiating a mouse drag (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/shelf/shelf_view.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/shelf/shelf_view_unittest.cc
diff --git a/ash/shelf/shelf_view_unittest.cc b/ash/shelf/shelf_view_unittest.cc
index d57e23eccb31a875d2cb862fb6342d424f6c5d1e..fb5c1dbd9169f3c4db034894ba7c2aa683f41a5d 100644
--- a/ash/shelf/shelf_view_unittest.cc
+++ b/ash/shelf/shelf_view_unittest.cc
@@ -120,6 +120,32 @@ class ShelfViewIconObserverTest : public AshTestBase {
DISALLOW_COPY_AND_ASSIGN(ShelfViewIconObserverTest);
};
+// TestShelfItemDelegate which tracks whether it gets selected.
+class ShelfItemSelectionTracker : public TestShelfItemDelegate {
+ public:
+ ShelfItemSelectionTracker() : TestShelfItemDelegate(NULL), selected_(false) {
+ }
+
+ virtual ~ShelfItemSelectionTracker() {
+ }
+
+ // Returns true if the delegate was selected.
+ bool WasSelected() {
+ return selected_;
+ }
+
+ // TestShelfItemDelegate:
+ virtual bool ItemSelected(const ui::Event& event) OVERRIDE {
+ selected_ = true;
+ return false;
+ }
+
+ private:
+ bool selected_;
+
+ DISALLOW_COPY_AND_ASSIGN(ShelfItemSelectionTracker);
+};
+
TEST_F(ShelfViewIconObserverTest, AddRemove) {
TestShelfDelegate* shelf_delegate = TestShelfDelegate::instance();
ASSERT_TRUE(shelf_delegate);
@@ -398,7 +424,7 @@ class ShelfViewTest : public AshTestBase {
ShelfButtonHost* button_host = shelf_view_;
views::View* button = test_api_->GetButton(button_index);
ui::MouseEvent click_event(ui::ET_MOUSE_PRESSED,
- button->bounds().origin(),
+ gfx::Point(),
button->GetBoundsInScreen().origin(), 0, 0);
button_host->PointerPressedOnButton(button, pointer, click_event);
return button;
@@ -421,7 +447,8 @@ class ShelfViewTest : public AshTestBase {
// Drag.
views::View* destination = test_api_->GetButton(destination_index);
ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED,
- destination->bounds().origin(),
+ gfx::Point(destination->x() - button->x(),
+ destination->y() - button->y()),
destination->GetBoundsInScreen().origin(), 0, 0);
button_host->PointerDraggedOnButton(button, pointer, drag_event);
return button;
@@ -1030,6 +1057,54 @@ TEST_F(ShelfViewTest, ClickOneDragAnother) {
EXPECT_TRUE(model_->items()[3].type == TYPE_BROWSER_SHORTCUT);
}
+// Check that clicking an item and jittering the mouse a bit still selects the
+// item.
+TEST_F(ShelfViewTest, ClickAndMoveSlightly) {
+ std::vector<std::pair<ShelfID, views::View*> > id_map;
+ SetupForDragTest(&id_map);
+
+ ShelfID shelf_id = (id_map.begin() + 1)->first;
+ views::View* button = (id_map.begin() + 1)->second;
+
+ // Replace the ShelfItemDelegate for |shelf_id| with one which tracks whether
+ // the shelf item gets selected.
+ ShelfItemSelectionTracker* selection_tracker = new ShelfItemSelectionTracker;
+ item_manager_->SetShelfItemDelegate(
+ shelf_id,
+ scoped_ptr<ShelfItemDelegate>(selection_tracker).Pass());
+
+ gfx::Vector2d press_offset(5, 30);
+ gfx::Point press_location = gfx::Point() + press_offset;
+ gfx::Point press_location_in_screen =
+ button->GetBoundsInScreen().origin() + press_offset;
+
+ ui::MouseEvent click_event(ui::ET_MOUSE_PRESSED,
+ press_location,
+ press_location_in_screen,
+ ui::EF_LEFT_MOUSE_BUTTON, 0);
+ button->OnMousePressed(click_event);
+
+ ui::MouseEvent drag_event1(ui::ET_MOUSE_DRAGGED,
+ press_location + gfx::Vector2d(0, 1),
+ press_location_in_screen + gfx::Vector2d(0, 1),
+ ui::EF_LEFT_MOUSE_BUTTON, 0);
+ button->OnMouseDragged(drag_event1);
+
+ ui::MouseEvent drag_event2(ui::ET_MOUSE_DRAGGED,
+ press_location + gfx::Vector2d(-1, 0),
+ press_location_in_screen + gfx::Vector2d(-1, 0),
+ ui::EF_LEFT_MOUSE_BUTTON, 0);
+ button->OnMouseDragged(drag_event2);
+
+ ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED,
+ press_location + gfx::Vector2d(-1, 0),
+ press_location_in_screen + gfx::Vector2d(-1, 0),
+ ui::EF_LEFT_MOUSE_BUTTON, 0);
+ button->OnMouseReleased(release_event);
+
+ EXPECT_TRUE(selection_tracker->WasSelected());
+}
+
// Confirm that item status changes are reflected in the buttons.
TEST_F(ShelfViewTest, ShelfItemStatus) {
// All buttons should be visible.
« no previous file with comments | « ash/shelf/shelf_view.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698