Index: components/translate/core/browser/translate_ranker_impl_unittest.cc |
diff --git a/components/translate/core/browser/translate_ranker_impl_unittest.cc b/components/translate/core/browser/translate_ranker_impl_unittest.cc |
index a1fea536605399410ef4324c74b216124ff3d808..24680938933745053c7533ec03583ea111288152 100644 |
--- a/components/translate/core/browser/translate_ranker_impl_unittest.cc |
+++ b/components/translate/core/browser/translate_ranker_impl_unittest.cc |
@@ -36,12 +36,13 @@ namespace { |
using translate::kTranslateRankerEnforcement; |
using translate::kTranslateRankerLogging; |
using translate::kTranslateRankerQuery; |
+using translate::kTranslateRankerDecisionOverride; |
using translate::TranslateDownloadManager; |
using translate::TranslateRankerFeatures; |
using translate::TranslatePrefs; |
using translate::TranslateRankerImpl; |
-constexpr int kModelVersion = 1234; |
+constexpr uint32_t kModelVersion = 1234; |
class TranslateRankerImplTest : public ::testing::Test { |
protected: |
@@ -79,6 +80,12 @@ class TranslateRankerImplTest : public ::testing::Test { |
ukm::TestUkmService* GetTestUkmService() { |
return ukm_service_test_harness_.test_ukm_service(); |
} |
+ metrics::TranslateEventProto tep1_ = |
+ CreateTranslateEvent("fr", "en", 1, 0, 3); |
+ metrics::TranslateEventProto tep2_ = |
+ CreateTranslateEvent("jp", "en", 2, 0, 3); |
+ metrics::TranslateEventProto tep3_ = |
+ CreateTranslateEvent("es", "de", 4, 5, 6); |
private: |
ukm::UkmServiceTestingHarness ukm_service_test_harness_; |
@@ -205,73 +212,6 @@ metrics::TranslateEventProto TranslateRankerImplTest::CreateTranslateEvent( |
} // namespace |
-TEST_F(TranslateRankerImplTest, DisabledByDefault) { |
- InitFeatures({}, {}); |
- auto ranker = GetRankerForTest(0.5); |
- EXPECT_FALSE(ranker->IsQueryEnabled()); |
- EXPECT_FALSE(ranker->IsEnforcementEnabled()); |
- EXPECT_TRUE(ranker->IsLoggingEnabled()); |
-} |
- |
-TEST_F(TranslateRankerImplTest, ExplicitlyDisabled) { |
- InitFeatures({}, {kTranslateRankerQuery, kTranslateRankerEnforcement, |
- kTranslateRankerLogging}); |
- auto ranker = GetRankerForTest(0.5); |
- EXPECT_FALSE(ranker->IsQueryEnabled()); |
- EXPECT_FALSE(ranker->IsEnforcementEnabled()); |
- EXPECT_FALSE(ranker->IsLoggingEnabled()); |
-} |
- |
-TEST_F(TranslateRankerImplTest, EnableQuery) { |
- InitFeatures({kTranslateRankerQuery}, {kTranslateRankerEnforcement}); |
- auto ranker = GetRankerForTest(0.5); |
- EXPECT_TRUE(ranker->IsQueryEnabled()); |
- EXPECT_FALSE(ranker->IsEnforcementEnabled()); |
- EXPECT_TRUE(ranker->IsLoggingEnabled()); |
-} |
- |
-TEST_F(TranslateRankerImplTest, EnableEnforcement) { |
- InitFeatures({kTranslateRankerEnforcement}, {kTranslateRankerQuery}); |
- auto ranker = GetRankerForTest(0.5); |
- EXPECT_FALSE(ranker->IsQueryEnabled()); |
- EXPECT_TRUE(ranker->IsEnforcementEnabled()); |
- EXPECT_TRUE(ranker->IsLoggingEnabled()); |
-} |
- |
-TEST_F(TranslateRankerImplTest, EnableQueryAndEnforcement) { |
- InitFeatures({kTranslateRankerQuery, kTranslateRankerEnforcement}, {}); |
- auto ranker = GetRankerForTest(0.5); |
- EXPECT_TRUE(ranker->IsQueryEnabled()); |
- EXPECT_TRUE(ranker->IsEnforcementEnabled()); |
- EXPECT_TRUE(ranker->IsLoggingEnabled()); |
-} |
- |
-TEST_F(TranslateRankerImplTest, EnableLogging) { |
- InitFeatures({kTranslateRankerLogging}, {}); |
- auto ranker = GetRankerForTest(0.5); |
- EXPECT_FALSE(ranker->IsQueryEnabled()); |
- EXPECT_FALSE(ranker->IsEnforcementEnabled()); |
- EXPECT_TRUE(ranker->IsLoggingEnabled()); |
-} |
- |
-TEST_F(TranslateRankerImplTest, DisableLogging) { |
- InitFeatures({}, {kTranslateRankerLogging}); |
- auto ranker = GetRankerForTest(0.5); |
- EXPECT_FALSE(ranker->IsQueryEnabled()); |
- EXPECT_FALSE(ranker->IsEnforcementEnabled()); |
- EXPECT_FALSE(ranker->IsLoggingEnabled()); |
-} |
- |
-TEST_F(TranslateRankerImplTest, EnableAll) { |
- InitFeatures({kTranslateRankerQuery, kTranslateRankerEnforcement, |
- kTranslateRankerLogging}, |
- {}); |
- auto ranker = GetRankerForTest(0.5); |
- EXPECT_TRUE(ranker->IsQueryEnabled()); |
- EXPECT_TRUE(ranker->IsEnforcementEnabled()); |
- EXPECT_TRUE(ranker->IsLoggingEnabled()); |
-} |
- |
TEST_F(TranslateRankerImplTest, GetVersion) { |
InitFeatures({kTranslateRankerQuery}, {}); |
auto ranker = GetRankerForTest(0.01f); |
@@ -307,14 +247,90 @@ TEST_F(TranslateRankerImplTest, CalculateScore) { |
EXPECT_NEAR(expected, ranker->CalculateScore(features), 0.000001); |
} |
-TEST_F(TranslateRankerImplTest, ShouldOfferTranslation) { |
- InitFeatures({kTranslateRankerQuery, kTranslateRankerEnforcement}, {}); |
+TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_AllEnabled) { |
+ InitFeatures({kTranslateRankerQuery, kTranslateRankerEnforcement, |
+ kTranslateRankerDecisionOverride}, |
+ {}); |
+ metrics::TranslateEventProto tep; |
+ |
// With a bias of -0.5 en->fr is not over the threshold. |
EXPECT_FALSE(GetRankerForTest(-0.5f)->ShouldOfferTranslation( |
- *translate_prefs_, "en", "fr")); |
+ *translate_prefs_, "en", "fr", &tep)); |
+ EXPECT_NE(0U, tep.ranker_request_timestamp_sec()); |
+ EXPECT_EQ(kModelVersion, tep.ranker_version()); |
+ EXPECT_EQ(metrics::TranslateEventProto::DONT_SHOW, tep.ranker_response()); |
+ |
// With a bias of 0.25 en-fr is over the threshold. |
- EXPECT_TRUE(GetRankerForTest(0.25f)->ShouldOfferTranslation(*translate_prefs_, |
- "en", "fr")); |
+ tep.Clear(); |
+ EXPECT_TRUE(GetRankerForTest(0.25f)->ShouldOfferTranslation( |
+ *translate_prefs_, "en", "fr", &tep)); |
+ EXPECT_EQ(metrics::TranslateEventProto::SHOW, tep.ranker_response()); |
+} |
+TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_AllDisabled) { |
+ InitFeatures({}, {kTranslateRankerQuery, kTranslateRankerEnforcement, |
+ kTranslateRankerDecisionOverride}); |
+ metrics::TranslateEventProto tep; |
+ // If query and other flags are turned off, returns true and do not query the |
+ // ranker. |
+ EXPECT_TRUE(GetRankerForTest(-0.5f)->ShouldOfferTranslation( |
+ *translate_prefs_, "en", "fr", &tep)); |
+ EXPECT_NE(0U, tep.ranker_request_timestamp_sec()); |
+ EXPECT_EQ(kModelVersion, tep.ranker_version()); |
+ EXPECT_EQ(metrics::TranslateEventProto::NOT_QUERIED, tep.ranker_response()); |
+} |
+ |
+TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_QueryOnly) { |
+ InitFeatures({kTranslateRankerQuery}, |
+ {kTranslateRankerEnforcement, kTranslateRankerDecisionOverride}); |
+ metrics::TranslateEventProto tep; |
+ // If enforcement is turned off, returns true even if the decision |
+ // is not to show. |
+ EXPECT_TRUE(GetRankerForTest(-0.5f)->ShouldOfferTranslation( |
+ *translate_prefs_, "en", "fr", &tep)); |
+ EXPECT_NE(0U, tep.ranker_request_timestamp_sec()); |
+ EXPECT_EQ(kModelVersion, tep.ranker_version()); |
+ EXPECT_EQ(metrics::TranslateEventProto::DONT_SHOW, tep.ranker_response()); |
+} |
+ |
+TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_EnforcementOnly) { |
+ InitFeatures({kTranslateRankerEnforcement}, |
+ {kTranslateRankerQuery, kTranslateRankerDecisionOverride}); |
+ metrics::TranslateEventProto tep; |
+ // If either enforcement or decision override are turned on, returns the |
+ // ranker decision. |
+ EXPECT_FALSE(GetRankerForTest(-0.5f)->ShouldOfferTranslation( |
+ *translate_prefs_, "en", "fr", &tep)); |
+ EXPECT_NE(0U, tep.ranker_request_timestamp_sec()); |
+ EXPECT_EQ(kModelVersion, tep.ranker_version()); |
+ EXPECT_EQ(metrics::TranslateEventProto::DONT_SHOW, tep.ranker_response()); |
+} |
+ |
+TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_OverrideOnly) { |
+ InitFeatures({kTranslateRankerDecisionOverride}, |
+ {kTranslateRankerQuery, kTranslateRankerEnforcement}); |
+ metrics::TranslateEventProto tep; |
+ // If either enforcement or decision override are turned on, returns the |
+ // ranker decision. |
+ EXPECT_FALSE(GetRankerForTest(-0.5f)->ShouldOfferTranslation( |
+ *translate_prefs_, "en", "fr", &tep)); |
+ EXPECT_NE(0U, tep.ranker_request_timestamp_sec()); |
+ EXPECT_EQ(kModelVersion, tep.ranker_version()); |
+ EXPECT_EQ(metrics::TranslateEventProto::DONT_SHOW, tep.ranker_response()); |
+} |
+ |
+TEST_F(TranslateRankerImplTest, ShouldOfferTranslation_NoModel) { |
+ auto ranker = |
+ base::MakeUnique<TranslateRankerImpl>(base::FilePath(), GURL(), nullptr); |
+ InitFeatures({kTranslateRankerDecisionOverride, kTranslateRankerQuery, |
+ kTranslateRankerEnforcement}, |
+ {}); |
+ metrics::TranslateEventProto tep; |
+ // If we don't have a model, returns true. |
+ EXPECT_TRUE( |
+ ranker->ShouldOfferTranslation(*translate_prefs_, "en", "fr", &tep)); |
+ EXPECT_NE(0U, tep.ranker_request_timestamp_sec()); |
+ EXPECT_EQ(0U, tep.ranker_version()); |
+ EXPECT_EQ(metrics::TranslateEventProto::NOT_QUERIED, tep.ranker_response()); |
} |
TEST_F(TranslateRankerImplTest, RecordAndFlushEvents) { |
@@ -329,16 +345,19 @@ TEST_F(TranslateRankerImplTest, RecordAndFlushEvents) { |
ranker->FlushTranslateEvents(&flushed_events); |
EXPECT_EQ(0U, flushed_events.size()); |
- ranker->AddTranslateEvent(CreateTranslateEvent("fr", "en", 1, 0, 3), url0); |
- ranker->AddTranslateEvent(CreateTranslateEvent("jp", "en", 2, 0, 3), GURL()); |
- ranker->AddTranslateEvent(CreateTranslateEvent("es", "de", 4, 5, 6), url1); |
+ ranker->RecordTranslateEvent(0, url0, &tep1_); |
+ ranker->RecordTranslateEvent(1, GURL(), &tep2_); |
+ ranker->RecordTranslateEvent(2, url1, &tep3_); |
// Capture the data and verify that it is as expected. |
ranker->FlushTranslateEvents(&flushed_events); |
EXPECT_EQ(3U, flushed_events.size()); |
- ASSERT_EQ("fr", flushed_events[0].source_language()); |
- ASSERT_EQ("jp", flushed_events[1].source_language()); |
- ASSERT_EQ("es", flushed_events[2].source_language()); |
+ ASSERT_EQ(tep1_.source_language(), flushed_events[0].source_language()); |
+ ASSERT_EQ(0, flushed_events[0].event_type()); |
+ ASSERT_EQ(tep2_.source_language(), flushed_events[1].source_language()); |
+ ASSERT_EQ(1, flushed_events[1].event_type()); |
+ ASSERT_EQ(tep3_.source_language(), flushed_events[2].source_language()); |
+ ASSERT_EQ(2, flushed_events[2].event_type()); |
// Check that the cache has been cleared. |
ranker->FlushTranslateEvents(&flushed_events); |
@@ -361,9 +380,9 @@ TEST_F(TranslateRankerImplTest, LoggingDisabled) { |
ranker->FlushTranslateEvents(&flushed_events); |
EXPECT_EQ(0U, flushed_events.size()); |
- ranker->AddTranslateEvent(CreateTranslateEvent("fr", "en", 1, 0, 3), GURL()); |
- ranker->AddTranslateEvent(CreateTranslateEvent("jp", "en", 2, 0, 3), GURL()); |
- ranker->AddTranslateEvent(CreateTranslateEvent("es", "de", 4, 5, 6), GURL()); |
+ ranker->RecordTranslateEvent(0, GURL(), &tep1_); |
+ ranker->RecordTranslateEvent(1, GURL(), &tep2_); |
+ ranker->RecordTranslateEvent(2, GURL(), &tep3_); |
// Logging is disabled, so no events should be cached. |
ranker->FlushTranslateEvents(&flushed_events); |
@@ -380,9 +399,9 @@ TEST_F(TranslateRankerImplTest, LoggingDisabledViaOverride) { |
ranker->FlushTranslateEvents(&flushed_events); |
EXPECT_EQ(0U, flushed_events.size()); |
- ranker->AddTranslateEvent(CreateTranslateEvent("fr", "en", 1, 0, 3), GURL()); |
- ranker->AddTranslateEvent(CreateTranslateEvent("jp", "en", 2, 0, 3), GURL()); |
- ranker->AddTranslateEvent(CreateTranslateEvent("es", "de", 4, 5, 6), GURL()); |
+ ranker->RecordTranslateEvent(0, GURL(), &tep1_); |
+ ranker->RecordTranslateEvent(1, GURL(), &tep2_); |
+ ranker->RecordTranslateEvent(2, GURL(), &tep3_); |
// Logging is disabled, so no events should be cached. |
ranker->FlushTranslateEvents(&flushed_events); |
@@ -391,11 +410,45 @@ TEST_F(TranslateRankerImplTest, LoggingDisabledViaOverride) { |
// Override the feature setting to disable logging. |
ranker->EnableLogging(false); |
- ranker->AddTranslateEvent(CreateTranslateEvent("fr", "en", 1, 0, 3), GURL()); |
- ranker->AddTranslateEvent(CreateTranslateEvent("jp", "en", 2, 0, 3), GURL()); |
- ranker->AddTranslateEvent(CreateTranslateEvent("es", "de", 4, 5, 6), GURL()); |
+ ranker->RecordTranslateEvent(0, GURL(), &tep1_); |
+ ranker->RecordTranslateEvent(1, GURL(), &tep2_); |
+ ranker->RecordTranslateEvent(2, GURL(), &tep3_); |
// Logging is disabled, so no events should be cached. |
ranker->FlushTranslateEvents(&flushed_events); |
EXPECT_EQ(0U, flushed_events.size()); |
} |
+ |
+TEST_F(TranslateRankerImplTest, ShouldOverrideDecision_OverrideDisabled) { |
+ InitFeatures({}, {kTranslateRankerDecisionOverride}); |
+ std::unique_ptr<translate::TranslateRankerImpl> ranker = |
+ GetRankerForTest(0.0f); |
+ const int kEventType = 12; |
+ metrics::TranslateEventProto tep = CreateTranslateEvent("fr", "en", 1, 0, 3); |
+ |
+ EXPECT_FALSE(ranker->ShouldOverrideDecision(kEventType, GURL(), &tep)); |
+ |
+ std::vector<metrics::TranslateEventProto> flushed_events; |
+ ranker->FlushTranslateEvents(&flushed_events); |
+ EXPECT_EQ(1U, flushed_events.size()); |
+ ASSERT_EQ(tep.source_language(), flushed_events[0].source_language()); |
+ ASSERT_EQ(kEventType, flushed_events[0].event_type()); |
+} |
+ |
+TEST_F(TranslateRankerImplTest, ShouldOverrideDecision_OverrideEnabled) { |
+ InitFeatures({kTranslateRankerDecisionOverride}, {}); |
+ std::unique_ptr<translate::TranslateRankerImpl> ranker = |
+ GetRankerForTest(0.0f); |
+ metrics::TranslateEventProto tep = CreateTranslateEvent("fr", "en", 1, 0, 3); |
+ |
+ EXPECT_TRUE(ranker->ShouldOverrideDecision(1, GURL(), &tep)); |
+ EXPECT_TRUE(ranker->ShouldOverrideDecision(2, GURL(), &tep)); |
+ |
+ std::vector<metrics::TranslateEventProto> flushed_events; |
+ ranker->FlushTranslateEvents(&flushed_events); |
+ EXPECT_EQ(0U, flushed_events.size()); |
+ ASSERT_EQ(2, tep.decision_overrides_size()); |
+ ASSERT_EQ(1, tep.decision_overrides(0)); |
+ ASSERT_EQ(2, tep.decision_overrides(1)); |
+ ASSERT_EQ(0, tep.event_type()); |
+} |