| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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_ranker_impl.h" | 5 #include "components/translate/core/browser/translate_ranker_impl.h" |
| 6 | 6 |
| 7 #include <initializer_list> | 7 #include <initializer_list> |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "base/feature_list.h" | 10 #include "base/feature_list.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 #include "net/url_request/test_url_fetcher_factory.h" | 29 #include "net/url_request/test_url_fetcher_factory.h" |
| 30 #include "net/url_request/url_request_test_util.h" | 30 #include "net/url_request/url_request_test_util.h" |
| 31 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
| 32 #include "url/gurl.h" | 32 #include "url/gurl.h" |
| 33 | 33 |
| 34 namespace { | 34 namespace { |
| 35 | 35 |
| 36 using translate::kTranslateRankerEnforcement; | 36 using translate::kTranslateRankerEnforcement; |
| 37 using translate::kTranslateRankerLogging; | 37 using translate::kTranslateRankerLogging; |
| 38 using translate::kTranslateRankerQuery; | 38 using translate::kTranslateRankerQuery; |
| 39 using translate::kTranslateRankerDecisionOverride; |
| 39 using translate::TranslateDownloadManager; | 40 using translate::TranslateDownloadManager; |
| 40 using translate::TranslateRankerFeatures; | 41 using translate::TranslateRankerFeatures; |
| 41 using translate::TranslatePrefs; | 42 using translate::TranslatePrefs; |
| 42 using translate::TranslateRankerImpl; | 43 using translate::TranslateRankerImpl; |
| 43 | 44 |
| 44 constexpr int kModelVersion = 1234; | 45 constexpr uint32_t kModelVersion = 1234; |
| 45 | 46 |
| 46 class TranslateRankerImplTest : public ::testing::Test { | 47 class TranslateRankerImplTest : public ::testing::Test { |
| 47 protected: | 48 protected: |
| 48 TranslateRankerImplTest(); | 49 TranslateRankerImplTest(); |
| 49 | 50 |
| 50 void SetUp() override; | 51 void SetUp() override; |
| 51 | 52 |
| 52 void TearDown() override; | 53 void TearDown() override; |
| 53 | 54 |
| 54 // Initializes the explicitly |enabled| and |disabled| features for this test. | 55 // Initializes the explicitly |enabled| and |disabled| features for this test. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 72 // The platform-specific name of the preferred language pref. | 73 // The platform-specific name of the preferred language pref. |
| 73 static const char* const kPreferredLanguagePref; | 74 static const char* const kPreferredLanguagePref; |
| 74 | 75 |
| 75 // Prefs. | 76 // Prefs. |
| 76 std::unique_ptr<sync_preferences::TestingPrefServiceSyncable> prefs_; | 77 std::unique_ptr<sync_preferences::TestingPrefServiceSyncable> prefs_; |
| 77 std::unique_ptr<translate::TranslatePrefs> translate_prefs_; | 78 std::unique_ptr<translate::TranslatePrefs> translate_prefs_; |
| 78 | 79 |
| 79 ukm::TestUkmService* GetTestUkmService() { | 80 ukm::TestUkmService* GetTestUkmService() { |
| 80 return ukm_service_test_harness_.test_ukm_service(); | 81 return ukm_service_test_harness_.test_ukm_service(); |
| 81 } | 82 } |
| 83 metrics::TranslateEventProto tep1_ = |
| 84 CreateTranslateEvent("fr", "en", 1, 0, 3); |
| 85 metrics::TranslateEventProto tep2_ = |
| 86 CreateTranslateEvent("jp", "en", 2, 0, 3); |
| 87 metrics::TranslateEventProto tep3_ = |
| 88 CreateTranslateEvent("es", "de", 4, 5, 6); |
| 82 | 89 |
| 83 private: | 90 private: |
| 84 ukm::UkmServiceTestingHarness ukm_service_test_harness_; | 91 ukm::UkmServiceTestingHarness ukm_service_test_harness_; |
| 85 | 92 |
| 86 // Override the default URL fetcher to return custom responses for tests. | 93 // Override the default URL fetcher to return custom responses for tests. |
| 87 net::TestURLFetcherFactory url_fetcher_factory_; | 94 net::TestURLFetcherFactory url_fetcher_factory_; |
| 88 | 95 |
| 89 // Used to initialize the translate download manager. | 96 // Used to initialize the translate download manager. |
| 90 scoped_refptr<net::TestURLRequestContextGetter> request_context_; | 97 scoped_refptr<net::TestURLRequestContextGetter> request_context_; |
| 91 | 98 |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 translate_event.set_source_language(src_lang); | 205 translate_event.set_source_language(src_lang); |
| 199 translate_event.set_target_language(dst_lang); | 206 translate_event.set_target_language(dst_lang); |
| 200 translate_event.set_accept_count(accept_count); | 207 translate_event.set_accept_count(accept_count); |
| 201 translate_event.set_decline_count(decline_count); | 208 translate_event.set_decline_count(decline_count); |
| 202 translate_event.set_ignore_count(ignore_count); | 209 translate_event.set_ignore_count(ignore_count); |
| 203 return translate_event; | 210 return translate_event; |
| 204 } | 211 } |
| 205 | 212 |
| 206 } // namespace | 213 } // namespace |
| 207 | 214 |
| 208 TEST_F(TranslateRankerImplTest, DisabledByDefault) { | |
| 209 InitFeatures({}, {}); | |
| 210 auto ranker = GetRankerForTest(0.5); | |
| 211 EXPECT_FALSE(ranker->IsQueryEnabled()); | |
| 212 EXPECT_FALSE(ranker->IsEnforcementEnabled()); | |
| 213 EXPECT_TRUE(ranker->IsLoggingEnabled()); | |
| 214 } | |
| 215 | |
| 216 TEST_F(TranslateRankerImplTest, ExplicitlyDisabled) { | |
| 217 InitFeatures({}, {kTranslateRankerQuery, kTranslateRankerEnforcement, | |
| 218 kTranslateRankerLogging}); | |
| 219 auto ranker = GetRankerForTest(0.5); | |
| 220 EXPECT_FALSE(ranker->IsQueryEnabled()); | |
| 221 EXPECT_FALSE(ranker->IsEnforcementEnabled()); | |
| 222 EXPECT_FALSE(ranker->IsLoggingEnabled()); | |
| 223 } | |
| 224 | |
| 225 TEST_F(TranslateRankerImplTest, EnableQuery) { | |
| 226 InitFeatures({kTranslateRankerQuery}, {kTranslateRankerEnforcement}); | |
| 227 auto ranker = GetRankerForTest(0.5); | |
| 228 EXPECT_TRUE(ranker->IsQueryEnabled()); | |
| 229 EXPECT_FALSE(ranker->IsEnforcementEnabled()); | |
| 230 EXPECT_TRUE(ranker->IsLoggingEnabled()); | |
| 231 } | |
| 232 | |
| 233 TEST_F(TranslateRankerImplTest, EnableEnforcement) { | |
| 234 InitFeatures({kTranslateRankerEnforcement}, {kTranslateRankerQuery}); | |
| 235 auto ranker = GetRankerForTest(0.5); | |
| 236 EXPECT_FALSE(ranker->IsQueryEnabled()); | |
| 237 EXPECT_TRUE(ranker->IsEnforcementEnabled()); | |
| 238 EXPECT_TRUE(ranker->IsLoggingEnabled()); | |
| 239 } | |
| 240 | |
| 241 TEST_F(TranslateRankerImplTest, EnableQueryAndEnforcement) { | |
| 242 InitFeatures({kTranslateRankerQuery, kTranslateRankerEnforcement}, {}); | |
| 243 auto ranker = GetRankerForTest(0.5); | |
| 244 EXPECT_TRUE(ranker->IsQueryEnabled()); | |
| 245 EXPECT_TRUE(ranker->IsEnforcementEnabled()); | |
| 246 EXPECT_TRUE(ranker->IsLoggingEnabled()); | |
| 247 } | |
| 248 | |
| 249 TEST_F(TranslateRankerImplTest, EnableLogging) { | |
| 250 InitFeatures({kTranslateRankerLogging}, {}); | |
| 251 auto ranker = GetRankerForTest(0.5); | |
| 252 EXPECT_FALSE(ranker->IsQueryEnabled()); | |
| 253 EXPECT_FALSE(ranker->IsEnforcementEnabled()); | |
| 254 EXPECT_TRUE(ranker->IsLoggingEnabled()); | |
| 255 } | |
| 256 | |
| 257 TEST_F(TranslateRankerImplTest, DisableLogging) { | |
| 258 InitFeatures({}, {kTranslateRankerLogging}); | |
| 259 auto ranker = GetRankerForTest(0.5); | |
| 260 EXPECT_FALSE(ranker->IsQueryEnabled()); | |
| 261 EXPECT_FALSE(ranker->IsEnforcementEnabled()); | |
| 262 EXPECT_FALSE(ranker->IsLoggingEnabled()); | |
| 263 } | |
| 264 | |
| 265 TEST_F(TranslateRankerImplTest, EnableAll) { | |
| 266 InitFeatures({kTranslateRankerQuery, kTranslateRankerEnforcement, | |
| 267 kTranslateRankerLogging}, | |
| 268 {}); | |
| 269 auto ranker = GetRankerForTest(0.5); | |
| 270 EXPECT_TRUE(ranker->IsQueryEnabled()); | |
| 271 EXPECT_TRUE(ranker->IsEnforcementEnabled()); | |
| 272 EXPECT_TRUE(ranker->IsLoggingEnabled()); | |
| 273 } | |
| 274 | |
| 275 TEST_F(TranslateRankerImplTest, GetVersion) { | 215 TEST_F(TranslateRankerImplTest, GetVersion) { |
| 276 InitFeatures({kTranslateRankerQuery}, {}); | 216 InitFeatures({kTranslateRankerQuery}, {}); |
| 277 auto ranker = GetRankerForTest(0.01f); | 217 auto ranker = GetRankerForTest(0.01f); |
| 278 EXPECT_TRUE(ranker->CheckModelLoaderForTesting()); | 218 EXPECT_TRUE(ranker->CheckModelLoaderForTesting()); |
| 279 EXPECT_EQ(kModelVersion, ranker->GetModelVersion()); | 219 EXPECT_EQ(kModelVersion, ranker->GetModelVersion()); |
| 280 } | 220 } |
| 281 | 221 |
| 282 TEST_F(TranslateRankerImplTest, ModelLoaderQueryNotEnabled) { | 222 TEST_F(TranslateRankerImplTest, ModelLoaderQueryNotEnabled) { |
| 283 // If Query is not enabled, the ranker should not try to load the model. | 223 // If Query is not enabled, the ranker should not try to load the model. |
| 284 InitFeatures({}, {kTranslateRankerQuery}); | 224 InitFeatures({}, {kTranslateRankerQuery}); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 300 1.0 * 0.04f + // one-hot src-language "en" * weight | 240 1.0 * 0.04f + // one-hot src-language "en" * weight |
| 301 1.0 * 0.00f + // one-hot dst-language "fr" * weight | 241 1.0 * 0.00f + // one-hot dst-language "fr" * weight |
| 302 1.0 * 0.07f + // one-hot country "de" * weight | 242 1.0 * 0.07f + // one-hot country "de" * weight |
| 303 1.0 * 0.12f + // one-hot locale "zh-CN" * weight | 243 1.0 * 0.12f + // one-hot locale "zh-CN" * weight |
| 304 0.01f); // bias | 244 0.01f); // bias |
| 305 TranslateRankerFeatures features(50, 50, 0, "en", "fr", "de", "zh-CN"); | 245 TranslateRankerFeatures features(50, 50, 0, "en", "fr", "de", "zh-CN"); |
| 306 | 246 |
| 307 EXPECT_NEAR(expected, ranker->CalculateScore(features), 0.000001); | 247 EXPECT_NEAR(expected, ranker->CalculateScore(features), 0.000001); |
| 308 } | 248 } |
| 309 | 249 |
| 310 TEST_F(TranslateRankerImplTest, ShouldOfferTranslation) { | 250 TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_AllEnabled) { |
| 311 InitFeatures({kTranslateRankerQuery, kTranslateRankerEnforcement}, {}); | 251 InitFeatures({kTranslateRankerQuery, kTranslateRankerEnforcement, |
| 252 kTranslateRankerDecisionOverride}, |
| 253 {}); |
| 254 metrics::TranslateEventProto tep; |
| 255 |
| 312 // With a bias of -0.5 en->fr is not over the threshold. | 256 // With a bias of -0.5 en->fr is not over the threshold. |
| 313 EXPECT_FALSE(GetRankerForTest(-0.5f)->ShouldOfferTranslation( | 257 EXPECT_FALSE(GetRankerForTest(-0.5f)->ShouldOfferTranslation( |
| 314 *translate_prefs_, "en", "fr")); | 258 *translate_prefs_, "en", "fr", &tep)); |
| 259 EXPECT_NE(0U, tep.ranker_request_timestamp_sec()); |
| 260 EXPECT_EQ(kModelVersion, tep.ranker_version()); |
| 261 EXPECT_EQ(metrics::TranslateEventProto::DONT_SHOW, tep.ranker_response()); |
| 262 |
| 315 // With a bias of 0.25 en-fr is over the threshold. | 263 // With a bias of 0.25 en-fr is over the threshold. |
| 316 EXPECT_TRUE(GetRankerForTest(0.25f)->ShouldOfferTranslation(*translate_prefs_, | 264 tep.Clear(); |
| 317 "en", "fr")); | 265 EXPECT_TRUE(GetRankerForTest(0.25f)->ShouldOfferTranslation( |
| 266 *translate_prefs_, "en", "fr", &tep)); |
| 267 EXPECT_EQ(metrics::TranslateEventProto::SHOW, tep.ranker_response()); |
| 268 } |
| 269 TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_AllDisabled) { |
| 270 InitFeatures({}, {kTranslateRankerQuery, kTranslateRankerEnforcement, |
| 271 kTranslateRankerDecisionOverride}); |
| 272 metrics::TranslateEventProto tep; |
| 273 // If query and other flags are turned off, returns true and do not query the |
| 274 // ranker. |
| 275 EXPECT_TRUE(GetRankerForTest(-0.5f)->ShouldOfferTranslation( |
| 276 *translate_prefs_, "en", "fr", &tep)); |
| 277 EXPECT_NE(0U, tep.ranker_request_timestamp_sec()); |
| 278 EXPECT_EQ(kModelVersion, tep.ranker_version()); |
| 279 EXPECT_EQ(metrics::TranslateEventProto::NOT_QUERIED, tep.ranker_response()); |
| 280 } |
| 281 |
| 282 TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_QueryOnly) { |
| 283 InitFeatures({kTranslateRankerQuery}, |
| 284 {kTranslateRankerEnforcement, kTranslateRankerDecisionOverride}); |
| 285 metrics::TranslateEventProto tep; |
| 286 // If enforcement is turned off, returns true even if the decision |
| 287 // is not to show. |
| 288 EXPECT_TRUE(GetRankerForTest(-0.5f)->ShouldOfferTranslation( |
| 289 *translate_prefs_, "en", "fr", &tep)); |
| 290 EXPECT_NE(0U, tep.ranker_request_timestamp_sec()); |
| 291 EXPECT_EQ(kModelVersion, tep.ranker_version()); |
| 292 EXPECT_EQ(metrics::TranslateEventProto::DONT_SHOW, tep.ranker_response()); |
| 293 } |
| 294 |
| 295 TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_EnforcementOnly) { |
| 296 InitFeatures({kTranslateRankerEnforcement}, |
| 297 {kTranslateRankerQuery, kTranslateRankerDecisionOverride}); |
| 298 metrics::TranslateEventProto tep; |
| 299 // If either enforcement or decision override are turned on, returns the |
| 300 // ranker decision. |
| 301 EXPECT_FALSE(GetRankerForTest(-0.5f)->ShouldOfferTranslation( |
| 302 *translate_prefs_, "en", "fr", &tep)); |
| 303 EXPECT_NE(0U, tep.ranker_request_timestamp_sec()); |
| 304 EXPECT_EQ(kModelVersion, tep.ranker_version()); |
| 305 EXPECT_EQ(metrics::TranslateEventProto::DONT_SHOW, tep.ranker_response()); |
| 306 } |
| 307 |
| 308 TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_OverrideOnly) { |
| 309 InitFeatures({kTranslateRankerDecisionOverride}, |
| 310 {kTranslateRankerQuery, kTranslateRankerEnforcement}); |
| 311 metrics::TranslateEventProto tep; |
| 312 // If either enforcement or decision override are turned on, returns the |
| 313 // ranker decision. |
| 314 EXPECT_FALSE(GetRankerForTest(-0.5f)->ShouldOfferTranslation( |
| 315 *translate_prefs_, "en", "fr", &tep)); |
| 316 EXPECT_NE(0U, tep.ranker_request_timestamp_sec()); |
| 317 EXPECT_EQ(kModelVersion, tep.ranker_version()); |
| 318 EXPECT_EQ(metrics::TranslateEventProto::DONT_SHOW, tep.ranker_response()); |
| 319 } |
| 320 |
| 321 TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_NoModel) { |
| 322 auto ranker = |
| 323 base::MakeUnique<TranslateRankerImpl>(base::FilePath(), GURL(), nullptr); |
| 324 InitFeatures({kTranslateRankerDecisionOverride, kTranslateRankerQuery, |
| 325 kTranslateRankerEnforcement}, |
| 326 {}); |
| 327 metrics::TranslateEventProto tep; |
| 328 // If we don't have a model, returns true. |
| 329 EXPECT_TRUE( |
| 330 ranker->ShouldOfferTranslation(*translate_prefs_, "en", "fr", &tep)); |
| 331 EXPECT_NE(0U, tep.ranker_request_timestamp_sec()); |
| 332 EXPECT_EQ(0U, tep.ranker_version()); |
| 333 EXPECT_EQ(metrics::TranslateEventProto::NOT_QUERIED, tep.ranker_response()); |
| 318 } | 334 } |
| 319 | 335 |
| 320 TEST_F(TranslateRankerImplTest, RecordAndFlushEvents) { | 336 TEST_F(TranslateRankerImplTest, RecordAndFlushEvents) { |
| 321 InitFeatures({kTranslateRankerLogging}, {}); | 337 InitFeatures({kTranslateRankerLogging}, {}); |
| 322 std::unique_ptr<translate::TranslateRanker> ranker = GetRankerForTest(0.0f); | 338 std::unique_ptr<translate::TranslateRanker> ranker = GetRankerForTest(0.0f); |
| 323 std::vector<metrics::TranslateEventProto> flushed_events; | 339 std::vector<metrics::TranslateEventProto> flushed_events; |
| 324 | 340 |
| 325 GURL url0("https://www.google.com"); | 341 GURL url0("https://www.google.com"); |
| 326 GURL url1("https://www.gmail.com"); | 342 GURL url1("https://www.gmail.com"); |
| 327 | 343 |
| 328 // Check that flushing an empty cache will return an empty vector. | 344 // Check that flushing an empty cache will return an empty vector. |
| 329 ranker->FlushTranslateEvents(&flushed_events); | 345 ranker->FlushTranslateEvents(&flushed_events); |
| 330 EXPECT_EQ(0U, flushed_events.size()); | 346 EXPECT_EQ(0U, flushed_events.size()); |
| 331 | 347 |
| 332 ranker->AddTranslateEvent(CreateTranslateEvent("fr", "en", 1, 0, 3), url0); | 348 ranker->RecordTranslateEvent(0, url0, &tep1_); |
| 333 ranker->AddTranslateEvent(CreateTranslateEvent("jp", "en", 2, 0, 3), GURL()); | 349 ranker->RecordTranslateEvent(1, GURL(), &tep2_); |
| 334 ranker->AddTranslateEvent(CreateTranslateEvent("es", "de", 4, 5, 6), url1); | 350 ranker->RecordTranslateEvent(2, url1, &tep3_); |
| 335 | 351 |
| 336 // Capture the data and verify that it is as expected. | 352 // Capture the data and verify that it is as expected. |
| 337 ranker->FlushTranslateEvents(&flushed_events); | 353 ranker->FlushTranslateEvents(&flushed_events); |
| 338 EXPECT_EQ(3U, flushed_events.size()); | 354 EXPECT_EQ(3U, flushed_events.size()); |
| 339 ASSERT_EQ("fr", flushed_events[0].source_language()); | 355 ASSERT_EQ(tep1_.source_language(), flushed_events[0].source_language()); |
| 340 ASSERT_EQ("jp", flushed_events[1].source_language()); | 356 ASSERT_EQ(0, flushed_events[0].event_type()); |
| 341 ASSERT_EQ("es", flushed_events[2].source_language()); | 357 ASSERT_EQ(tep2_.source_language(), flushed_events[1].source_language()); |
| 358 ASSERT_EQ(1, flushed_events[1].event_type()); |
| 359 ASSERT_EQ(tep3_.source_language(), flushed_events[2].source_language()); |
| 360 ASSERT_EQ(2, flushed_events[2].event_type()); |
| 342 | 361 |
| 343 // Check that the cache has been cleared. | 362 // Check that the cache has been cleared. |
| 344 ranker->FlushTranslateEvents(&flushed_events); | 363 ranker->FlushTranslateEvents(&flushed_events); |
| 345 EXPECT_EQ(0U, flushed_events.size()); | 364 EXPECT_EQ(0U, flushed_events.size()); |
| 346 | 365 |
| 347 ASSERT_EQ(2U, GetTestUkmService()->sources_count()); | 366 ASSERT_EQ(2U, GetTestUkmService()->sources_count()); |
| 348 EXPECT_EQ( | 367 EXPECT_EQ( |
| 349 url0.spec(), | 368 url0.spec(), |
| 350 GetTestUkmService()->GetSourceForUrl(url0.spec().c_str())->url().spec()); | 369 GetTestUkmService()->GetSourceForUrl(url0.spec().c_str())->url().spec()); |
| 351 EXPECT_EQ( | 370 EXPECT_EQ( |
| 352 url1.spec(), | 371 url1.spec(), |
| 353 GetTestUkmService()->GetSourceForUrl(url1.spec().c_str())->url().spec()); | 372 GetTestUkmService()->GetSourceForUrl(url1.spec().c_str())->url().spec()); |
| 354 } | 373 } |
| 355 | 374 |
| 356 TEST_F(TranslateRankerImplTest, LoggingDisabled) { | 375 TEST_F(TranslateRankerImplTest, LoggingDisabled) { |
| 357 InitFeatures({}, {kTranslateRankerLogging}); | 376 InitFeatures({}, {kTranslateRankerLogging}); |
| 358 std::unique_ptr<translate::TranslateRanker> ranker = GetRankerForTest(0.0f); | 377 std::unique_ptr<translate::TranslateRanker> ranker = GetRankerForTest(0.0f); |
| 359 std::vector<metrics::TranslateEventProto> flushed_events; | 378 std::vector<metrics::TranslateEventProto> flushed_events; |
| 360 | 379 |
| 361 ranker->FlushTranslateEvents(&flushed_events); | 380 ranker->FlushTranslateEvents(&flushed_events); |
| 362 EXPECT_EQ(0U, flushed_events.size()); | 381 EXPECT_EQ(0U, flushed_events.size()); |
| 363 | 382 |
| 364 ranker->AddTranslateEvent(CreateTranslateEvent("fr", "en", 1, 0, 3), GURL()); | 383 ranker->RecordTranslateEvent(0, GURL(), &tep1_); |
| 365 ranker->AddTranslateEvent(CreateTranslateEvent("jp", "en", 2, 0, 3), GURL()); | 384 ranker->RecordTranslateEvent(1, GURL(), &tep2_); |
| 366 ranker->AddTranslateEvent(CreateTranslateEvent("es", "de", 4, 5, 6), GURL()); | 385 ranker->RecordTranslateEvent(2, GURL(), &tep3_); |
| 367 | 386 |
| 368 // Logging is disabled, so no events should be cached. | 387 // Logging is disabled, so no events should be cached. |
| 369 ranker->FlushTranslateEvents(&flushed_events); | 388 ranker->FlushTranslateEvents(&flushed_events); |
| 370 EXPECT_EQ(0U, flushed_events.size()); | 389 EXPECT_EQ(0U, flushed_events.size()); |
| 371 EXPECT_EQ(0ul, GetTestUkmService()->sources_count()); | 390 EXPECT_EQ(0ul, GetTestUkmService()->sources_count()); |
| 372 } | 391 } |
| 373 | 392 |
| 374 TEST_F(TranslateRankerImplTest, LoggingDisabledViaOverride) { | 393 TEST_F(TranslateRankerImplTest, LoggingDisabledViaOverride) { |
| 375 InitFeatures({kTranslateRankerLogging}, {}); | 394 InitFeatures({kTranslateRankerLogging}, {}); |
| 376 std::unique_ptr<translate::TranslateRankerImpl> ranker = | 395 std::unique_ptr<translate::TranslateRankerImpl> ranker = |
| 377 GetRankerForTest(0.0f); | 396 GetRankerForTest(0.0f); |
| 378 std::vector<metrics::TranslateEventProto> flushed_events; | 397 std::vector<metrics::TranslateEventProto> flushed_events; |
| 379 | 398 |
| 380 ranker->FlushTranslateEvents(&flushed_events); | 399 ranker->FlushTranslateEvents(&flushed_events); |
| 381 EXPECT_EQ(0U, flushed_events.size()); | 400 EXPECT_EQ(0U, flushed_events.size()); |
| 382 | 401 |
| 383 ranker->AddTranslateEvent(CreateTranslateEvent("fr", "en", 1, 0, 3), GURL()); | 402 ranker->RecordTranslateEvent(0, GURL(), &tep1_); |
| 384 ranker->AddTranslateEvent(CreateTranslateEvent("jp", "en", 2, 0, 3), GURL()); | 403 ranker->RecordTranslateEvent(1, GURL(), &tep2_); |
| 385 ranker->AddTranslateEvent(CreateTranslateEvent("es", "de", 4, 5, 6), GURL()); | 404 ranker->RecordTranslateEvent(2, GURL(), &tep3_); |
| 386 | 405 |
| 387 // Logging is disabled, so no events should be cached. | 406 // Logging is disabled, so no events should be cached. |
| 388 ranker->FlushTranslateEvents(&flushed_events); | 407 ranker->FlushTranslateEvents(&flushed_events); |
| 389 EXPECT_EQ(3U, flushed_events.size()); | 408 EXPECT_EQ(3U, flushed_events.size()); |
| 390 | 409 |
| 391 // Override the feature setting to disable logging. | 410 // Override the feature setting to disable logging. |
| 392 ranker->EnableLogging(false); | 411 ranker->EnableLogging(false); |
| 393 | 412 |
| 394 ranker->AddTranslateEvent(CreateTranslateEvent("fr", "en", 1, 0, 3), GURL()); | 413 ranker->RecordTranslateEvent(0, GURL(), &tep1_); |
| 395 ranker->AddTranslateEvent(CreateTranslateEvent("jp", "en", 2, 0, 3), GURL()); | 414 ranker->RecordTranslateEvent(1, GURL(), &tep2_); |
| 396 ranker->AddTranslateEvent(CreateTranslateEvent("es", "de", 4, 5, 6), GURL()); | 415 ranker->RecordTranslateEvent(2, GURL(), &tep3_); |
| 397 | 416 |
| 398 // Logging is disabled, so no events should be cached. | 417 // Logging is disabled, so no events should be cached. |
| 399 ranker->FlushTranslateEvents(&flushed_events); | 418 ranker->FlushTranslateEvents(&flushed_events); |
| 400 EXPECT_EQ(0U, flushed_events.size()); | 419 EXPECT_EQ(0U, flushed_events.size()); |
| 401 } | 420 } |
| 421 |
| 422 TEST_F(TranslateRankerImplTest, ShouldOverrideDecision_OverrideDisabled) { |
| 423 InitFeatures({}, {kTranslateRankerDecisionOverride}); |
| 424 std::unique_ptr<translate::TranslateRankerImpl> ranker = |
| 425 GetRankerForTest(0.0f); |
| 426 const int kEventType = 12; |
| 427 metrics::TranslateEventProto tep = CreateTranslateEvent("fr", "en", 1, 0, 3); |
| 428 |
| 429 EXPECT_FALSE(ranker->ShouldOverrideDecision(kEventType, GURL(), &tep)); |
| 430 |
| 431 std::vector<metrics::TranslateEventProto> flushed_events; |
| 432 ranker->FlushTranslateEvents(&flushed_events); |
| 433 EXPECT_EQ(1U, flushed_events.size()); |
| 434 ASSERT_EQ(tep.source_language(), flushed_events[0].source_language()); |
| 435 ASSERT_EQ(kEventType, flushed_events[0].event_type()); |
| 436 } |
| 437 |
| 438 TEST_F(TranslateRankerImplTest, ShouldOverrideDecision_OverrideEnabled) { |
| 439 InitFeatures({kTranslateRankerDecisionOverride}, {}); |
| 440 std::unique_ptr<translate::TranslateRankerImpl> ranker = |
| 441 GetRankerForTest(0.0f); |
| 442 metrics::TranslateEventProto tep = CreateTranslateEvent("fr", "en", 1, 0, 3); |
| 443 |
| 444 EXPECT_TRUE(ranker->ShouldOverrideDecision(1, GURL(), &tep)); |
| 445 EXPECT_TRUE(ranker->ShouldOverrideDecision(2, GURL(), &tep)); |
| 446 |
| 447 std::vector<metrics::TranslateEventProto> flushed_events; |
| 448 ranker->FlushTranslateEvents(&flushed_events); |
| 449 EXPECT_EQ(0U, flushed_events.size()); |
| 450 ASSERT_EQ(2, tep.decision_overrides_size()); |
| 451 ASSERT_EQ(1, tep.decision_overrides(0)); |
| 452 ASSERT_EQ(2, tep.decision_overrides(1)); |
| 453 ASSERT_EQ(0, tep.event_type()); |
| 454 } |
| OLD | NEW |