Add ENABLE_MEDIA_ROUTER define to builds other than Android and iOS.
[chromium-blink-merge.git] / chrome / browser / ui / cocoa / omnibox / omnibox_view_mac_unittest.mm
blobc4fcf325581dcf06fc09cc7ae2dae4754b725246
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
3 // found in the LICENSE file.
5 #import "chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.h"
7 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h"
8 #include "chrome/browser/ui/omnibox/omnibox_edit_controller.h"
9 #include "chrome/browser/ui/omnibox/omnibox_popup_model.h"
10 #include "chrome/browser/ui/omnibox/omnibox_popup_view.h"
11 #include "chrome/browser/ui/toolbar/toolbar_model_delegate.h"
12 #include "chrome/browser/ui/toolbar/toolbar_model_impl.h"
13 #include "chrome/test/base/testing_profile.h"
14 #include "testing/platform_test.h"
15 #include "ui/gfx/font.h"
16 #include "ui/gfx/geometry/rect.h"
17 #include "ui/gfx/image/image.h"
19 namespace {
21 class MockOmniboxEditModel : public OmniboxEditModel {
22  public:
23   MockOmniboxEditModel(OmniboxView* view,
24                        OmniboxEditController* controller,
25                        Profile* profile)
26       : OmniboxEditModel(view, controller, profile),
27         up_or_down_count_(0) {
28   }
30   void OnUpOrDownKeyPressed(int count) override { up_or_down_count_ = count; }
32   int up_or_down_count() const { return up_or_down_count_; }
34   void set_up_or_down_count(int count) {
35     up_or_down_count_ = count;
36   }
38  private:
39   int up_or_down_count_;
41   DISALLOW_COPY_AND_ASSIGN(MockOmniboxEditModel);
44 class MockOmniboxPopupView : public OmniboxPopupView {
45  public:
46   MockOmniboxPopupView() : is_open_(false) {}
47   ~MockOmniboxPopupView() override {}
49   // Overridden from OmniboxPopupView:
50   bool IsOpen() const override { return is_open_; }
51   void InvalidateLine(size_t line) override {}
52   void UpdatePopupAppearance() override {}
53   gfx::Rect GetTargetBounds() override { return gfx::Rect(); }
54   void PaintUpdatesNow() override {}
55   void OnDragCanceled() override {}
57   void set_is_open(bool is_open) { is_open_ = is_open; }
59  private:
60   bool is_open_;
62   DISALLOW_COPY_AND_ASSIGN(MockOmniboxPopupView);
65 class TestingToolbarModelDelegate : public ToolbarModelDelegate {
66  public:
67   TestingToolbarModelDelegate() {}
68   ~TestingToolbarModelDelegate() override {}
70   // Overridden from ToolbarModelDelegate:
71   content::WebContents* GetActiveWebContents() const override { return NULL; }
73  private:
74   DISALLOW_COPY_AND_ASSIGN(TestingToolbarModelDelegate);
77 class TestingOmniboxEditController : public OmniboxEditController {
78  public:
79   explicit TestingOmniboxEditController(ToolbarModel* toolbar_model)
80       : OmniboxEditController(NULL),
81         toolbar_model_(toolbar_model) {
82   }
83   ~TestingOmniboxEditController() override {}
85  protected:
86   // Overridden from OmniboxEditController:
87   void Update(const content::WebContents* contents) override {}
88   void OnChanged() override {}
89   void OnSetFocus() override {}
90   void ShowURL() override {}
91   InstantController* GetInstant() override { return NULL; }
92   content::WebContents* GetWebContents() override { return NULL; }
93   ToolbarModel* GetToolbarModel() override { return toolbar_model_; }
94   const ToolbarModel* GetToolbarModel() const override {
95     return toolbar_model_;
96   }
98  private:
99   ToolbarModel* toolbar_model_;
101   DISALLOW_COPY_AND_ASSIGN(TestingOmniboxEditController);
104 }  // namespace
106 class OmniboxViewMacTest : public CocoaProfileTest {
107  public:
108   void SetModel(OmniboxViewMac* view, OmniboxEditModel* model) {
109     view->model_.reset(model);
110   }
113 TEST_F(OmniboxViewMacTest, GetFieldFont) {
114   EXPECT_TRUE(OmniboxViewMac::GetFieldFont(gfx::Font::NORMAL));
117 TEST_F(OmniboxViewMacTest, TabToAutocomplete) {
118   OmniboxViewMac view(NULL, profile(), NULL, NULL);
120   // This is deleted by the omnibox view.
121   MockOmniboxEditModel* model =
122       new MockOmniboxEditModel(&view, NULL, profile());
123   SetModel(&view, model);
125   MockOmniboxPopupView popup_view;
126   OmniboxPopupModel popup_model(&popup_view, model);
128   // With popup closed verify that tab doesn't autocomplete.
129   popup_view.set_is_open(false);
130   view.OnDoCommandBySelector(@selector(insertTab:));
131   EXPECT_EQ(0, model->up_or_down_count());
132   view.OnDoCommandBySelector(@selector(insertBacktab:));
133   EXPECT_EQ(0, model->up_or_down_count());
135   // With popup open verify that tab does autocomplete.
136   popup_view.set_is_open(true);
137   view.OnDoCommandBySelector(@selector(insertTab:));
138   EXPECT_EQ(1, model->up_or_down_count());
139   view.OnDoCommandBySelector(@selector(insertBacktab:));
140   EXPECT_EQ(-1, model->up_or_down_count());
143 TEST_F(OmniboxViewMacTest, SetGrayTextAutocompletion) {
144   const NSRect frame = NSMakeRect(0, 0, 50, 30);
145   base::scoped_nsobject<AutocompleteTextField> field(
146       [[AutocompleteTextField alloc] initWithFrame:frame]);
148   TestingToolbarModelDelegate delegate;
149   ToolbarModelImpl toolbar_model(&delegate);
150   TestingOmniboxEditController controller(&toolbar_model);
151   OmniboxViewMac view(&controller, profile(), NULL, field.get());
153   // This is deleted by the omnibox view.
154   MockOmniboxEditModel* model =
155       new MockOmniboxEditModel(&view, &controller, profile());
156   SetModel(&view, model);
158   MockOmniboxPopupView popup_view;
159   OmniboxPopupModel popup_model(&popup_view, model);
161   view.SetUserText(base::ASCIIToUTF16("Alfred"));
162   EXPECT_EQ("Alfred", base::UTF16ToUTF8(view.GetText()));
163   view.SetGrayTextAutocompletion(base::ASCIIToUTF16(" Hitchcock"));
164   EXPECT_EQ("Alfred", base::UTF16ToUTF8(view.GetText()));
165   EXPECT_EQ(" Hitchcock", base::UTF16ToUTF8(view.GetGrayTextAutocompletion()));
167   view.SetUserText(base::string16());
168   EXPECT_EQ(base::string16(), view.GetText());
169   EXPECT_EQ(base::string16(), view.GetGrayTextAutocompletion());
172 TEST_F(OmniboxViewMacTest, UpDownArrow) {
173   OmniboxViewMac view(NULL, profile(), NULL, NULL);
175   // This is deleted by the omnibox view.
176   MockOmniboxEditModel* model =
177       new MockOmniboxEditModel(&view, NULL, profile());
178   SetModel(&view, model);
180   MockOmniboxPopupView popup_view;
181   OmniboxPopupModel popup_model(&popup_view, model);
183   // With popup closed verify that pressing up and down arrow works.
184   popup_view.set_is_open(false);
185   model->set_up_or_down_count(0);
186   view.OnDoCommandBySelector(@selector(moveDown:));
187   EXPECT_EQ(1, model->up_or_down_count());
188   model->set_up_or_down_count(0);
189   view.OnDoCommandBySelector(@selector(moveUp:));
190   EXPECT_EQ(-1, model->up_or_down_count());
192   // With popup open verify that pressing up and down arrow works.
193   popup_view.set_is_open(true);
194   model->set_up_or_down_count(0);
195   view.OnDoCommandBySelector(@selector(moveDown:));
196   EXPECT_EQ(1, model->up_or_down_count());
197   model->set_up_or_down_count(0);
198   view.OnDoCommandBySelector(@selector(moveUp:));
199   EXPECT_EQ(-1, model->up_or_down_count());