OLD | NEW |
---|---|
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 { |
groby-ooo-7-16
2015/06/24 22:12:23
FWIW, you're both adding new test cases and turnin
Julius
2015/07/06 22:38:53
Done.
| |
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 } | |
OLD | NEW |