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

Side by Side Diff: chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc

Issue 2735533002: Use SetUserText() in OmniboxViewViews emphasis tests to ensure system coherence. (Closed)
Patch Set: Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2015 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 "chrome/browser/ui/views/omnibox/omnibox_view_views.h" 5 #include "chrome/browser/ui/views/omnibox/omnibox_view_views.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "build/build_config.h" 12 #include "build/build_config.h"
13 #include "chrome/browser/autocomplete/autocomplete_classifier_factory.h"
13 #include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h" 14 #include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h"
14 #include "chrome/browser/command_updater.h" 15 #include "chrome/browser/command_updater.h"
16 #include "chrome/browser/search_engines/template_url_service_factory_test_util.h "
15 #include "chrome/browser/ui/omnibox/chrome_omnibox_client.h" 17 #include "chrome/browser/ui/omnibox/chrome_omnibox_client.h"
16 #include "chrome/browser/ui/omnibox/chrome_omnibox_edit_controller.h" 18 #include "chrome/browser/ui/omnibox/chrome_omnibox_edit_controller.h"
17 #include "chrome/test/base/testing_profile.h" 19 #include "chrome/test/base/testing_profile.h"
18 #include "components/omnibox/browser/omnibox_edit_model.h" 20 #include "components/omnibox/browser/omnibox_edit_model.h"
21 #include "components/toolbar/test_toolbar_model.h"
19 #include "content/public/test/test_browser_thread_bundle.h" 22 #include "content/public/test/test_browser_thread_bundle.h"
20 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
21 #include "ui/base/ime/text_edit_commands.h" 24 #include "ui/base/ime/text_edit_commands.h"
22 #include "ui/events/event_utils.h" 25 #include "ui/events/event_utils.h"
23 #include "ui/events/keycodes/dom/dom_code.h" 26 #include "ui/events/keycodes/dom/dom_code.h"
24 #include "ui/views/controls/textfield/textfield_test_api.h" 27 #include "ui/views/controls/textfield/textfield_test_api.h"
25 28
26 #if defined(OS_CHROMEOS) 29 #if defined(OS_CHROMEOS)
27 #include "chrome/browser/chromeos/input_method/input_method_configuration.h" 30 #include "chrome/browser/chromeos/input_method/input_method_configuration.h"
28 #include "chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h" 31 #include "chrome/browser/chromeos/input_method/mock_input_method_manager_impl.h"
(...skipping 19 matching lines...) Expand all
48 51
49 // OmniboxViewViews: 52 // OmniboxViewViews:
50 void EmphasizeURLComponents() override; 53 void EmphasizeURLComponents() override;
51 54
52 private: 55 private:
53 // OmniboxViewViews: 56 // OmniboxViewViews:
54 void UpdatePopup() override; 57 void UpdatePopup() override;
55 void SetEmphasis(bool emphasize, const gfx::Range& range) override; 58 void SetEmphasis(bool emphasize, const gfx::Range& range) override;
56 void UpdateSchemeStyle(const gfx::Range& range) override; 59 void UpdateSchemeStyle(const gfx::Range& range) override;
57 60
58 // Simplistic test override returns whether a given string looks like a URL
59 // without having to mock AutocompleteClassifier objects and their
60 // dependencies.
61 bool CurrentTextIsURL() override {
62 bool looks_like_url = (text().find(':') != std::string::npos ||
63 text().find('/') != std::string::npos);
64 return looks_like_url;
65 }
66
67 size_t update_popup_call_count_; 61 size_t update_popup_call_count_;
68 base::string16 update_popup_text_; 62 base::string16 update_popup_text_;
69 gfx::Range update_popup_selection_range_; 63 gfx::Range update_popup_selection_range_;
70 64
71 // Range of the last scheme logged by UpdateSchemeStyle(). 65 // Range of the last scheme logged by UpdateSchemeStyle().
72 gfx::Range scheme_range_; 66 gfx::Range scheme_range_;
73 67
74 // Range of the last text emphasized by SetEmphasis(). 68 // Range of the last text emphasized by SetEmphasis().
75 gfx::Range emphasis_range_; 69 gfx::Range emphasis_range_;
76 70
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 } 118 }
125 119
126 void TestingOmniboxViewViews::UpdateSchemeStyle(const gfx::Range& range) { 120 void TestingOmniboxViewViews::UpdateSchemeStyle(const gfx::Range& range) {
127 scheme_range_ = range; 121 scheme_range_ = range;
128 } 122 }
129 123
130 // TestingOmniboxEditController ----------------------------------------------- 124 // TestingOmniboxEditController -----------------------------------------------
131 125
132 class TestingOmniboxEditController : public ChromeOmniboxEditController { 126 class TestingOmniboxEditController : public ChromeOmniboxEditController {
133 public: 127 public:
134 explicit TestingOmniboxEditController(CommandUpdater* command_updater) 128 TestingOmniboxEditController(CommandUpdater* command_updater,
135 : ChromeOmniboxEditController(command_updater) {} 129 ToolbarModel* toolbar_model)
130 : ChromeOmniboxEditController(command_updater),
131 toolbar_model_(toolbar_model) {}
136 132
137 private: 133 private:
138 // ChromeOmniboxEditController: 134 // ChromeOmniboxEditController:
139 void UpdateWithoutTabRestore() override {} 135 void UpdateWithoutTabRestore() override {}
140 void OnChanged() override {} 136 void OnChanged() override {}
141 ToolbarModel* GetToolbarModel() override { return nullptr; } 137 ToolbarModel* GetToolbarModel() override { return toolbar_model_; }
142 const ToolbarModel* GetToolbarModel() const override { return nullptr; } 138 const ToolbarModel* GetToolbarModel() const override {
139 return toolbar_model_;
140 }
143 content::WebContents* GetWebContents() override { return nullptr; } 141 content::WebContents* GetWebContents() override { return nullptr; }
144 142
143 ToolbarModel* toolbar_model_;
144
145 DISALLOW_COPY_AND_ASSIGN(TestingOmniboxEditController); 145 DISALLOW_COPY_AND_ASSIGN(TestingOmniboxEditController);
146 }; 146 };
147 147
148 } // namespace 148 } // namespace
149 149
150 // OmniboxViewViewsTest ------------------------------------------------------- 150 // OmniboxViewViewsTest -------------------------------------------------------
151 151
152 class OmniboxViewViewsTest : public testing::Test { 152 class OmniboxViewViewsTest : public testing::Test {
153 public: 153 public:
154 OmniboxViewViewsTest(); 154 OmniboxViewViewsTest();
155 155
156 TestingOmniboxViewViews* omnibox_view() { return omnibox_view_.get(); } 156 TestingOmniboxViewViews* omnibox_view() { return omnibox_view_.get(); }
157 views::Textfield* omnibox_textfield() { return omnibox_view(); } 157 views::Textfield* omnibox_textfield() { return omnibox_view(); }
158 ui::TextEditCommand scheduled_text_edit_command() const { 158 ui::TextEditCommand scheduled_text_edit_command() const {
159 return test_api_->scheduled_text_edit_command(); 159 return test_api_->scheduled_text_edit_command();
160 } 160 }
161 161
162 // Sets |new_text| as the text in the omnibox. 162 // Sets |new_text| as the text in the omnibox. If |accept_input| is true,
163 void SetAndEmphasizeText(const std::string& new_text); 163 // pretends that the user has accepted this input (i.e. it's been navigated
164 // to).
165 void SetAndEmphasizeText(const std::string& new_text,
166 bool accept_input = true);
164 167
165 private: 168 private:
166 // testing::Test: 169 // testing::Test:
167 void SetUp() override; 170 void SetUp() override;
168 void TearDown() override; 171 void TearDown() override;
169 172
170 content::TestBrowserThreadBundle thread_bundle_; 173 content::TestBrowserThreadBundle thread_bundle_;
171 TestingProfile profile_; 174 TestingProfile profile_;
175 TemplateURLServiceFactoryTestUtil util_;
172 CommandUpdater command_updater_; 176 CommandUpdater command_updater_;
177 TestToolbarModel toolbar_model_;
173 TestingOmniboxEditController omnibox_edit_controller_; 178 TestingOmniboxEditController omnibox_edit_controller_;
174 std::unique_ptr<TestingOmniboxViewViews> omnibox_view_; 179 std::unique_ptr<TestingOmniboxViewViews> omnibox_view_;
175 std::unique_ptr<views::TextfieldTestApi> test_api_; 180 std::unique_ptr<views::TextfieldTestApi> test_api_;
176 181
177 DISALLOW_COPY_AND_ASSIGN(OmniboxViewViewsTest); 182 DISALLOW_COPY_AND_ASSIGN(OmniboxViewViewsTest);
178 }; 183 };
179 184
180 OmniboxViewViewsTest::OmniboxViewViewsTest() 185 OmniboxViewViewsTest::OmniboxViewViewsTest()
181 : command_updater_(nullptr), omnibox_edit_controller_(&command_updater_) {} 186 : util_(&profile_),
187 command_updater_(nullptr),
188 omnibox_edit_controller_(&command_updater_, &toolbar_model_) {}
182 189
183 void OmniboxViewViewsTest::SetAndEmphasizeText(const std::string& new_text) { 190 void OmniboxViewViewsTest::SetAndEmphasizeText(const std::string& new_text,
184 omnibox_view()->SetText(base::ASCIIToUTF16(new_text)); 191 bool accept_input) {
192 omnibox_view()->SetUserText(base::ASCIIToUTF16(new_text));
193 if (accept_input) {
194 // We don't need to actually navigate in this case (and doing so in a test
195 // would be difficult); it's sufficient to mark input as "no longer in
196 // progress", and the edit model will assume the current text is a URL.
197 omnibox_view()->model()->SetInputInProgress(false);
198 }
185 omnibox_view()->EmphasizeURLComponents(); 199 omnibox_view()->EmphasizeURLComponents();
186 } 200 }
187 201
188 void OmniboxViewViewsTest::SetUp() { 202 void OmniboxViewViewsTest::SetUp() {
189 #if defined(OS_CHROMEOS) 203 #if defined(OS_CHROMEOS)
190 chromeos::input_method::InitializeForTesting( 204 chromeos::input_method::InitializeForTesting(
191 new chromeos::input_method::MockInputMethodManagerImpl); 205 new chromeos::input_method::MockInputMethodManagerImpl);
192 #endif 206 #endif
207 AutocompleteClassifierFactory::GetInstance()->SetTestingFactoryAndUse(
208 &profile_, &AutocompleteClassifierFactory::BuildInstanceFor);
193 omnibox_view_ = base::MakeUnique<TestingOmniboxViewViews>( 209 omnibox_view_ = base::MakeUnique<TestingOmniboxViewViews>(
194 &omnibox_edit_controller_, 210 &omnibox_edit_controller_,
195 base::MakeUnique<ChromeOmniboxClient>(&omnibox_edit_controller_, 211 base::MakeUnique<ChromeOmniboxClient>(&omnibox_edit_controller_,
196 &profile_), 212 &profile_),
197 &command_updater_); 213 &command_updater_);
198 test_api_ = base::MakeUnique<views::TextfieldTestApi>(omnibox_view_.get()); 214 test_api_ = base::MakeUnique<views::TextfieldTestApi>(omnibox_view_.get());
199 omnibox_view_->Init(); 215 omnibox_view_->Init();
200 } 216 }
201 217
202 void OmniboxViewViewsTest::TearDown() { 218 void OmniboxViewViewsTest::TearDown() {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 ui::TextEditCommand::MOVE_UP); 255 ui::TextEditCommand::MOVE_UP);
240 EXPECT_EQ(ui::TextEditCommand::MOVE_UP, scheduled_text_edit_command()); 256 EXPECT_EQ(ui::TextEditCommand::MOVE_UP, scheduled_text_edit_command());
241 257
242 ui::KeyEvent up_pressed(ui::ET_KEY_PRESSED, ui::VKEY_UP, 0); 258 ui::KeyEvent up_pressed(ui::ET_KEY_PRESSED, ui::VKEY_UP, 0);
243 omnibox_textfield()->OnKeyEvent(&up_pressed); 259 omnibox_textfield()->OnKeyEvent(&up_pressed);
244 EXPECT_EQ(ui::TextEditCommand::INVALID_COMMAND, 260 EXPECT_EQ(ui::TextEditCommand::INVALID_COMMAND,
245 scheduled_text_edit_command()); 261 scheduled_text_edit_command());
246 } 262 }
247 263
248 // Ensure that the scheme is emphasized for data: URLs. 264 // Ensure that the scheme is emphasized for data: URLs.
249 TEST_F(OmniboxViewViewsTest, TestEmphasisForDATA) { 265 TEST_F(OmniboxViewViewsTest, TestEmphasisForData) {
250 SetAndEmphasizeText("data:text/html,Hello%20World"); 266 SetAndEmphasizeText("data:text/html,Hello%20World");
251 EXPECT_EQ(gfx::Range(0, 4), omnibox_view()->scheme_range()); 267 EXPECT_EQ(gfx::Range(0, 4), omnibox_view()->scheme_range());
252 EXPECT_FALSE(omnibox_view()->base_text_is_emphasized()); 268 EXPECT_FALSE(omnibox_view()->base_text_is_emphasized());
253 EXPECT_EQ(gfx::Range(0, 4), omnibox_view()->emphasis_range()); 269 EXPECT_EQ(gfx::Range(0, 4), omnibox_view()->emphasis_range());
254 } 270 }
255 271
256 // Ensure that the origin is emphasized for http: URLs. 272 // Ensure that the origin is emphasized for http: URLs.
257 TEST_F(OmniboxViewViewsTest, TestEmphasisForHTTP) { 273 TEST_F(OmniboxViewViewsTest, TestEmphasisForHTTP) {
258 SetAndEmphasizeText("http://www.example.com/path/file.htm"); 274 SetAndEmphasizeText("http://www.example.com/path/file.htm");
259 EXPECT_EQ(gfx::Range(0, 4), omnibox_view()->scheme_range()); 275 EXPECT_EQ(gfx::Range(0, 4), omnibox_view()->scheme_range());
260 EXPECT_FALSE(omnibox_view()->base_text_is_emphasized()); 276 EXPECT_FALSE(omnibox_view()->base_text_is_emphasized());
261 EXPECT_EQ(gfx::Range(7, 22), omnibox_view()->emphasis_range()); 277 EXPECT_EQ(gfx::Range(7, 22), omnibox_view()->emphasis_range());
262 } 278 }
263 279
264 // Ensure that the origin is emphasized for https: URLs. 280 // Ensure that the origin is emphasized for https: URLs.
265 TEST_F(OmniboxViewViewsTest, TestEmphasisForHTTPS) { 281 TEST_F(OmniboxViewViewsTest, TestEmphasisForHTTPS) {
266 SetAndEmphasizeText("https://www.example.com/path/file.htm"); 282 SetAndEmphasizeText("https://www.example.com/path/file.htm");
267 EXPECT_EQ(gfx::Range(0, 5), omnibox_view()->scheme_range()); 283 EXPECT_EQ(gfx::Range(0, 5), omnibox_view()->scheme_range());
268 EXPECT_FALSE(omnibox_view()->base_text_is_emphasized()); 284 EXPECT_FALSE(omnibox_view()->base_text_is_emphasized());
269 EXPECT_EQ(gfx::Range(8, 23), omnibox_view()->emphasis_range()); 285 EXPECT_EQ(gfx::Range(8, 23), omnibox_view()->emphasis_range());
270 } 286 }
271 287
272 // Ensure that nothing is emphasized for chrome-extension: URLs. 288 // Ensure that nothing is emphasized for chrome-extension: URLs.
273 TEST_F(OmniboxViewViewsTest, TestEmphasisForChromeExtensionScheme) { 289 TEST_F(OmniboxViewViewsTest, TestEmphasisForChromeExtension) {
274 SetAndEmphasizeText("chrome-extension://ldfbacdbackkjhclmhnjabngnppnkagl"); 290 SetAndEmphasizeText("chrome-extension://ldfbacdbackkjhclmhnjabngnppnkagl");
275 EXPECT_EQ(gfx::Range(0, 16), omnibox_view()->scheme_range()); 291 EXPECT_EQ(gfx::Range(0, 16), omnibox_view()->scheme_range());
276 EXPECT_FALSE(omnibox_view()->base_text_is_emphasized()); 292 EXPECT_FALSE(omnibox_view()->base_text_is_emphasized());
277 EXPECT_EQ(gfx::Range(), omnibox_view()->emphasis_range()); 293 EXPECT_EQ(gfx::Range(), omnibox_view()->emphasis_range());
278 } 294 }
279 295
280 // Ensure that everything is emphasized for unknown scheme hierarchical URLs. 296 // Ensure that everything is emphasized for unknown scheme hierarchical URLs.
281 TEST_F(OmniboxViewViewsTest, TestEmphasisForUnknownHierarchicalScheme) { 297 TEST_F(OmniboxViewViewsTest, TestEmphasisForUnknownHierarchicalScheme) {
282 SetAndEmphasizeText("nosuchscheme://opaque/string"); 298 SetAndEmphasizeText("nosuchscheme://opaque/string");
283 EXPECT_EQ(gfx::Range(0, 12), omnibox_view()->scheme_range()); 299 EXPECT_EQ(gfx::Range(0, 12), omnibox_view()->scheme_range());
284 EXPECT_TRUE(omnibox_view()->base_text_is_emphasized()); 300 EXPECT_TRUE(omnibox_view()->base_text_is_emphasized());
285 EXPECT_EQ(gfx::Range(), omnibox_view()->emphasis_range()); 301 EXPECT_EQ(gfx::Range(), omnibox_view()->emphasis_range());
286 } 302 }
287 303
288 // Ensure that everything is emphasized for unknown scheme URLs. 304 // Ensure that everything is emphasized for unknown scheme URLs.
289 TEST_F(OmniboxViewViewsTest, TestEmphasisForUnknownScheme) { 305 TEST_F(OmniboxViewViewsTest, TestEmphasisForUnknownScheme) {
290 SetAndEmphasizeText("nosuchscheme:opaquestring"); 306 SetAndEmphasizeText("nosuchscheme:opaquestring");
291 EXPECT_EQ(gfx::Range(0, 12), omnibox_view()->scheme_range()); 307 EXPECT_EQ(gfx::Range(0, 12), omnibox_view()->scheme_range());
292 EXPECT_TRUE(omnibox_view()->base_text_is_emphasized()); 308 EXPECT_TRUE(omnibox_view()->base_text_is_emphasized());
293 EXPECT_EQ(gfx::Range(), omnibox_view()->emphasis_range()); 309 EXPECT_EQ(gfx::Range(), omnibox_view()->emphasis_range());
294 } 310 }
295 311
296 // Ensure that the origin is emphasized for URL-like text. 312 // Ensure that the origin is emphasized for URL-like text.
297 TEST_F(OmniboxViewViewsTest, TestEmphasisForPartialURLs) { 313 TEST_F(OmniboxViewViewsTest, TestEmphasisForPartialURLs) {
298 SetAndEmphasizeText("example/path/file"); 314 SetAndEmphasizeText("host.com/path/file", false);
299 EXPECT_EQ(gfx::Range(), omnibox_view()->scheme_range()); 315 EXPECT_EQ(gfx::Range(), omnibox_view()->scheme_range());
300 EXPECT_FALSE(omnibox_view()->base_text_is_emphasized()); 316 EXPECT_FALSE(omnibox_view()->base_text_is_emphasized());
301 EXPECT_EQ(gfx::Range(0, 7), omnibox_view()->emphasis_range()); 317 EXPECT_EQ(gfx::Range(0, 8), omnibox_view()->emphasis_range());
302 } 318 }
303 319
304 // Ensure that everything is emphasized for plain text. 320 // Ensure that everything is emphasized for plain text.
305 TEST_F(OmniboxViewViewsTest, TestEmphasisForNonURLs) { 321 TEST_F(OmniboxViewViewsTest, TestEmphasisForNonURLs) {
306 SetAndEmphasizeText("This is plain text"); 322 SetAndEmphasizeText("This is plain text", false);
307 323
308 EXPECT_EQ(gfx::Range(), omnibox_view()->scheme_range()); 324 EXPECT_EQ(gfx::Range(), omnibox_view()->scheme_range());
309 EXPECT_TRUE(omnibox_view()->base_text_is_emphasized()); 325 EXPECT_TRUE(omnibox_view()->base_text_is_emphasized());
310 EXPECT_EQ(gfx::Range(), omnibox_view()->emphasis_range()); 326 EXPECT_EQ(gfx::Range(), omnibox_view()->emphasis_range());
311 } 327 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698