Index: chrome/browser/autofill/autofill_external_delegate_unittest.cc |
diff --git a/chrome/browser/autofill/autofill_external_delegate_unittest.cc b/chrome/browser/autofill/autofill_external_delegate_unittest.cc |
index f9e6f6c0a65f19df99879fde185e8d60d7bbee1e..6acb822dcf268dd1d301bca9d3f8f74542fe27ae 100644 |
--- a/chrome/browser/autofill/autofill_external_delegate_unittest.cc |
+++ b/chrome/browser/autofill/autofill_external_delegate_unittest.cc |
@@ -7,12 +7,11 @@ |
#include "base/compiler_specific.h" |
#include "base/memory/ref_counted.h" |
#include "base/string16.h" |
-#include "chrome/browser/autofill/autofill_external_delegate.h" |
+#include "chrome/browser/autofill/autofill_external_delegate_test.h" |
#include "chrome/browser/autofill/autofill_manager.h" |
#include "chrome/browser/ui/tab_contents/test_tab_contents_wrapper.h" |
#include "chrome/test/base/testing_profile.h" |
#include "content/test/test_browser_thread.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "ui/gfx/rect.h" |
#include "webkit/forms/form_data.h" |
@@ -25,14 +24,12 @@ using webkit::forms::FormField; |
namespace { |
-class MockAutofillExternalDelegate : public AutofillExternalDelegate { |
+class MockAutofillExternalDelegate : public AutofillExternalDelegateTest { |
public: |
- explicit MockAutofillExternalDelegate(TabContentsWrapper* wrapper, |
- AutofillManager* autofill_manager) |
- : AutofillExternalDelegate(wrapper, autofill_manager) {} |
- virtual ~MockAutofillExternalDelegate() {} |
- |
- virtual void HideAutofillPopup() OVERRIDE {} |
+ MockAutofillExternalDelegate(TabContentsWrapper* wrapper, |
+ AutofillManager* autofill_manger) |
+ : AutofillExternalDelegateTest(wrapper, autofill_manger) {} |
+ ~MockAutofillExternalDelegate() {} |
MOCK_METHOD5(ApplyAutofillSuggestions, void( |
const std::vector<string16>& autofill_values, |
@@ -47,36 +44,53 @@ class MockAutofillExternalDelegate : public AutofillExternalDelegate { |
const webkit::forms::FormField& field, |
const gfx::Rect& bounds)); |
+ MOCK_METHOD0(HideAutofillPopup, void()); |
+ |
private: |
- DISALLOW_COPY_AND_ASSIGN(MockAutofillExternalDelegate); |
+ virtual void HideAutofillPopupInternal() {}; |
+}; |
+ |
+class MockAutofillManager : public AutofillManager { |
+ public: |
+ explicit MockAutofillManager(TabContentsWrapper* tab_contents) |
+ : AutofillManager(tab_contents) {} |
+ ~MockAutofillManager() {} |
+ |
+ MOCK_METHOD4(OnFillAutofillFormData, |
+ void(int query_id, |
+ const webkit::forms::FormData& form, |
+ const webkit::forms::FormField& field, |
+ int unique_id)); |
}; |
} // namespace |
-class AutofillExternalDelegateTest : public TabContentsWrapperTestHarness { |
+class AutofillExternalDelegateUnitTest : public TabContentsWrapperTestHarness { |
public: |
- AutofillExternalDelegateTest() |
+ AutofillExternalDelegateUnitTest() |
: ui_thread_(BrowserThread::UI, &message_loop_) {} |
- virtual ~AutofillExternalDelegateTest() {} |
+ virtual ~AutofillExternalDelegateUnitTest() {} |
virtual void SetUp() OVERRIDE { |
TabContentsWrapperTestHarness::SetUp(); |
- autofill_manager_ = new AutofillManager(contents_wrapper()); |
+ autofill_manager_ = new MockAutofillManager(contents_wrapper()); |
+ external_delegate_.reset(new MockAutofillExternalDelegate( |
+ contents_wrapper(), |
+ autofill_manager_)); |
} |
protected: |
- scoped_refptr<AutofillManager> autofill_manager_; |
+ scoped_refptr<MockAutofillManager> autofill_manager_; |
+ scoped_ptr<MockAutofillExternalDelegate> external_delegate_; |
private: |
content::TestBrowserThread ui_thread_; |
- DISALLOW_COPY_AND_ASSIGN(AutofillExternalDelegateTest); |
+ DISALLOW_COPY_AND_ASSIGN(AutofillExternalDelegateUnitTest); |
}; |
// Test that our external delegate called the virtual methods at the right time. |
-TEST_F(AutofillExternalDelegateTest, TestExternalDelegateVirtualCalls) { |
- MockAutofillExternalDelegate external_delegate(contents_wrapper(), |
- autofill_manager_); |
+TEST_F(AutofillExternalDelegateUnitTest, TestExternalDelegateVirtualCalls) { |
const int kQueryId = 5; |
const FormData form; |
FormField field; |
@@ -84,23 +98,42 @@ TEST_F(AutofillExternalDelegateTest, TestExternalDelegateVirtualCalls) { |
field.should_autocomplete = true; |
const gfx::Rect bounds; |
- EXPECT_CALL(external_delegate, |
+ EXPECT_CALL(*external_delegate_, |
OnQueryPlatformSpecific(kQueryId, form, field, bounds)); |
// This should call OnQueryPlatform specific. |
- external_delegate.OnQuery(kQueryId, form, field, bounds, false); |
- |
+ external_delegate_->OnQuery(kQueryId, form, field, bounds, false); |
- EXPECT_CALL(external_delegate, ApplyAutofillSuggestions(_, _, _, _, _)); |
+ EXPECT_CALL(*external_delegate_, ApplyAutofillSuggestions(_, _, _, _, _)); |
// This should call ApplyAutofillSuggestions. |
std::vector<string16> autofill_item; |
autofill_item.push_back(string16()); |
std::vector<int> autofill_ids; |
autofill_ids.push_back(1); |
- external_delegate.OnSuggestionsReturned(kQueryId, |
- autofill_item, |
- autofill_item, |
- autofill_item, |
- autofill_ids); |
+ external_delegate_->OnSuggestionsReturned(kQueryId, |
+ autofill_item, |
+ autofill_item, |
+ autofill_item, |
+ autofill_ids); |
+ |
+ |
+ EXPECT_CALL(*external_delegate_, HideAutofillPopup()); |
+ |
+ // This should trigger a call to hide the popup since |
+ // we've selected an option. |
+ external_delegate_->DidAcceptAutofillSuggestions(autofill_item[0], |
+ autofill_ids[0], 0); |
+} |
+ |
+// Test that the Autofill delegate doesn't try and fill a form with a |
+// negative unique id. |
+TEST_F(AutofillExternalDelegateUnitTest, ExternalDelegateInvalidUniqueId) { |
+ // Ensure it doesn't try to preview the negative id. |
+ EXPECT_CALL(*autofill_manager_, OnFillAutofillFormData(_, _, _, _)).Times(0); |
+ external_delegate_->SelectAutofillSuggestionAtIndex(-1, 0); |
+ |
+ // Ensure it doesn't try to fill the form in with the negative id. |
+ EXPECT_CALL(*autofill_manager_, OnFillAutofillFormData(_, _, _, _)).Times(0); |
+ external_delegate_->DidAcceptAutofillSuggestions(string16(), -1, 0); |
} |