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

Side by Side Diff: chrome/browser/ui/autofill/autofill_popup_controller_unittest.cc

Issue 11817051: Elide text in the new Autofill UI (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 11 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) 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 "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "base/utf_string_conversions.h"
6 #include "chrome/browser/autofill/test_autofill_external_delegate.h" 7 #include "chrome/browser/autofill/test_autofill_external_delegate.h"
7 #include "chrome/browser/ui/autofill/autofill_popup_controller_impl.h" 8 #include "chrome/browser/ui/autofill/autofill_popup_controller_impl.h"
8 #include "testing/gmock/include/gmock/gmock.h" 9 #include "testing/gmock/include/gmock/gmock.h"
9 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
10 #include "third_party/WebKit/Source/WebKit/chromium/public/WebAutofillClient.h" 11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebAutofillClient.h"
12 #include "ui/gfx/display.h"
11 #include "ui/gfx/rect.h" 13 #include "ui/gfx/rect.h"
12 14
13 using ::testing::_; 15 using ::testing::_;
14 using ::testing::AtLeast; 16 using ::testing::AtLeast;
15 using WebKit::WebAutofillClient; 17 using WebKit::WebAutofillClient;
16 18
17 namespace { 19 namespace {
18 20
19 class MockAutofillExternalDelegate : 21 class MockAutofillExternalDelegate :
20 public autofill::TestAutofillExternalDelegate { 22 public autofill::TestAutofillExternalDelegate {
21 public: 23 public:
22 MockAutofillExternalDelegate() : TestAutofillExternalDelegate(NULL, NULL) {}; 24 MockAutofillExternalDelegate() : TestAutofillExternalDelegate(NULL, NULL) {};
23 virtual ~MockAutofillExternalDelegate() {}; 25 virtual ~MockAutofillExternalDelegate() {};
24 26
25 virtual void DidSelectSuggestion(int identifier) OVERRIDE {} 27 virtual void DidSelectSuggestion(int identifier) OVERRIDE {}
26 virtual void RemoveSuggestion(const string16& value, int identifier) OVERRIDE 28 virtual void RemoveSuggestion(const string16& value, int identifier) OVERRIDE
27 {} 29 {}
28 virtual void ClearPreviewedForm() OVERRIDE {} 30 virtual void ClearPreviewedForm() OVERRIDE {}
29 31
30 MOCK_METHOD0(ControllerDestroyed, void()); 32 MOCK_METHOD0(ControllerDestroyed, void());
31 }; 33 };
32 34
33 class TestAutofillPopupController : public AutofillPopupControllerImpl { 35 class TestAutofillPopupController : public AutofillPopupControllerImpl {
34 public: 36 public:
35 explicit TestAutofillPopupController( 37 explicit TestAutofillPopupController(
36 AutofillExternalDelegate* external_delegate) 38 AutofillExternalDelegate* external_delegate)
37 : AutofillPopupControllerImpl(external_delegate, NULL, gfx::Rect()) {} 39 : AutofillPopupControllerImpl(external_delegate, NULL, gfx::Rect()) {
40 ON_CALL(*this, GetDisplayNearestPoint(_)).WillByDefault(
41 testing::Return(gfx::Display()));
42
43 ON_CALL(*this, element_bounds()).WillByDefault(
44 testing::ReturnRef(element_bounds_));
Ilya Sherman 2013/01/15 22:29:55 I think I recall Scott mentioning that gMock shoul
csharp 2013/01/16 20:56:58 Removed the two new mocks I had added.
45 }
38 virtual ~TestAutofillPopupController() {} 46 virtual ~TestAutofillPopupController() {}
39 47
48 void set_element_bounds(const gfx::Rect& element_bounds) {
49 element_bounds_ = element_bounds;
50 }
51
40 // Making protected functions public for testing 52 // Making protected functions public for testing
53 const std::vector<string16>& names() const {
54 return AutofillPopupControllerImpl::names();
55 }
41 const std::vector<string16>& subtexts() const { 56 const std::vector<string16>& subtexts() const {
42 return AutofillPopupControllerImpl::subtexts(); 57 return AutofillPopupControllerImpl::subtexts();
43 } 58 }
44 int selected_line() const { 59 int selected_line() const {
45 return AutofillPopupControllerImpl::selected_line(); 60 return AutofillPopupControllerImpl::selected_line();
46 } 61 }
47 void SetSelectedLine(size_t selected_line) { 62 void SetSelectedLine(size_t selected_line) {
48 AutofillPopupControllerImpl::SetSelectedLine(selected_line); 63 AutofillPopupControllerImpl::SetSelectedLine(selected_line);
49 } 64 }
50 void SelectNextLine() { 65 void SelectNextLine() {
51 AutofillPopupControllerImpl::SelectNextLine(); 66 AutofillPopupControllerImpl::SelectNextLine();
52 } 67 }
53 void SelectPreviousLine() { 68 void SelectPreviousLine() {
54 AutofillPopupControllerImpl::SelectPreviousLine(); 69 AutofillPopupControllerImpl::SelectPreviousLine();
55 } 70 }
56 bool RemoveSelectedLine() { 71 bool RemoveSelectedLine() {
57 return AutofillPopupControllerImpl::RemoveSelectedLine(); 72 return AutofillPopupControllerImpl::RemoveSelectedLine();
58 } 73 }
59 void DoHide() { 74 void DoHide() {
60 AutofillPopupControllerImpl::Hide(); 75 AutofillPopupControllerImpl::Hide();
61 } 76 }
77 const gfx::Rect& popup_bounds() const {
78 return AutofillPopupControllerImpl::popup_bounds();
79 }
80 #if !defined(OS_ANDROID)
81 const gfx::Font& name_font() const {
82 return AutofillPopupControllerImpl::name_font();
83 }
84 const gfx::Font& subtext_font() const {
85 return AutofillPopupControllerImpl::subtext_font();
86 }
87 #endif
88 int GetDesiredPopupWidth() const {
89 return AutofillPopupControllerImpl::GetDesiredPopupWidth();
90 }
91 int GetDesiredPopupHeight() const {
92 return AutofillPopupControllerImpl::GetDesiredPopupHeight();
93 }
62 94
95
Ilya Sherman 2013/01/15 22:29:55 nit: Extra newline.
csharp 2013/01/16 20:56:58 Done.
96 MOCK_CONST_METHOD0(element_bounds, const gfx::Rect&());
63 MOCK_METHOD1(InvalidateRow, void(size_t)); 97 MOCK_METHOD1(InvalidateRow, void(size_t));
64 MOCK_METHOD0(UpdateBoundsAndRedrawPopup, void()); 98 MOCK_METHOD0(UpdateBoundsAndRedrawPopup, void());
65 MOCK_METHOD0(Hide, void()); 99 MOCK_METHOD0(Hide, void());
100 MOCK_CONST_METHOD1(GetDisplayNearestPoint, gfx::Display(const gfx::Point&));
66 101
67 private: 102 private:
68 virtual void ShowView() OVERRIDE {} 103 virtual void ShowView() OVERRIDE {}
104
105 gfx::Rect element_bounds_;
69 }; 106 };
70 107
71 } // namespace 108 } // namespace
72 109
73 class AutofillPopupControllerUnitTest : public ::testing::Test { 110 class AutofillPopupControllerUnitTest : public ::testing::Test {
74 public: 111 public:
75 AutofillPopupControllerUnitTest() 112 AutofillPopupControllerUnitTest()
76 : autofill_popup_controller_( 113 : autofill_popup_controller_(
77 new testing::NiceMock<TestAutofillPopupController>( 114 new testing::NiceMock<TestAutofillPopupController>(
78 &external_delegate_)) {} 115 &external_delegate_)) {}
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 EXPECT_TRUE(controller); 269 EXPECT_TRUE(controller);
233 AutofillPopupControllerImpl* controller2 = 270 AutofillPopupControllerImpl* controller2 =
234 AutofillPopupControllerImpl::GetOrCreate( 271 AutofillPopupControllerImpl::GetOrCreate(
235 controller, 272 controller,
236 &delegate, 273 &delegate,
237 NULL, 274 NULL,
238 gfx::Rect()); 275 gfx::Rect());
239 EXPECT_EQ(controller, controller2); 276 EXPECT_EQ(controller, controller2);
240 controller->Hide(); 277 controller->Hide();
241 278
242 TestAutofillPopupController* test_controller = 279 testing::NiceMock<TestAutofillPopupController>* test_controller =
243 new TestAutofillPopupController(&delegate); 280 new testing::NiceMock<TestAutofillPopupController>(&delegate);
244 EXPECT_CALL(*test_controller, Hide()); 281 EXPECT_CALL(*test_controller, Hide());
245 282
246 gfx::Rect bounds(0, 0, 1, 2); 283 gfx::Rect bounds(0, 0, 1, 2);
247 AutofillPopupControllerImpl* controller3 = 284 AutofillPopupControllerImpl* controller3 =
248 AutofillPopupControllerImpl::GetOrCreate( 285 AutofillPopupControllerImpl::GetOrCreate(
249 test_controller, 286 test_controller,
250 &delegate, 287 &delegate,
251 NULL, 288 NULL,
252 bounds); 289 bounds);
253 EXPECT_EQ( 290 EXPECT_EQ(
254 bounds, 291 bounds,
255 static_cast<AutofillPopupController*>(controller3)->element_bounds()); 292 static_cast<AutofillPopupController*>(controller3)->element_bounds());
256 controller3->Hide(); 293 controller3->Hide();
257 294
258 EXPECT_CALL(delegate, ControllerDestroyed()); 295 EXPECT_CALL(delegate, ControllerDestroyed());
259 delete test_controller; 296 delete test_controller;
260 } 297 }
298
299 #if !defined(OS_ANDROID)
300 TEST_F(AutofillPopupControllerUnitTest, ElideText) {
301 std::vector<string16> names;
302 names.push_back(ASCIIToUTF16("Text that will need to be trimmed"));
303 names.push_back(ASCIIToUTF16("Untrimmed"));
304
305 std::vector<string16> subtexts;
306 subtexts.push_back(ASCIIToUTF16("Label that will be trimmed"));
307 subtexts.push_back(ASCIIToUTF16("Untrimmed"));
308
309 std::vector<string16> icons(2, string16());
310 std::vector<int> autofill_ids(2, 0);
311
312 // Ensure the popup will be too small to display all of the first row.
313 int popup_max_width =
314 autofill_popup_controller_->name_font().GetStringWidth(names[0]) +
315 autofill_popup_controller_->subtext_font().GetStringWidth(subtexts[0]) -
316 25;
317 gfx::Rect popup_bounds = gfx::Rect(0, 0, popup_max_width, 0);
318 gfx::Display display(0, popup_bounds);
319 EXPECT_CALL(*autofill_popup_controller_, GetDisplayNearestPoint(_)
320 ).WillRepeatedly(testing::Return(display));
Ilya Sherman 2013/01/15 22:29:55 nit: Closing paren should be on the previous line;
csharp 2013/01/16 20:56:58 Fixed.
321
322 autofill_popup_controller_->Show(names, subtexts, icons, autofill_ids);
323
324 // The first element was long so it should have been trimmed.
325 EXPECT_NE(names[0], autofill_popup_controller_->names()[0]);
326 EXPECT_NE(subtexts[0], autofill_popup_controller_->subtexts()[0]);
327
328 // The second element was shorter so it should be unchanged.
329 EXPECT_EQ(names[1], autofill_popup_controller_->names()[1]);
330 EXPECT_EQ(subtexts[1], autofill_popup_controller_->subtexts()[1]);
331 }
332 #endif
333
334 TEST_F(AutofillPopupControllerUnitTest, GrowPopupInSpace) {
335 std::vector<string16> names(1);
336 std::vector<int> autofill_ids(1, 1);
337
338 // Call Show so that GetDesired...() will be able to provide valid values.
339 autofill_popup_controller_->Show(names, names, names, autofill_ids);
340 int desired_width = autofill_popup_controller_->GetDesiredPopupWidth();
341 int desired_height = autofill_popup_controller_->GetDesiredPopupHeight();
342
343 // Setup the visible screen space.
344 gfx::Display display(0, gfx::Rect(0, 0,
345 desired_width * 2, desired_height * 2));
346 EXPECT_CALL(*autofill_popup_controller_, GetDisplayNearestPoint(_)
347 ).WillRepeatedly(testing::Return(display));
348
349 // The popup grows down and to the right.
350 autofill_popup_controller_->set_element_bounds(gfx::Rect(0, 0, 0, 0));
351 autofill_popup_controller_->Show(names, names, names, autofill_ids);
352 EXPECT_EQ(gfx::Rect(0, 0, desired_width, desired_height).ToString(),
353 autofill_popup_controller_->popup_bounds().ToString());
354
355 // The popup grows down and to the left.
356 autofill_popup_controller_->set_element_bounds(
357 gfx::Rect(2 * desired_width, 0, 0, 0));
Ilya Sherman 2013/01/15 22:29:55 Hmm, this puts the element completely off screen,
csharp 2013/01/16 20:56:58 Added two tests for the popup only going partially
358 autofill_popup_controller_->Show(names, names, names, autofill_ids);
359 EXPECT_EQ(gfx::Rect(desired_width, 0,
360 desired_width, desired_height).ToString(),
361 autofill_popup_controller_->popup_bounds().ToString());
362
363 // The popup grows up and to the right.
364 autofill_popup_controller_->set_element_bounds(
365 gfx::Rect(0, 2 * desired_height, 0, 0));
366 autofill_popup_controller_->Show(names, names, names, autofill_ids);
367 EXPECT_EQ(gfx::Rect(0, desired_height,
368 desired_width, desired_height).ToString(),
369 autofill_popup_controller_->popup_bounds().ToString());
370
371 // The popup grows up and to the left.
372 autofill_popup_controller_->set_element_bounds(
373 gfx::Rect(2 * desired_width, 2 * desired_height, 0, 0));
374 autofill_popup_controller_->Show(names, names, names, autofill_ids);
375 EXPECT_EQ(gfx::Rect(desired_width, desired_height,
376 desired_width, desired_height).ToString(),
377 autofill_popup_controller_->popup_bounds().ToString());
378 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698