summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfinnur@chromium.org <finnur@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-07 09:43:39 +0000
committerfinnur@chromium.org <finnur@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-07 09:43:39 +0000
commit7d70f4e2abc9e43b7ac4b7e8b39786bac6ef1ea0 (patch)
tree02887d8b0c5cf1ce5e825e0731bed94a6f12ab9a
parentd053e9a236bbc3788f29268833c0f31ca93b2806 (diff)
downloadchromium_src-7d70f4e2abc9e43b7ac4b7e8b39786bac6ef1ea0.zip
chromium_src-7d70f4e2abc9e43b7ac4b7e8b39786bac6ef1ea0.tar.gz
chromium_src-7d70f4e2abc9e43b7ac4b7e8b39786bac6ef1ea0.tar.bz2
Add a unit test for the Extension App Provider.
BUG=52444 TEST=None. Adding an automated test. Review URL: http://codereview.chromium.org/6810002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80757 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/autocomplete/extension_app_provider.cc6
-rw-r--r--chrome/browser/autocomplete/extension_app_provider.h4
-rw-r--r--chrome/browser/autocomplete/extension_app_provider_unittest.cc106
-rw-r--r--chrome/chrome_tests.gypi1
4 files changed, 117 insertions, 0 deletions
diff --git a/chrome/browser/autocomplete/extension_app_provider.cc b/chrome/browser/autocomplete/extension_app_provider.cc
index eff2bb1..f430547 100644
--- a/chrome/browser/autocomplete/extension_app_provider.cc
+++ b/chrome/browser/autocomplete/extension_app_provider.cc
@@ -23,6 +23,12 @@ ExtensionAppProvider::ExtensionAppProvider(ACProviderListener* listener,
RefreshAppList();
}
+void ExtensionAppProvider::AddExtensionAppForTesting(
+ const std::string& app_name,
+ const std::string url) {
+ extension_apps_.push_back(std::make_pair(app_name, url));
+}
+
void ExtensionAppProvider::Start(const AutocompleteInput& input,
bool minimal_changes) {
matches_.clear();
diff --git a/chrome/browser/autocomplete/extension_app_provider.h b/chrome/browser/autocomplete/extension_app_provider.h
index a162419..4209ee9 100644
--- a/chrome/browser/autocomplete/extension_app_provider.h
+++ b/chrome/browser/autocomplete/extension_app_provider.h
@@ -33,6 +33,10 @@ class ExtensionAppProvider : public AutocompleteProvider,
public:
ExtensionAppProvider(ACProviderListener* listener, Profile* profile);
+ // Only used for testing.
+ void AddExtensionAppForTesting(const std::string& app_name,
+ const std::string url);
+
// AutocompleteProvider implementation:
virtual void Start(const AutocompleteInput& input,
bool minimal_changes) OVERRIDE;
diff --git a/chrome/browser/autocomplete/extension_app_provider_unittest.cc b/chrome/browser/autocomplete/extension_app_provider_unittest.cc
new file mode 100644
index 0000000..578c4c7
--- /dev/null
+++ b/chrome/browser/autocomplete/extension_app_provider_unittest.cc
@@ -0,0 +1,106 @@
+// 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 "base/basictypes.h"
+#include "base/message_loop.h"
+#include "base/utf_string_conversions.h"
+#include "chrome/test/testing_browser_process_test.h"
+#include "chrome/browser/autocomplete/autocomplete_match.h"
+#include "chrome/browser/autocomplete/extension_app_provider.h"
+#include "chrome/browser/history/history.h"
+#include "chrome/browser/history/url_database.h"
+#include "chrome/test/testing_profile.h"
+
+class ExtensionAppProviderTest : public TestingBrowserProcessTest {
+ protected:
+ struct test_data {
+ const string16 input;
+ const size_t num_results;
+ const GURL output[3];
+ };
+
+ ExtensionAppProviderTest() : history_service_(NULL) { }
+ virtual ~ExtensionAppProviderTest() { }
+
+ virtual void SetUp() OVERRIDE;
+
+ void RunTest(test_data* keyword_cases,
+ int num_cases);
+
+ protected:
+ MessageLoopForUI message_loop_;
+ scoped_refptr<ExtensionAppProvider> app_provider_;
+ scoped_ptr<TestingProfile> profile_;
+ HistoryService* history_service_;
+};
+
+void ExtensionAppProviderTest::SetUp() {
+ profile_.reset(new TestingProfile());
+ profile_->CreateHistoryService(true, false);
+ profile_->BlockUntilHistoryProcessesPendingRequests();
+ history_service_ = profile_->GetHistoryService(Profile::EXPLICIT_ACCESS);
+
+ app_provider_ = new ExtensionAppProvider(NULL, profile_.get());
+
+ struct ExtensionApps {
+ std::string app_name;
+ std::string url;
+ std::string title;
+ int typed_count;
+ } kExtensionApps[] = {
+ {"COYB", "http://asdf/", "COYB", 7},
+ {"NSNO", "http://fdsa/", "NSNO", 2},
+ };
+
+ history::URLDatabase* url_db = history_service_->InMemoryDatabase();
+
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kExtensionApps); ++i) {
+ // Populate the Extension Apps list.
+ app_provider_->AddExtensionAppForTesting(kExtensionApps[i].app_name,
+ kExtensionApps[i].url);
+
+ // Populate the InMemoryDatabase.
+ history::URLRow info(GURL(kExtensionApps[i].url));
+ info.set_title(UTF8ToUTF16(kExtensionApps[i].title));
+ info.set_typed_count(kExtensionApps[i].typed_count);
+ url_db->AddURL(info);
+ }
+}
+
+void ExtensionAppProviderTest::RunTest(
+ test_data* keyword_cases,
+ int num_cases) {
+ ACMatches matches;
+ for (int i = 0; i < num_cases; ++i) {
+ AutocompleteInput input(keyword_cases[i].input, string16(), true,
+ false, true, AutocompleteInput::ALL_MATCHES);
+ app_provider_->Start(input, false);
+ EXPECT_TRUE(app_provider_->done());
+ matches = app_provider_->matches();
+ EXPECT_EQ(keyword_cases[i].num_results, matches.size())
+ << ASCIIToUTF16("Input was: ") + keyword_cases[i].input;
+ if (matches.size() == keyword_cases[i].num_results) {
+ for (size_t j = 0; j < keyword_cases[i].num_results; ++j)
+ EXPECT_EQ(keyword_cases[i].output[j], matches[j].destination_url);
+ }
+ }
+}
+
+TEST_F(ExtensionAppProviderTest, BasicMatching) {
+ test_data edit_cases[] = {
+ // Searching for a nonexistent value should give nothing.
+ {ASCIIToUTF16("Not Found"), 0, { GURL() }},
+
+ // The letter 'o' appears in both extension apps.
+ {ASCIIToUTF16("o"), 2, { GURL("http://asdf/"),
+ GURL("http://fdsa/") }},
+ // The string 'co' appears in one extension app.
+ {ASCIIToUTF16("co"), 1, { GURL("http://asdf/") }},
+ // Try with URL matching.
+ {ASCIIToUTF16("http://asdf/"), 1, { GURL("http://asdf/") }},
+ {ASCIIToUTF16("http://fdsa/"), 1, { GURL("http://fdsa/") }},
+ };
+
+ RunTest(edit_cases, ARRAYSIZE_UNSAFE(edit_cases));
+}
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index d37734d..6ec1390 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1201,6 +1201,7 @@
'browser/autocomplete/autocomplete_popup_view_mac_unittest.mm',
'browser/autocomplete/autocomplete_result_unittest.cc',
'browser/autocomplete/autocomplete_unittest.cc',
+ 'browser/autocomplete/extension_app_provider_unittest.cc',
'browser/autocomplete/history_contents_provider_unittest.cc',
'browser/autocomplete/history_quick_provider_unittest.cc',
'browser/autocomplete/history_url_provider_unittest.cc',