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

Side by Side Diff: chrome/browser/spellchecker/spellcheck_service_unittest.cc

Issue 1156473007: Enables the user to select multiple languages for spellchecking (UI) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed bug and added a test for it. Created 5 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/spellchecker/spellcheck_service.h" 5 #include "chrome/browser/spellchecker/spellcheck_service.h"
6 6
7 #include <algorithm> 7 #include <string>
8 #include <vector>
8 9
9 #include "base/memory/scoped_ptr.h" 10 #include "base/command_line.h"
10 #include "chrome/browser/spellchecker/feedback_sender.h" 11 #include "base/message_loop/message_loop.h"
11 #include "chrome/browser/spellchecker/spellcheck_factory.h" 12 #include "base/prefs/pref_registry_simple.h"
12 #include "chrome/test/base/testing_profile.h" 13 #include "base/prefs/testing_pref_service.h"
13 #include "content/public/test/test_browser_thread_bundle.h" 14 #include "base/strings/string_split.h"
15 #include "base/supports_user_data.h"
16 #include "chrome/common/chrome_switches.h"
17 #include "chrome/common/pref_names.h"
18 #include "components/user_prefs/user_prefs.h"
19 #include "content/public/test/test_browser_thread.h"
14 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
15 21
16 static scoped_ptr<KeyedService> BuildSpellcheckService( 22
17 content::BrowserContext* profile) { 23 struct SpellcheckLanguageTestCase {
18 return make_scoped_ptr(new SpellcheckService(static_cast<Profile*>(profile))); 24 SpellcheckLanguageTestCase(const std::string& spellcheck_dictionaries,
25 const std::string& accept_languages,
26 size_t num_expected_enabled_spellcheck_languages,
27 const std::string& unsplit_expected_languages)
28 : spellcheck_dictionaries(spellcheck_dictionaries),
29 accept_languages(accept_languages),
30 num_expected_enabled_spellcheck_languages(
31 num_expected_enabled_spellcheck_languages) {
32 base::SplitString(unsplit_expected_languages, ',',
33 &expected_spellcheck_languages);
34 }
35 ~SpellcheckLanguageTestCase() {}
36
37 const std::string spellcheck_dictionaries;
38 const std::string accept_languages;
39 size_t num_expected_enabled_spellcheck_languages;
40 std::vector<std::string> expected_spellcheck_languages;
41 };
42
43 struct TestSupportsUserData : public base::SupportsUserData {};
44
45 class SpellcheckServiceUnitTest
46 : public testing::TestWithParam<SpellcheckLanguageTestCase> {
47 public:
48 SpellcheckServiceUnitTest()
49 : ui_thread_(content::BrowserThread::UI, &message_loop_){
50 user_prefs::UserPrefs::Set(&context_, &prefs_);
51 }
52 ~SpellcheckServiceUnitTest() override {}
53
54 void SetUp() override {
55 prefs()->registry()->RegisterStringPref(prefs::kSpellCheckDictionary,
56 "spellcheck_dictionary");
57 prefs()->registry()->RegisterStringPref(prefs::kAcceptLanguages,
58 "accept_languages");
59 }
60
61 base::SupportsUserData* context() { return &context_; }
62 TestingPrefServiceSimple* prefs() { return &prefs_; }
63
64 private:
65 TestSupportsUserData context_;
66 TestingPrefServiceSimple prefs_;
67 base::MessageLoop message_loop_;
68 content::TestBrowserThread ui_thread_;
69
70 DISALLOW_COPY_AND_ASSIGN(SpellcheckServiceUnitTest);
71 };
72
73 INSTANTIATE_TEST_CASE_P(
74 SpellcheckLanguageTestCases,
75 SpellcheckServiceUnitTest,
76 testing::Values(
77 SpellcheckLanguageTestCase("en-US", "en,en-US", 1UL, "en-US"),
78 SpellcheckLanguageTestCase("en-US", "en-US,en", 1UL, "en-US"),
79 SpellcheckLanguageTestCase("en-US",
80 "en,fr,en-US,en-AU",
81 1UL,
82 "en-US,fr,en-AU"),
83 SpellcheckLanguageTestCase("fr",
84 "en,en-JP,fr,zz,en-US",
85 1UL,
86 "fr,en-US")));
87
88 TEST_P(SpellcheckServiceUnitTest, GetSpellcheckLanguages) {
89 prefs()->SetString(prefs::kSpellCheckDictionary,
90 GetParam().spellcheck_dictionaries);
91 prefs()->SetString(prefs::kAcceptLanguages, GetParam().accept_languages);
92
93 std::vector<std::string> spellcheck_languages;
94 size_t enabled_spellcheck_languages =
95 SpellcheckService::GetSpellCheckLanguages(
96 context(),
97 &spellcheck_languages);
98
99 EXPECT_EQ(GetParam().num_expected_enabled_spellcheck_languages,
100 enabled_spellcheck_languages);
101 EXPECT_EQ(GetParam().expected_spellcheck_languages, spellcheck_languages);
19 } 102 }
20 103
21 class SpellcheckServiceTest : public testing::Test { 104 class MultilingualSpellcheckServiceUnitTest : public SpellcheckServiceUnitTest {
22 protected: 105 public:
106 MultilingualSpellcheckServiceUnitTest() {}
107 ~MultilingualSpellcheckServiceUnitTest() override {}
108
23 void SetUp() override { 109 void SetUp() override {
24 // Use SetTestingFactoryAndUse to force creation and initialization. 110 prefs()->registry()->RegisterStringPref(prefs::kSpellCheckDictionaries,
25 SpellcheckServiceFactory::GetInstance()->SetTestingFactoryAndUse( 111 "spellcheck_dictionary");
26 &profile_, &BuildSpellcheckService); 112 prefs()->registry()->RegisterStringPref(prefs::kAcceptLanguages,
113 "accept_languages");
114 base::CommandLine::ForCurrentProcess()->AppendSwitch(
115 switches::kEnableMultilingualSpellChecker);
27 } 116 }
28 117
29 private: 118 private:
30 content::TestBrowserThreadBundle thread_bundle_; 119 DISALLOW_COPY_AND_ASSIGN(MultilingualSpellcheckServiceUnitTest);
31 TestingProfile profile_;
32 }; 120 };
33 121
34 TEST_F(SpellcheckServiceTest, GetSpellCheckLanguages1) { 122 INSTANTIATE_TEST_CASE_P(
35 std::vector<std::string> accept_languages; 123 MultilingualSpellcheckLanguageTestCases,
36 accept_languages.push_back("en"); 124 MultilingualSpellcheckServiceUnitTest,
37 accept_languages.push_back("en-US"); 125 testing::Values(
38 std::vector<std::string> languages; 126 SpellcheckLanguageTestCase("en-US", "en,en-US", 1UL, "en-US"),
127 SpellcheckLanguageTestCase("en-US", "en-US,en", 1UL, "en-US"),
128 SpellcheckLanguageTestCase("en-US,fr",
129 "en,fr,en-US,en-AU",
130 2UL,
131 "en-US,fr,en-AU"),
132 SpellcheckLanguageTestCase("fr",
133 "en,en-JP,fr,zz,en-US",
134 1UL,
135 "fr,en-US")));
39 136
40 SpellcheckService::GetSpellCheckLanguagesFromAcceptLanguages( 137 TEST_P(MultilingualSpellcheckServiceUnitTest, GetSpellcheckLanguages) {
41 accept_languages, "en-US", &languages); 138 prefs()->SetString(prefs::kSpellCheckDictionaries,
139 GetParam().spellcheck_dictionaries);
140 prefs()->SetString(prefs::kAcceptLanguages, GetParam().accept_languages);
42 141
43 EXPECT_EQ(1U, languages.size()); 142 std::vector<std::string> spellcheck_languages;
44 EXPECT_EQ("en-US", languages[0]); 143 size_t enabled_spellcheck_languages =
144 SpellcheckService::GetSpellCheckLanguages(context(),
145 &spellcheck_languages);
146
147 EXPECT_EQ(GetParam().num_expected_enabled_spellcheck_languages,
148 enabled_spellcheck_languages);
149 EXPECT_EQ(GetParam().expected_spellcheck_languages, spellcheck_languages);
45 } 150 }
46
47 TEST_F(SpellcheckServiceTest, GetSpellCheckLanguages2) {
48 std::vector<std::string> accept_languages;
49 accept_languages.push_back("en-US");
50 accept_languages.push_back("en");
51 std::vector<std::string> languages;
52
53 SpellcheckService::GetSpellCheckLanguagesFromAcceptLanguages(
54 accept_languages, "en-US", &languages);
55
56 EXPECT_EQ(1U, languages.size());
57 EXPECT_EQ("en-US", languages[0]);
58 }
59
60 TEST_F(SpellcheckServiceTest, GetSpellCheckLanguages3) {
61 std::vector<std::string> accept_languages;
62 accept_languages.push_back("en");
63 accept_languages.push_back("en-US");
64 accept_languages.push_back("en-AU");
65 std::vector<std::string> languages;
66
67 SpellcheckService::GetSpellCheckLanguagesFromAcceptLanguages(
68 accept_languages, "en-US", &languages);
69
70 EXPECT_EQ(2U, languages.size());
71
72 std::sort(languages.begin(), languages.end());
73 EXPECT_EQ("en-AU", languages[0]);
74 EXPECT_EQ("en-US", languages[1]);
75 }
76
77 TEST_F(SpellcheckServiceTest, GetSpellCheckLanguages4) {
78 std::vector<std::string> accept_languages;
79 accept_languages.push_back("en");
80 accept_languages.push_back("en-US");
81 accept_languages.push_back("fr");
82 std::vector<std::string> languages;
83
84 SpellcheckService::GetSpellCheckLanguagesFromAcceptLanguages(
85 accept_languages, "en-US", &languages);
86
87 EXPECT_EQ(2U, languages.size());
88
89 std::sort(languages.begin(), languages.end());
90 EXPECT_EQ("en-US", languages[0]);
91 EXPECT_EQ("fr", languages[1]);
92 }
93
94 TEST_F(SpellcheckServiceTest, GetSpellCheckLanguages5) {
95 std::vector<std::string> accept_languages;
96 accept_languages.push_back("en");
97 accept_languages.push_back("en-JP"); // Will not exist.
98 accept_languages.push_back("fr");
99 accept_languages.push_back("aa"); // Will not exist.
100 std::vector<std::string> languages;
101
102 SpellcheckService::GetSpellCheckLanguagesFromAcceptLanguages(
103 accept_languages, "fr", &languages);
104
105 EXPECT_EQ(1U, languages.size());
106 EXPECT_EQ("fr", languages[0]);
107 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698