Cleanup and IWYU-ify CocoaProfileTest and related tests.
[chromium-blink-merge.git] / chrome / browser / ui / cocoa / omnibox / omnibox_view_mac_unittest.mm
blobb6ea0291a0988dec805b7ffa19e9442cf6a1165b
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/search/search.h"
8 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h"
9 #include "chrome/browser/ui/omnibox/omnibox_edit_controller.h"
10 #include "chrome/browser/ui/omnibox/omnibox_popup_model.h"
11 #include "chrome/browser/ui/omnibox/omnibox_popup_view.h"
12 #include "chrome/browser/ui/toolbar/toolbar_model_delegate.h"
13 #include "chrome/browser/ui/toolbar/toolbar_model_impl.h"
14 #include "chrome/test/base/testing_profile.h"
15 #include "testing/platform_test.h"
16 #include "ui/gfx/image/image.h"
17 #include "ui/gfx/rect.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   virtual void OnUpOrDownKeyPressed(int count) OVERRIDE {
31     up_or_down_count_ = count;
32   }
34   int up_or_down_count() const { return up_or_down_count_; }
36   void set_up_or_down_count(int count) {
37     up_or_down_count_ = count;
38   }
40  private:
41   int up_or_down_count_;
43   DISALLOW_COPY_AND_ASSIGN(MockOmniboxEditModel);
46 class MockOmniboxPopupView : public OmniboxPopupView {
47  public:
48   MockOmniboxPopupView() : is_open_(false) {}
49   virtual ~MockOmniboxPopupView() {}
51   // Overridden from OmniboxPopupView:
52   virtual bool IsOpen() const OVERRIDE { return is_open_; }
53   virtual void InvalidateLine(size_t line) OVERRIDE {}
54   virtual void UpdatePopupAppearance() OVERRIDE {}
55   virtual gfx::Rect GetTargetBounds() OVERRIDE { return gfx::Rect(); }
56   virtual void PaintUpdatesNow() OVERRIDE {}
57   virtual void OnDragCanceled() OVERRIDE {}
59   void set_is_open(bool is_open) { is_open_ = is_open; }
61  private:
62   bool is_open_;
64   DISALLOW_COPY_AND_ASSIGN(MockOmniboxPopupView);
67 class TestingToolbarModelDelegate : public ToolbarModelDelegate {
68  public:
69   TestingToolbarModelDelegate() {}
70   virtual ~TestingToolbarModelDelegate() {}
72   // Overridden from ToolbarModelDelegate:
73   virtual content::WebContents* GetActiveWebContents() const OVERRIDE {
74     return NULL;
75   }
77  private:
78   DISALLOW_COPY_AND_ASSIGN(TestingToolbarModelDelegate);
81 class TestingOmniboxEditController : public OmniboxEditController {
82  public:
83   explicit TestingOmniboxEditController(ToolbarModel* toolbar_model)
84       : toolbar_model_(toolbar_model) {}
85   virtual ~TestingOmniboxEditController() {}
87   // Overridden from OmniboxEditController:
88   virtual void OnAutocompleteAccept(const GURL& url,
89                                     WindowOpenDisposition disposition,
90                                     content::PageTransition transition,
91                                     const GURL& alternate_nav_url) OVERRIDE {}
92   virtual void OnChanged() OVERRIDE {}
93   virtual void OnSelectionBoundsChanged() OVERRIDE {}
94   virtual void OnInputInProgress(bool in_progress) OVERRIDE {}
95   virtual void OnKillFocus() OVERRIDE {}
96   virtual void OnSetFocus() OVERRIDE {}
97   virtual gfx::Image GetFavicon() const OVERRIDE { return gfx::Image(); }
98   virtual string16 GetTitle() const OVERRIDE { return string16(); }
99   virtual InstantController* GetInstant() OVERRIDE { return NULL; }
100   virtual content::WebContents* GetWebContents() OVERRIDE { return NULL; }
101   virtual ToolbarModel* GetToolbarModel() OVERRIDE { return toolbar_model_; }
102   virtual const ToolbarModel* GetToolbarModel() const OVERRIDE {
103     return toolbar_model_;
104   }
106  private:
107   ToolbarModel* toolbar_model_;
109   DISALLOW_COPY_AND_ASSIGN(TestingOmniboxEditController);
112 }  // namespace
114 class OmniboxViewMacTest : public CocoaProfileTest {
115  public:
116   void SetModel(OmniboxViewMac* view, OmniboxEditModel* model) {
117     view->model_.reset(model);
118   }
121 TEST_F(OmniboxViewMacTest, GetFieldFont) {
122   EXPECT_TRUE(OmniboxViewMac::GetFieldFont());
125 TEST_F(OmniboxViewMacTest, TabToAutocomplete) {
126   chrome::EnableInstantExtendedAPIForTesting();
127   OmniboxViewMac view(NULL, profile(), NULL, NULL);
129   // This is deleted by the omnibox view.
130   MockOmniboxEditModel* model =
131       new MockOmniboxEditModel(&view, NULL, profile());
132   SetModel(&view, model);
134   MockOmniboxPopupView popup_view;
135   OmniboxPopupModel popup_model(&popup_view, model);
137   // With popup closed verify that tab doesn't autocomplete.
138   popup_view.set_is_open(false);
139   view.OnDoCommandBySelector(@selector(insertTab:));
140   EXPECT_EQ(0, model->up_or_down_count());
141   view.OnDoCommandBySelector(@selector(insertBacktab:));
142   EXPECT_EQ(0, model->up_or_down_count());
144   // With popup open verify that tab does autocomplete.
145   popup_view.set_is_open(true);
146   view.OnDoCommandBySelector(@selector(insertTab:));
147   EXPECT_EQ(1, model->up_or_down_count());
148   view.OnDoCommandBySelector(@selector(insertBacktab:));
149   EXPECT_EQ(-1, model->up_or_down_count());
152 TEST_F(OmniboxViewMacTest, SetGrayTextAutocompletion) {
153   const NSRect frame = NSMakeRect(0, 0, 50, 30);
154   base::scoped_nsobject<AutocompleteTextField> field(
155       [[AutocompleteTextField alloc] initWithFrame:frame]);
157   TestingToolbarModelDelegate delegate;
158   ToolbarModelImpl toolbar_model(&delegate);
159   TestingOmniboxEditController controller(&toolbar_model);
160   OmniboxViewMac view(&controller, profile(), NULL, field.get());
162   // This is deleted by the omnibox view.
163   MockOmniboxEditModel* model =
164       new MockOmniboxEditModel(&view, &controller, profile());
165   SetModel(&view, model);
167   MockOmniboxPopupView popup_view;
168   OmniboxPopupModel popup_model(&popup_view, model);
170   view.SetUserText(ASCIIToUTF16("Alfred"));
171   EXPECT_EQ("Alfred", UTF16ToUTF8(view.GetText()));
172   view.SetGrayTextAutocompletion(ASCIIToUTF16(" Hitchcock"));
173   EXPECT_EQ("Alfred", UTF16ToUTF8(view.GetText()));
174   EXPECT_EQ(" Hitchcock", UTF16ToUTF8(view.GetGrayTextAutocompletion()));
176   view.SetUserText(string16());
177   EXPECT_EQ(string16(), view.GetText());
178   EXPECT_EQ(string16(), view.GetGrayTextAutocompletion());
181 TEST_F(OmniboxViewMacTest, UpDownArrow) {
182   OmniboxViewMac view(NULL, profile(), NULL, NULL);
184   // This is deleted by the omnibox view.
185   MockOmniboxEditModel* model =
186       new MockOmniboxEditModel(&view, NULL, profile());
187   SetModel(&view, model);
189   MockOmniboxPopupView popup_view;
190   OmniboxPopupModel popup_model(&popup_view, model);
192   // With popup closed verify that pressing up and down arrow works.
193   popup_view.set_is_open(false);
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());
201   // With popup open verify that pressing up and down arrow works.
202   popup_view.set_is_open(true);
203   model->set_up_or_down_count(0);
204   view.OnDoCommandBySelector(@selector(moveDown:));
205   EXPECT_EQ(1, model->up_or_down_count());
206   model->set_up_or_down_count(0);
207   view.OnDoCommandBySelector(@selector(moveUp:));
208   EXPECT_EQ(-1, model->up_or_down_count());