| Index: chrome/browser/spellchecker/spellcheck_service_unittest.cc
|
| diff --git a/chrome/browser/spellchecker/spellcheck_service_unittest.cc b/chrome/browser/spellchecker/spellcheck_service_unittest.cc
|
| index f2fd9f0fff6ec1c0396a87c99f5a38026f8f5f6a..cc2e36f35ff12b189055b129433992552a028cb1 100644
|
| --- a/chrome/browser/spellchecker/spellcheck_service_unittest.cc
|
| +++ b/chrome/browser/spellchecker/spellcheck_service_unittest.cc
|
| @@ -4,104 +4,147 @@
|
|
|
| #include "chrome/browser/spellchecker/spellcheck_service.h"
|
|
|
| -#include <algorithm>
|
| -
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "chrome/browser/spellchecker/feedback_sender.h"
|
| -#include "chrome/browser/spellchecker/spellcheck_factory.h"
|
| -#include "chrome/test/base/testing_profile.h"
|
| -#include "content/public/test/test_browser_thread_bundle.h"
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "base/command_line.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "base/prefs/pref_registry_simple.h"
|
| +#include "base/prefs/testing_pref_service.h"
|
| +#include "base/strings/string_split.h"
|
| +#include "base/supports_user_data.h"
|
| +#include "chrome/common/chrome_switches.h"
|
| +#include "chrome/common/pref_names.h"
|
| +#include "components/user_prefs/user_prefs.h"
|
| +#include "content/public/test/test_browser_thread.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| -static scoped_ptr<KeyedService> BuildSpellcheckService(
|
| - content::BrowserContext* profile) {
|
| - return make_scoped_ptr(new SpellcheckService(static_cast<Profile*>(profile)));
|
| -}
|
|
|
| -class SpellcheckServiceTest : public testing::Test {
|
| - protected:
|
| - void SetUp() override {
|
| - // Use SetTestingFactoryAndUse to force creation and initialization.
|
| - SpellcheckServiceFactory::GetInstance()->SetTestingFactoryAndUse(
|
| - &profile_, &BuildSpellcheckService);
|
| +struct SpellcheckLanguageTestCase {
|
| + SpellcheckLanguageTestCase(const std::string& spellcheck_dictionaries,
|
| + const std::string& accept_languages,
|
| + size_t num_expected_enabled_spellcheck_languages,
|
| + const std::string& unsplit_expected_languages)
|
| + : spellcheck_dictionaries(spellcheck_dictionaries),
|
| + accept_languages(accept_languages),
|
| + num_expected_enabled_spellcheck_languages(
|
| + num_expected_enabled_spellcheck_languages) {
|
| + base::SplitString(unsplit_expected_languages, ',',
|
| + &expected_spellcheck_languages);
|
| }
|
| + ~SpellcheckLanguageTestCase() {}
|
|
|
| - private:
|
| - content::TestBrowserThreadBundle thread_bundle_;
|
| - TestingProfile profile_;
|
| + const std::string spellcheck_dictionaries;
|
| + const std::string accept_languages;
|
| + size_t num_expected_enabled_spellcheck_languages;
|
| + std::vector<std::string> expected_spellcheck_languages;
|
| };
|
|
|
| -TEST_F(SpellcheckServiceTest, GetSpellCheckLanguages1) {
|
| - std::vector<std::string> accept_languages;
|
| - accept_languages.push_back("en");
|
| - accept_languages.push_back("en-US");
|
| - std::vector<std::string> languages;
|
| -
|
| - SpellcheckService::GetSpellCheckLanguagesFromAcceptLanguages(
|
| - accept_languages, "en-US", &languages);
|
| +struct TestSupportsUserData : public base::SupportsUserData {};
|
|
|
| - EXPECT_EQ(1U, languages.size());
|
| - EXPECT_EQ("en-US", languages[0]);
|
| -}
|
| -
|
| -TEST_F(SpellcheckServiceTest, GetSpellCheckLanguages2) {
|
| - std::vector<std::string> accept_languages;
|
| - accept_languages.push_back("en-US");
|
| - accept_languages.push_back("en");
|
| - std::vector<std::string> languages;
|
| -
|
| - SpellcheckService::GetSpellCheckLanguagesFromAcceptLanguages(
|
| - accept_languages, "en-US", &languages);
|
| +class SpellcheckServiceUnitTest
|
| + : public testing::TestWithParam<SpellcheckLanguageTestCase> {
|
| + public:
|
| + SpellcheckServiceUnitTest()
|
| + : ui_thread_(content::BrowserThread::UI, &message_loop_){
|
| + user_prefs::UserPrefs::Set(&context_, &prefs_);
|
| + }
|
| + ~SpellcheckServiceUnitTest() override {}
|
|
|
| - EXPECT_EQ(1U, languages.size());
|
| - EXPECT_EQ("en-US", languages[0]);
|
| -}
|
| + void SetUp() override {
|
| + prefs()->registry()->RegisterStringPref(prefs::kSpellCheckDictionary,
|
| + "spellcheck_dictionary");
|
| + prefs()->registry()->RegisterStringPref(prefs::kAcceptLanguages,
|
| + "accept_languages");
|
| + }
|
|
|
| -TEST_F(SpellcheckServiceTest, GetSpellCheckLanguages3) {
|
| - std::vector<std::string> accept_languages;
|
| - accept_languages.push_back("en");
|
| - accept_languages.push_back("en-US");
|
| - accept_languages.push_back("en-AU");
|
| - std::vector<std::string> languages;
|
| + base::SupportsUserData* context() { return &context_; }
|
| + TestingPrefServiceSimple* prefs() { return &prefs_; }
|
|
|
| - SpellcheckService::GetSpellCheckLanguagesFromAcceptLanguages(
|
| - accept_languages, "en-US", &languages);
|
| + private:
|
| + TestSupportsUserData context_;
|
| + TestingPrefServiceSimple prefs_;
|
| + base::MessageLoop message_loop_;
|
| + content::TestBrowserThread ui_thread_;
|
|
|
| - EXPECT_EQ(2U, languages.size());
|
| + DISALLOW_COPY_AND_ASSIGN(SpellcheckServiceUnitTest);
|
| +};
|
|
|
| - std::sort(languages.begin(), languages.end());
|
| - EXPECT_EQ("en-AU", languages[0]);
|
| - EXPECT_EQ("en-US", languages[1]);
|
| +INSTANTIATE_TEST_CASE_P(
|
| + SpellcheckLanguageTestCases,
|
| + SpellcheckServiceUnitTest,
|
| + testing::Values(
|
| + SpellcheckLanguageTestCase("en-US", "en,en-US", 1UL, "en-US"),
|
| + SpellcheckLanguageTestCase("en-US", "en-US,en", 1UL, "en-US"),
|
| + SpellcheckLanguageTestCase("en-US",
|
| + "en,fr,en-US,en-AU",
|
| + 1UL,
|
| + "en-US,fr,en-AU"),
|
| + SpellcheckLanguageTestCase("fr",
|
| + "en,en-JP,fr,zz,en-US",
|
| + 1UL,
|
| + "fr,en-US")));
|
| +
|
| +TEST_P(SpellcheckServiceUnitTest, GetSpellcheckLanguages) {
|
| + prefs()->SetString(prefs::kSpellCheckDictionary,
|
| + GetParam().spellcheck_dictionaries);
|
| + prefs()->SetString(prefs::kAcceptLanguages, GetParam().accept_languages);
|
| +
|
| + std::vector<std::string> spellcheck_languages;
|
| + size_t enabled_spellcheck_languages =
|
| + SpellcheckService::GetSpellCheckLanguages(
|
| + context(),
|
| + &spellcheck_languages);
|
| +
|
| + EXPECT_EQ(GetParam().num_expected_enabled_spellcheck_languages,
|
| + enabled_spellcheck_languages);
|
| + EXPECT_EQ(GetParam().expected_spellcheck_languages, spellcheck_languages);
|
| }
|
|
|
| -TEST_F(SpellcheckServiceTest, GetSpellCheckLanguages4) {
|
| - std::vector<std::string> accept_languages;
|
| - accept_languages.push_back("en");
|
| - accept_languages.push_back("en-US");
|
| - accept_languages.push_back("fr");
|
| - std::vector<std::string> languages;
|
| +class MultilingualSpellcheckServiceUnitTest : public SpellcheckServiceUnitTest {
|
| + public:
|
| + MultilingualSpellcheckServiceUnitTest() {}
|
| + ~MultilingualSpellcheckServiceUnitTest() override {}
|
|
|
| - SpellcheckService::GetSpellCheckLanguagesFromAcceptLanguages(
|
| - accept_languages, "en-US", &languages);
|
| -
|
| - EXPECT_EQ(2U, languages.size());
|
| -
|
| - std::sort(languages.begin(), languages.end());
|
| - EXPECT_EQ("en-US", languages[0]);
|
| - EXPECT_EQ("fr", languages[1]);
|
| -}
|
| -
|
| -TEST_F(SpellcheckServiceTest, GetSpellCheckLanguages5) {
|
| - std::vector<std::string> accept_languages;
|
| - accept_languages.push_back("en");
|
| - accept_languages.push_back("en-JP"); // Will not exist.
|
| - accept_languages.push_back("fr");
|
| - accept_languages.push_back("aa"); // Will not exist.
|
| - std::vector<std::string> languages;
|
| + void SetUp() override {
|
| + prefs()->registry()->RegisterStringPref(prefs::kSpellCheckDictionaries,
|
| + "spellcheck_dictionary");
|
| + prefs()->registry()->RegisterStringPref(prefs::kAcceptLanguages,
|
| + "accept_languages");
|
| + base::CommandLine::ForCurrentProcess()->AppendSwitch(
|
| + switches::kEnableMultilingualSpellChecker);
|
| + }
|
|
|
| - SpellcheckService::GetSpellCheckLanguagesFromAcceptLanguages(
|
| - accept_languages, "fr", &languages);
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(MultilingualSpellcheckServiceUnitTest);
|
| +};
|
|
|
| - EXPECT_EQ(1U, languages.size());
|
| - EXPECT_EQ("fr", languages[0]);
|
| +INSTANTIATE_TEST_CASE_P(
|
| + MultilingualSpellcheckLanguageTestCases,
|
| + MultilingualSpellcheckServiceUnitTest,
|
| + testing::Values(
|
| + SpellcheckLanguageTestCase("en-US", "en,en-US", 1UL, "en-US"),
|
| + SpellcheckLanguageTestCase("en-US", "en-US,en", 1UL, "en-US"),
|
| + SpellcheckLanguageTestCase("en-US,fr",
|
| + "en,fr,en-US,en-AU",
|
| + 2UL,
|
| + "en-US,fr,en-AU"),
|
| + SpellcheckLanguageTestCase("fr",
|
| + "en,en-JP,fr,zz,en-US",
|
| + 1UL,
|
| + "fr,en-US")));
|
| +
|
| +TEST_P(MultilingualSpellcheckServiceUnitTest, GetSpellcheckLanguages) {
|
| + prefs()->SetString(prefs::kSpellCheckDictionaries,
|
| + GetParam().spellcheck_dictionaries);
|
| + prefs()->SetString(prefs::kAcceptLanguages, GetParam().accept_languages);
|
| +
|
| + std::vector<std::string> spellcheck_languages;
|
| + size_t enabled_spellcheck_languages =
|
| + SpellcheckService::GetSpellCheckLanguages(context(),
|
| + &spellcheck_languages);
|
| +
|
| + EXPECT_EQ(GetParam().num_expected_enabled_spellcheck_languages,
|
| + enabled_spellcheck_languages);
|
| + EXPECT_EQ(GetParam().expected_spellcheck_languages, spellcheck_languages);
|
| }
|
|
|