Chromium Code Reviews| 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 ddb60c24ffcc8757fd6a83245bd67a20e3bc2bf1..0c25e595ba78f4df130c3fd979b51ecbba7fa622 100644 |
| --- a/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc |
| +++ b/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc |
| @@ -241,7 +241,8 @@ class TestAutofillDialogController |
| mock_wallet_client_( |
| Profile::FromBrowserContext(contents->GetBrowserContext())-> |
| GetRequestContext(), this), |
| - mock_new_card_bubble_controller_(mock_new_card_bubble_controller) {} |
| + mock_new_card_bubble_controller_(mock_new_card_bubble_controller), |
| + submit_button_delay_number_(0) {} |
| virtual ~TestAutofillDialogController() {} |
| @@ -278,6 +279,24 @@ class TestAutofillDialogController |
| #endif |
| } |
| + void SimulateSubmitButtonDelayBegin() { |
| + // 60 second delay to avoid test flakiness. The test would be flaky if this |
|
Evan Stade
2013/09/05 16:29:44
I don't think this is necessary. The test executes
please use gerrit instead
2013/09/05 18:40:49
Using the same delay in production and in testing.
|
| + // delay expired before the test finishes. This delay does not affect |
| + // execution time of the test. |
| + static const int kSimulatedSubmitButtonDelaySeconds = 60; |
| + AutofillDialogControllerImpl::SubmitButtonDelayBegin( |
| + base::TimeDelta::FromSeconds(kSimulatedSubmitButtonDelaySeconds)); |
| + } |
| + |
| + void SimulateSubmitButtonDelayEnd() { |
| + AutofillDialogControllerImpl::SubmitButtonDelayEndForTesting(); |
| + } |
| + |
| + // Returns the number of times that the submit button was delayed. |
| + int get_submit_button_delay_number() const { |
| + return submit_button_delay_number_; |
| + } |
| + |
| MOCK_METHOD0(LoadRiskFingerprintData, void()); |
| using AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData; |
| using AutofillDialogControllerImpl::IsEditingExistingData; |
| @@ -308,6 +327,13 @@ class TestAutofillDialogController |
| billing_profile.Pass()); |
| } |
| + // AutofillDialogControllerImpl calls this method before showing the dialog |
| + // window. |
| + virtual void SubmitButtonDelayBegin(base::TimeDelta delay) OVERRIDE { |
| + // Do not delay enabling the submit button in testing. |
| + submit_button_delay_number_++; |
| + } |
| + |
| private: |
| // To specify our own metric logger. |
| virtual const AutofillMetrics& GetMetricLogger() const OVERRIDE { |
| @@ -320,6 +346,9 @@ class TestAutofillDialogController |
| GURL open_tab_url_; |
| MockNewCreditCardBubbleController* mock_new_card_bubble_controller_; |
| + // The number of times that the submit button was delayed. |
| + int submit_button_delay_number_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(TestAutofillDialogController); |
| }; |
| @@ -2379,4 +2408,70 @@ TEST_F(AutofillDialogControllerTest, |
| EXPECT_FALSE(controller()->ShouldSaveInChrome()); |
| } |
| +TEST_F(AutofillDialogControllerTest, SubmitButtonIsDelayedOnShow) { |
| + EXPECT_EQ(1, controller()->get_submit_button_delay_number()); |
|
Evan Stade
2013/09/05 16:29:44
nit: instead of having a separate test for this, a
please use gerrit instead
2013/09/05 18:40:49
Done.
|
| +} |
| + |
| +TEST_F(AutofillDialogControllerTest, |
| + SubmitButtonIsDisabled_SpinnerFinishesBeforeDelay) { |
| + // Begin the submit button delay. |
| + controller()->SimulateSubmitButtonDelayBegin(); |
| + |
| + EXPECT_TRUE(controller()->ShouldShowSpinner()); |
| + EXPECT_FALSE(controller()->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK)); |
| + |
| + // Stop the spinner. |
| + controller()->OnDidGetWalletItems(CompleteAndValidWalletItems()); |
| + |
| + EXPECT_FALSE(controller()->ShouldShowSpinner()); |
| + EXPECT_FALSE(controller()->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK)); |
| + |
| + // End the submit button delay. |
| + controller()->SimulateSubmitButtonDelayEnd(); |
| + |
| + EXPECT_FALSE(controller()->ShouldShowSpinner()); |
| + EXPECT_TRUE(controller()->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK)); |
| +} |
| + |
| +TEST_F(AutofillDialogControllerTest, |
| + SubmitButtonIsDisabled_SpinnerFinishesAfterDelay) { |
| + // Begin the submit button delay. |
| + controller()->SimulateSubmitButtonDelayBegin(); |
| + |
| + EXPECT_TRUE(controller()->ShouldShowSpinner()); |
| + EXPECT_FALSE(controller()->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK)); |
| + |
| + // End the submit button delay. |
| + controller()->SimulateSubmitButtonDelayEnd(); |
| + |
| + EXPECT_TRUE(controller()->ShouldShowSpinner()); |
| + EXPECT_FALSE(controller()->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK)); |
| + |
| + // Stop the spinner. |
| + controller()->OnDidGetWalletItems(CompleteAndValidWalletItems()); |
| + |
| + EXPECT_FALSE(controller()->ShouldShowSpinner()); |
| + EXPECT_TRUE(controller()->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK)); |
| +} |
| + |
| +TEST_F(AutofillDialogControllerTest, SubmitButtonIsDisabled_NoSpinner) { |
| + // Begin the submit button delay. |
| + controller()->SimulateSubmitButtonDelayBegin(); |
| + |
| + EXPECT_TRUE(controller()->ShouldShowSpinner()); |
| + EXPECT_FALSE(controller()->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK)); |
| + |
| + // There's no spinner in Autofill mode. |
| + SwitchToAutofill(); |
| + |
| + EXPECT_FALSE(controller()->ShouldShowSpinner()); |
| + EXPECT_FALSE(controller()->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK)); |
| + |
| + // End the submit button delay. |
| + controller()->SimulateSubmitButtonDelayEnd(); |
| + |
| + EXPECT_FALSE(controller()->ShouldShowSpinner()); |
| + EXPECT_TRUE(controller()->IsDialogButtonEnabled(ui::DIALOG_BUTTON_OK)); |
| +} |
| + |
| } // namespace autofill |