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

Unified Diff: chrome/browser/autocomplete/autocomplete_edit_view_browsertest.cc

Issue 6340012: Fix a DCHECK failure in AutocompleteEditModel::OnPopupDataChanged() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update. Created 9 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/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

Powered by Google App Engine
This is Rietveld 408576698