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

Side by Side Diff: components/translate/core/browser/translate_manager_unittest.cc

Issue 2906233004: Add translate client mock. (Closed)
Patch Set: fix comments Created 3 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_manager.h" 5 #include "components/translate/core/browser/translate_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/json/json_reader.h" 9 #include "base/json/json_reader.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
11 #include "base/run_loop.h" 11 #include "base/run_loop.h"
12 #include "base/test/histogram_tester.h" 12 #include "base/test/histogram_tester.h"
13 #include "base/test/scoped_feature_list.h" 13 #include "base/test/scoped_feature_list.h"
14 #include "build/build_config.h" 14 #include "build/build_config.h"
15 #include "components/infobars/core/infobar.h" 15 #include "components/infobars/core/infobar.h"
16 #include "components/metrics/proto/translate_event.pb.h" 16 #include "components/metrics/proto/translate_event.pb.h"
17 #include "components/pref_registry/pref_registry_syncable.h" 17 #include "components/pref_registry/pref_registry_syncable.h"
18 #include "components/sync_preferences/testing_pref_service_syncable.h" 18 #include "components/sync_preferences/testing_pref_service_syncable.h"
19 #include "components/translate/core/browser/mock_translate_client.h"
19 #include "components/translate/core/browser/mock_translate_driver.h" 20 #include "components/translate/core/browser/mock_translate_driver.h"
20 #include "components/translate/core/browser/mock_translate_ranker.h" 21 #include "components/translate/core/browser/mock_translate_ranker.h"
21 #include "components/translate/core/browser/translate_browser_metrics.h" 22 #include "components/translate/core/browser/translate_browser_metrics.h"
22 #include "components/translate/core/browser/translate_client.h" 23 #include "components/translate/core/browser/translate_client.h"
23 #include "components/translate/core/browser/translate_download_manager.h" 24 #include "components/translate/core/browser/translate_download_manager.h"
24 #include "components/translate/core/browser/translate_pref_names.h" 25 #include "components/translate/core/browser/translate_pref_names.h"
25 #include "components/translate/core/browser/translate_prefs.h" 26 #include "components/translate/core/browser/translate_prefs.h"
26 #include "components/variations/variations_associated_data.h" 27 #include "components/variations/variations_associated_data.h"
27 #include "net/base/network_change_notifier.h" 28 #include "net/base/network_change_notifier.h"
28 #include "testing/gmock/include/gmock/gmock.h" 29 #include "testing/gmock/include/gmock/gmock.h"
29 #include "testing/gtest/include/gtest/gtest.h" 30 #include "testing/gtest/include/gtest/gtest.h"
30 31
31 using testing::_; 32 using testing::_;
32 using testing::Return; 33 using testing::Return;
33 using testing::SetArgPointee; 34 using testing::SetArgPointee;
34 using testing::Pointee; 35 using testing::Pointee;
35 36
36 namespace translate { 37 namespace translate {
37 38
38 namespace { 39 namespace {
39 40
40 const char kTrialName[] = "MyTrial"; 41 const char kTrialName[] = "MyTrial";
41 42
42 #if defined(OS_CHROMEOS)
43 const char kLanguagePreferredLanguages[] =
44 "settings.language.preferred_languages";
45 #else
46 const char* kLanguagePreferredLanguages = nullptr;
47 #endif
48 const char kAcceptLanguages[] = "intl.accept_languages";
49
50 // Overrides NetworkChangeNotifier, simulating connection type changes 43 // Overrides NetworkChangeNotifier, simulating connection type changes
51 // for tests. 44 // for tests.
52 // TODO(groby): Combine with similar code in ResourceRequestAllowedNotifierTest. 45 // TODO(groby): Combine with similar code in ResourceRequestAllowedNotifierTest.
53 class TestNetworkChangeNotifier : public net::NetworkChangeNotifier { 46 class TestNetworkChangeNotifier : public net::NetworkChangeNotifier {
54 public: 47 public:
55 TestNetworkChangeNotifier() 48 TestNetworkChangeNotifier()
56 : net::NetworkChangeNotifier(), 49 : net::NetworkChangeNotifier(),
57 connection_type_to_return_( 50 connection_type_to_return_(
58 net::NetworkChangeNotifier::CONNECTION_UNKNOWN) {} 51 net::NetworkChangeNotifier::CONNECTION_UNKNOWN) {}
59 52
(...skipping 20 matching lines...) Expand all
80 return connection_type_to_return_; 73 return connection_type_to_return_;
81 } 74 }
82 75
83 // The currently simulated network connection type. If this is set to 76 // The currently simulated network connection type. If this is set to
84 // CONNECTION_NONE, then NetworkChangeNotifier::IsOffline will return true. 77 // CONNECTION_NONE, then NetworkChangeNotifier::IsOffline will return true.
85 net::NetworkChangeNotifier::ConnectionType connection_type_to_return_; 78 net::NetworkChangeNotifier::ConnectionType connection_type_to_return_;
86 79
87 DISALLOW_COPY_AND_ASSIGN(TestNetworkChangeNotifier); 80 DISALLOW_COPY_AND_ASSIGN(TestNetworkChangeNotifier);
88 }; 81 };
89 82
90 // TODO(groby): Combine with MockTranslateClient in TranslateUiDelegateTest.
91 class MockTranslateClient : public TranslateClient {
92 public:
93 MockTranslateClient(TranslateDriver* driver, PrefService* prefs)
94 : driver_(driver), prefs_(prefs) {}
95
96 // TODO(groby): Does TranslateClient need a virtual dtor?
97 virtual ~MockTranslateClient() {}
98
99 TranslateDriver* GetTranslateDriver() { return driver_; }
100 PrefService* GetPrefs() { return prefs_; }
101
102 std::unique_ptr<TranslatePrefs> GetTranslatePrefs() {
103 return base::MakeUnique<TranslatePrefs>(prefs_, kAcceptLanguages,
104 kLanguagePreferredLanguages);
105 }
106 MOCK_METHOD0(GetTranslateAcceptLanguages, TranslateAcceptLanguages*());
107 MOCK_CONST_METHOD0(GetInfobarIconID, int());
108
109 #if !defined(USE_AURA)
110 MOCK_CONST_METHOD1(CreateInfoBarMock,
111 infobars::InfoBar*(TranslateInfoBarDelegate*));
112 std::unique_ptr<infobars::InfoBar> CreateInfoBar(
113 std::unique_ptr<TranslateInfoBarDelegate> delegate) const {
114 return base::WrapUnique(CreateInfoBarMock(std::move(delegate).get()));
115 }
116 #endif
117
118 MOCK_METHOD5(ShowTranslateUI,
119 void(translate::TranslateStep,
120 const std::string&,
121 const std::string&,
122 TranslateErrors::Type,
123 bool));
124
125 MOCK_METHOD1(IsTranslatableURL, bool(const GURL&));
126 MOCK_METHOD1(ShowReportLanguageDetectionErrorUI,
127 void(const GURL& report_url));
128
129 private:
130 TranslateDriver* driver_;
131 PrefService* prefs_;
132 };
133
134 // Compares TranslateEventProto on a restricted set of fields. 83 // Compares TranslateEventProto on a restricted set of fields.
135 MATCHER_P(EqualsTranslateEventProto, translate_event, "") { 84 MATCHER_P(EqualsTranslateEventProto, translate_event, "") {
136 const metrics::TranslateEventProto& tep(translate_event); 85 const metrics::TranslateEventProto& tep(translate_event);
137 return (arg.source_language() == tep.source_language() && 86 return (arg.source_language() == tep.source_language() &&
138 arg.target_language() == tep.target_language() && 87 arg.target_language() == tep.target_language() &&
139 arg.event_type() == tep.event_type()); 88 arg.event_type() == tep.event_type());
140 } 89 }
141 90
142 } // namespace 91 } // namespace
143 92
144 namespace testing { 93 namespace testing {
145 94
146 class TranslateManagerTest : public ::testing::Test { 95 class TranslateManagerTest : public ::testing::Test {
147 protected: 96 protected:
148 TranslateManagerTest() 97 TranslateManagerTest()
149 : translate_prefs_(&prefs_, 98 : translate_prefs_(&prefs_,
150 kAcceptLanguages, 99 accept_languages_prefs,
151 kLanguagePreferredLanguages), 100 preferred_languages_prefs),
152 manager_(TranslateDownloadManager::GetInstance()), 101 manager_(TranslateDownloadManager::GetInstance()),
153 mock_translate_client_(&driver_, &prefs_), 102 mock_translate_client_(&driver_, &prefs_),
154 field_trial_list_(new base::FieldTrialList(nullptr)) {} 103 field_trial_list_(new base::FieldTrialList(nullptr)) {}
155 104
156 void SetUp() override { 105 void SetUp() override {
157 // Ensure we're not requesting a server-side translate language list. 106 // Ensure we're not requesting a server-side translate language list.
158 TranslateLanguageList::DisableUpdate(); 107 TranslateLanguageList::DisableUpdate();
159 prefs_.registry()->RegisterStringPref(kAcceptLanguages, std::string()); 108 prefs_.registry()->RegisterStringPref(accept_languages_prefs,
109 std::string());
160 #if defined(OS_CHROMEOS) 110 #if defined(OS_CHROMEOS)
161 prefs_.registry()->RegisterStringPref(kLanguagePreferredLanguages, 111 prefs_.registry()->RegisterStringPref(preferred_languages_prefs,
162 std::string()); 112 std::string());
163 #endif 113 #endif
164 TranslatePrefs::RegisterProfilePrefs(prefs_.registry()); 114 TranslatePrefs::RegisterProfilePrefs(prefs_.registry());
165 // TODO(groby): Figure out RegisterProfilePrefs() should register this. 115 // TODO(groby): Figure out RegisterProfilePrefs() should register this.
166 prefs_.registry()->RegisterBooleanPref( 116 prefs_.registry()->RegisterBooleanPref(
167 prefs::kEnableTranslate, true, 117 prefs::kEnableTranslate, true,
168 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 118 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
169 manager_->ResetForTesting(); 119 manager_->ResetForTesting();
170 } 120 }
171 121
172 void TearDown() override { 122 void TearDown() override {
173 manager_->ResetForTesting(); 123 manager_->ResetForTesting();
174 variations::testing::ClearAllVariationParams(); 124 variations::testing::ClearAllVariationParams();
175 } 125 }
176 126
177 // Utility function to prepare translate_manager_ for testing. 127 // Utility function to prepare translate_manager_ for testing.
178 void PrepareTranslateManager() { 128 void PrepareTranslateManager() {
179 TranslateManager::SetIgnoreMissingKeyForTesting(true); 129 TranslateManager::SetIgnoreMissingKeyForTesting(true);
180 translate_manager_.reset(new translate::TranslateManager( 130 translate_manager_.reset(new translate::TranslateManager(
181 &mock_translate_client_, &mock_translate_ranker_, kAcceptLanguages)); 131 &mock_translate_client_, &mock_translate_ranker_,
132 accept_languages_prefs));
182 } 133 }
183 134
184 // Prepare the test for ULP related tests. 135 // Prepare the test for ULP related tests.
185 // Put the ulp json into profile. 136 // Put the ulp json into profile.
186 void PrepareULPTest(const char* ulp_json, bool turn_on_feature) { 137 void PrepareULPTest(const char* ulp_json, bool turn_on_feature) {
187 PrepareTranslateManager(); 138 PrepareTranslateManager();
188 std::unique_ptr<base::Value> profile(CreateProfileFromJSON(ulp_json)); 139 std::unique_ptr<base::Value> profile(CreateProfileFromJSON(ulp_json));
189 prefs_.SetUserPref(TranslatePrefs::kPrefLanguageProfile, 140 prefs_.SetUserPref(TranslatePrefs::kPrefLanguageProfile,
190 std::move(profile)); 141 std::move(profile));
191 if (turn_on_feature) 142 if (turn_on_feature)
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 219
269 sync_preferences::TestingPrefServiceSyncable prefs_; 220 sync_preferences::TestingPrefServiceSyncable prefs_;
270 221
271 // TODO(groby): request TranslatePrefs from |mock_translate_client_| instead. 222 // TODO(groby): request TranslatePrefs from |mock_translate_client_| instead.
272 TranslatePrefs translate_prefs_; 223 TranslatePrefs translate_prefs_;
273 TranslateDownloadManager* manager_; 224 TranslateDownloadManager* manager_;
274 225
275 TestNetworkChangeNotifier network_notifier_; 226 TestNetworkChangeNotifier network_notifier_;
276 translate::testing::MockTranslateDriver driver_; 227 translate::testing::MockTranslateDriver driver_;
277 translate::testing::MockTranslateRanker mock_translate_ranker_; 228 translate::testing::MockTranslateRanker mock_translate_ranker_;
278 ::testing::NiceMock<MockTranslateClient> mock_translate_client_; 229 ::testing::NiceMock<translate::testing::MockTranslateClient>
230 mock_translate_client_;
279 std::unique_ptr<TranslateManager> translate_manager_; 231 std::unique_ptr<TranslateManager> translate_manager_;
280 std::unique_ptr<base::FieldTrialList> field_trial_list_; 232 std::unique_ptr<base::FieldTrialList> field_trial_list_;
281 base::test::ScopedFeatureList scoped_feature_list_; 233 base::test::ScopedFeatureList scoped_feature_list_;
282 }; 234 };
283 235
284 // Target language comes from application locale if the locale's language 236 // Target language comes from application locale if the locale's language
285 // is supported. 237 // is supported.
286 TEST_F(TranslateManagerTest, GetTargetLanguageDefaultsToAppLocale) { 238 TEST_F(TranslateManagerTest, GetTargetLanguageDefaultsToAppLocale) {
287 // Ensure the locale is set to a supported language. 239 // Ensure the locale is set to a supported language.
288 ASSERT_TRUE(TranslateDownloadManager::IsSupportedLanguage("en")); 240 ASSERT_TRUE(TranslateDownloadManager::IsSupportedLanguage("en"));
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 // First supported language is the fallback language. 287 // First supported language is the fallback language.
336 ASSERT_TRUE(TranslateDownloadManager::IsSupportedLanguage("en")); 288 ASSERT_TRUE(TranslateDownloadManager::IsSupportedLanguage("en"));
337 accept_language_list.push_back("en"); 289 accept_language_list.push_back("en");
338 translate_prefs_.UpdateLanguageList(accept_language_list); 290 translate_prefs_.UpdateLanguageList(accept_language_list);
339 EXPECT_EQ("en", TranslateManager::GetTargetLanguage(&translate_prefs_)); 291 EXPECT_EQ("en", TranslateManager::GetTargetLanguage(&translate_prefs_));
340 } 292 }
341 293
342 TEST_F(TranslateManagerTest, DontTranslateOffline) { 294 TEST_F(TranslateManagerTest, DontTranslateOffline) {
343 TranslateManager::SetIgnoreMissingKeyForTesting(true); 295 TranslateManager::SetIgnoreMissingKeyForTesting(true);
344 translate_manager_.reset(new translate::TranslateManager( 296 translate_manager_.reset(new translate::TranslateManager(
345 &mock_translate_client_, &mock_translate_ranker_, kAcceptLanguages)); 297 &mock_translate_client_, &mock_translate_ranker_,
298 accept_languages_prefs));
346 299
347 // The test measures that the "Translate was disabled" exit can only be 300 // The test measures that the "Translate was disabled" exit can only be
348 // reached after the early-out tests including IsOffline() passed. 301 // reached after the early-out tests including IsOffline() passed.
349 const char kMetricName[] = "Translate.InitiationStatus.v2"; 302 const char kMetricName[] = "Translate.InitiationStatus.v2";
350 base::HistogramTester histogram_tester; 303 base::HistogramTester histogram_tester;
351 304
352 prefs_.SetBoolean(prefs::kEnableTranslate, false); 305 prefs_.SetBoolean(prefs::kEnableTranslate, false);
353 306
354 translate_manager_->GetLanguageState().LanguageDetermined("de", true); 307 translate_manager_->GetLanguageState().LanguageDetermined("de", true);
355 308
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 _)) 562 _))
610 .WillOnce(Return(true)); 563 .WillOnce(Return(true));
611 SetHasLanguageChanged(false); 564 SetHasLanguageChanged(false);
612 SetLanguageTooOftenDenied("en"); 565 SetLanguageTooOftenDenied("en");
613 EXPECT_FALSE(translate_manager_->ShouldSuppressBubbleUI(false, "en")); 566 EXPECT_FALSE(translate_manager_->ShouldSuppressBubbleUI(false, "en"));
614 } 567 }
615 568
616 } // namespace testing 569 } // namespace testing
617 570
618 } // namespace translate 571 } // namespace translate
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698