Index: chrome/browser/autofill/autofill_popup_view_browsertest.cc |
diff --git a/chrome/browser/autofill/autofill_popup_view_browsertest.cc b/chrome/browser/autofill/autofill_popup_view_browsertest.cc |
index 5dda01ad5ab670800ef698a80b47c5bf58f6f3ad..11e7c1c0eac0fe104f66ec616c7639cc77266c5f 100644 |
--- a/chrome/browser/autofill/autofill_popup_view_browsertest.cc |
+++ b/chrome/browser/autofill/autofill_popup_view_browsertest.cc |
@@ -5,6 +5,7 @@ |
#include "chrome/browser/autofill/autofill_popup_view.h" |
#include "base/memory/scoped_ptr.h" |
+#include "chrome/browser/autofill/autofill_external_delegate_test.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/test/base/ui_test_utils.h" |
#include "content/public/browser/navigation_controller.h" |
@@ -18,38 +19,76 @@ |
#include "testing/gtest/include/gtest/gtest.h" |
using ::testing::AtLeast; |
+using testing::_; |
+ |
+namespace { |
+ |
+class MockAutofillExternalDelegate : public AutofillExternalDelegateTest { |
+ public: |
+ MockAutofillExternalDelegate( |
+ TabContentsWrapper* wrapper, AutofillManager* autofill_manager) : |
+ AutofillExternalDelegateTest(wrapper, autofill_manager) {} |
+ ~MockAutofillExternalDelegate() {} |
+ |
+ virtual void SelectAutofillSuggestionAtIndex(int unique_id, int list_index) |
+ OVERRIDE {} |
+}; |
class TestAutofillPopupView : public AutofillPopupView { |
public: |
- explicit TestAutofillPopupView(content::WebContents* web_contents) |
- : AutofillPopupView(web_contents) {} |
+ explicit TestAutofillPopupView( |
+ content::WebContents* web_contents, |
+ AutofillExternalDelegate* autofill_external_delegate) |
+ : AutofillPopupView(web_contents, autofill_external_delegate) {} |
virtual ~TestAutofillPopupView() {} |
MOCK_METHOD0(Hide, void()); |
+ MOCK_METHOD1(InvalidateRow, void(size_t)); |
+ |
+ void SetSelectedLine(size_t selected_line) { |
+ AutofillPopupView::SetSelectedLine(selected_line); |
+ } |
+ |
+ protected: |
virtual void ShowInternal() OVERRIDE {} |
+ |
+ virtual void HideInternal() OVERRIDE {} |
}; |
+} // namespace |
+ |
class AutofillPopupViewBrowserTest : public InProcessBrowserTest { |
public: |
AutofillPopupViewBrowserTest() {} |
virtual ~AutofillPopupViewBrowserTest() {} |
+ virtual void SetUpOnMainThread() OVERRIDE { |
+ web_contents_ = browser()->GetSelectedWebContents(); |
+ ASSERT_TRUE(web_contents_ != NULL); |
+ |
+ autofill_external_delegate_.reset( |
+ new MockAutofillExternalDelegate(NULL, NULL)); |
+ |
+ autofill_popup_view_.reset(new TestAutofillPopupView( |
+ web_contents_, |
+ autofill_external_delegate_.get())); |
+ } |
+ |
protected: |
+ content::WebContents* web_contents_; |
scoped_ptr<TestAutofillPopupView> autofill_popup_view_; |
+ // Make this just a member |
Ilya Sherman
2012/02/07 23:35:55
nit: Is this meant as a TODO?
csharp
2012/02/08 16:11:16
I had make this change before uploading, I must ha
|
+ scoped_ptr<AutofillExternalDelegateTest> autofill_external_delegate_; |
}; |
-IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, SwitchTabAndHideAutofillPopup) { |
- content::WebContents* web_contents = browser()->GetSelectedWebContents(); |
- TestAutofillPopupView autofill_popup_view(web_contents); |
- |
- // Using AtLeast here because current Hide is called once on Linux and Mac, |
- // and three times on Windows and ChromeOS. http://crbug.com/109269 |
- EXPECT_CALL(autofill_popup_view, Hide()).Times(AtLeast(1)); |
+IN_PROC_BROWSER_TEST_F(AutofillPopupViewBrowserTest, |
+ SwitchTabAndHideAutofillPopup) { |
+ EXPECT_CALL(*autofill_popup_view_, Hide()).Times(AtLeast(1)); |
ui_test_utils::WindowedNotificationObserver observer( |
content::NOTIFICATION_WEB_CONTENTS_HIDDEN, |
- content::Source<content::WebContents>(web_contents)); |
+ content::Source<content::WebContents>(web_contents_)); |
browser()->AddSelectedTabWithURL(GURL(chrome::kAboutBlankURL), |
content::PAGE_TRANSITION_START_PAGE); |
observer.Wait(); |
@@ -57,16 +96,14 @@ IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, SwitchTabAndHideAutofillPopup) { |
// The mock verifies that the call was made. |
} |
-IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, |
+IN_PROC_BROWSER_TEST_F(AutofillPopupViewBrowserTest, |
TestPageNavigationHidingAutofillPopup) { |
- content::WebContents* web_contents = browser()->GetSelectedWebContents(); |
- TestAutofillPopupView autofill_popup_view(web_contents); |
- EXPECT_CALL(autofill_popup_view, Hide()); |
+ EXPECT_CALL(*autofill_popup_view_, Hide()).Times(AtLeast(1)); |
ui_test_utils::WindowedNotificationObserver observer( |
content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
content::Source<content::NavigationController>( |
- &(web_contents->GetController()))); |
+ &(web_contents_->GetController()))); |
browser()->OpenURL(content::OpenURLParams( |
GURL(chrome::kAboutBlankURL), content::Referrer(), |
CURRENT_TAB, content::PAGE_TRANSITION_TYPED, false)); |
@@ -77,3 +114,27 @@ IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, |
// The mock verifies that the call was made. |
} |
+ |
+IN_PROC_BROWSER_TEST_F(AutofillPopupViewBrowserTest, |
+ SetSelectedAutofillLineAndCallInvalidate) { |
+ std::vector<string16> autofill_values; |
+ autofill_values.push_back(string16()); |
+ std::vector<int> autofill_ids; |
+ autofill_ids.push_back(0); |
+ autofill_popup_view_->Show( |
+ autofill_values, autofill_values, autofill_values, autofill_ids, 0); |
+ |
+ // Make sure that when a new line is selected, it is invalidated so it can |
+ // be updated to show it is selected. |
+ int selected_line = 0; |
+ EXPECT_CALL(*autofill_popup_view_, InvalidateRow(selected_line)); |
+ autofill_popup_view_->SetSelectedLine(selected_line); |
+ |
+ // Ensure that the row isn't invalidated if it didn't change. |
+ EXPECT_CALL(*autofill_popup_view_, InvalidateRow(selected_line)).Times(0); |
+ autofill_popup_view_->SetSelectedLine(selected_line); |
+ |
+ // Change back to no selection. |
+ EXPECT_CALL(*autofill_popup_view_, InvalidateRow(selected_line)); |
+ autofill_popup_view_->SetSelectedLine(-1); |
+} |