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

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

Issue 1923143003: Implement the 2016Q2 Translate UI designe spec out in (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: change according to msw review comments Created 4 years, 7 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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_ui_delegate.h" 5 #include "components/translate/core/browser/translate_ui_delegate.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
11 #include "base/strings/stringprintf.h" 11 #include "base/strings/stringprintf.h"
12 #include "build/build_config.h" 12 #include "build/build_config.h"
13 #include "components/infobars/core/infobar.h" 13 #include "components/infobars/core/infobar.h"
14 #include "components/pref_registry/pref_registry_syncable.h"
14 #include "components/pref_registry/testing_pref_service_syncable.h" 15 #include "components/pref_registry/testing_pref_service_syncable.h"
15 #include "components/translate/core/browser/mock_translate_driver.h" 16 #include "components/translate/core/browser/mock_translate_driver.h"
16 #include "components/translate/core/browser/translate_client.h" 17 #include "components/translate/core/browser/translate_client.h"
17 #include "components/translate/core/browser/translate_infobar_delegate.h" 18 #include "components/translate/core/browser/translate_infobar_delegate.h"
18 #include "components/translate/core/browser/translate_manager.h" 19 #include "components/translate/core/browser/translate_manager.h"
19 #include "components/translate/core/browser/translate_prefs.h" 20 #include "components/translate/core/browser/translate_prefs.h"
20 #include "testing/gmock/include/gmock/gmock.h" 21 #include "testing/gmock/include/gmock/gmock.h"
21 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
22 #include "url/gurl.h" 23 #include "url/gurl.h"
23 24
24 using testing::Return; 25 using testing::Return;
25 using testing::Test; 26 using testing::Test;
26 using translate::testing::MockTranslateDriver; 27 using translate::testing::MockTranslateDriver;
27 28
28
29 namespace translate { 29 namespace translate {
30 30
31 #if defined(OS_CHROMEOS) 31 #if defined(OS_CHROMEOS)
32 const char* preferred_languages_prefs = 32 const char* preferred_languages_prefs = "settings.language.preferred_languages";
33 "settings.language.preferred_languages";
34 #else 33 #else
35 const char* preferred_languages_prefs = NULL; 34 const char* preferred_languages_prefs = NULL;
36 #endif 35 #endif
37 36
38 class MockTranslateClient : public TranslateClient { 37 class MockTranslateClient : public TranslateClient {
39 public: 38 public:
40 MockTranslateClient( 39 MockTranslateClient(TranslateDriver* driver, PrefService* prefs)
41 TranslateDriver* driver, 40 : driver_(driver), prefs_(prefs) {}
42 PrefService* prefs)
43 : driver_(driver),
44 prefs_(prefs) {
45 }
46 41
47 TranslateDriver* GetTranslateDriver() { return driver_; } 42 TranslateDriver* GetTranslateDriver() { return driver_; }
48 PrefService* GetPrefs() { return prefs_; } 43 PrefService* GetPrefs() { return prefs_; }
49 44
50 std::unique_ptr<TranslatePrefs> GetTranslatePrefs() { 45 std::unique_ptr<TranslatePrefs> GetTranslatePrefs() {
51 return base::WrapUnique(new TranslatePrefs(prefs_, "intl.accept_languages", 46 return base::WrapUnique(new TranslatePrefs(prefs_, "intl.accept_languages",
52 preferred_languages_prefs)); 47 preferred_languages_prefs));
53 } 48 }
54 49
55 MOCK_METHOD0(GetTranslateAcceptLanguages, TranslateAcceptLanguages*()); 50 MOCK_METHOD0(GetTranslateAcceptLanguages, TranslateAcceptLanguages*());
56 MOCK_CONST_METHOD0(GetInfobarIconID, int()); 51 MOCK_CONST_METHOD0(GetInfobarIconID, int());
57 52
58 MOCK_CONST_METHOD1(CreateInfoBarMock, 53 MOCK_CONST_METHOD1(CreateInfoBarMock,
59 infobars::InfoBar*(TranslateInfoBarDelegate*)); 54 infobars::InfoBar*(TranslateInfoBarDelegate*));
60 std::unique_ptr<infobars::InfoBar> CreateInfoBar( 55 std::unique_ptr<infobars::InfoBar> CreateInfoBar(
61 std::unique_ptr<TranslateInfoBarDelegate> delegate) const { 56 std::unique_ptr<TranslateInfoBarDelegate> delegate) const {
62 return base::WrapUnique(CreateInfoBarMock(std::move(delegate).get())); 57 return base::WrapUnique(CreateInfoBarMock(std::move(delegate).get()));
63 } 58 }
64 59
65 MOCK_METHOD5(ShowTranslateUI, void(translate::TranslateStep, 60 MOCK_METHOD5(ShowTranslateUI,
66 const std::string&, 61 void(translate::TranslateStep,
67 const std::string&, 62 const std::string&,
68 TranslateErrors::Type, 63 const std::string&,
69 bool)); 64 TranslateErrors::Type,
65 bool));
70 MOCK_METHOD1(IsTranslatableURL, bool(const GURL&)); 66 MOCK_METHOD1(IsTranslatableURL, bool(const GURL&));
71 MOCK_METHOD1(ShowReportLanguageDetectionErrorUI, void(const GURL&)); 67 MOCK_METHOD1(ShowReportLanguageDetectionErrorUI, void(const GURL&));
72 68
73 private: 69 private:
74 TranslateDriver* driver_; 70 TranslateDriver* driver_;
75 PrefService* prefs_; 71 PrefService* prefs_;
76 }; 72 };
77 73
78 class TranslateUIDelegateTest : public ::testing::Test { 74 class TranslateUIDelegateTest : public ::testing::Test {
79 public: 75 public:
80 TranslateUIDelegateTest() : ::testing::Test() {} 76 TranslateUIDelegateTest() : ::testing::Test() {}
81 77
82 void SetUp() override { 78 void SetUp() override {
83 pref_service_.reset(new user_prefs::TestingPrefServiceSyncable()); 79 pref_service_.reset(new user_prefs::TestingPrefServiceSyncable());
80 pref_service_->registry()->RegisterStringPref(
81 "settings.language.preferred_languages", std::string());
82 pref_service_->registry()->RegisterStringPref("intl.accept_languages",
83 std::string());
84 TranslatePrefs::RegisterProfilePrefs(pref_service_->registry()); 84 TranslatePrefs::RegisterProfilePrefs(pref_service_->registry());
85 85
86 client_.reset(new MockTranslateClient( 86 client_.reset(new MockTranslateClient(&driver_, pref_service_.get()));
87 &driver_,
88 pref_service_.get()));
89 87
90 manager_.reset(new TranslateManager(client_.get(), "hi")); 88 manager_.reset(new TranslateManager(client_.get(), "hi"));
91 manager_->GetLanguageState().set_translation_declined(false); 89 manager_->GetLanguageState().set_translation_declined(false);
92 90
93 delegate_.reset(new TranslateUIDelegate( 91 delegate_.reset(
94 manager_->GetWeakPtr(), "ar", "fr")); 92 new TranslateUIDelegate(manager_->GetWeakPtr(), "ar", "fr"));
95 93
96 ASSERT_FALSE(client_->GetTranslatePrefs()->IsTooOftenDenied("ar")); 94 ASSERT_FALSE(client_->GetTranslatePrefs()->IsTooOftenDenied("ar"));
95 base::FeatureList::ClearInstanceForTesting();
96 base::FeatureList::SetInstance(base::WrapUnique(new base::FeatureList));
97 } 97 }
98 98
99 void TurnOnTranslate2016Q2UIFlag() {
100 base::FeatureList::ClearInstanceForTesting();
101 std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
102 feature_list->InitializeFromCommandLine(translate::kTranslateUI2016Q2.name,
103 std::string());
104 base::FeatureList::SetInstance(std::move(feature_list));
105 }
99 106
100 MockTranslateDriver driver_; 107 MockTranslateDriver driver_;
101 std::unique_ptr<MockTranslateClient> client_; 108 std::unique_ptr<MockTranslateClient> client_;
102 std::unique_ptr<user_prefs::TestingPrefServiceSyncable> pref_service_; 109 std::unique_ptr<user_prefs::TestingPrefServiceSyncable> pref_service_;
103 std::unique_ptr<TranslateManager> manager_; 110 std::unique_ptr<TranslateManager> manager_;
104 std::unique_ptr<TranslateUIDelegate> delegate_; 111 std::unique_ptr<TranslateUIDelegate> delegate_;
105 112
106 private: 113 private:
107 DISALLOW_COPY_AND_ASSIGN(TranslateUIDelegateTest); 114 DISALLOW_COPY_AND_ASSIGN(TranslateUIDelegateTest);
108 }; 115 };
109 116
110
111 TEST_F(TranslateUIDelegateTest, CheckDeclinedFalse) { 117 TEST_F(TranslateUIDelegateTest, CheckDeclinedFalse) {
112 std::unique_ptr<TranslatePrefs> prefs(client_->GetTranslatePrefs()); 118 std::unique_ptr<TranslatePrefs> prefs(client_->GetTranslatePrefs());
113 for (int i = 0; i < 10; i++) { 119 for (int i = 0; i < 10; i++) {
114 prefs->IncrementTranslationAcceptedCount("ar"); 120 prefs->IncrementTranslationAcceptedCount("ar");
115 } 121 }
116 prefs->IncrementTranslationDeniedCount("ar"); 122 prefs->IncrementTranslationDeniedCount("ar");
117 int accepted_count = prefs->GetTranslationAcceptedCount("ar"); 123 int accepted_count = prefs->GetTranslationAcceptedCount("ar");
118 int denied_count = prefs->GetTranslationDeniedCount("ar"); 124 int denied_count = prefs->GetTranslationDeniedCount("ar");
125 int ignored_count = prefs->GetTranslationIgnoredCount("ar");
119 126
120 delegate_->TranslationDeclined(false); 127 delegate_->TranslationDeclined(false);
121 128
122 EXPECT_EQ(accepted_count, prefs->GetTranslationAcceptedCount("ar")); 129 EXPECT_EQ(accepted_count, prefs->GetTranslationAcceptedCount("ar"));
123 EXPECT_EQ(denied_count, prefs->GetTranslationDeniedCount("ar")); 130 EXPECT_EQ(denied_count, prefs->GetTranslationDeniedCount("ar"));
131 EXPECT_EQ(ignored_count + 1, prefs->GetTranslationIgnoredCount("ar"));
124 EXPECT_FALSE(prefs->IsTooOftenDenied("ar")); 132 EXPECT_FALSE(prefs->IsTooOftenDenied("ar"));
125 EXPECT_FALSE(manager_->GetLanguageState().translation_declined()); 133 EXPECT_FALSE(manager_->GetLanguageState().translation_declined());
126 } 134 }
127 135
128 TEST_F(TranslateUIDelegateTest, CheckDeclinedTrue) { 136 TEST_F(TranslateUIDelegateTest, CheckDeclinedTrue) {
129 std::unique_ptr<TranslatePrefs> prefs(client_->GetTranslatePrefs()); 137 std::unique_ptr<TranslatePrefs> prefs(client_->GetTranslatePrefs());
130 for (int i = 0; i < 10; i++) { 138 for (int i = 0; i < 10; i++) {
131 prefs->IncrementTranslationAcceptedCount("ar"); 139 prefs->IncrementTranslationAcceptedCount("ar");
132 } 140 }
133 prefs->IncrementTranslationDeniedCount("ar"); 141 prefs->IncrementTranslationDeniedCount("ar");
134 int denied_count = prefs->GetTranslationDeniedCount("ar"); 142 int denied_count = prefs->GetTranslationDeniedCount("ar");
143 int ignored_count = prefs->GetTranslationIgnoredCount("ar");
135 144
136 delegate_->TranslationDeclined(true); 145 delegate_->TranslationDeclined(true);
137 146
138 EXPECT_EQ(0, prefs->GetTranslationAcceptedCount("ar")); 147 EXPECT_EQ(0, prefs->GetTranslationAcceptedCount("ar"));
139 EXPECT_EQ(denied_count + 1, prefs->GetTranslationDeniedCount("ar")); 148 EXPECT_EQ(denied_count + 1, prefs->GetTranslationDeniedCount("ar"));
149 EXPECT_EQ(ignored_count, prefs->GetTranslationIgnoredCount("ar"));
140 EXPECT_TRUE(manager_->GetLanguageState().translation_declined()); 150 EXPECT_TRUE(manager_->GetLanguageState().translation_declined());
141 } 151 }
142 152
153 TEST_F(TranslateUIDelegateTest, SetLanguageBlocked) {
154 std::unique_ptr<TranslatePrefs> prefs(client_->GetTranslatePrefs());
155 manager_->GetLanguageState().SetTranslateEnabled(true);
156 EXPECT_TRUE(manager_->GetLanguageState().translate_enabled());
157 prefs->UnblockLanguage("ar");
158 EXPECT_FALSE(prefs->IsBlockedLanguage("ar"));
159
160 delegate_->SetLanguageBlocked(true);
161
162 EXPECT_TRUE(prefs->IsBlockedLanguage("ar"));
163 EXPECT_FALSE(manager_->GetLanguageState().translate_enabled());
164
165 manager_->GetLanguageState().SetTranslateEnabled(true);
msw 2016/04/29 23:43:40 nit: remove if not needed (called on 155)
ftang 2016/04/30 01:24:50 no. Since I merged the two tests as you suggested,
166
167 delegate_->SetLanguageBlocked(false);
168
169 EXPECT_FALSE(prefs->IsBlockedLanguage("ar"));
170 EXPECT_TRUE(manager_->GetLanguageState().translate_enabled());
171 }
172
173 TEST_F(TranslateUIDelegateTest, SetLanguageBlockedTrueIn2016Q2UI) {
174 TurnOnTranslate2016Q2UIFlag();
175 std::unique_ptr<TranslatePrefs> prefs(client_->GetTranslatePrefs());
176 manager_->GetLanguageState().SetTranslateEnabled(true);
177 EXPECT_TRUE(manager_->GetLanguageState().translate_enabled());
178 prefs->UnblockLanguage("ar");
179 EXPECT_FALSE(prefs->IsBlockedLanguage("ar"));
180
181 delegate_->SetLanguageBlocked(true);
182
183 EXPECT_TRUE(prefs->IsBlockedLanguage("ar"));
184 EXPECT_TRUE(manager_->GetLanguageState().translate_enabled());
185 }
186
187 TEST_F(TranslateUIDelegateTest, SetLanguageBlockedFalseIn2016Q2UI) {
msw 2016/04/29 23:43:41 Combine this test with the one above, so the new a
ftang 2016/04/30 01:24:50 Done.
188 TurnOnTranslate2016Q2UIFlag();
189 std::unique_ptr<TranslatePrefs> prefs(client_->GetTranslatePrefs());
190 manager_->GetLanguageState().SetTranslateEnabled(true);
191 EXPECT_TRUE(manager_->GetLanguageState().translate_enabled());
192 prefs->BlockLanguage("ar");
193 EXPECT_TRUE(prefs->IsBlockedLanguage("ar"));
194
195 delegate_->SetLanguageBlocked(false);
196
197 EXPECT_FALSE(prefs->IsBlockedLanguage("ar"));
198 EXPECT_TRUE(manager_->GetLanguageState().translate_enabled());
199 }
200
201 TEST_F(TranslateUIDelegateTest, ShouldAlwaysTranslateCheckedByDefault) {
202 std::unique_ptr<TranslatePrefs> prefs(client_->GetTranslatePrefs());
203 prefs->ResetTranslationAcceptedCount("ar");
204
205 for (int i = 0; i < 2; i++) {
206 EXPECT_FALSE(delegate_->ShouldAlwaysTranslateCheckedByDefault());
207 prefs->IncrementTranslationAcceptedCount("ar");
208 }
209 EXPECT_TRUE(delegate_->ShouldAlwaysTranslateCheckedByDefault());
210 prefs->IncrementTranslationAcceptedCount("ar");
211
212 EXPECT_FALSE(delegate_->ShouldAlwaysTranslateCheckedByDefault());
213 }
214
143 // TODO(ftang) Currently this file only test TranslationDeclined(), we 215 // TODO(ftang) Currently this file only test TranslationDeclined(), we
144 // need to add the test for other functions soon to increase the test 216 // need to add the test for other functions soon to increase the test
145 // coverage. 217 // coverage.
146 218
147 } // namespace translate 219 } // namespace translate
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698