| Index: chrome/browser/search_engines/template_url_service_unittest.cc
|
| diff --git a/chrome/browser/search_engines/template_url_service_unittest.cc b/chrome/browser/search_engines/template_url_service_unittest.cc
|
| index b1e95de179ac7ca3a6a7838d8735377ff727fc6c..a230386ac5d8421e79ae73e024a6269e570c9a8a 100644
|
| --- a/chrome/browser/search_engines/template_url_service_unittest.cc
|
| +++ b/chrome/browser/search_engines/template_url_service_unittest.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/callback.h"
|
| #include "base/memory/ref_counted.h"
|
| #include "base/memory/scoped_vector.h"
|
| +#include "base/run_loop.h"
|
| #include "base/strings/string_split.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| @@ -41,72 +42,6 @@ using ::testing::StrictMock;
|
|
|
| namespace {
|
|
|
| -// TestGenerateSearchURL ------------------------------------------------------
|
| -
|
| -// Test the GenerateSearchURL on a thread or the main thread.
|
| -class TestGenerateSearchURL
|
| - : public base::RefCountedThreadSafe<TestGenerateSearchURL> {
|
| - public:
|
| - explicit TestGenerateSearchURL(SearchTermsData* search_terms_data);
|
| -
|
| - // Run the test cases for GenerateSearchURL.
|
| - void RunTest();
|
| -
|
| - // Did the test pass?
|
| - bool passed() const { return passed_; }
|
| -
|
| - private:
|
| - friend class base::RefCountedThreadSafe<TestGenerateSearchURL>;
|
| - ~TestGenerateSearchURL();
|
| -
|
| - SearchTermsData* search_terms_data_;
|
| - bool passed_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TestGenerateSearchURL);
|
| -};
|
| -
|
| -TestGenerateSearchURL::TestGenerateSearchURL(SearchTermsData* search_terms_data)
|
| - : search_terms_data_(search_terms_data),
|
| - passed_(false) {
|
| -}
|
| -
|
| -void TestGenerateSearchURL::RunTest() {
|
| - struct GenerateSearchURLCase {
|
| - const char* test_name;
|
| - const char* url;
|
| - const char* expected;
|
| - } generate_url_cases[] = {
|
| - { "invalid URL", "foo{searchTerms}", "" },
|
| - { "URL with no replacements", "http://foo/", "http://foo/" },
|
| - { "basic functionality", "http://foo/{searchTerms}",
|
| - "http://foo/blah.blah.blah.blah.blah" }
|
| - };
|
| -
|
| - // Don't use ASSERT/EXPECT since this is run on a thread in one test
|
| - // and those macros aren't meant for threads at this time according to
|
| - // gtest documentation.
|
| - bool everything_passed = true;
|
| - for (size_t i = 0; i < ARRAYSIZE_UNSAFE(generate_url_cases); ++i) {
|
| - TemplateURLData data;
|
| - data.SetURL(generate_url_cases[i].url);
|
| - TemplateURL t_url(NULL, data);
|
| - std::string result = (search_terms_data_ ?
|
| - TemplateURLService::GenerateSearchURLUsingTermsData(&t_url,
|
| - *search_terms_data_) :
|
| - TemplateURLService::GenerateSearchURL(&t_url)).spec();
|
| - if (result != generate_url_cases[i].expected) {
|
| - LOG(ERROR) << generate_url_cases[i].test_name << " failed. Expected " <<
|
| - generate_url_cases[i].expected << " Actual " << result;
|
| - everything_passed = false;
|
| - }
|
| - }
|
| - passed_ = everything_passed;
|
| -}
|
| -
|
| -TestGenerateSearchURL::~TestGenerateSearchURL() {
|
| -}
|
| -
|
| -
|
| // TestSearchTermsData --------------------------------------------------------
|
|
|
| // Simple implementation of SearchTermsData.
|
| @@ -303,6 +238,36 @@ class TemplateURLServiceTest : public testing::Test {
|
| protected:
|
| TemplateURLServiceTestUtil test_util_;
|
|
|
| + void TestGenerateSearchURL(SearchTermsData* search_terms_data) {
|
| + struct GenerateSearchURLCase {
|
| + const char* test_name;
|
| + const char* url;
|
| + const char* expected;
|
| + } generate_url_cases[] = {
|
| + { "invalid URL", "foo{searchTerms}", "" },
|
| + { "URL with no replacements", "http://foo/", "http://foo/" },
|
| + { "basic functionality", "http://foo/{searchTerms}",
|
| + "http://foo/blah.blah.blah.blah.blah" }
|
| + };
|
| +
|
| + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(generate_url_cases); ++i) {
|
| + TemplateURLData data;
|
| + data.SetURL(generate_url_cases[i].url);
|
| + TemplateURL t_url(NULL, data);
|
| + std::string result;
|
| + if (search_terms_data) {
|
| + result = TemplateURLService::GenerateSearchURLUsingTermsData(
|
| + &t_url, *search_terms_data).spec();
|
| + } else {
|
| + result = TemplateURLService::GenerateSearchURL(&t_url).spec();
|
| + }
|
| + EXPECT_EQ(result, generate_url_cases[i].expected)
|
| + << generate_url_cases[i].test_name << " failed. Expected "
|
| + << generate_url_cases[i].expected << " Actual " << result;
|
| + }
|
| + }
|
| +
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceTest);
|
| };
|
|
|
| @@ -405,7 +370,7 @@ void TemplateURLServiceTest::TestLoadUpdatingPreloadedURL(
|
| ASSERT_TRUE(keyword_url != NULL);
|
| EXPECT_EQ(t_url, keyword_url);
|
| EXPECT_EQ(original_url, keyword_url->url_ref().DisplayURL());
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Now reload the model and verify that the merge updates the url, and
|
| // preserves the sync GUID.
|
| @@ -416,7 +381,7 @@ void TemplateURLServiceTest::TestLoadUpdatingPreloadedURL(
|
| EXPECT_EQ(original_guid, keyword_url->sync_guid());
|
|
|
| // Wait for any saves to finish.
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Reload the model to verify that change was saved correctly.
|
| test_util_.ResetModel(true);
|
| @@ -462,7 +427,7 @@ TEST_F(TemplateURLServiceTest, AddUpdateRemove) {
|
| ASSERT_TRUE(model()->CanReplaceKeyword(ASCIIToUTF16("keyword"), GURL(),
|
| NULL));
|
| VerifyObserverCount(1);
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
| ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
|
| ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(t_url->keyword()));
|
| // We need to make a second copy as the model takes ownership of |t_url| and
|
| @@ -499,7 +464,7 @@ TEST_F(TemplateURLServiceTest, AddUpdateRemove) {
|
| NULL));
|
| ASSERT_FALSE(model()->CanReplaceKeyword(ASCIIToUTF16("b"), GURL(), NULL));
|
| cloned_url.reset(new TemplateURL(loaded_url->profile(), loaded_url->data()));
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
| test_util_.ResetModel(true);
|
| ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
|
| loaded_url = model()->GetTemplateURLForKeyword(ASCIIToUTF16("b"));
|
| @@ -676,25 +641,14 @@ TEST_F(TemplateURLServiceTest, GenerateKeyword) {
|
| }
|
|
|
| TEST_F(TemplateURLServiceTest, GenerateSearchURL) {
|
| - scoped_refptr<TestGenerateSearchURL> test_generate_search_url(
|
| - new TestGenerateSearchURL(NULL));
|
| - test_generate_search_url->RunTest();
|
| - EXPECT_TRUE(test_generate_search_url->passed());
|
| + TestGenerateSearchURL(NULL);
|
| }
|
|
|
| TEST_F(TemplateURLServiceTest, GenerateSearchURLUsingTermsData) {
|
| // Run the test for GenerateSearchURLUsingTermsData on the "IO" thread and
|
| // wait for it to finish.
|
| TestSearchTermsData search_terms_data("http://google.com/");
|
| - scoped_refptr<TestGenerateSearchURL> test_generate_search_url(
|
| - new TestGenerateSearchURL(&search_terms_data));
|
| -
|
| - test_util_.StartIOThread();
|
| - BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)->PostTask(
|
| - FROM_HERE, base::Bind(&TestGenerateSearchURL::RunTest,
|
| - test_generate_search_url.get()));
|
| - TemplateURLServiceTestUtil::BlockTillIOThreadProcessesRequests();
|
| - EXPECT_TRUE(test_generate_search_url->passed());
|
| + TestGenerateSearchURL(&search_terms_data);
|
| }
|
|
|
| TEST_F(TemplateURLServiceTest, ClearBrowsingData_Keywords) {
|
| @@ -826,7 +780,7 @@ TEST_F(TemplateURLServiceTest, Reset) {
|
| model()->Add(t_url);
|
|
|
| VerifyObserverCount(1);
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| StrictMock<base::MockTimeProvider> mock_time;
|
| model()->set_time_provider(&base::MockTimeProvider::StaticNow);
|
| @@ -874,7 +828,7 @@ TEST_F(TemplateURLServiceTest, DefaultSearchProvider) {
|
|
|
| // Setting the default search provider should have caused notification.
|
| VerifyObserverCount(1);
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->profile(),
|
| t_url->data()));
|
| @@ -953,7 +907,7 @@ TEST_F(TemplateURLServiceTest, DefaultSearchProviderLoadedFromPrefs) {
|
| const TemplateURLID id = t_url->id();
|
|
|
| model()->SetDefaultSearchProvider(t_url);
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
| scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->profile(),
|
| t_url->data()));
|
|
|
| @@ -1243,7 +1197,7 @@ TEST_F(TemplateURLServiceTest, LoadDeletesUnusedProvider) {
|
| model()->Add(t_url);
|
| ASSERT_TRUE(
|
| model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) != NULL);
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Ensure that merging clears this engine.
|
| test_util_.ResetModel(true);
|
| @@ -1251,7 +1205,7 @@ TEST_F(TemplateURLServiceTest, LoadDeletesUnusedProvider) {
|
| model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")) == NULL);
|
|
|
| // Wait for any saves to finish.
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Reload the model to verify that the database was updated as a result of the
|
| // merge.
|
| @@ -1274,7 +1228,7 @@ TEST_F(TemplateURLServiceTest, LoadRetainsModifiedProvider) {
|
| ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")));
|
|
|
| // Wait for any saves to finish.
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Ensure that merging won't clear it if the user has edited it.
|
| test_util_.ResetModel(true);
|
| @@ -1284,7 +1238,7 @@ TEST_F(TemplateURLServiceTest, LoadRetainsModifiedProvider) {
|
| AssertEquals(*cloned_url, *url_for_unittest);
|
|
|
| // Wait for any saves to finish.
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Reload the model to verify that save/reload retains the item.
|
| test_util_.ResetModel(true);
|
| @@ -1304,7 +1258,7 @@ TEST_F(TemplateURLServiceTest, LoadSavesPrepopulatedDefaultSearchProvider) {
|
| default_search->data()));
|
|
|
| // Wait for any saves to finish.
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Reload the model and check that the default search provider
|
| // was properly saved.
|
| @@ -1368,7 +1322,7 @@ TEST_F(TemplateURLServiceTest, LoadRetainsDefaultProvider) {
|
|
|
| ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest")));
|
| ASSERT_EQ(t_url, model()->GetDefaultSearchProvider());
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Ensure that merging won't clear the prepopulated template url
|
| // which is no longer present if it's the default engine.
|
| @@ -1382,7 +1336,7 @@ TEST_F(TemplateURLServiceTest, LoadRetainsDefaultProvider) {
|
| }
|
|
|
| // Wait for any saves to finish.
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Reload the model to verify that the update was saved.
|
| test_util_.ResetModel(true);
|
| @@ -1418,7 +1372,7 @@ TEST_F(TemplateURLServiceTest, LoadEnsuresDefaultSearchProviderExists) {
|
| // Now remove it.
|
| model()->SetDefaultSearchProvider(NULL);
|
| model()->Remove(old_default);
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| EXPECT_FALSE(model()->GetDefaultSearchProvider());
|
|
|
| @@ -1432,7 +1386,7 @@ TEST_F(TemplateURLServiceTest, LoadEnsuresDefaultSearchProviderExists) {
|
| model()->ResetTemplateURL(model()->GetDefaultSearchProvider(),
|
| ASCIIToUTF16("test"), ASCIIToUTF16("test"),
|
| "http://example.com/");
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| // Reset the model and load it. There should be a usable default search
|
| // provider.
|
| @@ -1454,7 +1408,7 @@ TEST_F(TemplateURLServiceTest, FailedInit) {
|
|
|
| test_util_.ResetModel(false);
|
| model()->Load();
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| ASSERT_TRUE(model()->GetDefaultSearchProvider());
|
| }
|
| @@ -1610,7 +1564,7 @@ TEST_F(TemplateURLServiceTest, PatchEmptySyncGUID) {
|
| model()->Add(t_url);
|
|
|
| VerifyObserverCount(1);
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
| ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
|
|
|
| // Reload the model to verify it was actually saved to the database and
|
| @@ -1647,7 +1601,7 @@ TEST_F(TemplateURLServiceTest, DuplicateInputEncodings) {
|
| model()->Add(t_url);
|
|
|
| VerifyObserverCount(1);
|
| - test_util_.BlockTillServiceProcessesRequests();
|
| + base::RunLoop().RunUntilIdle();
|
| ASSERT_EQ(initial_count + 1, model()->GetTemplateURLs().size());
|
| const TemplateURL* loaded_url =
|
| model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword"));
|
|
|