OLD | NEW |
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 "ui/views/controls/button/custom_button.h" | 5 #include "ui/views/controls/button/custom_button.h" |
6 | 6 |
7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/memory/ptr_util.h" |
8 #include "build/build_config.h" | 9 #include "build/build_config.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
10 #include "ui/base/layout.h" | 11 #include "ui/base/layout.h" |
11 #include "ui/base/material_design/material_design_controller.h" | 12 #include "ui/base/material_design/material_design_controller.h" |
12 #include "ui/events/event_utils.h" | 13 #include "ui/events/event_utils.h" |
13 #include "ui/events/test/event_generator.h" | 14 #include "ui/events/test/event_generator.h" |
14 #include "ui/gfx/screen.h" | 15 #include "ui/gfx/screen.h" |
15 #include "ui/views/animation/ink_drop_delegate.h" | 16 #include "ui/views/animation/ink_drop_delegate.h" |
16 #include "ui/views/animation/ink_drop_host.h" | 17 #include "ui/views/animation/ink_drop_host.h" |
17 #include "ui/views/animation/test/test_ink_drop_delegate.h" | 18 #include "ui/views/animation/test/test_ink_drop_delegate.h" |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 private: | 117 private: |
117 bool* ink_shown_; | 118 bool* ink_shown_; |
118 bool* ink_hidden_; | 119 bool* ink_hidden_; |
119 | 120 |
120 DISALLOW_COPY_AND_ASSIGN(TestInkDropDelegateThatTracksVisibilty); | 121 DISALLOW_COPY_AND_ASSIGN(TestInkDropDelegateThatTracksVisibilty); |
121 }; | 122 }; |
122 | 123 |
123 // A test Button class that owns a TestInkDropDelegate. | 124 // A test Button class that owns a TestInkDropDelegate. |
124 class TestButtonWithInkDrop : public TestCustomButton { | 125 class TestButtonWithInkDrop : public TestCustomButton { |
125 public: | 126 public: |
126 TestButtonWithInkDrop(scoped_ptr<InkDropDelegate> ink_drop_delegate) | 127 TestButtonWithInkDrop(std::unique_ptr<InkDropDelegate> ink_drop_delegate) |
127 : TestCustomButton(), ink_drop_delegate_(std::move(ink_drop_delegate)) { | 128 : TestCustomButton(), ink_drop_delegate_(std::move(ink_drop_delegate)) { |
128 set_ink_drop_delegate(ink_drop_delegate_.get()); | 129 set_ink_drop_delegate(ink_drop_delegate_.get()); |
129 } | 130 } |
130 ~TestButtonWithInkDrop() override {} | 131 ~TestButtonWithInkDrop() override {} |
131 | 132 |
132 private: | 133 private: |
133 scoped_ptr<views::InkDropDelegate> ink_drop_delegate_; | 134 std::unique_ptr<views::InkDropDelegate> ink_drop_delegate_; |
134 | 135 |
135 DISALLOW_COPY_AND_ASSIGN(TestButtonWithInkDrop); | 136 DISALLOW_COPY_AND_ASSIGN(TestButtonWithInkDrop); |
136 }; | 137 }; |
137 | 138 |
138 } // namespace | 139 } // namespace |
139 | 140 |
140 class CustomButtonTest : public ViewsTestBase { | 141 class CustomButtonTest : public ViewsTestBase { |
141 public: | 142 public: |
142 CustomButtonTest() {} | 143 CustomButtonTest() {} |
143 ~CustomButtonTest() override {} | 144 ~CustomButtonTest() override {} |
(...skipping 12 matching lines...) Expand all Loading... |
156 | 157 |
157 button_ = new TestCustomButton(); | 158 button_ = new TestCustomButton(); |
158 widget_->SetContentsView(button_); | 159 widget_->SetContentsView(button_); |
159 } | 160 } |
160 | 161 |
161 void TearDown() override { | 162 void TearDown() override { |
162 widget_.reset(); | 163 widget_.reset(); |
163 ViewsTestBase::TearDown(); | 164 ViewsTestBase::TearDown(); |
164 } | 165 } |
165 | 166 |
166 void CreateButtonWithInkDrop(scoped_ptr<InkDropDelegate> ink_drop_delegate) { | 167 void CreateButtonWithInkDrop( |
| 168 std::unique_ptr<InkDropDelegate> ink_drop_delegate) { |
167 delete button_; | 169 delete button_; |
168 button_ = new TestButtonWithInkDrop(std::move(ink_drop_delegate)); | 170 button_ = new TestButtonWithInkDrop(std::move(ink_drop_delegate)); |
169 widget_->SetContentsView(button_); | 171 widget_->SetContentsView(button_); |
170 } | 172 } |
171 | 173 |
172 protected: | 174 protected: |
173 Widget* widget() { return widget_.get(); } | 175 Widget* widget() { return widget_.get(); } |
174 TestCustomButton* button() { return button_; } | 176 TestCustomButton* button() { return button_; } |
175 void SetDraggedView(View* dragged_view) { | 177 void SetDraggedView(View* dragged_view) { |
176 widget_->dragged_view_ = dragged_view; | 178 widget_->dragged_view_ = dragged_view; |
177 } | 179 } |
178 | 180 |
179 private: | 181 private: |
180 scoped_ptr<Widget> widget_; | 182 std::unique_ptr<Widget> widget_; |
181 TestCustomButton* button_; | 183 TestCustomButton* button_; |
182 | 184 |
183 DISALLOW_COPY_AND_ASSIGN(CustomButtonTest); | 185 DISALLOW_COPY_AND_ASSIGN(CustomButtonTest); |
184 }; | 186 }; |
185 | 187 |
186 // Tests that hover state changes correctly when visiblity/enableness changes. | 188 // Tests that hover state changes correctly when visiblity/enableness changes. |
187 TEST_F(CustomButtonTest, HoverStateOnVisibilityChange) { | 189 TEST_F(CustomButtonTest, HoverStateOnVisibilityChange) { |
188 ui::test::EventGenerator generator(GetContext(), widget()->GetNativeWindow()); | 190 ui::test::EventGenerator generator(GetContext(), widget()->GetNativeWindow()); |
189 | 191 |
190 generator.PressLeftButton(); | 192 generator.PressLeftButton(); |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 } | 388 } |
387 | 389 |
388 // Tests that pressing a button shows the ink drop and releasing the button | 390 // Tests that pressing a button shows the ink drop and releasing the button |
389 // does not hide the ink drop. | 391 // does not hide the ink drop. |
390 // Note: Ink drop is not hidden upon release because CustomButton descendants | 392 // Note: Ink drop is not hidden upon release because CustomButton descendants |
391 // may enter a different ink drop state. | 393 // may enter a different ink drop state. |
392 TEST_F(CustomButtonTest, ButtonClickTogglesInkDrop) { | 394 TEST_F(CustomButtonTest, ButtonClickTogglesInkDrop) { |
393 gfx::Point old_cursor = gfx::Screen::GetScreen()->GetCursorScreenPoint(); | 395 gfx::Point old_cursor = gfx::Screen::GetScreen()->GetCursorScreenPoint(); |
394 bool ink_shown = false; | 396 bool ink_shown = false; |
395 bool ink_hidden = false; | 397 bool ink_hidden = false; |
396 CreateButtonWithInkDrop(make_scoped_ptr( | 398 CreateButtonWithInkDrop(base::WrapUnique( |
397 new TestInkDropDelegateThatTracksVisibilty(&ink_shown, &ink_hidden))); | 399 new TestInkDropDelegateThatTracksVisibilty(&ink_shown, &ink_hidden))); |
398 | 400 |
399 ui::test::EventGenerator generator(GetContext(), widget()->GetNativeWindow()); | 401 ui::test::EventGenerator generator(GetContext(), widget()->GetNativeWindow()); |
400 generator.set_current_location(gfx::Point(50, 50)); | 402 generator.set_current_location(gfx::Point(50, 50)); |
401 generator.PressLeftButton(); | 403 generator.PressLeftButton(); |
402 EXPECT_TRUE(ink_shown); | 404 EXPECT_TRUE(ink_shown); |
403 EXPECT_FALSE(ink_hidden); | 405 EXPECT_FALSE(ink_hidden); |
404 | 406 |
405 generator.ReleaseLeftButton(); | 407 generator.ReleaseLeftButton(); |
406 EXPECT_FALSE(ink_hidden); | 408 EXPECT_FALSE(ink_hidden); |
407 } | 409 } |
408 | 410 |
409 // Tests that pressing a button shows and releasing capture hides ink drop. | 411 // Tests that pressing a button shows and releasing capture hides ink drop. |
410 // Releasing capture should also reset PRESSED button state to NORMAL. | 412 // Releasing capture should also reset PRESSED button state to NORMAL. |
411 TEST_F(CustomButtonTest, CaptureLossHidesInkDrop) { | 413 TEST_F(CustomButtonTest, CaptureLossHidesInkDrop) { |
412 gfx::Point old_cursor = gfx::Screen::GetScreen()->GetCursorScreenPoint(); | 414 gfx::Point old_cursor = gfx::Screen::GetScreen()->GetCursorScreenPoint(); |
413 bool ink_shown = false; | 415 bool ink_shown = false; |
414 bool ink_hidden = false; | 416 bool ink_hidden = false; |
415 CreateButtonWithInkDrop(make_scoped_ptr( | 417 CreateButtonWithInkDrop(base::WrapUnique( |
416 new TestInkDropDelegateThatTracksVisibilty(&ink_shown, &ink_hidden))); | 418 new TestInkDropDelegateThatTracksVisibilty(&ink_shown, &ink_hidden))); |
417 | 419 |
418 ui::test::EventGenerator generator(GetContext(), widget()->GetNativeWindow()); | 420 ui::test::EventGenerator generator(GetContext(), widget()->GetNativeWindow()); |
419 generator.set_current_location(gfx::Point(50, 50)); | 421 generator.set_current_location(gfx::Point(50, 50)); |
420 generator.PressLeftButton(); | 422 generator.PressLeftButton(); |
421 EXPECT_TRUE(ink_shown); | 423 EXPECT_TRUE(ink_shown); |
422 EXPECT_FALSE(ink_hidden); | 424 EXPECT_FALSE(ink_hidden); |
423 | 425 |
424 EXPECT_EQ(Button::ButtonState::STATE_PRESSED, button()->state()); | 426 EXPECT_EQ(Button::ButtonState::STATE_PRESSED, button()->state()); |
425 SetDraggedView(button()); | 427 SetDraggedView(button()); |
426 widget()->SetCapture(button()); | 428 widget()->SetCapture(button()); |
427 widget()->ReleaseCapture(); | 429 widget()->ReleaseCapture(); |
428 SetDraggedView(nullptr); | 430 SetDraggedView(nullptr); |
429 EXPECT_TRUE(ink_hidden); | 431 EXPECT_TRUE(ink_hidden); |
430 EXPECT_EQ(ui::MaterialDesignController::IsModeMaterial() | 432 EXPECT_EQ(ui::MaterialDesignController::IsModeMaterial() |
431 ? Button::ButtonState::STATE_NORMAL | 433 ? Button::ButtonState::STATE_NORMAL |
432 : Button::ButtonState::STATE_PRESSED, | 434 : Button::ButtonState::STATE_PRESSED, |
433 button()->state()); | 435 button()->state()); |
434 } | 436 } |
435 | 437 |
436 TEST_F(CustomButtonTest, InkDropAfterShowingContextMenu) { | 438 TEST_F(CustomButtonTest, InkDropAfterShowingContextMenu) { |
437 TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 439 TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); |
438 CreateButtonWithInkDrop(make_scoped_ptr(ink_drop_delegate)); | 440 CreateButtonWithInkDrop(base::WrapUnique(ink_drop_delegate)); |
439 TestContextMenuController context_menu_controller; | 441 TestContextMenuController context_menu_controller; |
440 button()->set_context_menu_controller(&context_menu_controller); | 442 button()->set_context_menu_controller(&context_menu_controller); |
441 | 443 |
442 ink_drop_delegate->SetHovered(true); | 444 ink_drop_delegate->SetHovered(true); |
443 ink_drop_delegate->OnAction(InkDropState::ACTION_PENDING); | 445 ink_drop_delegate->OnAction(InkDropState::ACTION_PENDING); |
444 | 446 |
445 button()->ShowContextMenu(gfx::Point(), ui::MENU_SOURCE_MOUSE); | 447 button()->ShowContextMenu(gfx::Point(), ui::MENU_SOURCE_MOUSE); |
446 | 448 |
447 EXPECT_FALSE(ink_drop_delegate->is_hovered()); | 449 EXPECT_FALSE(ink_drop_delegate->is_hovered()); |
448 EXPECT_EQ(InkDropState::HIDDEN, ink_drop_delegate->state()); | 450 EXPECT_EQ(InkDropState::HIDDEN, ink_drop_delegate->state()); |
449 } | 451 } |
450 | 452 |
451 TEST_F(CustomButtonTest, InkDropAfterTryingToShowContextMenu) { | 453 TEST_F(CustomButtonTest, InkDropAfterTryingToShowContextMenu) { |
452 TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); | 454 TestInkDropDelegate* ink_drop_delegate = new TestInkDropDelegate(); |
453 CreateButtonWithInkDrop(make_scoped_ptr(ink_drop_delegate)); | 455 CreateButtonWithInkDrop(base::WrapUnique(ink_drop_delegate)); |
454 button()->set_context_menu_controller(nullptr); | 456 button()->set_context_menu_controller(nullptr); |
455 | 457 |
456 ink_drop_delegate->SetHovered(true); | 458 ink_drop_delegate->SetHovered(true); |
457 ink_drop_delegate->OnAction(InkDropState::ACTION_PENDING); | 459 ink_drop_delegate->OnAction(InkDropState::ACTION_PENDING); |
458 | 460 |
459 button()->ShowContextMenu(gfx::Point(), ui::MENU_SOURCE_MOUSE); | 461 button()->ShowContextMenu(gfx::Point(), ui::MENU_SOURCE_MOUSE); |
460 | 462 |
461 EXPECT_TRUE(ink_drop_delegate->is_hovered()); | 463 EXPECT_TRUE(ink_drop_delegate->is_hovered()); |
462 EXPECT_EQ(InkDropState::ACTION_PENDING, ink_drop_delegate->state()); | 464 EXPECT_EQ(InkDropState::ACTION_PENDING, ink_drop_delegate->state()); |
463 } | 465 } |
464 | 466 |
465 } // namespace views | 467 } // namespace views |
OLD | NEW |