Commit 97d92757 authored by Max Curran's avatar Max Curran Committed by Commit Bot

Updated TranslateManager unit tests to include the logging of the

trigger decision with TranslateMetricsLogger

More details on trigger decision: https://docs.google.com/document/d/11TJqU_YyJoxJE1huEqKECBa_OZ05O4WESXMJ2WeT4F0/edit?usp=sharing

Bug: 1114868
Change-Id: Ic04f56bf39771564ecab162e60d1677b068f166f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2520316Reviewed-by: default avatarScott Little <sclittle@chromium.org>
Commit-Queue: Max Curran <curranmax@chromium.org>
Cr-Commit-Position: refs/heads/master@{#826526}
parent 45021d3d
...@@ -12,6 +12,11 @@ MockTranslateMetricsLogger::MockTranslateMetricsLogger() = default; ...@@ -12,6 +12,11 @@ MockTranslateMetricsLogger::MockTranslateMetricsLogger() = default;
MockTranslateMetricsLogger::~MockTranslateMetricsLogger() = default; MockTranslateMetricsLogger::~MockTranslateMetricsLogger() = default;
base::WeakPtr<MockTranslateMetricsLogger>
MockTranslateMetricsLogger::GetWeakPtr() {
return weak_method_factory_.GetWeakPtr();
}
} // namespace testing } // namespace testing
} // namespace translate } // namespace translate
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "components/translate/core/browser/translate_metrics_logger.h" #include "components/translate/core/browser/translate_metrics_logger.h"
#include "base/memory/weak_ptr.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
namespace translate { namespace translate {
...@@ -22,12 +23,17 @@ class MockTranslateMetricsLogger : public TranslateMetricsLogger { ...@@ -22,12 +23,17 @@ class MockTranslateMetricsLogger : public TranslateMetricsLogger {
MockTranslateMetricsLogger& operator=(const MockTranslateMetricsLogger&) = MockTranslateMetricsLogger& operator=(const MockTranslateMetricsLogger&) =
delete; delete;
base::WeakPtr<MockTranslateMetricsLogger> GetWeakPtr();
MOCK_METHOD1(OnPageLoadStart, void(bool)); MOCK_METHOD1(OnPageLoadStart, void(bool));
MOCK_METHOD1(OnForegroundChange, void(bool)); MOCK_METHOD1(OnForegroundChange, void(bool));
MOCK_METHOD1(RecordMetrics, void(bool)); MOCK_METHOD1(RecordMetrics, void(bool));
MOCK_METHOD2(LogRankerMetrics, void(RankerDecision, uint32_t)); MOCK_METHOD2(LogRankerMetrics, void(RankerDecision, uint32_t));
MOCK_METHOD1(LogTriggerDecision, void(TriggerDecision)); MOCK_METHOD1(LogTriggerDecision, void(TriggerDecision));
MOCK_METHOD0(LogAutofillAssistantDeferredTriggerDecision, void()); MOCK_METHOD0(LogAutofillAssistantDeferredTriggerDecision, void());
private:
base::WeakPtrFactory<MockTranslateMetricsLogger> weak_method_factory_{this};
}; };
} // namespace testing } // namespace testing
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "components/sync_preferences/testing_pref_service_syncable.h" #include "components/sync_preferences/testing_pref_service_syncable.h"
#include "components/translate/core/browser/mock_translate_client.h" #include "components/translate/core/browser/mock_translate_client.h"
#include "components/translate/core/browser/mock_translate_driver.h" #include "components/translate/core/browser/mock_translate_driver.h"
#include "components/translate/core/browser/mock_translate_metrics_logger.h"
#include "components/translate/core/browser/mock_translate_ranker.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_accept_languages.h"
#include "components/translate/core/browser/translate_browser_metrics.h" #include "components/translate/core/browser/translate_browser_metrics.h"
...@@ -187,6 +188,30 @@ class TranslateManagerTest : public ::testing::Test { ...@@ -187,6 +188,30 @@ class TranslateManagerTest : public ::testing::Test {
return translate_manager_->null_translate_metrics_logger_.get(); return translate_manager_->null_translate_metrics_logger_.get();
} }
MockTranslateMetricsLogger* mock_translate_metrics_logger() {
return mock_translate_metrics_logger_.get();
}
void ExpectHighestPriorityTriggerDecision(
TriggerDecision highest_priority_trigger_decision) {
mock_translate_metrics_logger_ =
std::make_unique<MockTranslateMetricsLogger>();
translate_manager_->RegisterTranslateMetricsLogger(
mock_translate_metrics_logger_->GetWeakPtr());
// Requires that the given highest priority trigger decision is logged with
// the translate metrics logger first. After that value is logged, other
// values can be logged.
::testing::Expectation highest_priority_trigger_decision_expectation =
EXPECT_CALL(*mock_translate_metrics_logger_,
LogTriggerDecision(highest_priority_trigger_decision))
.Times(1);
EXPECT_CALL(*mock_translate_metrics_logger_, LogTriggerDecision(_))
.Times(::testing::AnyNumber())
.After(highest_priority_trigger_decision_expectation);
}
// Required to instantiate a net::test::MockNetworkChangeNotifier, because it // Required to instantiate a net::test::MockNetworkChangeNotifier, because it
// uses ObserverListThreadSafe. // uses ObserverListThreadSafe.
base::test::TaskEnvironment task_environment_; base::test::TaskEnvironment task_environment_;
...@@ -203,6 +228,7 @@ class TranslateManagerTest : public ::testing::Test { ...@@ -203,6 +228,7 @@ class TranslateManagerTest : public ::testing::Test {
::testing::NiceMock<translate::testing::MockTranslateClient> ::testing::NiceMock<translate::testing::MockTranslateClient>
mock_translate_client_; mock_translate_client_;
MockLanguageModel mock_language_model_; MockLanguageModel mock_language_model_;
std::unique_ptr<MockTranslateMetricsLogger> mock_translate_metrics_logger_;
std::unique_ptr<TranslateManager> translate_manager_; std::unique_ptr<TranslateManager> translate_manager_;
base::test::ScopedFeatureList scoped_feature_list_; base::test::ScopedFeatureList scoped_feature_list_;
}; };
...@@ -385,6 +411,8 @@ TEST_F(TranslateManagerTest, OverrideTriggerWithIndiaEnglishExperiment) { ...@@ -385,6 +411,8 @@ TEST_F(TranslateManagerTest, OverrideTriggerWithIndiaEnglishExperiment) {
translate_manager_ = std::make_unique<translate::TranslateManager>( translate_manager_ = std::make_unique<translate::TranslateManager>(
&mock_translate_client_, &mock_translate_ranker_, &mock_language_model_); &mock_translate_client_, &mock_translate_ranker_, &mock_language_model_);
ExpectHighestPriorityTriggerDecision(TriggerDecision::kShowUI);
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true); prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true);
translate_manager_->GetLanguageState()->LanguageDetermined("en", true); translate_manager_->GetLanguageState()->LanguageDetermined("en", true);
...@@ -422,6 +450,9 @@ TEST_F(TranslateManagerTest, ...@@ -422,6 +450,9 @@ TEST_F(TranslateManagerTest,
translate_manager_ = std::make_unique<translate::TranslateManager>( translate_manager_ = std::make_unique<translate::TranslateManager>(
&mock_translate_client_, &mock_translate_ranker_, &mock_language_model_); &mock_translate_client_, &mock_translate_ranker_, &mock_language_model_);
ExpectHighestPriorityTriggerDecision(
TriggerDecision::kDisabledSimilarLanguages);
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true); prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true);
translate_manager_->GetLanguageState()->LanguageDetermined("en", true); translate_manager_->GetLanguageState()->LanguageDetermined("en", true);
...@@ -456,6 +487,8 @@ TEST_F(TranslateManagerTest, ...@@ -456,6 +487,8 @@ TEST_F(TranslateManagerTest,
translate_manager_ = std::make_unique<translate::TranslateManager>( translate_manager_ = std::make_unique<translate::TranslateManager>(
&mock_translate_client_, &mock_translate_ranker_, &mock_language_model_); &mock_translate_client_, &mock_translate_ranker_, &mock_language_model_);
ExpectHighestPriorityTriggerDecision(TriggerDecision::kShowUI);
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true); prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true);
translate_manager_->GetLanguageState()->LanguageDetermined("en", true); translate_manager_->GetLanguageState()->LanguageDetermined("en", true);
...@@ -500,6 +533,8 @@ TEST_F(TranslateManagerTest, ...@@ -500,6 +533,8 @@ TEST_F(TranslateManagerTest,
translate_manager_ = std::make_unique<translate::TranslateManager>( translate_manager_ = std::make_unique<translate::TranslateManager>(
&mock_translate_client_, &mock_translate_ranker_, &mock_language_model_); &mock_translate_client_, &mock_translate_ranker_, &mock_language_model_);
ExpectHighestPriorityTriggerDecision(TriggerDecision::kShowUI);
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true); prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true);
translate_manager_->GetLanguageState()->LanguageDetermined("en", true); translate_manager_->GetLanguageState()->LanguageDetermined("en", true);
...@@ -551,6 +586,8 @@ TEST_F(TranslateManagerTest, ShouldHonorExperimentRankerEnforcement_Enforce) { ...@@ -551,6 +586,8 @@ TEST_F(TranslateManagerTest, ShouldHonorExperimentRankerEnforcement_Enforce) {
translate_manager_ = std::make_unique<translate::TranslateManager>( translate_manager_ = std::make_unique<translate::TranslateManager>(
&mock_translate_client_, &mock_translate_ranker_, &mock_language_model_); &mock_translate_client_, &mock_translate_ranker_, &mock_language_model_);
ExpectHighestPriorityTriggerDecision(TriggerDecision::kDisabledByRanker);
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true); prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true);
translate_manager_->GetLanguageState()->LanguageDetermined("en", true); translate_manager_->GetLanguageState()->LanguageDetermined("en", true);
...@@ -590,6 +627,8 @@ TEST_F(TranslateManagerTest, ...@@ -590,6 +627,8 @@ TEST_F(TranslateManagerTest,
translate_manager_ = std::make_unique<translate::TranslateManager>( translate_manager_ = std::make_unique<translate::TranslateManager>(
&mock_translate_client_, &mock_translate_ranker_, &mock_language_model_); &mock_translate_client_, &mock_translate_ranker_, &mock_language_model_);
ExpectHighestPriorityTriggerDecision(TriggerDecision::kShowUI);
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true); prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true);
translate_manager_->GetLanguageState()->LanguageDetermined("fr", true); translate_manager_->GetLanguageState()->LanguageDetermined("fr", true);
...@@ -620,6 +659,8 @@ TEST_F(TranslateManagerTest, LanguageAddedToAcceptLanguagesAfterTranslation) { ...@@ -620,6 +659,8 @@ TEST_F(TranslateManagerTest, LanguageAddedToAcceptLanguagesAfterTranslation) {
translate_manager_ = std::make_unique<translate::TranslateManager>( translate_manager_ = std::make_unique<translate::TranslateManager>(
&mock_translate_client_, &mock_translate_ranker_, &mock_language_model_); &mock_translate_client_, &mock_translate_ranker_, &mock_language_model_);
ExpectHighestPriorityTriggerDecision(TriggerDecision::kShowUI);
// Accept languages shouldn't contain "hi" before translating to that language // Accept languages shouldn't contain "hi" before translating to that language
std::vector<std::string> languages; std::vector<std::string> languages;
mock_translate_client_.GetTranslatePrefs()->GetLanguageList(&languages); mock_translate_client_.GetTranslatePrefs()->GetLanguageList(&languages);
...@@ -661,6 +702,8 @@ TEST_F(TranslateManagerTest, ...@@ -661,6 +702,8 @@ TEST_F(TranslateManagerTest,
translate_manager_ = std::make_unique<translate::TranslateManager>( translate_manager_ = std::make_unique<translate::TranslateManager>(
&mock_translate_client_, &mock_translate_ranker_, &mock_language_model_); &mock_translate_client_, &mock_translate_ranker_, &mock_language_model_);
ExpectHighestPriorityTriggerDecision(TriggerDecision::kShowUI);
// Add a regional variant locale to the list of accepted languages. // Add a regional variant locale to the list of accepted languages.
mock_translate_client_.GetTranslatePrefs()->AddToLanguageList("en-US", false); mock_translate_client_.GetTranslatePrefs()->AddToLanguageList("en-US", false);
...@@ -693,12 +736,16 @@ TEST_F(TranslateManagerTest, DontTranslateOffline) { ...@@ -693,12 +736,16 @@ TEST_F(TranslateManagerTest, DontTranslateOffline) {
TranslateManager::SetIgnoreMissingKeyForTesting(true); TranslateManager::SetIgnoreMissingKeyForTesting(true);
TranslateAcceptLanguages accept_languages(&prefs_, accept_languages_prefs); TranslateAcceptLanguages accept_languages(&prefs_, accept_languages_prefs);
ON_CALL(mock_translate_client_, IsTranslatableURL(GURL::EmptyGURL()))
.WillByDefault(Return(true));
ON_CALL(mock_translate_client_, GetTranslateAcceptLanguages()) ON_CALL(mock_translate_client_, GetTranslateAcceptLanguages())
.WillByDefault(Return(&accept_languages)); .WillByDefault(Return(&accept_languages));
translate_manager_ = std::make_unique<translate::TranslateManager>( translate_manager_ = std::make_unique<translate::TranslateManager>(
&mock_translate_client_, &mock_translate_ranker_, &mock_language_model_); &mock_translate_client_, &mock_translate_ranker_, &mock_language_model_);
ExpectHighestPriorityTriggerDecision(TriggerDecision::kDisabledOffline);
// The test measures that the "Translate was disabled" exit can only be // The test measures that the "Translate was disabled" exit can only be
// reached after the early-out tests including IsOffline() passed. // reached after the early-out tests including IsOffline() passed.
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
...@@ -737,6 +784,12 @@ TEST_F(TranslateManagerTest, DontTranslateAutofillAssistantRunning) { ...@@ -737,6 +784,12 @@ TEST_F(TranslateManagerTest, DontTranslateAutofillAssistantRunning) {
translate_manager_ = std::make_unique<translate::TranslateManager>( translate_manager_ = std::make_unique<translate::TranslateManager>(
&mock_translate_client_, &mock_translate_ranker_, &mock_language_model_); &mock_translate_client_, &mock_translate_ranker_, &mock_language_model_);
ExpectHighestPriorityTriggerDecision(
TriggerDecision::kDisabledURLNotSupported);
EXPECT_CALL(*mock_translate_metrics_logger(),
LogAutofillAssistantDeferredTriggerDecision())
.Times(1);
// The test measures that the "Translate was disabled" exit can only be // The test measures that the "Translate was disabled" exit can only be
// reached after the early-out tests including IsOffline() passed. // reached after the early-out tests including IsOffline() passed.
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
...@@ -1101,12 +1154,18 @@ TEST_F(TranslateManagerTest, PredefinedTargetLanguage_HonourUserSettings) { ...@@ -1101,12 +1154,18 @@ TEST_F(TranslateManagerTest, PredefinedTargetLanguage_HonourUserSettings) {
translate_manager_->GetLanguageState()->LanguageDetermined("de", true); translate_manager_->GetLanguageState()->LanguageDetermined("de", true);
ExpectHighestPriorityTriggerDecision(
TriggerDecision::kDisabledNeverTranslateLanguage);
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
translate_manager_->InitiateTranslation("de"); translate_manager_->InitiateTranslation("de");
EXPECT_THAT( EXPECT_THAT(
histogram_tester.GetAllSamples(kInitiationStatusName), histogram_tester.GetAllSamples(kInitiationStatusName),
ElementsAre(Bucket(metrics::INITIATION_STATUS_DISABLED_BY_CONFIG, 1))); ElementsAre(Bucket(metrics::INITIATION_STATUS_DISABLED_BY_CONFIG, 1)));
ExpectHighestPriorityTriggerDecision(
TriggerDecision::kAutomaticTranslationByPref);
translate_manager_->GetLanguageState()->LanguageDetermined("fr", true); translate_manager_->GetLanguageState()->LanguageDetermined("fr", true);
translate_manager_->InitiateTranslation("fr"); translate_manager_->InitiateTranslation("fr");
EXPECT_THAT( EXPECT_THAT(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment