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

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

Issue 1570783003: [Autofill] Move functions from the AutofillPopupController to AutofillPopupLayoutModel (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove scoped_ptr and rename mac delegate Created 4 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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/memory/weak_ptr.h" 9 #include "base/memory/weak_ptr.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
11 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
12 #include "build/build_config.h" 12 #include "build/build_config.h"
13 #include "chrome/browser/ui/autofill/autofill_popup_controller_impl.h" 13 #include "chrome/browser/ui/autofill/autofill_popup_controller_impl.h"
14 #include "chrome/browser/ui/autofill/autofill_popup_view.h" 14 #include "chrome/browser/ui/autofill/autofill_popup_view.h"
15 #include "chrome/browser/ui/autofill/popup_constants.h"
16 #include "chrome/browser/ui/autofill/test_popup_controller_common.h"
17 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 15 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
18 #include "chrome/test/base/testing_profile.h" 16 #include "chrome/test/base/testing_profile.h"
19 #include "components/autofill/content/browser/content_autofill_driver.h" 17 #include "components/autofill/content/browser/content_autofill_driver.h"
20 #include "components/autofill/content/browser/content_autofill_driver_factory.h" 18 #include "components/autofill/content/browser/content_autofill_driver_factory.h"
21 #include "components/autofill/core/browser/autofill_external_delegate.h" 19 #include "components/autofill/core/browser/autofill_external_delegate.h"
22 #include "components/autofill/core/browser/autofill_manager.h" 20 #include "components/autofill/core/browser/autofill_manager.h"
23 #include "components/autofill/core/browser/autofill_test_utils.h" 21 #include "components/autofill/core/browser/autofill_test_utils.h"
24 #include "components/autofill/core/browser/popup_item_ids.h" 22 #include "components/autofill/core/browser/popup_item_ids.h"
25 #include "components/autofill/core/browser/test_autofill_client.h" 23 #include "components/autofill/core/browser/test_autofill_client.h"
26 #include "components/autofill/core/browser/test_autofill_external_delegate.h" 24 #include "components/autofill/core/browser/test_autofill_external_delegate.h"
27 #include "content/public/browser/web_contents.h" 25 #include "content/public/browser/web_contents.h"
28 #include "grit/components_scaled_resources.h"
29 #include "testing/gmock/include/gmock/gmock.h" 26 #include "testing/gmock/include/gmock/gmock.h"
30 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
31 #include "ui/base/resource/resource_bundle.h"
32 #include "ui/gfx/display.h" 28 #include "ui/gfx/display.h"
33 #include "ui/gfx/geometry/rect.h" 29 #include "ui/gfx/geometry/rect.h"
34 #include "ui/gfx/text_utils.h" 30 #include "ui/gfx/text_utils.h"
35 31
36 using ::testing::_; 32 using ::testing::_;
37 using ::testing::AtLeast; 33 using ::testing::AtLeast;
38 using ::testing::NiceMock; 34 using ::testing::NiceMock;
39 using base::ASCIIToUTF16; 35 using base::ASCIIToUTF16;
40 using base::WeakPtr; 36 using base::WeakPtr;
41 37
(...skipping 26 matching lines...) Expand all
68 PrefService* GetPrefs() override { return prefs_.get(); } 64 PrefService* GetPrefs() override { return prefs_.get(); }
69 65
70 private: 66 private:
71 scoped_ptr<PrefService> prefs_; 67 scoped_ptr<PrefService> prefs_;
72 68
73 DISALLOW_COPY_AND_ASSIGN(MockAutofillClient); 69 DISALLOW_COPY_AND_ASSIGN(MockAutofillClient);
74 }; 70 };
75 71
76 class TestAutofillPopupController : public AutofillPopupControllerImpl { 72 class TestAutofillPopupController : public AutofillPopupControllerImpl {
77 public: 73 public:
78 explicit TestAutofillPopupController( 74 TestAutofillPopupController(
79 base::WeakPtr<AutofillExternalDelegate> external_delegate, 75 base::WeakPtr<AutofillExternalDelegate> external_delegate,
80 const gfx::RectF& element_bounds) 76 const gfx::RectF& element_bounds)
81 : AutofillPopupControllerImpl(external_delegate, 77 : AutofillPopupControllerImpl(external_delegate,
82 NULL, 78 NULL,
83 NULL, 79 NULL,
84 element_bounds, 80 element_bounds,
85 base::i18n::UNKNOWN_DIRECTION), 81 base::i18n::UNKNOWN_DIRECTION) {}
86 test_controller_common_(
87 new TestPopupControllerCommon(element_bounds,
88 base::i18n::LEFT_TO_RIGHT)) {
89 controller_common_.reset(test_controller_common_);
90 }
91 ~TestAutofillPopupController() override {} 82 ~TestAutofillPopupController() override {}
92 83
93 void set_display(const gfx::Display& display) {
94 test_controller_common_->set_display(display);
95 }
96
97 // Making protected functions public for testing 84 // Making protected functions public for testing
98 using AutofillPopupControllerImpl::GetLineCount; 85 using AutofillPopupControllerImpl::GetLineCount;
99 using AutofillPopupControllerImpl::GetSuggestionAt; 86 using AutofillPopupControllerImpl::GetSuggestionAt;
100 using AutofillPopupControllerImpl::GetElidedValueAt; 87 using AutofillPopupControllerImpl::GetElidedValueAt;
101 using AutofillPopupControllerImpl::GetElidedLabelAt; 88 using AutofillPopupControllerImpl::GetElidedLabelAt;
102 using AutofillPopupControllerImpl::selected_line; 89 using AutofillPopupControllerImpl::selected_line;
103 using AutofillPopupControllerImpl::SetSelectedLine; 90 using AutofillPopupControllerImpl::SetSelectedLine;
104 using AutofillPopupControllerImpl::SelectNextLine; 91 using AutofillPopupControllerImpl::SelectNextLine;
105 using AutofillPopupControllerImpl::SelectPreviousLine; 92 using AutofillPopupControllerImpl::SelectPreviousLine;
106 using AutofillPopupControllerImpl::RemoveSelectedLine; 93 using AutofillPopupControllerImpl::RemoveSelectedLine;
107 using AutofillPopupControllerImpl::popup_bounds; 94 using AutofillPopupControllerImpl::popup_bounds;
108 using AutofillPopupControllerImpl::element_bounds; 95 using AutofillPopupControllerImpl::element_bounds;
109 #if !defined(OS_ANDROID) 96 #if !defined(OS_ANDROID)
110 using AutofillPopupControllerImpl::GetValueFontListForRow; 97 using AutofillPopupControllerImpl::GetValueFontListForRow;
111 using AutofillPopupControllerImpl::GetLabelFontList; 98 using AutofillPopupControllerImpl::GetLabelFontList;
112 using AutofillPopupControllerImpl::RowWidthWithoutText;
113 #endif 99 #endif
114 using AutofillPopupControllerImpl::SetValues; 100 using AutofillPopupControllerImpl::SetValues;
115 using AutofillPopupControllerImpl::GetDesiredPopupWidth;
116 using AutofillPopupControllerImpl::GetDesiredPopupHeight;
117 using AutofillPopupControllerImpl::GetWeakPtr; 101 using AutofillPopupControllerImpl::GetWeakPtr;
118 MOCK_METHOD1(InvalidateRow, void(size_t)); 102 MOCK_METHOD1(InvalidateRow, void(size_t));
119 MOCK_METHOD0(UpdateBoundsAndRedrawPopup, void()); 103 MOCK_METHOD0(UpdateBoundsAndRedrawPopup, void());
120 MOCK_METHOD0(Hide, void()); 104 MOCK_METHOD0(Hide, void());
121 105
122 void DoHide() { 106 void DoHide() {
123 AutofillPopupControllerImpl::Hide(); 107 AutofillPopupControllerImpl::Hide();
124 } 108 }
125 109
126 private: 110 private:
127 void ShowView() override {} 111 void ShowView() override {}
128
129 TestPopupControllerCommon* test_controller_common_;
130 }; 112 };
131 113
132 } // namespace 114 } // namespace
133 115
134 class AutofillPopupControllerUnitTest : public ChromeRenderViewHostTestHarness { 116 class AutofillPopupControllerUnitTest : public ChromeRenderViewHostTestHarness {
135 public: 117 public:
136 AutofillPopupControllerUnitTest() 118 AutofillPopupControllerUnitTest()
137 : autofill_client_(new MockAutofillClient()), 119 : autofill_client_(new MockAutofillClient()),
138 autofill_popup_controller_(NULL) {} 120 autofill_popup_controller_(NULL) {}
139 ~AutofillPopupControllerUnitTest() override {} 121 ~AutofillPopupControllerUnitTest() override {}
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 273
292 // Make sure next skips the unselectable separator. 274 // Make sure next skips the unselectable separator.
293 autofill_popup_controller_->SelectNextLine(); 275 autofill_popup_controller_->SelectNextLine();
294 EXPECT_EQ(2, autofill_popup_controller_->selected_line()); 276 EXPECT_EQ(2, autofill_popup_controller_->selected_line());
295 277
296 // Make sure previous skips the unselectable separator. 278 // Make sure previous skips the unselectable separator.
297 autofill_popup_controller_->SelectPreviousLine(); 279 autofill_popup_controller_->SelectPreviousLine();
298 EXPECT_EQ(0, autofill_popup_controller_->selected_line()); 280 EXPECT_EQ(0, autofill_popup_controller_->selected_line());
299 } 281 }
300 282
301 TEST_F(AutofillPopupControllerUnitTest, RowWidthWithoutText) {
302 // Give elements 1 and 3 subtexts and elements 2 and 3 icons, to ensure
303 // all combinations of subtexts and icons.
304 std::vector<Suggestion> suggestions;
305 suggestions.push_back(Suggestion("", "", "", 0));
306 suggestions.push_back(Suggestion("", "x", "", 0));
307 suggestions.push_back(Suggestion("", "", "americanExpressCC", 0));
308 suggestions.push_back(Suggestion("", "x", "genericCC", 0));
309
310 // Set up some visible display so the text values are kept.
311 gfx::Display display(0, gfx::Rect(0, 0, 100, 100));
312 autofill_popup_controller_->set_display(display);
313
314 autofill_popup_controller_->Show(suggestions);
315
316 int base_size =
317 AutofillPopupView::kEndPadding * 2 +
318 kPopupBorderThickness * 2;
319 int subtext_increase = AutofillPopupView::kNamePadding;
320
321 EXPECT_EQ(base_size, autofill_popup_controller_->RowWidthWithoutText(0));
322 EXPECT_EQ(base_size + subtext_increase,
323 autofill_popup_controller_->RowWidthWithoutText(1));
324 EXPECT_EQ(base_size + AutofillPopupView::kIconPadding +
325 ui::ResourceBundle::GetSharedInstance().GetImageNamed(
326 IDR_AUTOFILL_CC_AMEX).Width(),
327 autofill_popup_controller_->RowWidthWithoutText(2));
328 EXPECT_EQ(base_size + subtext_increase + AutofillPopupView::kIconPadding +
329 ui::ResourceBundle::GetSharedInstance().GetImageNamed(
330 IDR_AUTOFILL_CC_GENERIC).Width(),
331 autofill_popup_controller_->RowWidthWithoutText(3));
332 }
333
334 TEST_F(AutofillPopupControllerUnitTest, UpdateDataListValues) { 283 TEST_F(AutofillPopupControllerUnitTest, UpdateDataListValues) {
335 std::vector<Suggestion> suggestions; 284 std::vector<Suggestion> suggestions;
336 suggestions.push_back(Suggestion("", "", "", 1)); 285 suggestions.push_back(Suggestion("", "", "", 1));
337 autofill_popup_controller_->Show(suggestions); 286 autofill_popup_controller_->Show(suggestions);
338 287
339 // Add one data list entry. 288 // Add one data list entry.
340 base::string16 value1 = ASCIIToUTF16("data list value 1"); 289 base::string16 value1 = ASCIIToUTF16("data list value 1");
341 std::vector<base::string16> data_list_values; 290 std::vector<base::string16> data_list_values;
342 data_list_values.push_back(value1); 291 data_list_values.push_back(value1);
343 292
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 432
484 #if !defined(OS_ANDROID) 433 #if !defined(OS_ANDROID)
485 TEST_F(AutofillPopupControllerUnitTest, ElideText) { 434 TEST_F(AutofillPopupControllerUnitTest, ElideText) {
486 std::vector<Suggestion> suggestions; 435 std::vector<Suggestion> suggestions;
487 suggestions.push_back( 436 suggestions.push_back(
488 Suggestion("Text that will need to be trimmed", 437 Suggestion("Text that will need to be trimmed",
489 "Label that will be trimmed", "genericCC", 0)); 438 "Label that will be trimmed", "genericCC", 0));
490 suggestions.push_back( 439 suggestions.push_back(
491 Suggestion("untrimmed", "Untrimmed", "genericCC", 0)); 440 Suggestion("untrimmed", "Untrimmed", "genericCC", 0));
492 441
493 // Show the popup once so we can easily generate the size it needs. 442 autofill_popup_controller_->SetValues(suggestions);
494 autofill_popup_controller_->Show(suggestions);
495 443
496 // Ensure the popup will be too small to display all of the first row. 444 // Ensure the popup will be too small to display all of the first row.
497 int popup_max_width = 445 int popup_max_width =
498 gfx::GetStringWidth( 446 gfx::GetStringWidth(
499 suggestions[0].value, 447 suggestions[0].value,
500 autofill_popup_controller_->GetValueFontListForRow(0)) + 448 autofill_popup_controller_->GetValueFontListForRow(0)) +
501 gfx::GetStringWidth( 449 gfx::GetStringWidth(
502 suggestions[0].label, 450 suggestions[0].label,
503 autofill_popup_controller_->GetLabelFontList()) - 25; 451 autofill_popup_controller_->GetLabelFontList()) - 25;
504 gfx::Rect popup_bounds = gfx::Rect(0, 0, popup_max_width, 0);
505 autofill_popup_controller_->set_display(gfx::Display(0, popup_bounds));
506 452
507 autofill_popup_controller_->Show(suggestions); 453 autofill_popup_controller_->ElideValueAndLabelForRow(0, popup_max_width);
508 454
509 // The first element was long so it should have been trimmed. 455 // The first element was long so it should have been trimmed.
510 EXPECT_NE(autofill_popup_controller_->GetSuggestionAt(0).value, 456 EXPECT_NE(autofill_popup_controller_->GetSuggestionAt(0).value,
511 autofill_popup_controller_->GetElidedValueAt(0)); 457 autofill_popup_controller_->GetElidedValueAt(0));
512 EXPECT_NE(autofill_popup_controller_->GetSuggestionAt(0).label, 458 EXPECT_NE(autofill_popup_controller_->GetSuggestionAt(0).label,
513 autofill_popup_controller_->GetElidedLabelAt(0)); 459 autofill_popup_controller_->GetElidedLabelAt(0));
514 460
461 autofill_popup_controller_->ElideValueAndLabelForRow(1, popup_max_width);
462
515 // The second element was shorter so it should be unchanged. 463 // The second element was shorter so it should be unchanged.
516 EXPECT_EQ(autofill_popup_controller_->GetSuggestionAt(1).value, 464 EXPECT_EQ(autofill_popup_controller_->GetSuggestionAt(1).value,
517 autofill_popup_controller_->GetElidedValueAt(1)); 465 autofill_popup_controller_->GetElidedValueAt(1));
518 EXPECT_EQ(autofill_popup_controller_->GetSuggestionAt(1).label, 466 EXPECT_EQ(autofill_popup_controller_->GetSuggestionAt(1).label,
519 autofill_popup_controller_->GetElidedLabelAt(1)); 467 autofill_popup_controller_->GetElidedLabelAt(1));
520 } 468 }
521 #endif 469 #endif
522 470
523 } // namespace autofill 471 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698