Index: chrome/browser/autocomplete/autocomplete_popup_model_unittest.cc |
diff --git a/chrome/browser/autocomplete/autocomplete_popup_model_unittest.cc b/chrome/browser/autocomplete/autocomplete_popup_model_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e952df1dadf2934d489cfcdeeb4628f0aacaeff1 |
--- /dev/null |
+++ b/chrome/browser/autocomplete/autocomplete_popup_model_unittest.cc |
@@ -0,0 +1,118 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/autocomplete/autocomplete_popup_model.h" |
+ |
+#include "base/utf_string_conversions.h" |
+#include "chrome/browser/autocomplete/autocomplete_match.h" |
+#include "chrome/browser/search_engines/template_url.h" |
+#include "chrome/browser/search_engines/template_url_service.h" |
+#include "chrome/browser/search_engines/template_url_service_factory.h" |
+#include "chrome/test/base/testing_profile.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+class AutoCompletePopupModelTest : public testing::Test { |
+ public: |
+ AutoCompletePopupModelTest() { |
+ } |
+ |
+ virtual void SetUp(); |
+ virtual void TearDown(); |
+ |
+ protected: |
+ AutocompleteMatch CreateMatch(const string16& keyword, |
+ const string16& query_string, |
+ AutocompleteMatch::Type type); |
+ void RunTest(const char* input, AutocompleteMatch::Type type, |
+ const char* keyword); |
+ |
+ scoped_ptr<TestingProfile> profile_; |
+ scoped_ptr<AutocompletePopupModel> model_; |
+ scoped_ptr<AutocompleteEditModel> edit_model_; |
+}; |
+ |
+void AutoCompletePopupModelTest::SetUp() { |
+ profile_.reset(new TestingProfile()); |
+ profile_->CreateTemplateURLService(); |
+ edit_model_.reset(new AutocompleteEditModel(NULL, NULL, profile_.get())); |
+ model_.reset(new AutocompletePopupModel(NULL, edit_model_.get())); |
+ |
+ TemplateURLService* turl_model = |
+ TemplateURLServiceFactory::GetForProfile(profile_.get()); |
+ |
+ turl_model->Load(); |
+ |
+ // Reset the default TemplateURL. |
+ TemplateURL* default_t_url = new TemplateURL(); |
+ default_t_url->set_keyword(ASCIIToUTF16("t")); |
+ default_t_url->SetURL("http://defaultturl/{searchTerms}", 0, 0); |
+ turl_model->Add(default_t_url); |
+ turl_model->SetDefaultSearchProvider(default_t_url); |
+ ASSERT_NE(0, default_t_url->id()); |
+ |
+ // Create another TemplateURL for KeywordProvider. |
+ TemplateURL* keyword_t_url = new TemplateURL(); |
+ keyword_t_url->set_short_name(ASCIIToUTF16("k")); |
+ keyword_t_url->set_keyword(ASCIIToUTF16("k")); |
+ keyword_t_url->SetURL("http://keyword/{searchTerms}", 0, 0); |
+ turl_model->Add(keyword_t_url); |
+ ASSERT_NE(0, keyword_t_url->id()); |
+} |
+ |
+void AutoCompletePopupModelTest::TearDown() { |
+ profile_.reset(); |
+ model_.reset(); |
+ edit_model_.reset(); |
+} |
+ |
+AutocompleteMatch AutoCompletePopupModelTest::CreateMatch( |
+ const string16& keyword, |
+ const string16& query_string, |
+ AutocompleteMatch::Type type) { |
+ AutocompleteMatch match(NULL, 0, false, type); |
+ match.contents = query_string; |
+ TemplateURLService* template_url_service = |
+ TemplateURLServiceFactory::GetForProfile(profile_.get()); |
+ if (!keyword.empty()) { |
+ const TemplateURL* template_url = |
+ template_url_service->GetTemplateURLForKeyword(keyword); |
+ match.template_url = |
+ TemplateURL::SupportsReplacement(template_url) ? template_url : NULL; |
+ } |
+ if (match.template_url) |
+ match.fill_into_edit = match.template_url->keyword() + char16(' '); |
+ else |
+ match.template_url = template_url_service->GetDefaultSearchProvider(); |
+ match.fill_into_edit.append(query_string); |
+ match.transition = keyword.empty() ? |
+ PageTransition::GENERATED : PageTransition::KEYWORD; |
+ return match; |
+} |
+ |
+void AutoCompletePopupModelTest::RunTest(const char* input, |
+ AutocompleteMatch::Type type, |
+ const char* keyword) { |
+ string16 keyword16(ASCIIToUTF16(keyword)); |
+ string16 detected_keyword; |
+ EXPECT_FALSE(model_->GetKeywordForMatch( |
+ CreateMatch(keyword16, ASCIIToUTF16(input), type), &detected_keyword)); |
+ EXPECT_EQ(keyword16, detected_keyword); |
+} |
+ |
+TEST_F(AutoCompletePopupModelTest, GetKeywordForMatch) { |
+ string16 keyword; |
+ |
+ // Possible matches when the input is "tfoo" |
+ RunTest("tfoo", AutocompleteMatch::SEARCH_WHAT_YOU_TYPED, ""); |
+ RunTest("tfoo", AutocompleteMatch::SEARCH_HISTORY, ""); |
+ RunTest("tfoo", AutocompleteMatch::SEARCH_SUGGEST, ""); |
+ |
+ // Possible matches when the input is "t foo" |
+ RunTest("foo", AutocompleteMatch::SEARCH_HISTORY, "t"); |
+ RunTest("foo", AutocompleteMatch::SEARCH_OTHER_ENGINE, "t"); |
+ |
+ // Possible matches when the input is "k foo" |
+ RunTest("foo", AutocompleteMatch::SEARCH_HISTORY, "k"); |
+ RunTest("foo", AutocompleteMatch::SEARCH_OTHER_ENGINE, "k"); |
+} |