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

Side by Side Diff: components/translate/core/browser/translate_prefs_unittest.cc

Issue 1923143003: Implement the 2016Q2 Translate UI designe spec out in (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: minor changes in comments Created 4 years, 7 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/translate/core/browser/translate_prefs.h" 5 #include "components/translate/core/browser/translate_prefs.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <utility>
9 #include <vector> 10 #include <vector>
10 11
11 #include "build/build_config.h" 12 #include "build/build_config.h"
12 #include "components/pref_registry/testing_pref_service_syncable.h" 13 #include "components/pref_registry/testing_pref_service_syncable.h"
13 #include "components/prefs/scoped_user_pref_update.h" 14 #include "components/prefs/scoped_user_pref_update.h"
14 #include "components/translate/core/browser/translate_download_manager.h" 15 #include "components/translate/core/browser/translate_download_manager.h"
16 #include "components/translate/core/browser/translate_prefs.h"
15 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
16 18
17 namespace { 19 namespace {
18 20
19 const char kTestLanguage[] = "en"; 21 const char kTestLanguage[] = "en";
20 22
21 } // namespace 23 } // namespace
22 24
23 namespace translate { 25 namespace translate {
24 26
(...skipping 15 matching lines...) Expand all
40 // Filippino: synonym to 'tl' 42 // Filippino: synonym to 'tl'
41 accept_languages.push_back("fil"); 43 accept_languages.push_back("fil");
42 // General Chinese is not used as Translate language, but not filtered 44 // General Chinese is not used as Translate language, but not filtered
43 // when merging. 45 // when merging.
44 accept_languages.push_back("zh"); 46 accept_languages.push_back("zh");
45 // Chinese with a sub code is acceptable for the blocked-language list. 47 // Chinese with a sub code is acceptable for the blocked-language list.
46 accept_languages.push_back("zh-TW"); 48 accept_languages.push_back("zh-TW");
47 49
48 std::vector<std::string> blocked_languages; 50 std::vector<std::string> blocked_languages;
49 51
50 TranslatePrefs::CreateBlockedLanguages(&blocked_languages, 52 TranslatePrefs::CreateBlockedLanguages(
51 blacklisted_languages, 53 &blocked_languages, blacklisted_languages, accept_languages);
52 accept_languages);
53 54
54 // The order of the elements cannot be determined. 55 // The order of the elements cannot be determined.
55 std::vector<std::string> expected; 56 std::vector<std::string> expected;
56 expected.push_back("en"); 57 expected.push_back("en");
57 expected.push_back("fr"); 58 expected.push_back("fr");
58 expected.push_back("iw"); 59 expected.push_back("iw");
59 expected.push_back("ht"); 60 expected.push_back("ht");
60 expected.push_back("it"); 61 expected.push_back("it");
61 expected.push_back("ja"); 62 expected.push_back("ja");
62 expected.push_back("tl"); 63 expected.push_back("tl");
63 expected.push_back("zh"); 64 expected.push_back("zh");
64 expected.push_back("zh-TW"); 65 expected.push_back("zh-TW");
65 66
66 EXPECT_EQ(expected.size(), blocked_languages.size()); 67 EXPECT_EQ(expected.size(), blocked_languages.size());
67 for (std::vector<std::string>::const_iterator it = expected.begin(); 68 for (std::vector<std::string>::const_iterator it = expected.begin();
68 it != expected.end(); ++it) { 69 it != expected.end(); ++it) {
69 EXPECT_NE(blocked_languages.end(), 70 EXPECT_NE(blocked_languages.end(), std::find(blocked_languages.begin(),
70 std::find(blocked_languages.begin(), 71 blocked_languages.end(), *it));
71 blocked_languages.end(),
72 *it));
73 } 72 }
74 } 73 }
75 74
76 TEST(TranslatePrefsTest, CreateBlockedLanguagesNonEnglishUI) { 75 TEST(TranslatePrefsTest, CreateBlockedLanguagesNonEnglishUI) {
77 std::vector<std::string> blacklisted_languages; 76 std::vector<std::string> blacklisted_languages;
78 blacklisted_languages.push_back("fr"); 77 blacklisted_languages.push_back("fr");
79 78
80 std::vector<std::string> accept_languages; 79 std::vector<std::string> accept_languages;
81 accept_languages.push_back("en"); 80 accept_languages.push_back("en");
82 accept_languages.push_back("ja"); 81 accept_languages.push_back("ja");
83 accept_languages.push_back("zh"); 82 accept_languages.push_back("zh");
84 83
85 // Run in an English locale. 84 // Run in an English locale.
86 { 85 {
87 TranslateDownloadManager::GetInstance()->set_application_locale("en"); 86 TranslateDownloadManager::GetInstance()->set_application_locale("en");
88 std::vector<std::string> blocked_languages; 87 std::vector<std::string> blocked_languages;
89 TranslatePrefs::CreateBlockedLanguages(&blocked_languages, 88 TranslatePrefs::CreateBlockedLanguages(
90 blacklisted_languages, 89 &blocked_languages, blacklisted_languages, accept_languages);
91 accept_languages);
92 std::vector<std::string> expected; 90 std::vector<std::string> expected;
93 expected.push_back("en"); 91 expected.push_back("en");
94 expected.push_back("fr"); 92 expected.push_back("fr");
95 expected.push_back("ja"); 93 expected.push_back("ja");
96 expected.push_back("zh"); 94 expected.push_back("zh");
97 95
98 EXPECT_EQ(expected.size(), blocked_languages.size()); 96 EXPECT_EQ(expected.size(), blocked_languages.size());
99 for (std::vector<std::string>::const_iterator it = expected.begin(); 97 for (std::vector<std::string>::const_iterator it = expected.begin();
100 it != expected.end(); ++it) { 98 it != expected.end(); ++it) {
101 EXPECT_NE(blocked_languages.end(), 99 EXPECT_NE(
102 std::find(blocked_languages.begin(), 100 blocked_languages.end(),
103 blocked_languages.end(), 101 std::find(blocked_languages.begin(), blocked_languages.end(), *it));
104 *it));
105 } 102 }
106 } 103 }
107 104
108 // Run in a Japanese locale. 105 // Run in a Japanese locale.
109 // English should not be included in the result even though Accept Languages 106 // English should not be included in the result even though Accept Languages
110 // has English because the UI is not English. 107 // has English because the UI is not English.
111 { 108 {
112 TranslateDownloadManager::GetInstance()->set_application_locale("ja"); 109 TranslateDownloadManager::GetInstance()->set_application_locale("ja");
113 std::vector<std::string> blocked_languages; 110 std::vector<std::string> blocked_languages;
114 TranslatePrefs::CreateBlockedLanguages(&blocked_languages, 111 TranslatePrefs::CreateBlockedLanguages(
115 blacklisted_languages, 112 &blocked_languages, blacklisted_languages, accept_languages);
116 accept_languages);
117 std::vector<std::string> expected; 113 std::vector<std::string> expected;
118 expected.push_back("fr"); 114 expected.push_back("fr");
119 expected.push_back("ja"); 115 expected.push_back("ja");
120 expected.push_back("zh"); 116 expected.push_back("zh");
121 117
122 EXPECT_EQ(expected.size(), blocked_languages.size()); 118 EXPECT_EQ(expected.size(), blocked_languages.size());
123 for (std::vector<std::string>::const_iterator it = expected.begin(); 119 for (std::vector<std::string>::const_iterator it = expected.begin();
124 it != expected.end(); ++it) { 120 it != expected.end(); ++it) {
125 EXPECT_NE(blocked_languages.end(), 121 EXPECT_NE(
126 std::find(blocked_languages.begin(), 122 blocked_languages.end(),
127 blocked_languages.end(), 123 std::find(blocked_languages.begin(), blocked_languages.end(), *it));
128 *it));
129 } 124 }
130 } 125 }
131 } 126 }
132 127
133 class TranslatePrefTest : public testing::Test { 128 class TranslatePrefTest : public testing::Test {
134 protected: 129 protected:
135 TranslatePrefTest() : prefs_(new user_prefs::TestingPrefServiceSyncable()) { 130 TranslatePrefTest() : prefs_(new user_prefs::TestingPrefServiceSyncable()) {
136 #if defined(OS_CHROMEOS) 131 #if defined(OS_CHROMEOS)
137 const char* preferred_languages_prefs = 132 const char* preferred_languages_prefs =
138 "settings.language.preferred_languages"; 133 "settings.language.preferred_languages";
(...skipping 10 matching lines...) Expand all
149 void SetLastDeniedTime(const std::string& language, base::Time time) { 144 void SetLastDeniedTime(const std::string& language, base::Time time) {
150 DenialTimeUpdate update(prefs_.get(), language, 2); 145 DenialTimeUpdate update(prefs_.get(), language, 2);
151 update.AddDenialTime(time); 146 update.AddDenialTime(time);
152 } 147 }
153 148
154 base::Time GetLastDeniedTime(const std::string& language) { 149 base::Time GetLastDeniedTime(const std::string& language) {
155 DenialTimeUpdate update(prefs_.get(), language, 2); 150 DenialTimeUpdate update(prefs_.get(), language, 2);
156 return update.GetOldestDenialTime(); 151 return update.GetOldestDenialTime();
157 } 152 }
158 153
154 void SetUp() override {
155 base::FeatureList::ClearInstanceForTesting();
156 base::FeatureList::SetInstance(base::WrapUnique(new base::FeatureList()));
157 }
158
159 void TurnOnTranslate2016Q2UIFlag() {
160 base::FeatureList::ClearInstanceForTesting();
161 std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
162 feature_list->InitializeFromCommandLine(translate::kTranslateUI2016Q2.name,
163 std::string());
164 base::FeatureList::SetInstance(std::move(feature_list));
165 }
166
159 std::unique_ptr<user_prefs::TestingPrefServiceSyncable> prefs_; 167 std::unique_ptr<user_prefs::TestingPrefServiceSyncable> prefs_;
160 std::unique_ptr<translate::TranslatePrefs> translate_prefs_; 168 std::unique_ptr<translate::TranslatePrefs> translate_prefs_;
161 169
162 // Shared time constants. 170 // Shared time constants.
163 base::Time now_; 171 base::Time now_;
164 base::Time two_days_ago_; 172 base::Time two_days_ago_;
165 }; 173 };
166 174
175 TEST_F(TranslatePrefTest, IsTooOftenDeniedIn2016Q2UI) {
176 TurnOnTranslate2016Q2UIFlag();
177
178 translate_prefs_->ResetDenialState();
179 EXPECT_FALSE(translate_prefs_->IsTooOftenDenied(kTestLanguage));
180
181 for (int i = 0; i < 3; i++) {
182 translate_prefs_->IncrementTranslationDeniedCount(kTestLanguage);
183 EXPECT_FALSE(translate_prefs_->IsTooOftenDenied(kTestLanguage));
184 }
185
186 translate_prefs_->IncrementTranslationDeniedCount(kTestLanguage);
187 EXPECT_TRUE(translate_prefs_->IsTooOftenDenied(kTestLanguage));
188 }
189
190 TEST_F(TranslatePrefTest, IsTooOftenIgnoredIn2016Q2UI) {
191 TurnOnTranslate2016Q2UIFlag();
192
193 translate_prefs_->ResetDenialState();
194 EXPECT_FALSE(translate_prefs_->IsTooOftenDenied(kTestLanguage));
195
196 for (int i = 0; i < 10; i++) {
197 translate_prefs_->IncrementTranslationIgnoredCount(kTestLanguage);
198 EXPECT_FALSE(translate_prefs_->IsTooOftenDenied(kTestLanguage));
199 }
200
201 translate_prefs_->IncrementTranslationIgnoredCount(kTestLanguage);
202 EXPECT_TRUE(translate_prefs_->IsTooOftenDenied(kTestLanguage));
203 }
204
167 TEST_F(TranslatePrefTest, UpdateLastDeniedTime) { 205 TEST_F(TranslatePrefTest, UpdateLastDeniedTime) {
168 // Test that denials with more than 24 hours difference between them do not 206 // Test that denials with more than 24 hours difference between them do not
169 // block the language. 207 // block the language.
170 translate_prefs_->ResetDenialState(); 208 translate_prefs_->ResetDenialState();
171 SetLastDeniedTime(kTestLanguage, two_days_ago_); 209 SetLastDeniedTime(kTestLanguage, two_days_ago_);
172 ASSERT_FALSE(translate_prefs_->IsTooOftenDenied(kTestLanguage)); 210 ASSERT_FALSE(translate_prefs_->IsTooOftenDenied(kTestLanguage));
173 translate_prefs_->UpdateLastDeniedTime(kTestLanguage); 211 translate_prefs_->UpdateLastDeniedTime(kTestLanguage);
174 base::Time last_denied = GetLastDeniedTime(kTestLanguage); 212 base::Time last_denied = GetLastDeniedTime(kTestLanguage);
175 EXPECT_FALSE(last_denied.is_max()); 213 EXPECT_FALSE(last_denied.is_max());
176 EXPECT_GE(last_denied, now_); 214 EXPECT_GE(last_denied, now_);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 TEST_F(TranslatePrefTest, DenialTimeUpdate_DefaultTimeIsNull) { 246 TEST_F(TranslatePrefTest, DenialTimeUpdate_DefaultTimeIsNull) {
209 DenialTimeUpdate update(prefs_.get(), kTestLanguage, 2); 247 DenialTimeUpdate update(prefs_.get(), kTestLanguage, 2);
210 EXPECT_TRUE(update.GetOldestDenialTime().is_null()); 248 EXPECT_TRUE(update.GetOldestDenialTime().is_null());
211 } 249 }
212 250
213 // Test that non-existing entries automatically create a ListValue. 251 // Test that non-existing entries automatically create a ListValue.
214 TEST_F(TranslatePrefTest, DenialTimeUpdate_ForceListExistence) { 252 TEST_F(TranslatePrefTest, DenialTimeUpdate_ForceListExistence) {
215 DictionaryPrefUpdate dict_update( 253 DictionaryPrefUpdate dict_update(
216 prefs_.get(), TranslatePrefs::kPrefTranslateLastDeniedTimeForLanguage); 254 prefs_.get(), TranslatePrefs::kPrefTranslateLastDeniedTimeForLanguage);
217 base::DictionaryValue* denial_dict = dict_update.Get(); 255 base::DictionaryValue* denial_dict = dict_update.Get();
218 ASSERT_TRUE(denial_dict); 256 EXPECT_TRUE(denial_dict);
219 257
220 base::ListValue* list_value = nullptr; 258 base::ListValue* list_value = nullptr;
221 bool has_list = denial_dict->GetList(kTestLanguage, &list_value); 259 bool has_list = denial_dict->GetList(kTestLanguage, &list_value);
222 ASSERT_FALSE(has_list); 260 EXPECT_FALSE(has_list);
223 261
224 // Calling GetDenialTimes will force creation of a properly populated list. 262 // Calling GetDenialTimes will force creation of a properly populated list.
225 DenialTimeUpdate update(prefs_.get(), kTestLanguage, 2); 263 DenialTimeUpdate update(prefs_.get(), kTestLanguage, 2);
226 base::ListValue* time_list = update.GetDenialTimes(); 264 base::ListValue* time_list = update.GetDenialTimes();
227 ASSERT_TRUE(time_list); 265 EXPECT_TRUE(time_list);
228 EXPECT_EQ(0U, time_list->GetSize()); 266 EXPECT_EQ(0U, time_list->GetSize());
229 } 267 }
230 268
231 // Test that an existing update time record (which is a double in a dict) 269 // Test that an existing update time record (which is a double in a dict)
232 // is automatically migrated to a list of update times instead. 270 // is automatically migrated to a list of update times instead.
233 TEST_F(TranslatePrefTest, DenialTimeUpdate_Migrate) { 271 TEST_F(TranslatePrefTest, DenialTimeUpdate_Migrate) {
234 translate_prefs_->ResetDenialState(); 272 translate_prefs_->ResetDenialState();
235 DictionaryPrefUpdate dict_update( 273 DictionaryPrefUpdate dict_update(
236 prefs_.get(), TranslatePrefs::kPrefTranslateLastDeniedTimeForLanguage); 274 prefs_.get(), TranslatePrefs::kPrefTranslateLastDeniedTimeForLanguage);
237 base::DictionaryValue* denial_dict = dict_update.Get(); 275 base::DictionaryValue* denial_dict = dict_update.Get();
238 ASSERT_TRUE(denial_dict); 276 EXPECT_TRUE(denial_dict);
239 denial_dict->SetDouble(kTestLanguage, two_days_ago_.ToJsTime()); 277 denial_dict->SetDouble(kTestLanguage, two_days_ago_.ToJsTime());
240 278
241 base::ListValue* list_value = nullptr; 279 base::ListValue* list_value = nullptr;
242 bool has_list = denial_dict->GetList(kTestLanguage, &list_value); 280 bool has_list = denial_dict->GetList(kTestLanguage, &list_value);
243 ASSERT_FALSE(has_list); 281 EXPECT_FALSE(has_list);
244 282
245 // Calling GetDenialTimes will force creation of a properly populated list. 283 // Calling GetDenialTimes will force creation of a properly populated list.
246 DenialTimeUpdate update(prefs_.get(), kTestLanguage, 2); 284 DenialTimeUpdate update(prefs_.get(), kTestLanguage, 2);
247 base::ListValue* time_list = update.GetDenialTimes(); 285 base::ListValue* time_list = update.GetDenialTimes();
248 ASSERT_TRUE(time_list); 286 EXPECT_TRUE(time_list);
249 287
250 has_list = denial_dict->GetList(kTestLanguage, &list_value); 288 has_list = denial_dict->GetList(kTestLanguage, &list_value);
251 ASSERT_TRUE(has_list); 289 EXPECT_TRUE(has_list);
252 EXPECT_EQ(time_list, list_value); 290 EXPECT_EQ(time_list, list_value);
253 EXPECT_EQ(1U, time_list->GetSize()); 291 EXPECT_EQ(1U, time_list->GetSize());
254 EXPECT_EQ(two_days_ago_, update.GetOldestDenialTime()); 292 EXPECT_EQ(two_days_ago_, update.GetOldestDenialTime());
255 } 293 }
256 294
257 TEST_F(TranslatePrefTest, DenialTimeUpdate_SlidingWindow) { 295 TEST_F(TranslatePrefTest, DenialTimeUpdate_SlidingWindow) {
258 DenialTimeUpdate update(prefs_.get(), kTestLanguage, 4); 296 DenialTimeUpdate update(prefs_.get(), kTestLanguage, 4);
259 297
260 update.AddDenialTime(now_ - base::TimeDelta::FromMinutes(5)); 298 update.AddDenialTime(now_ - base::TimeDelta::FromMinutes(5));
261 EXPECT_EQ(update.GetOldestDenialTime(), 299 EXPECT_EQ(update.GetOldestDenialTime(),
(...skipping 14 matching lines...) Expand all
276 update.AddDenialTime(now_); 314 update.AddDenialTime(now_);
277 EXPECT_EQ(update.GetOldestDenialTime(), 315 EXPECT_EQ(update.GetOldestDenialTime(),
278 now_ - base::TimeDelta::FromMinutes(3)); 316 now_ - base::TimeDelta::FromMinutes(3));
279 317
280 update.AddDenialTime(now_); 318 update.AddDenialTime(now_);
281 EXPECT_EQ(update.GetOldestDenialTime(), 319 EXPECT_EQ(update.GetOldestDenialTime(),
282 now_ - base::TimeDelta::FromMinutes(2)); 320 now_ - base::TimeDelta::FromMinutes(2));
283 } 321 }
284 322
285 } // namespace translate 323 } // namespace translate
OLDNEW
« no previous file with comments | « components/translate/core/browser/translate_prefs.cc ('k') | components/translate/core/browser/translate_ui_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698