Index: chrome/browser/autocomplete/autocomplete_edit_view_browsertest.cc |
diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_browsertest.cc b/chrome/browser/autocomplete/autocomplete_edit_view_browsertest.cc |
index 01918989d1ac8cc96b6a32c7c9659137b99b36f4..ab256c7b1ebe9be3791d1bd50a4ad6b6846dd7b5 100644 |
--- a/chrome/browser/autocomplete/autocomplete_edit_view_browsertest.cc |
+++ b/chrome/browser/autocomplete/autocomplete_edit_view_browsertest.cc |
@@ -96,15 +96,15 @@ const struct TestHistoryEntry { |
int typed_count; |
bool starred; |
} kHistoryEntries[] = { |
- {"http://www.bar.com/1", "Page 1", kSearchText, 1, 1, false }, |
- {"http://www.bar.com/2", "Page 2", kSearchText, 1, 1, false }, |
- {"http://www.bar.com/3", "Page 3", kSearchText, 1, 1, false }, |
- {"http://www.bar.com/4", "Page 4", kSearchText, 1, 1, false }, |
- {"http://www.bar.com/5", "Page 5", kSearchText, 1, 1, false }, |
- {"http://www.bar.com/6", "Page 6", kSearchText, 1, 1, false }, |
- {"http://www.bar.com/7", "Page 7", kSearchText, 1, 1, false }, |
- {"http://www.bar.com/8", "Page 8", kSearchText, 1, 1, false }, |
- {"http://www.bar.com/9", "Page 9", kSearchText, 1, 1, false }, |
+ {"http://www.bar.com/1", "Page 1", kSearchText, 10, 10, false }, |
+ {"http://www.bar.com/2", "Page 2", kSearchText, 9, 9, false }, |
+ {"http://www.bar.com/3", "Page 3", kSearchText, 8, 8, false }, |
+ {"http://www.bar.com/4", "Page 4", kSearchText, 7, 7, false }, |
+ {"http://www.bar.com/5", "Page 5", kSearchText, 6, 6, false }, |
+ {"http://www.bar.com/6", "Page 6", kSearchText, 5, 5, false }, |
+ {"http://www.bar.com/7", "Page 7", kSearchText, 4, 4, false }, |
+ {"http://www.bar.com/8", "Page 8", kSearchText, 3, 3, false }, |
+ {"http://www.bar.com/9", "Page 9", kSearchText, 2, 2, false }, |
// To trigger inline autocomplete. |
{"http://www.def.com", "Page def", kSearchText, 10000, 10000, true }, |
@@ -244,6 +244,11 @@ class AutocompleteEditViewTest : public InProcessBrowserTest, |
} |
ASSERT_TRUE(model->loaded()); |
+ // Remove old template urls to avoid interfering our tests. |
Peter Kasting
2011/01/25 21:18:24
Nit: What are the old URLs and how would they inte
James Su
2011/01/25 21:47:03
Done.
|
+ model->SetDefaultSearchProvider(NULL); |
+ std::vector<const TemplateURL*> old = model->GetTemplateURLs(); |
+ for (size_t i = 0; i < old.size(); ++i) |
Peter Kasting
2011/01/25 21:18:24
Nit: An iterator might be nice
James Su
2011/01/25 21:47:03
Done.
|
+ model->Remove(old[i]); |
TemplateURL* template_url = new TemplateURL(); |
template_url->SetURL(kSearchURL, 0, 0); |
@@ -509,7 +514,8 @@ class AutocompleteEditViewTest : public InProcessBrowserTest, |
ASSERT_NO_FATAL_FAILURE(SendKeySequence(kDesiredTLDKeys)); |
ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); |
ASSERT_TRUE(popup_model->IsOpen()); |
- // ctrl-Enter triggers desired_tld feature, thus www.bar.com shall be opened. |
+ // ctrl-Enter triggers desired_tld feature, thus www.bar.com shall be |
+ // opened. |
ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RETURN, true, false, false)); |
GURL url = browser()->GetSelectedTabContents()->GetURL(); |
@@ -788,6 +794,101 @@ class AutocompleteEditViewTest : public InProcessBrowserTest, |
ASSERT_TRUE(edit_view->GetText().empty()); |
} |
+ void DeleteItemTest() { |
+ // Disable the search provider, to make sure the popup contains only history |
+ // items. |
+ TemplateURLModel* model = browser()->profile()->GetTemplateURLModel(); |
+ model->SetDefaultSearchProvider(NULL); |
+ |
+ ui_test_utils::NavigateToURL(browser(), GURL(chrome::kAboutBlankURL)); |
+ browser()->FocusLocationBar(); |
+ |
+ AutocompleteEditView* edit_view = NULL; |
+ ASSERT_NO_FATAL_FAILURE(GetAutocompleteEditView(&edit_view)); |
+ |
+ AutocompletePopupModel* popup_model = edit_view->model()->popup_model(); |
+ ASSERT_TRUE(popup_model); |
+ |
+ std::wstring old_text = edit_view->GetText(); |
+ |
+ // Input something that can match history items. |
+ edit_view->SetUserText(L"bar"); |
+ ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); |
+ ASSERT_TRUE(popup_model->IsOpen()); |
+ |
+ // Delete the inline autocomplete part. |
+ ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_DELETE, false, false, false)); |
+ std::wstring user_text = edit_view->GetText(); |
+ ASSERT_EQ(L"bar", user_text); |
+ edit_view->SelectAll(true); |
+ ASSERT_TRUE(edit_view->IsSelectAll()); |
+ |
+ // The first item should be the default match. |
+ size_t default_line = popup_model->selected_line(); |
+ std::string default_url = |
+ popup_model->result().match_at(default_line).destination_url.spec(); |
+ |
+ // Move down. |
+ edit_view->model()->OnUpOrDownKeyPressed(1); |
+ ASSERT_EQ(default_line + 1, popup_model->selected_line()); |
+ std::wstring selected_text = |
+ popup_model->result().match_at(default_line + 1).fill_into_edit; |
+ // Temporary text is shown. |
+ ASSERT_EQ(selected_text, edit_view->GetText()); |
+ ASSERT_FALSE(edit_view->IsSelectAll()); |
+ |
+ // Delete the item. |
+ popup_model->TryDeletingCurrentItem(); |
+ ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); |
+ // The selected line shouldn't be changed, because we have more than two |
+ // items. |
+ ASSERT_EQ(default_line + 1, popup_model->selected_line()); |
+ // Make sure the item is really deleted. |
+ ASSERT_NE(selected_text, |
+ popup_model->result().match_at(default_line + 1).fill_into_edit); |
+ selected_text = |
+ popup_model->result().match_at(default_line + 1).fill_into_edit; |
+ // New temporary text is shown. |
+ ASSERT_EQ(selected_text, edit_view->GetText()); |
+ |
+ // Revert to the default match. |
+ ASSERT_TRUE(edit_view->model()->OnEscapeKeyPressed()); |
+ ASSERT_EQ(default_line, popup_model->selected_line()); |
+ ASSERT_EQ(user_text, edit_view->GetText()); |
+ ASSERT_TRUE(edit_view->IsSelectAll()); |
+ |
+ // Move down and up to select the default match as temporary text. |
+ edit_view->model()->OnUpOrDownKeyPressed(1); |
+ ASSERT_EQ(default_line + 1, popup_model->selected_line()); |
+ edit_view->model()->OnUpOrDownKeyPressed(-1); |
+ ASSERT_EQ(default_line, popup_model->selected_line()); |
+ |
+ selected_text = popup_model->result().match_at(default_line).fill_into_edit; |
+ // New temporary text is shown. |
+ ASSERT_EQ(selected_text, edit_view->GetText()); |
+ ASSERT_FALSE(edit_view->IsSelectAll()); |
+ |
+ // Delete the default item. |
+ popup_model->TryDeletingCurrentItem(); |
+ ASSERT_NO_FATAL_FAILURE(WaitForAutocompleteControllerDone()); |
+ // The selected line shouldn't be changed, but the default item should have |
+ // been changed. |
+ ASSERT_EQ(default_line, popup_model->selected_line()); |
+ // Make sure the item is really deleted. |
+ ASSERT_NE(selected_text, |
+ popup_model->result().match_at(default_line).fill_into_edit); |
+ selected_text = |
+ popup_model->result().match_at(default_line).fill_into_edit; |
+ // New temporary text is shown. |
+ ASSERT_EQ(selected_text, edit_view->GetText()); |
+ |
+ // As the current selected item is the new default item, pressing Escape key |
+ // should revert all directly. |
+ ASSERT_TRUE(edit_view->model()->OnEscapeKeyPressed()); |
+ ASSERT_EQ(old_text, edit_view->GetText()); |
+ ASSERT_TRUE(edit_view->IsSelectAll()); |
+ } |
+ |
}; |
// Test if ctrl-* accelerators are workable in omnibox. |
@@ -841,6 +942,10 @@ IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, AcceptKeywordBySpace) { |
AcceptKeywordBySpaceTest(); |
} |
+IN_PROC_BROWSER_TEST_F(AutocompleteEditViewTest, DeleteItem) { |
+ DeleteItemTest(); |
+} |
+ |
#if defined(OS_LINUX) |
// TODO(oshima): enable these tests for views-implmentation when |
// these featuers are supported. |
@@ -1017,4 +1122,8 @@ IN_PROC_BROWSER_TEST_F(AutocompleteEditViewViewsTest, AcceptKeywordBySpace) { |
AcceptKeywordBySpaceTest(); |
} |
+IN_PROC_BROWSER_TEST_F(AutocompleteEditViewViewsTest, DeleteItem) { |
+ DeleteItemTest(); |
+} |
+ |
#endif |