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 <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/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
11 #include "grit/ui_strings.h" | 11 #include "grit/ui_strings.h" |
| 12 #include "ui/aura/window_event_dispatcher.h" |
12 #include "ui/base/accelerators/accelerator.h" | 13 #include "ui/base/accelerators/accelerator.h" |
13 #include "ui/base/clipboard/clipboard.h" | 14 #include "ui/base/clipboard/clipboard.h" |
14 #include "ui/base/l10n/l10n_util.h" | 15 #include "ui/base/l10n/l10n_util.h" |
15 #include "ui/compositor/compositor.h" | 16 #include "ui/compositor/compositor.h" |
16 #include "ui/compositor/layer.h" | 17 #include "ui/compositor/layer.h" |
17 #include "ui/compositor/layer_animator.h" | 18 #include "ui/compositor/layer_animator.h" |
18 #include "ui/compositor/test/draw_waiter_for_test.h" | 19 #include "ui/compositor/test/draw_waiter_for_test.h" |
19 #include "ui/events/event.h" | 20 #include "ui/events/event.h" |
| 21 #include "ui/events/gestures/gesture_recognizer.h" |
20 #include "ui/events/keycodes/keyboard_codes.h" | 22 #include "ui/events/keycodes/keyboard_codes.h" |
21 #include "ui/gfx/canvas.h" | 23 #include "ui/gfx/canvas.h" |
22 #include "ui/gfx/path.h" | 24 #include "ui/gfx/path.h" |
23 #include "ui/gfx/transform.h" | 25 #include "ui/gfx/transform.h" |
24 #include "ui/views/background.h" | 26 #include "ui/views/background.h" |
25 #include "ui/views/controls/native/native_view_host.h" | 27 #include "ui/views/controls/native/native_view_host.h" |
26 #include "ui/views/controls/scroll_view.h" | 28 #include "ui/views/controls/scroll_view.h" |
27 #include "ui/views/controls/textfield/textfield.h" | 29 #include "ui/views/controls/textfield/textfield.h" |
28 #include "ui/views/focus/view_storage.h" | 30 #include "ui/views/focus/view_storage.h" |
29 #include "ui/views/test/views_test_base.h" | 31 #include "ui/views/test/views_test_base.h" |
30 #include "ui/views/view.h" | 32 #include "ui/views/view.h" |
31 #include "ui/views/views_delegate.h" | 33 #include "ui/views/views_delegate.h" |
32 #include "ui/views/widget/native_widget.h" | 34 #include "ui/views/widget/native_widget.h" |
33 #include "ui/views/widget/root_view.h" | 35 #include "ui/views/widget/root_view.h" |
34 #include "ui/views/window/dialog_client_view.h" | 36 #include "ui/views/window/dialog_client_view.h" |
35 #include "ui/views/window/dialog_delegate.h" | 37 #include "ui/views/window/dialog_delegate.h" |
36 | 38 |
37 #if defined(OS_WIN) | 39 #if defined(OS_WIN) |
38 #include "ui/views/test/test_views_delegate.h" | 40 #include "ui/views/test/test_views_delegate.h" |
39 #endif | 41 #endif |
40 #if defined(USE_AURA) | |
41 #include "ui/aura/window_event_dispatcher.h" | |
42 #include "ui/events/gestures/gesture_recognizer.h" | |
43 #endif | |
44 | 42 |
45 using base::ASCIIToUTF16; | 43 using base::ASCIIToUTF16; |
46 | 44 |
47 namespace { | 45 namespace { |
48 | 46 |
49 // Returns true if |ancestor| is an ancestor of |layer|. | 47 // Returns true if |ancestor| is an ancestor of |layer|. |
50 bool LayerIsAncestor(const ui::Layer* ancestor, const ui::Layer* layer) { | 48 bool LayerIsAncestor(const ui::Layer* ancestor, const ui::Layer* layer) { |
51 while (layer && layer != ancestor) | 49 while (layer && layer != ancestor) |
52 layer = layer->parent(); | 50 layer = layer->parent(); |
53 return layer == ancestor; | 51 return layer == ancestor; |
(...skipping 1524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1578 } | 1576 } |
1579 | 1577 |
1580 //////////////////////////////////////////////////////////////////////////////// | 1578 //////////////////////////////////////////////////////////////////////////////// |
1581 // Accelerators | 1579 // Accelerators |
1582 //////////////////////////////////////////////////////////////////////////////// | 1580 //////////////////////////////////////////////////////////////////////////////// |
1583 bool TestView::AcceleratorPressed(const ui::Accelerator& accelerator) { | 1581 bool TestView::AcceleratorPressed(const ui::Accelerator& accelerator) { |
1584 accelerator_count_map_[accelerator]++; | 1582 accelerator_count_map_[accelerator]++; |
1585 return true; | 1583 return true; |
1586 } | 1584 } |
1587 | 1585 |
1588 #if defined(OS_WIN) && !defined(USE_AURA) | 1586 // TODO: these tests were initially commented out when getting aura to |
| 1587 // run. Figure out if still valuable and either nuke or fix. |
| 1588 #if defined(false) |
1589 TEST_F(ViewTest, ActivateAccelerator) { | 1589 TEST_F(ViewTest, ActivateAccelerator) { |
1590 // Register a keyboard accelerator before the view is added to a window. | 1590 // Register a keyboard accelerator before the view is added to a window. |
1591 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); | 1591 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
1592 TestView* view = new TestView(); | 1592 TestView* view = new TestView(); |
1593 view->Reset(); | 1593 view->Reset(); |
1594 view->AddAccelerator(return_accelerator); | 1594 view->AddAccelerator(return_accelerator); |
1595 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); | 1595 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); |
1596 | 1596 |
1597 // Create a window and add the view as its child. | 1597 // Create a window and add the view as its child. |
1598 scoped_ptr<Widget> widget(new Widget); | 1598 scoped_ptr<Widget> widget(new Widget); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1643 view->ResetAccelerators(); | 1643 view->ResetAccelerators(); |
1644 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); | 1644 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); |
1645 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 2); | 1645 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 2); |
1646 EXPECT_EQ(view->accelerator_count_map_[escape_accelerator], 2); | 1646 EXPECT_EQ(view->accelerator_count_map_[escape_accelerator], 2); |
1647 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); | 1647 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); |
1648 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 2); | 1648 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 2); |
1649 EXPECT_EQ(view->accelerator_count_map_[escape_accelerator], 2); | 1649 EXPECT_EQ(view->accelerator_count_map_[escape_accelerator], 2); |
1650 | 1650 |
1651 widget->CloseNow(); | 1651 widget->CloseNow(); |
1652 } | 1652 } |
1653 #endif | |
1654 | 1653 |
1655 #if defined(OS_WIN) && !defined(USE_AURA) | |
1656 TEST_F(ViewTest, HiddenViewWithAccelerator) { | 1654 TEST_F(ViewTest, HiddenViewWithAccelerator) { |
1657 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); | 1655 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
1658 TestView* view = new TestView(); | 1656 TestView* view = new TestView(); |
1659 view->Reset(); | 1657 view->Reset(); |
1660 view->AddAccelerator(return_accelerator); | 1658 view->AddAccelerator(return_accelerator); |
1661 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); | 1659 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); |
1662 | 1660 |
1663 scoped_ptr<Widget> widget(new Widget); | 1661 scoped_ptr<Widget> widget(new Widget); |
1664 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 1662 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
1665 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 1663 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
1666 params.bounds = gfx::Rect(0, 0, 100, 100); | 1664 params.bounds = gfx::Rect(0, 0, 100, 100); |
1667 widget->Init(params); | 1665 widget->Init(params); |
1668 View* root = widget->GetRootView(); | 1666 View* root = widget->GetRootView(); |
1669 root->AddChildView(view); | 1667 root->AddChildView(view); |
1670 widget->Show(); | 1668 widget->Show(); |
1671 | 1669 |
1672 FocusManager* focus_manager = widget->GetFocusManager(); | 1670 FocusManager* focus_manager = widget->GetFocusManager(); |
1673 ASSERT_TRUE(focus_manager); | 1671 ASSERT_TRUE(focus_manager); |
1674 | 1672 |
1675 view->SetVisible(false); | 1673 view->SetVisible(false); |
1676 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); | 1674 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); |
1677 | 1675 |
1678 view->SetVisible(true); | 1676 view->SetVisible(true); |
1679 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); | 1677 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
1680 | 1678 |
1681 widget->CloseNow(); | 1679 widget->CloseNow(); |
1682 } | 1680 } |
1683 #endif | |
1684 | 1681 |
1685 #if defined(OS_WIN) && !defined(USE_AURA) | |
1686 TEST_F(ViewTest, ViewInHiddenWidgetWithAccelerator) { | 1682 TEST_F(ViewTest, ViewInHiddenWidgetWithAccelerator) { |
1687 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); | 1683 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
1688 TestView* view = new TestView(); | 1684 TestView* view = new TestView(); |
1689 view->Reset(); | 1685 view->Reset(); |
1690 view->AddAccelerator(return_accelerator); | 1686 view->AddAccelerator(return_accelerator); |
1691 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); | 1687 EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); |
1692 | 1688 |
1693 scoped_ptr<Widget> widget(new Widget); | 1689 scoped_ptr<Widget> widget(new Widget); |
1694 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 1690 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
1695 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 1691 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
(...skipping 11 matching lines...) Expand all Loading... |
1707 widget->Show(); | 1703 widget->Show(); |
1708 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); | 1704 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
1709 EXPECT_EQ(1, view->accelerator_count_map_[return_accelerator]); | 1705 EXPECT_EQ(1, view->accelerator_count_map_[return_accelerator]); |
1710 | 1706 |
1711 widget->Hide(); | 1707 widget->Hide(); |
1712 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); | 1708 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); |
1713 EXPECT_EQ(1, view->accelerator_count_map_[return_accelerator]); | 1709 EXPECT_EQ(1, view->accelerator_count_map_[return_accelerator]); |
1714 | 1710 |
1715 widget->CloseNow(); | 1711 widget->CloseNow(); |
1716 } | 1712 } |
1717 #endif | |
1718 | 1713 |
1719 #if defined(OS_WIN) && !defined(USE_AURA) | |
1720 //////////////////////////////////////////////////////////////////////////////// | 1714 //////////////////////////////////////////////////////////////////////////////// |
1721 // Mouse-wheel message rerouting | 1715 // Mouse-wheel message rerouting |
1722 //////////////////////////////////////////////////////////////////////////////// | 1716 //////////////////////////////////////////////////////////////////////////////// |
1723 class ScrollableTestView : public View { | 1717 class ScrollableTestView : public View { |
1724 public: | 1718 public: |
1725 ScrollableTestView() { } | 1719 ScrollableTestView() { } |
1726 | 1720 |
1727 virtual gfx::Size GetPreferredSize() { | 1721 virtual gfx::Size GetPreferredSize() { |
1728 return gfx::Size(100, 10000); | 1722 return gfx::Size(100, 10000); |
1729 } | 1723 } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1789 // scroll-view). | 1783 // scroll-view). |
1790 | 1784 |
1791 // First to the Window's HWND. | 1785 // First to the Window's HWND. |
1792 ::SendMessage(view_with_controls->GetWidget()->GetNativeView(), | 1786 ::SendMessage(view_with_controls->GetWidget()->GetNativeView(), |
1793 WM_MOUSEWHEEL, MAKEWPARAM(0, -20), MAKELPARAM(250, 250)); | 1787 WM_MOUSEWHEEL, MAKEWPARAM(0, -20), MAKELPARAM(250, 250)); |
1794 EXPECT_EQ(20, scroll_view->GetVisibleRect().y()); | 1788 EXPECT_EQ(20, scroll_view->GetVisibleRect().y()); |
1795 | 1789 |
1796 window1->CloseNow(); | 1790 window1->CloseNow(); |
1797 window2->CloseNow(); | 1791 window2->CloseNow(); |
1798 } | 1792 } |
1799 #endif | 1793 #endif // false |
1800 | 1794 |
1801 //////////////////////////////////////////////////////////////////////////////// | 1795 //////////////////////////////////////////////////////////////////////////////// |
1802 // Native view hierachy | 1796 // Native view hierachy |
1803 //////////////////////////////////////////////////////////////////////////////// | 1797 //////////////////////////////////////////////////////////////////////////////// |
1804 class ToplevelWidgetObserverView : public View { | 1798 class ToplevelWidgetObserverView : public View { |
1805 public: | 1799 public: |
1806 ToplevelWidgetObserverView() : toplevel_(NULL) { | 1800 ToplevelWidgetObserverView() : toplevel_(NULL) { |
1807 } | 1801 } |
1808 virtual ~ToplevelWidgetObserverView() { | 1802 virtual ~ToplevelWidgetObserverView() { |
1809 } | 1803 } |
(...skipping 1143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2953 EXPECT_EQ(1, v1.GetIndexOf(&v3)); | 2947 EXPECT_EQ(1, v1.GetIndexOf(&v3)); |
2954 v1.AddChildView(&v3); | 2948 v1.AddChildView(&v3); |
2955 EXPECT_EQ(0, v1.GetIndexOf(&v2)); | 2949 EXPECT_EQ(0, v1.GetIndexOf(&v2)); |
2956 EXPECT_EQ(1, v1.GetIndexOf(&v3)); | 2950 EXPECT_EQ(1, v1.GetIndexOf(&v3)); |
2957 } | 2951 } |
2958 | 2952 |
2959 //////////////////////////////////////////////////////////////////////////////// | 2953 //////////////////////////////////////////////////////////////////////////////// |
2960 // Layers | 2954 // Layers |
2961 //////////////////////////////////////////////////////////////////////////////// | 2955 //////////////////////////////////////////////////////////////////////////////// |
2962 | 2956 |
2963 #if defined(USE_AURA) | |
2964 | |
2965 namespace { | 2957 namespace { |
2966 | 2958 |
2967 // Test implementation of LayerAnimator. | 2959 // Test implementation of LayerAnimator. |
2968 class TestLayerAnimator : public ui::LayerAnimator { | 2960 class TestLayerAnimator : public ui::LayerAnimator { |
2969 public: | 2961 public: |
2970 TestLayerAnimator(); | 2962 TestLayerAnimator(); |
2971 | 2963 |
2972 const gfx::Rect& last_bounds() const { return last_bounds_; } | 2964 const gfx::Rect& last_bounds() const { return last_bounds_; } |
2973 | 2965 |
2974 // LayerAnimator. | 2966 // LayerAnimator. |
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3539 | 3531 |
3540 // Test the new layer order. |v1_old_layer| should be above the layers | 3532 // Test the new layer order. |v1_old_layer| should be above the layers |
3541 // for |v1| and |v2|. | 3533 // for |v1| and |v2|. |
3542 const std::vector<ui::Layer*>& child_layers_post = root_layer->children(); | 3534 const std::vector<ui::Layer*>& child_layers_post = root_layer->children(); |
3543 ASSERT_EQ(3u, child_layers_post.size()); | 3535 ASSERT_EQ(3u, child_layers_post.size()); |
3544 EXPECT_EQ(v1->layer(), child_layers_post[0]); | 3536 EXPECT_EQ(v1->layer(), child_layers_post[0]); |
3545 EXPECT_EQ(v2->layer(), child_layers_post[1]); | 3537 EXPECT_EQ(v2->layer(), child_layers_post[1]); |
3546 EXPECT_EQ(v1_old_layer, child_layers_post[2]); | 3538 EXPECT_EQ(v1_old_layer, child_layers_post[2]); |
3547 } | 3539 } |
3548 | 3540 |
3549 #endif // USE_AURA | |
3550 | |
3551 TEST_F(ViewTest, FocusableAssertions) { | 3541 TEST_F(ViewTest, FocusableAssertions) { |
3552 // View subclasses may change insets based on whether they are focusable, | 3542 // View subclasses may change insets based on whether they are focusable, |
3553 // which effects the preferred size. To avoid preferred size changing around | 3543 // which effects the preferred size. To avoid preferred size changing around |
3554 // these Views need to key off the last value set to SetFocusable(), not | 3544 // these Views need to key off the last value set to SetFocusable(), not |
3555 // whether the View is focusable right now. For this reason it's important | 3545 // whether the View is focusable right now. For this reason it's important |
3556 // that focusable() return the last value passed to SetFocusable and not | 3546 // that focusable() return the last value passed to SetFocusable and not |
3557 // whether the View is focusable right now. | 3547 // whether the View is focusable right now. |
3558 TestView view; | 3548 TestView view; |
3559 view.SetFocusable(true); | 3549 view.SetFocusable(true); |
3560 EXPECT_TRUE(view.focusable()); | 3550 EXPECT_TRUE(view.focusable()); |
3561 view.SetEnabled(false); | 3551 view.SetEnabled(false); |
3562 EXPECT_TRUE(view.focusable()); | 3552 EXPECT_TRUE(view.focusable()); |
3563 view.SetFocusable(false); | 3553 view.SetFocusable(false); |
3564 EXPECT_FALSE(view.focusable()); | 3554 EXPECT_FALSE(view.focusable()); |
3565 } | 3555 } |
3566 | 3556 |
3567 } // namespace views | 3557 } // namespace views |
OLD | NEW |