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

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

Issue 2200493002: using ulp to improve TranslateManager GetTargetLanguage() and InitiateTranslation() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix global state problem in unittests Created 4 years, 4 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 <utility>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/json/json_reader.h"
12 #include "base/test/scoped_feature_list.h" 13 #include "base/test/scoped_feature_list.h"
14 #include "base/values.h"
13 #include "build/build_config.h" 15 #include "build/build_config.h"
14 #include "components/pref_registry/testing_pref_service_syncable.h" 16 #include "components/pref_registry/testing_pref_service_syncable.h"
15 #include "components/prefs/scoped_user_pref_update.h" 17 #include "components/prefs/scoped_user_pref_update.h"
16 #include "components/translate/core/browser/translate_download_manager.h" 18 #include "components/translate/core/browser/translate_download_manager.h"
17 #include "components/translate/core/browser/translate_prefs.h" 19 #include "components/translate/core/browser/translate_prefs.h"
18 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
19 21
20 namespace { 22 namespace {
21 23
22 const char kTestLanguage[] = "en"; 24 const char kTestLanguage[] = "en";
(...skipping 21 matching lines...) Expand all
44 void SetLastDeniedTime(const std::string& language, base::Time time) { 46 void SetLastDeniedTime(const std::string& language, base::Time time) {
45 DenialTimeUpdate update(prefs_.get(), language, 2); 47 DenialTimeUpdate update(prefs_.get(), language, 2);
46 update.AddDenialTime(time); 48 update.AddDenialTime(time);
47 } 49 }
48 50
49 base::Time GetLastDeniedTime(const std::string& language) { 51 base::Time GetLastDeniedTime(const std::string& language) {
50 DenialTimeUpdate update(prefs_.get(), language, 2); 52 DenialTimeUpdate update(prefs_.get(), language, 2);
51 return update.GetOldestDenialTime(); 53 return update.GetOldestDenialTime();
52 } 54 }
53 55
54 void TurnOnTranslate2016Q2UIFlag() {
55 scoped_feature_list_.InitAndEnableFeature(translate::kTranslateUI2016Q2);
56 }
57
58 base::test::ScopedFeatureList scoped_feature_list_;
59 std::unique_ptr<user_prefs::TestingPrefServiceSyncable> prefs_; 56 std::unique_ptr<user_prefs::TestingPrefServiceSyncable> prefs_;
60 std::unique_ptr<translate::TranslatePrefs> translate_prefs_; 57 std::unique_ptr<translate::TranslatePrefs> translate_prefs_;
61 58
62 // Shared time constants. 59 // Shared time constants.
63 base::Time now_; 60 base::Time now_;
64 base::Time two_days_ago_; 61 base::Time two_days_ago_;
65 }; 62 };
66 63
67 TEST_F(TranslatePrefTest, IsTooOftenDeniedIn2016Q2UI) { 64 TEST_F(TranslatePrefTest, IsTooOftenDeniedIn2016Q2UI) {
68 TurnOnTranslate2016Q2UIFlag(); 65 base::test::ScopedFeatureList scoped_feature_list;
66 scoped_feature_list.InitAndEnableFeature(translate::kTranslateUI2016Q2);
69 67
70 translate_prefs_->ResetDenialState(); 68 translate_prefs_->ResetDenialState();
71 EXPECT_FALSE(translate_prefs_->IsTooOftenDenied(kTestLanguage)); 69 EXPECT_FALSE(translate_prefs_->IsTooOftenDenied(kTestLanguage));
72 70
73 for (int i = 0; i < 3; i++) { 71 for (int i = 0; i < 3; i++) {
74 translate_prefs_->IncrementTranslationDeniedCount(kTestLanguage); 72 translate_prefs_->IncrementTranslationDeniedCount(kTestLanguage);
75 EXPECT_FALSE(translate_prefs_->IsTooOftenDenied(kTestLanguage)); 73 EXPECT_FALSE(translate_prefs_->IsTooOftenDenied(kTestLanguage));
76 } 74 }
77 75
78 translate_prefs_->IncrementTranslationDeniedCount(kTestLanguage); 76 translate_prefs_->IncrementTranslationDeniedCount(kTestLanguage);
79 EXPECT_TRUE(translate_prefs_->IsTooOftenDenied(kTestLanguage)); 77 EXPECT_TRUE(translate_prefs_->IsTooOftenDenied(kTestLanguage));
80 } 78 }
81 79
82 TEST_F(TranslatePrefTest, IsTooOftenIgnoredIn2016Q2UI) { 80 TEST_F(TranslatePrefTest, IsTooOftenIgnoredIn2016Q2UI) {
83 TurnOnTranslate2016Q2UIFlag(); 81 base::test::ScopedFeatureList scoped_feature_list;
82 scoped_feature_list.InitAndEnableFeature(translate::kTranslateUI2016Q2);
84 83
85 translate_prefs_->ResetDenialState(); 84 translate_prefs_->ResetDenialState();
86 EXPECT_FALSE(translate_prefs_->IsTooOftenDenied(kTestLanguage)); 85 EXPECT_FALSE(translate_prefs_->IsTooOftenDenied(kTestLanguage));
87 86
88 for (int i = 0; i < 10; i++) { 87 for (int i = 0; i < 10; i++) {
89 translate_prefs_->IncrementTranslationIgnoredCount(kTestLanguage); 88 translate_prefs_->IncrementTranslationIgnoredCount(kTestLanguage);
90 EXPECT_FALSE(translate_prefs_->IsTooOftenDenied(kTestLanguage)); 89 EXPECT_FALSE(translate_prefs_->IsTooOftenDenied(kTestLanguage));
91 } 90 }
92 91
93 translate_prefs_->IncrementTranslationIgnoredCount(kTestLanguage); 92 translate_prefs_->IncrementTranslationIgnoredCount(kTestLanguage);
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 204
206 update.AddDenialTime(now_); 205 update.AddDenialTime(now_);
207 EXPECT_EQ(update.GetOldestDenialTime(), 206 EXPECT_EQ(update.GetOldestDenialTime(),
208 now_ - base::TimeDelta::FromMinutes(3)); 207 now_ - base::TimeDelta::FromMinutes(3));
209 208
210 update.AddDenialTime(now_); 209 update.AddDenialTime(now_);
211 EXPECT_EQ(update.GetOldestDenialTime(), 210 EXPECT_EQ(update.GetOldestDenialTime(),
212 now_ - base::TimeDelta::FromMinutes(2)); 211 now_ - base::TimeDelta::FromMinutes(2));
213 } 212 }
214 213
214 TEST_F(TranslatePrefTest, ULPPrefs) {
215 // Mock the pref.
216 // Case 1: well formed ULP.
217 const char json1[] =
218 "{\n"
219 " \"reading\": {\n"
220 " \"confidence\": 0.8,\n"
221 " \"preference\": [\n"
222 " {\n"
223 " \"language\": \"en-AU\",\n"
224 " \"probability\": 0.4\n"
225 " }, {\n"
226 " \"language\": \"fr\",\n"
227 " \"probability\": 0.6\n"
228 " }\n"
229 " ]\n"
230 " }\n"
231 "}";
232 int error_code = 0;
233 std::string error_msg;
234 int error_line = 0;
235 int error_column = 0;
236 std::unique_ptr<base::Value> profile(base::JSONReader::ReadAndReturnError(
237 json1, 0, &error_code, &error_msg, &error_line, &error_column));
238 ASSERT_EQ(0, error_code) << error_msg << " at " << error_line << ":"
239 << error_column << std::endl
240 << json1;
241
242 prefs_->SetUserPref(TranslatePrefs::kPrefLanguageProfile, profile.release());
243
244 TranslatePrefs::LanguageAndProbabilityList list;
245 EXPECT_EQ(0.8, translate_prefs_->GetReadingFromUserLanguageProfile(&list));
246 EXPECT_EQ(2UL, list.size());
Lei Zhang 2016/11/17 07:03:28 This should be an ASSERT_EQ(), otherwise if this f
247 // the order in the ULP is wrong, and our code will sort it and make the
248 // larger
249 // one first.
250 EXPECT_EQ("fr", list[0].first);
251 EXPECT_EQ(0.6, list[0].second);
252 EXPECT_EQ("en", list[1].first); // the "en-AU" should be normalize to "en"
253 EXPECT_EQ(0.4, list[1].second);
254
255 // Case 2: ill-formed ULP.
256 // Test if the ULP lacking some fields the code will gracefully ignore those
257 // items without crash.
258 const char json2[] =
259 "{\n"
260 " \"reading\": {\n"
261 " \"confidence\": 0.3,\n"
262 " \"preference\": [\n"
263 " {\n" // The first one do not have probability. Won't be counted.
264 " \"language\": \"th\"\n"
265 " }, {\n"
266 " \"language\": \"zh-TW\",\n"
267 " \"probability\": 0.4\n"
268 " }, {\n" // The third one has no language nor probability. Won't be
269 // counted.
270 " }, {\n" // The forth one has 'pt-BR' which is not supported by
271 // Translate.
272 // Should be normalize to 'pt'
273 " \"language\": \"pt-BR\",\n"
274 " \"probability\": 0.1\n"
275 " }, {\n" // The fifth one has no language. Won't be counted.
276 " \"probability\": 0.1\n"
277 " }\n"
278 " ]\n"
279 " }\n"
280 "}";
281
282 profile.reset(base::JSONReader::ReadAndReturnError(json2, 0, &error_code,
283 &error_msg, &error_line,
284 &error_column)
285 .release());
286 ASSERT_EQ(0, error_code) << error_msg << " at " << error_line << ":"
287 << error_column << std::endl
288 << json2;
289
290 prefs_->SetUserPref(TranslatePrefs::kPrefLanguageProfile, profile.release());
291
292 list.clear();
293 EXPECT_EQ(0.3, translate_prefs_->GetReadingFromUserLanguageProfile(&list));
294 EXPECT_EQ(2UL, list.size());
295 EXPECT_EQ("zh-TW", list[0].first);
296 EXPECT_EQ(0.4, list[0].second);
297 EXPECT_EQ("pt", list[1].first); // the "pt-BR" should be normalize to "pt"
298 EXPECT_EQ(0.1, list[1].second);
299
300 // Case 3: Language Code normalization and reordering.
301 const char json3[] =
302 "{\n"
303 " \"reading\": {\n"
304 " \"confidence\": 0.8,\n"
305 " \"preference\": [\n"
306 " {\n"
307 " \"language\": \"fr\",\n"
308 " \"probability\": 0.4\n"
309 " }, {\n"
310 " \"language\": \"en-US\",\n"
311 " \"probability\": 0.31\n"
312 " }, {\n"
313 " \"language\": \"en-GB\",\n"
314 " \"probability\": 0.29\n"
315 " }\n"
316 " ]\n"
317 " }\n"
318 "}";
319 profile.reset(base::JSONReader::ReadAndReturnError(json3, 0, &error_code,
320 &error_msg, &error_line,
321 &error_column)
322 .release());
323 ASSERT_EQ(0, error_code) << error_msg << " at " << error_line << ":"
324 << error_column << std::endl
325 << json3;
326
327 prefs_->SetUserPref(TranslatePrefs::kPrefLanguageProfile, profile.release());
328
329 list.clear();
330 EXPECT_EQ(0.8, translate_prefs_->GetReadingFromUserLanguageProfile(&list));
331 EXPECT_EQ(2UL, list.size());
332 EXPECT_EQ("en", list[0].first); // en-US and en-GB will be normalize into en
333 EXPECT_EQ(0.6,
334 list[0].second); // and their probability will add to gether be 0.6
335 EXPECT_EQ("fr", list[1].first); // fr will move down to the 2nd one
336 EXPECT_EQ(0.4, list[1].second);
337 }
338
215 } // namespace translate 339 } // namespace translate
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698