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

Unified Diff: components/translate/core/browser/translate_manager_unittest.cc

Issue 2697703004: Allow TranslateRanker to override decisions taken by heuristics. (Closed)
Patch Set: Make ShouldSuppressBubbleUI easier to read. Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
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 c6a9d408c41ac5c3570b86460db2d74883855084..043e036075e89367fc17ce6bfdb3ce542bd8e6f8 100644
--- a/components/translate/core/browser/translate_manager_unittest.cc
+++ b/components/translate/core/browser/translate_manager_unittest.cc
@@ -13,6 +13,7 @@
#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"
@@ -30,6 +31,7 @@
using testing::_;
using testing::Return;
using testing::SetArgPointee;
+using testing::Pointee;
namespace translate {
@@ -45,7 +47,8 @@ const char* kLanguagePreferredLanguages = nullptr;
#endif
const char kAcceptLanguages[] = "intl.accept_languages";
-// Overrides NetworkChangeNotifier, simulatng connection type changes for tests.
+// Overrides NetworkChangeNotifier, simulating connection type changes
+// for tests.
// TODO(groby): Combine with similar code in ResourceRequestAllowedNotifierTest.
class TestNetworkChangeNotifier : public net::NetworkChangeNotifier {
public:
@@ -65,7 +68,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() {
@@ -128,6 +131,14 @@ class MockTranslateClient : public TranslateClient {
PrefService* prefs_;
};
+// Compares TranslateEventProto on a restricted set of fields.
+MATCHER_P(EqualsTranslateEventProto, translate_event, "") {
+ const metrics::TranslateEventProto& tep(translate_event);
+ return (arg.source_language() == tep.source_language() &&
+ arg.target_language() == tep.target_language() &&
+ arg.event_type() == tep.event_type());
+}
+
} // namespace
namespace testing {
@@ -190,9 +201,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;
}
@@ -217,14 +228,43 @@ class TranslateManagerTest : public ::testing::Test {
base::FieldTrial::SESSION_RANDOMIZED, default_group_number);
}
+ void SetHasLanguageChanged(bool has_language_changed) {
+ translate_manager_->GetLanguageState().LanguageDetermined("de", true);
+ translate_manager_->GetLanguageState().DidNavigate(false, true, false);
+ translate_manager_->GetLanguageState().LanguageDetermined(
+ has_language_changed ? "en" : "de", true);
+ EXPECT_EQ(has_language_changed,
+ translate_manager_->GetLanguageState().HasLanguageChanged());
+ }
+
+ void SetLanguageTooOftenDenied(const std::string& language) {
+ if (base::FeatureList::IsEnabled(kTranslateUI2016Q2)) {
+ translate_prefs_.ResetDenialState();
+ for (int i = 0; i < 4; i++) {
+ translate_prefs_.IncrementTranslationDeniedCount(language);
+ }
+ } else {
+ translate_prefs_.UpdateLastDeniedTime(language);
+ translate_prefs_.UpdateLastDeniedTime(language);
+ }
+
+ EXPECT_TRUE(translate_prefs_.IsTooOftenDenied(language));
+ EXPECT_FALSE(translate_prefs_.IsTooOftenDenied("other_language"));
+ }
+
// Functions to help TEST_F in subclass to access private functions in
- // TranslteManager so we can unit test them.
+ // TranslateManager so we can unit test them.
std::string CallGetTargetLanguageFromULP() {
return TranslateManager::GetTargetLanguageFromULP(&translate_prefs_);
}
bool CallLanguageInULP(const std::string& language) {
return translate_manager_->LanguageInULP(language);
}
+ void InitTranslateEvent(const std::string& src_lang,
+ const std::string& dst_lang) {
+ translate_manager_->InitTranslateEvent(src_lang, dst_lang,
+ translate_prefs_);
+ }
sync_preferences::TestingPrefServiceSyncable prefs_;
@@ -241,7 +281,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) {
@@ -336,14 +375,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
@@ -463,7 +503,7 @@ TEST_F(TranslateManagerTest,
TestLanguageInULPLowConfidenceThresholdFromConfig) {
PrepareULPTest(ulp_1, true);
ChangeThresholdInParams("0.79", "0.39", "", "");
- // Both "fr" and "pt" should reutrn true because the confidence threshold is
+ // Both "fr" and "pt" should return true because the confidence threshold is
// 0.79 and lower than 0.8 and the probability threshold is lower than both
// the one with "fr" (0.6) and "pt-PT" (0.4).
EXPECT_TRUE(CallLanguageInULP("fr"));
@@ -471,6 +511,108 @@ 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";
+ metrics::TranslateEventProto expected_tep;
+ expected_tep.set_target_language(locale);
+ expected_tep.set_source_language(page_lang);
+ EXPECT_CALL(
+ mock_translate_ranker_,
+ RecordTranslateEvent(metrics::TranslateEventProto::USER_ACCEPT, _,
+ Pointee(EqualsTranslateEventProto(expected_tep))))
+ .Times(1);
+
+ InitTranslateEvent(page_lang, locale);
+ translate_manager_->RecordTranslateEvent(
+ metrics::TranslateEventProto::USER_ACCEPT);
+}
+
+TEST_F(TranslateManagerTest, TestShouldOverrideDecision) {
+ PrepareTranslateManager();
+ const int kEventType = 1;
+ EXPECT_CALL(
+ mock_translate_ranker_,
+ ShouldOverrideDecision(
+ kEventType, _,
+ Pointee(EqualsTranslateEventProto(metrics::TranslateEventProto()))))
+ .WillOnce(Return(false));
+ EXPECT_FALSE(translate_manager_->ShouldOverrideDecision(kEventType));
+
+ EXPECT_CALL(
+ mock_translate_ranker_,
+ ShouldOverrideDecision(
+ kEventType, _,
+ Pointee(EqualsTranslateEventProto(metrics::TranslateEventProto()))))
+ .WillOnce(Return(true));
+ EXPECT_TRUE(translate_manager_->ShouldOverrideDecision(kEventType));
+}
+
+TEST_F(TranslateManagerTest, ShouldSuppressBubbleUI_Default) {
+ PrepareTranslateManager();
+ SetHasLanguageChanged(true);
+ EXPECT_FALSE(translate_manager_->ShouldSuppressBubbleUI(false, "en"));
+ EXPECT_FALSE(translate_manager_->ShouldSuppressBubbleUI(true, "en"));
+}
+
+TEST_F(TranslateManagerTest, ShouldSuppressBubbleUI_HasLanguageChangedFalse) {
+ PrepareTranslateManager();
+ SetHasLanguageChanged(false);
+ EXPECT_CALL(
+ mock_translate_ranker_,
+ ShouldOverrideDecision(
+ metrics::TranslateEventProto::MATCHES_PREVIOUS_LANGUAGE, _, _))
+ .WillOnce(Return(false));
+ EXPECT_TRUE(translate_manager_->ShouldSuppressBubbleUI(false, "en"));
+
+ EXPECT_CALL(mock_translate_ranker_, ShouldOverrideDecision(_, _, _))
+ .WillOnce(Return(false));
+
+ EXPECT_TRUE(translate_manager_->ShouldSuppressBubbleUI(true, "en"));
+}
+
+TEST_F(TranslateManagerTest, ShouldSuppressBubbleUI_NewUI) {
+ PrepareTranslateManager();
+ base::test::ScopedFeatureList scoped_feature_list;
+ scoped_feature_list.InitAndEnableFeature(translate::kTranslateUI2016Q2);
+ SetHasLanguageChanged(false);
+ EXPECT_FALSE(translate_manager_->ShouldSuppressBubbleUI(false, "en"));
+}
+
+TEST_F(TranslateManagerTest, ShouldSuppressBubbleUI_IsTooOftenDenied) {
+ PrepareTranslateManager();
+ SetHasLanguageChanged(true);
+ SetLanguageTooOftenDenied("en");
+ EXPECT_CALL(
+ mock_translate_ranker_,
+ ShouldOverrideDecision(
+ metrics::TranslateEventProto::LANGUAGE_DISABLED_BY_AUTO_BLACKLIST, _,
+ _))
+ .WillOnce(Return(false));
+ EXPECT_TRUE(translate_manager_->ShouldSuppressBubbleUI(false, "en"));
+ EXPECT_FALSE(translate_manager_->ShouldSuppressBubbleUI(false, "de"));
+ EXPECT_FALSE(translate_manager_->ShouldSuppressBubbleUI(true, "en"));
+}
+
+TEST_F(TranslateManagerTest, ShouldSuppressBubbleUI_Override) {
+ PrepareTranslateManager();
+ EXPECT_CALL(
+ mock_translate_ranker_,
+ ShouldOverrideDecision(
+ metrics::TranslateEventProto::MATCHES_PREVIOUS_LANGUAGE, _, _))
+ .WillOnce(Return(true));
+ EXPECT_CALL(
+ mock_translate_ranker_,
+ ShouldOverrideDecision(
+ metrics::TranslateEventProto::LANGUAGE_DISABLED_BY_AUTO_BLACKLIST, _,
+ _))
+ .WillOnce(Return(true));
+ SetHasLanguageChanged(false);
+ SetLanguageTooOftenDenied("en");
+ EXPECT_FALSE(translate_manager_->ShouldSuppressBubbleUI(false, "en"));
+}
+
} // namespace testing
} // namespace translate

Powered by Google App Engine
This is Rietveld 408576698