Chromium Code Reviews| Index: components/translate/core/browser/translate_manager_unittest.cc |
| diff --git a/components/translate/core/browser/translate_manager_unittest.cc b/components/translate/core/browser/translate_manager_unittest.cc |
| index cf2898738d75bdcc4f5603c6daf72b13d0c419ad..5715c26f97a2c2a02d687e598c510201c40f1617 100644 |
| --- a/components/translate/core/browser/translate_manager_unittest.cc |
| +++ b/components/translate/core/browser/translate_manager_unittest.cc |
| @@ -13,10 +13,12 @@ |
| #include "base/test/scoped_feature_list.h" |
| #include "build/build_config.h" |
| #include "components/infobars/core/infobar.h" |
| +#include "components/metrics/proto/translate_event.pb.h" |
| #include "components/pref_registry/pref_registry_syncable.h" |
| #include "components/sync_preferences/testing_pref_service_syncable.h" |
| #include "components/translate/core/browser/mock_translate_driver.h" |
| #include "components/translate/core/browser/mock_translate_ranker.h" |
| +#include "components/translate/core/browser/translate_accept_languages.h" |
| #include "components/translate/core/browser/translate_browser_metrics.h" |
| #include "components/translate/core/browser/translate_client.h" |
| #include "components/translate/core/browser/translate_download_manager.h" |
| @@ -65,7 +67,7 @@ class TestNetworkChangeNotifier : public net::NetworkChangeNotifier { |
| } |
| void SimulateOffline() { |
| - connection_type_to_return_ =net::NetworkChangeNotifier::CONNECTION_NONE; |
| + connection_type_to_return_ = net::NetworkChangeNotifier::CONNECTION_NONE; |
| } |
| void SimulateOnline() { |
| @@ -84,11 +86,23 @@ class TestNetworkChangeNotifier : public net::NetworkChangeNotifier { |
| DISALLOW_COPY_AND_ASSIGN(TestNetworkChangeNotifier); |
| }; |
| +class MockTranslateAcceptLanguages : public TranslateAcceptLanguages { |
| + public: |
| + MockTranslateAcceptLanguages() { |
| + ON_CALL(*this, IsAcceptLanguage(_)).WillByDefault(Return(true)); |
| + } |
| + virtual ~MockTranslateAcceptLanguages() {} |
| + MOCK_METHOD1(IsAcceptLanguage, bool(const std::string&)); |
| +}; |
| + |
| // TODO(groby): Combine with MockTranslateClient in TranslateUiDelegateTest. |
| class MockTranslateClient : public TranslateClient { |
| public: |
| MockTranslateClient(TranslateDriver* driver, PrefService* prefs) |
| - : driver_(driver), prefs_(prefs) {} |
| + : mock_translate_accept_languages_(), driver_(driver), prefs_(prefs) { |
|
groby-ooo-7-16
2017/04/10 20:52:47
Likely the TODO() here would be a good step to tak
hamelphi
2017/04/11 22:46:07
I agree that test utils would be great. Maybe a bi
|
| + ON_CALL(*this, GetTranslateAcceptLanguages()) |
| + .WillByDefault(Return(&mock_translate_accept_languages_)); |
| + } |
| // TODO(groby): Does TranslateClient need a virtual dtor? |
| virtual ~MockTranslateClient() {} |
| @@ -124,6 +138,7 @@ class MockTranslateClient : public TranslateClient { |
| void(const GURL& report_url)); |
| private: |
| + MockTranslateAcceptLanguages mock_translate_accept_languages_; |
| TranslateDriver* driver_; |
| PrefService* prefs_; |
| }; |
| @@ -190,9 +205,9 @@ class TranslateManagerTest : public ::testing::Test { |
| std::unique_ptr<base::Value> profile(base::JSONReader::ReadAndReturnError( |
| json, 0, &error_code, &error_msg, &error_line, &error_column)); |
| - EXPECT_EQ(0, error_code) << error_msg << " at " << error_line << ":" |
| - << error_column << std::endl |
| - << json; |
| + EXPECT_EQ(0, error_code) |
| + << error_msg << " at " << error_line << ":" << error_column << std::endl |
| + << json; |
| return profile; |
| } |
| @@ -241,7 +256,6 @@ class TranslateManagerTest : public ::testing::Test { |
| base::test::ScopedFeatureList scoped_feature_list_; |
| }; |
| - |
| // Target language comes from application locale if the locale's language |
| // is supported. |
| TEST_F(TranslateManagerTest, GetTargetLanguageDefaultsToAppLocale) { |
| @@ -319,14 +333,15 @@ void ChangeThresholdInParams( |
| const char* target_language_confidence_threshold, |
| const char* target_language_probability_threshold) { |
| ASSERT_TRUE(variations::AssociateVariationParams( |
| - kTrialName, "Enabled", {{"initiate_translation_ulp_confidence_threshold", |
| - initiate_translation_confidence_threshold}, |
| - {"initiate_translation_ulp_probability_threshold", |
| - initiate_translation_probability_threshold}, |
| - {"target_language_ulp_confidence_threshold", |
| - target_language_confidence_threshold}, |
| - {"target_language_ulp_probability_threshold", |
| - target_language_probability_threshold}})); |
| + kTrialName, "Enabled", |
| + {{"initiate_translation_ulp_confidence_threshold", |
| + initiate_translation_confidence_threshold}, |
| + {"initiate_translation_ulp_probability_threshold", |
| + initiate_translation_probability_threshold}, |
| + {"target_language_ulp_confidence_threshold", |
| + target_language_confidence_threshold}, |
| + {"target_language_ulp_probability_threshold", |
| + target_language_probability_threshold}})); |
| } |
| // Normal ULP in Json |
| @@ -454,6 +469,97 @@ TEST_F(TranslateManagerTest, |
| EXPECT_FALSE(CallLanguageInULP("zh-TW")); |
| } |
| +TEST_F(TranslateManagerTest, TestRecordTranslateEvent) { |
| + PrepareTranslateManager(); |
| + const std::string locale = "zh-TW"; |
| + const std::string page_lang = "zh-CN"; |
| + |
| + network_notifier_.SimulateOnline(); |
| + manager_->set_application_locale(locale); |
| + ON_CALL(mock_translate_client_, IsTranslatableURL(_)) |
| + .WillByDefault(Return(true)); |
| + translate_manager_->GetLanguageState().LanguageDetermined(page_lang, true); |
| + |
| + translate_manager_->InitiateTranslation(page_lang); |
| + |
| + std::vector<metrics::TranslateEventProto> events_cache; |
| + mock_translate_ranker_.FlushTranslateEvents(&events_cache); |
| + EXPECT_EQ(0U, events_cache.size()); |
| + |
| + translate_manager_->RecordTranslateEvent( |
| + metrics::TranslateEventProto::USER_ACCEPT); |
| + mock_translate_ranker_.FlushTranslateEvents(&events_cache); |
| + EXPECT_EQ(1U, events_cache.size()); |
| + const metrics::TranslateEventProto& tep = events_cache[0]; |
| + EXPECT_EQ(page_lang, tep.source_language()); |
| + EXPECT_EQ(locale, tep.target_language()); |
| + EXPECT_EQ(0L, tep.decision_overrides_size()); |
| + EXPECT_EQ(metrics::TranslateEventProto::USER_ACCEPT, tep.event_type()); |
| +} |
| + |
| +TEST_F(TranslateManagerTest, TestShouldOverrideDecisionTrue) { |
| + mock_translate_ranker_.set_is_decision_override_enabled(true); |
| + PrepareTranslateManager(); |
| + const std::string locale = "zh-TW"; |
| + const std::string page_lang = "zh-CN"; |
| + |
| + network_notifier_.SimulateOnline(); |
| + manager_->set_application_locale(locale); |
| + ON_CALL(mock_translate_client_, IsTranslatableURL(_)) |
| + .WillByDefault(Return(true)); |
| + translate_manager_->GetLanguageState().LanguageDetermined(page_lang, true); |
| + |
| + translate_manager_->InitiateTranslation(page_lang); |
| + |
| + std::vector<metrics::TranslateEventProto> events_cache; |
| + EXPECT_TRUE(translate_manager_->ShouldOverrideDecision( |
| + metrics::TranslateEventProto::MATCHES_PREVIOUS_LANGUAGE)); |
| + EXPECT_TRUE(translate_manager_->ShouldOverrideDecision( |
| + metrics::TranslateEventProto::LANGUAGE_DISABLED_BY_AUTO_BLACKLIST)); |
| + |
| + translate_manager_->RecordTranslateEvent( |
| + metrics::TranslateEventProto::USER_DECLINE); |
| + mock_translate_ranker_.FlushTranslateEvents(&events_cache); |
| + EXPECT_EQ(1U, events_cache.size()); |
| + const metrics::TranslateEventProto& tep = events_cache[0]; |
| + EXPECT_EQ(page_lang, tep.source_language()); |
| + EXPECT_EQ(locale, tep.target_language()); |
| + EXPECT_EQ(2L, tep.decision_overrides_size()); |
| + EXPECT_THAT( |
| + tep.decision_overrides(), |
| + ::testing::ElementsAre( |
| + metrics::TranslateEventProto::MATCHES_PREVIOUS_LANGUAGE, |
| + metrics::TranslateEventProto::LANGUAGE_DISABLED_BY_AUTO_BLACKLIST)); |
| + EXPECT_EQ(metrics::TranslateEventProto::USER_DECLINE, tep.event_type()); |
| +} |
| + |
| +TEST_F(TranslateManagerTest, TestShouldOverrideDecisionFalse) { |
| + mock_translate_ranker_.set_is_decision_override_enabled(false); |
| + PrepareTranslateManager(); |
| + const std::string locale = "zh-TW"; |
| + const std::string page_lang = "zh-CN"; |
| + |
| + network_notifier_.SimulateOnline(); |
| + manager_->set_application_locale(locale); |
| + ON_CALL(mock_translate_client_, IsTranslatableURL(_)) |
| + .WillByDefault(Return(true)); |
| + translate_manager_->GetLanguageState().LanguageDetermined(page_lang, true); |
| + |
| + translate_manager_->InitiateTranslation(page_lang); |
| + std::vector<metrics::TranslateEventProto> events_cache; |
| + EXPECT_FALSE(translate_manager_->ShouldOverrideDecision( |
| + metrics::TranslateEventProto::MATCHES_PREVIOUS_LANGUAGE)); |
| + |
| + mock_translate_ranker_.FlushTranslateEvents(&events_cache); |
| + EXPECT_EQ(1U, events_cache.size()); |
| + const metrics::TranslateEventProto& tep = events_cache[0]; |
| + EXPECT_EQ(page_lang, tep.source_language()); |
| + EXPECT_EQ(locale, tep.target_language()); |
| + EXPECT_EQ(0L, tep.decision_overrides_size()); |
| + EXPECT_EQ(metrics::TranslateEventProto::MATCHES_PREVIOUS_LANGUAGE, |
| + tep.event_type()); |
| +} |
| + |
| } // namespace testing |
| } // namespace translate |