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

Unified Diff: chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc

Issue 145553009: rAc: use libaddressinput to validate international addresses. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: win compile? Created 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
index 7a4bb238102d38ea9f7ab602137e403a54fda51d..99fa99c94b3d1161a62c8ccdbf48727c28b754bb 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
@@ -5,6 +5,8 @@
#include <map>
#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/callback.h"
#include "base/command_line.h"
#include "base/guid.h"
#include "base/memory/scoped_ptr.h"
@@ -48,6 +50,8 @@
#include "content/public/test/mock_render_process_host.h"
#include "google_apis/gaia/google_service_auth_error.h"
#include "grit/webkit_resources.h"
+#include "third_party/libaddressinput/chromium/cpp/include/libaddressinput/address_data.h"
+#include "third_party/libaddressinput/chromium/cpp/include/libaddressinput/address_validator.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/resource/resource_bundle.h"
@@ -63,6 +67,12 @@ namespace autofill {
namespace {
+using ::i18n::addressinput::AddressData;
+using ::i18n::addressinput::AddressProblemFilter;
+using ::i18n::addressinput::AddressProblems;
+using ::i18n::addressinput::AddressValidator;
+using testing::AtLeast;
+using testing::Return;
using testing::_;
const char kFakeEmail[] = "user@chromium.org";
@@ -233,6 +243,17 @@ class TestAutofillDialogView : public AutofillDialogView {
DISALLOW_COPY_AND_ASSIGN(TestAutofillDialogView);
};
+class MockAddressValidator : public AddressValidator {
+ public:
+ MOCK_METHOD1(LoadRules, void(const std::string& country_code));
+ MOCK_CONST_METHOD3(ValidateAddress,
+ ::i18n::addressinput::AddressValidator::Status(
+ const AddressData& address,
+ const AddressProblemFilter& filter,
+ AddressProblems* problems));
+ using ::i18n::addressinput::AddressValidator::RULES_NOT_READY;
+};
+
class TestAutofillDialogController
: public AutofillDialogControllerImpl,
public base::SupportsWeakPtr<TestAutofillDialogController> {
@@ -243,6 +264,7 @@ class TestAutofillDialogController
const GURL& source_url,
const AutofillMetrics& metric_logger,
const base::Callback<void(const FormStructure*)>& callback,
+ MockAddressValidator* mock_validator,
MockNewCreditCardBubbleController* mock_new_card_bubble_controller)
: AutofillDialogControllerImpl(contents,
form_structure,
@@ -252,6 +274,7 @@ class TestAutofillDialogController
mock_wallet_client_(
Profile::FromBrowserContext(contents->GetBrowserContext())->
GetRequestContext(), this, source_url),
+ mock_validator_(mock_validator),
mock_new_card_bubble_controller_(mock_new_card_bubble_controller),
submit_button_delay_count_(0) {}
@@ -328,6 +351,10 @@ class TestAutofillDialogController
return &mock_wallet_client_;
}
+ virtual AddressValidator* GetValidator() {
+ return mock_validator_;
+ }
+
virtual void OpenTabWithUrl(const GURL& url) OVERRIDE {
open_tab_url_ = url;
}
@@ -355,6 +382,7 @@ class TestAutofillDialogController
const AutofillMetrics& metric_logger_;
TestPersonalDataManager test_manager_;
testing::NiceMock<wallet::MockWalletClient> mock_wallet_client_;
+ MockAddressValidator* mock_validator_;
GURL open_tab_url_;
MockNewCreditCardBubbleController* mock_new_card_bubble_controller_;
@@ -426,6 +454,7 @@ class AutofillDialogControllerTest : public ChromeRenderViewHostTestHarness {
GURL(),
metric_logger_,
callback,
+ mock_validator_.get(),
mock_new_card_bubble_controller_.get()))->AsWeakPtr();
controller_->Init(profile());
}
@@ -605,6 +634,13 @@ class AutofillDialogControllerTest : public ChromeRenderViewHostTestHarness {
const FormStructure* form_structure() { return form_structure_; }
+ MockAddressValidator* GetMockValidator() const {
+ return mock_validator_.get();
+ }
+ void SetMockValidator(scoped_ptr<MockAddressValidator> validator) {
+ mock_validator_ = validator.Pass();
+ }
+
TestGeneratedCreditCardBubbleController* test_generated_bubble_controller() {
return test_generated_bubble_controller_;
}
@@ -632,6 +668,10 @@ class AutofillDialogControllerTest : public ChromeRenderViewHostTestHarness {
// Returned when the dialog closes successfully.
const FormStructure* form_structure_;
+ // A mock validator object to prevent network requests and track when
+ // validation rules are loaded or validation attempts occur.
+ scoped_ptr<MockAddressValidator> mock_validator_;
+
// Used to monitor if the Autofill credit card bubble is shown. Owned by
// |web_contents()|.
TestGeneratedCreditCardBubbleController* test_generated_bubble_controller_;
@@ -2933,12 +2973,17 @@ TEST_F(AutofillDialogControllerTest, IconReservedForCreditCardField) {
}
}
-TEST_F(AutofillDialogControllerTest, CountryChangeUpdatesSection) {
- CommandLine* command_line = CommandLine::ForCurrentProcess();
- command_line->AppendSwitch(::switches::kEnableAutofillAddressI18n);
-
- Reset();
+class AutofillDialogControllerI18nTest : public AutofillDialogControllerTest {
+ public:
+ // AutofillDialogControllerTest implementation.
+ virtual void SetUp() OVERRIDE {
+ CommandLine* command_line = CommandLine::ForCurrentProcess();
+ command_line->AppendSwitch(::switches::kEnableAutofillAddressI18n);
+ AutofillDialogControllerTest::SetUp();
+ }
+};
+TEST_F(AutofillDialogControllerI18nTest, CountryChangeUpdatesSection) {
TestAutofillDialogView* view = controller()->GetView();
view->ClearSectionUpdates();
@@ -2978,4 +3023,47 @@ TEST_F(AutofillDialogControllerTest, CountryChangeUpdatesSection) {
EXPECT_EQ(1U, updates.size());
}
+TEST_F(AutofillDialogControllerI18nTest, CorrectCountryFromInputs) {
+ FieldValueMap inputs;
+ inputs[ADDRESS_BILLING_COUNTRY] = base::ASCIIToUTF16("China");
+ inputs[ADDRESS_HOME_COUNTRY] = base::ASCIIToUTF16("France");
+
+ base::Callback<base::string16(DialogSection, const AutofillType&)> get_info =
+ base::Bind(&AutofillDialogControllerImpl::GetInfoFromInputs,
Evan Stade 2014/01/31 04:09:52 I feel like you should be able to test this functi
Dan Beam 2014/02/01 00:43:22 Done.
+ base::ConstRef(inputs));
+
+ // Ensure that callbacks bound to the billing section only return
+ // billing-specific info from |inputs| (e.g. the billing country).
+ EXPECT_EQ(base::ASCIIToUTF16("China"),
+ get_info.Run(SECTION_BILLING, AutofillType(ADDRESS_HOME_COUNTRY)));
+ EXPECT_EQ(base::ASCIIToUTF16("CN"),
+ get_info.Run(SECTION_BILLING, AutofillType(HTML_TYPE_COUNTRY_CODE,
+ HTML_MODE_SHIPPING)));
+
+ // And conversely that shipping sections only return the shipping country.
+ EXPECT_EQ(
+ base::ASCIIToUTF16("France"),
+ get_info.Run(SECTION_SHIPPING, AutofillType(ADDRESS_BILLING_COUNTRY)));
+ EXPECT_EQ(base::ASCIIToUTF16("FR"),
+ get_info.Run(SECTION_SHIPPING, AutofillType(HTML_TYPE_COUNTRY_CODE,
+ HTML_MODE_BILLING)));
+}
+
+TEST_F(AutofillDialogControllerI18nTest, LoadValidationRules) {
+ SetMockValidator(make_scoped_ptr(new MockAddressValidator));
+ EXPECT_CALL(*GetMockValidator(), ValidateAddress(_, _, _)).
+ WillRepeatedly(Return(MockAddressValidator::RULES_NOT_READY));
+
+ EXPECT_CALL(*GetMockValidator(), LoadRules("US")).Times(AtLeast(1));
+ Reset();
+
+ EXPECT_CALL(*GetMockValidator(), LoadRules("FR"));
+ controller()->UserEditedOrActivatedInput(SECTION_CC_BILLING,
+ ADDRESS_BILLING_COUNTRY,
+ gfx::NativeView(),
+ gfx::Rect(),
+ ASCIIToUTF16("France"),
+ true);
+}
+
} // namespace autofill

Powered by Google App Engine
This is Rietveld 408576698