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

Side by Side Diff: chrome/browser/chromeos/input_method/browser_state_monitor_unittest.cc

Issue 11415266: Extract a delegate interface from c/b/input_method to permit decoupling from c/b. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Class comment. Created 8 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/chromeos/input_method/browser_state_monitor.h" 5 #include "chrome/browser/chromeos/input_method/browser_state_monitor.h"
6 6
7 #include "chrome/browser/api/prefs/pref_member.h" 7 #include <string>
8
9 #include "base/basictypes.h"
10 #include "chrome/browser/chromeos/input_method/mock_input_method_delegate.h"
8 #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h" 11 #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h"
9 #include "chrome/common/chrome_notification_types.h" 12 #include "chrome/common/chrome_notification_types.h"
10 #include "chrome/common/pref_names.h"
11 #include "chrome/test/base/testing_pref_service.h"
12 #include "content/public/browser/notification_details.h" 13 #include "content/public/browser/notification_details.h"
13 #include "content/public/browser/notification_service.h" 14 #include "content/public/browser/notification_service.h"
14 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
15 16
16 namespace chromeos { 17 namespace chromeos {
17 namespace input_method { 18 namespace input_method {
18 namespace { 19 namespace {
19 20
20 void RegisterTestPrefs(PrefService* prefs) {
21 prefs->RegisterStringPref(prefs::kLanguagePreviousInputMethod,
22 "",
23 PrefService::UNSYNCABLE_PREF);
24 prefs->RegisterStringPref(prefs::kLanguageCurrentInputMethod,
25 "",
26 PrefService::UNSYNCABLE_PREF);
27 }
28
29 class TestableBrowserStateMonitor : public BrowserStateMonitor { 21 class TestableBrowserStateMonitor : public BrowserStateMonitor {
30 public: 22 public:
31 using BrowserStateMonitor::InputMethodChanged; 23 using BrowserStateMonitor::InputMethodChanged;
32 using BrowserStateMonitor::Observe; 24 using BrowserStateMonitor::Observe;
33 25
34 explicit TestableBrowserStateMonitor(InputMethodManager* manager) 26 TestableBrowserStateMonitor(InputMethodManager* manager,
35 : BrowserStateMonitor(manager) { 27 InputMethodDelegate* delegate)
36 ResetCounters(); 28 : BrowserStateMonitor(manager, delegate) {
37 } 29 }
38
39 virtual ~TestableBrowserStateMonitor() {
40 }
41
42 void ResetCounters() {
43 update_local_state_count_ = 0;
44 last_local_state_.clear();
45 update_user_pref_count_ = 0;
46 last_user_pref_.clear();
47 }
48
49 int update_local_state_count() const { return update_local_state_count_; }
50 const std::string& last_local_state() const { return last_local_state_; }
51 int update_user_pref_count() const { return update_user_pref_count_; }
52 const std::string& last_user_pref() const { return last_user_pref_; }
53
54 protected:
55 virtual void UpdateLocalState(
56 const std::string& current_input_method) OVERRIDE {
57 ++update_local_state_count_;
58 last_local_state_ = current_input_method;
59 // Do not call the parent class' method since it depends on the global
60 // browser object which is a bit difficult to mock. This should be okay
61 // since the method is really simple.
62 }
63
64 virtual void UpdateUserPreferences(
65 const std::string& current_input_method) OVERRIDE {
66 ++update_user_pref_count_;
67 last_user_pref_ = current_input_method;
68 BrowserStateMonitor::UpdateUserPreferences(current_input_method);
69 }
70
71 private:
72 int update_local_state_count_;
73 std::string last_local_state_;
74 int update_user_pref_count_;
75 std::string last_user_pref_;
76
77 DISALLOW_COPY_AND_ASSIGN(TestableBrowserStateMonitor);
78 }; 30 };
79 31
80 } // anonymous namespace 32 } // anonymous namespace
81 33
82 TEST(BrowserStateMonitorTest, TestConstruction) { 34 TEST(BrowserStateMonitorLifetimeTest, TestConstruction) {
83 TestingPrefService prefs;
84 RegisterTestPrefs(&prefs);
85 MockInputMethodManager mock_manager; 35 MockInputMethodManager mock_manager;
86 TestableBrowserStateMonitor monitor(&mock_manager); 36 MockInputMethodDelegate mock_delegate;
87 monitor.SetPrefServiceForTesting(&prefs); 37 TestableBrowserStateMonitor monitor(&mock_manager, &mock_delegate);
88 38
89 // Check the initial state of the |mock_manager| and |monitor| objects. 39 // Check the initial state of the |mock_manager| and |monitor| objects.
90 EXPECT_EQ(1, mock_manager.add_observer_count_); 40 EXPECT_EQ(1, mock_manager.add_observer_count_);
91 EXPECT_EQ(1, mock_manager.set_state_count_); 41 EXPECT_EQ(1, mock_manager.set_state_count_);
92 EXPECT_EQ(InputMethodManager::STATE_LOGIN_SCREEN, mock_manager.last_state_); 42 EXPECT_EQ(InputMethodManager::STATE_LOGIN_SCREEN, mock_manager.last_state_);
93 EXPECT_EQ(InputMethodManager::STATE_LOGIN_SCREEN, monitor.state()); 43 EXPECT_EQ(InputMethodManager::STATE_LOGIN_SCREEN, monitor.state());
94 } 44 }
95 45
96 TEST(BrowserStateMonitorTest, TestDestruction) { 46 TEST(BrowserStateMonitorLifetimeTest, TestDestruction) {
97 TestingPrefService prefs;
98 RegisterTestPrefs(&prefs);
99 MockInputMethodManager mock_manager; 47 MockInputMethodManager mock_manager;
48 MockInputMethodDelegate mock_delegate;
100 { 49 {
101 TestableBrowserStateMonitor monitor(&mock_manager); 50 TestableBrowserStateMonitor monitor(&mock_manager, &mock_delegate);
102 monitor.SetPrefServiceForTesting(&prefs);
103 } 51 }
104 EXPECT_EQ(1, mock_manager.remove_observer_count_); 52 EXPECT_EQ(1, mock_manager.remove_observer_count_);
105 } 53 }
106 54
107 TEST(BrowserStateMonitorTest, TestObserveLoginUserChanged) { 55 namespace {
108 TestingPrefService prefs; 56
109 RegisterTestPrefs(&prefs); 57 class BrowserStateMonitorTest : public testing::Test {
110 MockInputMethodManager mock_manager; 58 public:
111 TestableBrowserStateMonitor monitor(&mock_manager); 59 BrowserStateMonitorTest()
112 monitor.SetPrefServiceForTesting(&prefs); 60 : monitor_(&mock_manager_, &mock_delegate_) {
113 61 }
114 EXPECT_EQ(1, mock_manager.set_state_count_); 62
115 monitor.Observe(chrome::NOTIFICATION_LOGIN_USER_CHANGED, 63 protected:
116 content::NotificationService::AllSources(), 64 MockInputMethodManager mock_manager_;
117 content::NotificationService::NoDetails()); 65 MockInputMethodDelegate mock_delegate_;
118 66 TestableBrowserStateMonitor monitor_;
119 // Check if the state of the |mock_manager| as well as the |monitor| are both 67
120 // changed. 68 private:
121 EXPECT_EQ(2, mock_manager.set_state_count_); 69 DISALLOW_COPY_AND_ASSIGN(BrowserStateMonitorTest);
122 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, mock_manager.last_state_); 70 };
123 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor.state()); 71
124 } 72 } // anonymous namespace
125 73
126 TEST(BrowserStateMonitorTest, TestObserveSessionStarted) { 74 TEST_F(BrowserStateMonitorTest, TestObserveLoginUserChanged) {
127 TestingPrefService prefs; 75 EXPECT_EQ(1, mock_manager_.set_state_count_);
128 RegisterTestPrefs(&prefs); 76 monitor_.Observe(chrome::NOTIFICATION_LOGIN_USER_CHANGED,
129 MockInputMethodManager mock_manager; 77 content::NotificationService::AllSources(),
130 TestableBrowserStateMonitor monitor(&mock_manager); 78 content::NotificationService::NoDetails());
131 monitor.SetPrefServiceForTesting(&prefs); 79
132 80 // Check if the state of the |mock_manager_| as well as the |monitor| are both
133 EXPECT_EQ(1, mock_manager.set_state_count_); 81 // changed.
134 monitor.Observe(chrome::NOTIFICATION_SESSION_STARTED, 82 EXPECT_EQ(2, mock_manager_.set_state_count_);
135 content::NotificationService::AllSources(), 83 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN,
136 content::NotificationService::NoDetails()); 84 mock_manager_.last_state_);
137 85 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor_.state());
138 // Check if the state of the |mock_manager| as well as the |monitor| are both 86 }
139 // changed. 87
140 EXPECT_EQ(2, mock_manager.set_state_count_); 88 TEST_F(BrowserStateMonitorTest, TestObserveSessionStarted) {
141 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, mock_manager.last_state_); 89 EXPECT_EQ(1, mock_manager_.set_state_count_);
142 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor.state()); 90 monitor_.Observe(chrome::NOTIFICATION_SESSION_STARTED,
143 } 91 content::NotificationService::AllSources(),
144 92 content::NotificationService::NoDetails());
145 TEST(BrowserStateMonitorTest, TestObserveLoginUserChangedThenSessionStarted) { 93
146 TestingPrefService prefs; 94 // Check if the state of the |mock_manager_| as well as the |monitor| are both
147 RegisterTestPrefs(&prefs); 95 // changed.
148 MockInputMethodManager mock_manager; 96 EXPECT_EQ(2, mock_manager_.set_state_count_);
149 TestableBrowserStateMonitor monitor(&mock_manager); 97 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN,
150 monitor.SetPrefServiceForTesting(&prefs); 98 mock_manager_.last_state_);
151 99 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor_.state());
152 EXPECT_EQ(1, mock_manager.set_state_count_); 100 }
153 monitor.Observe(chrome::NOTIFICATION_LOGIN_USER_CHANGED, 101
154 content::NotificationService::AllSources(), 102 TEST_F(BrowserStateMonitorTest, TestObserveLoginUserChangedThenSessionStarted) {
155 content::NotificationService::NoDetails()); 103 EXPECT_EQ(1, mock_manager_.set_state_count_);
156 104 monitor_.Observe(chrome::NOTIFICATION_LOGIN_USER_CHANGED,
157 // Check if the state of the |mock_manager| as well as the |monitor| are both 105 content::NotificationService::AllSources(),
158 // changed. 106 content::NotificationService::NoDetails());
159 EXPECT_EQ(2, mock_manager.set_state_count_); 107
160 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, mock_manager.last_state_); 108 // Check if the state of the |mock_manager_| as well as the |monitor| are both
161 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor.state()); 109 // changed.
162 110 EXPECT_EQ(2, mock_manager_.set_state_count_);
163 monitor.Observe(chrome::NOTIFICATION_SESSION_STARTED, 111 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN,
164 content::NotificationService::AllSources(), 112 mock_manager_.last_state_);
165 content::NotificationService::NoDetails()); 113 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor_.state());
114
115 monitor_.Observe(chrome::NOTIFICATION_SESSION_STARTED,
116 content::NotificationService::AllSources(),
117 content::NotificationService::NoDetails());
166 118
167 // The second notification should be nop. 119 // The second notification should be nop.
168 EXPECT_EQ(2, mock_manager.set_state_count_); 120 EXPECT_EQ(2, mock_manager_.set_state_count_);
169 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, mock_manager.last_state_); 121 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN,
170 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor.state()); 122 mock_manager_.last_state_);
171 } 123 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor_.state());
172 124 }
173 TEST(BrowserStateMonitorTest, TestObserveScreenLockUnlock) { 125
174 TestingPrefService prefs; 126 TEST_F(BrowserStateMonitorTest, TestObserveScreenLockUnlock) {
175 RegisterTestPrefs(&prefs); 127 EXPECT_EQ(1, mock_manager_.set_state_count_);
176 MockInputMethodManager mock_manager; 128 monitor_.Observe(chrome::NOTIFICATION_LOGIN_USER_CHANGED,
177 TestableBrowserStateMonitor monitor(&mock_manager); 129 content::NotificationService::AllSources(),
178 monitor.SetPrefServiceForTesting(&prefs); 130 content::NotificationService::NoDetails());
179 131 EXPECT_EQ(2, mock_manager_.set_state_count_);
180 EXPECT_EQ(1, mock_manager.set_state_count_); 132 monitor_.Observe(chrome::NOTIFICATION_SESSION_STARTED,
181 monitor.Observe(chrome::NOTIFICATION_LOGIN_USER_CHANGED, 133 content::NotificationService::AllSources(),
182 content::NotificationService::AllSources(), 134 content::NotificationService::NoDetails());
183 content::NotificationService::NoDetails()); 135 EXPECT_EQ(2, mock_manager_.set_state_count_);
184 EXPECT_EQ(2, mock_manager.set_state_count_);
185 monitor.Observe(chrome::NOTIFICATION_SESSION_STARTED,
186 content::NotificationService::AllSources(),
187 content::NotificationService::NoDetails());
188 EXPECT_EQ(2, mock_manager.set_state_count_);
189 bool locked = true; 136 bool locked = true;
190 monitor.Observe(chrome::NOTIFICATION_SCREEN_LOCK_STATE_CHANGED, 137 monitor_.Observe(chrome::NOTIFICATION_SCREEN_LOCK_STATE_CHANGED,
191 content::NotificationService::AllSources(), 138 content::NotificationService::AllSources(),
192 content::Details<bool>(&locked)); 139 content::Details<bool>(&locked));
193 EXPECT_EQ(3, mock_manager.set_state_count_); 140 EXPECT_EQ(3, mock_manager_.set_state_count_);
194 EXPECT_EQ(InputMethodManager::STATE_LOCK_SCREEN, mock_manager.last_state_); 141 EXPECT_EQ(InputMethodManager::STATE_LOCK_SCREEN,
195 EXPECT_EQ(InputMethodManager::STATE_LOCK_SCREEN, monitor.state()); 142 mock_manager_.last_state_);
143 EXPECT_EQ(InputMethodManager::STATE_LOCK_SCREEN, monitor_.state());
196 144
197 // When the screen is locked, the monitor should ignore input method changes. 145 // When the screen is locked, the monitor should ignore input method changes.
198 monitor.InputMethodChanged(&mock_manager, false); 146 monitor_.InputMethodChanged(&mock_manager_, false);
199 EXPECT_EQ(0, monitor.update_local_state_count()); 147 EXPECT_EQ(0, mock_delegate_.update_system_input_method_count());
200 EXPECT_EQ(0, monitor.update_user_pref_count()); 148 EXPECT_EQ(0, mock_delegate_.update_user_input_method_count());
201 149
202 locked = false; 150 locked = false;
203 monitor.Observe(chrome::NOTIFICATION_SCREEN_LOCK_STATE_CHANGED, 151 monitor_.Observe(chrome::NOTIFICATION_SCREEN_LOCK_STATE_CHANGED,
204 content::NotificationService::AllSources(), 152 content::NotificationService::AllSources(),
205 content::Details<bool>(&locked)); 153 content::Details<bool>(&locked));
206 EXPECT_EQ(4, mock_manager.set_state_count_); 154 EXPECT_EQ(4, mock_manager_.set_state_count_);
207 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, mock_manager.last_state_); 155 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN,
208 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor.state()); 156 mock_manager_.last_state_);
209 157 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor_.state());
210 monitor.InputMethodChanged(&mock_manager, false); 158
211 EXPECT_EQ(0, monitor.update_local_state_count()); 159 monitor_.InputMethodChanged(&mock_manager_, false);
212 EXPECT_EQ(1, monitor.update_user_pref_count()); 160 EXPECT_EQ(0, mock_delegate_.update_system_input_method_count());
213 } 161 EXPECT_EQ(1, mock_delegate_.update_user_input_method_count());
214 162 }
215 TEST(BrowserStateMonitorTest, TestObserveAppTerminating) { 163
216 TestingPrefService prefs; 164 TEST_F(BrowserStateMonitorTest, TestObserveAppTerminating) {
217 RegisterTestPrefs(&prefs); 165 EXPECT_EQ(1, mock_manager_.set_state_count_);
218 MockInputMethodManager mock_manager; 166 monitor_.Observe(chrome::NOTIFICATION_APP_TERMINATING,
219 TestableBrowserStateMonitor monitor(&mock_manager); 167 content::NotificationService::AllSources(),
220 monitor.SetPrefServiceForTesting(&prefs); 168 content::NotificationService::NoDetails());
221 169
222 EXPECT_EQ(1, mock_manager.set_state_count_); 170 // Check if the state of the |mock_manager_| as well as the |monitor| are both
223 monitor.Observe(chrome::NOTIFICATION_APP_TERMINATING, 171 // changed.
224 content::NotificationService::AllSources(), 172 EXPECT_EQ(2, mock_manager_.set_state_count_);
225 content::NotificationService::NoDetails());
226
227 // Check if the state of the |mock_manager| as well as the |monitor| are both
228 // changed.
229 EXPECT_EQ(2, mock_manager.set_state_count_);
230 EXPECT_EQ(InputMethodManager::STATE_TERMINATING, 173 EXPECT_EQ(InputMethodManager::STATE_TERMINATING,
231 mock_manager.last_state_); 174 mock_manager_.last_state_);
232 EXPECT_EQ(InputMethodManager::STATE_TERMINATING, monitor.state()); 175 EXPECT_EQ(InputMethodManager::STATE_TERMINATING, monitor_.state());
233 176
234 // In the terminating state, the monitor should ignore input method changes. 177 // In the terminating state, the monitor should ignore input method changes.
235 monitor.InputMethodChanged(&mock_manager, false); 178 monitor_.InputMethodChanged(&mock_manager_, false);
236 EXPECT_EQ(0, monitor.update_local_state_count()); 179 EXPECT_EQ(0, mock_delegate_.update_system_input_method_count());
237 EXPECT_EQ(0, monitor.update_user_pref_count()); 180 EXPECT_EQ(0, mock_delegate_.update_user_input_method_count());
238 } 181 }
239 182
240 TEST(BrowserStateMonitorTest, TestUpdatePrefOnLoginScreen) { 183 TEST_F(BrowserStateMonitorTest, TestUpdatePrefOnLoginScreen) {
241 TestingPrefService prefs; 184 EXPECT_EQ(InputMethodManager::STATE_LOGIN_SCREEN, monitor_.state());
242 RegisterTestPrefs(&prefs); 185 monitor_.InputMethodChanged(&mock_manager_, false);
243 MockInputMethodManager mock_manager; 186 EXPECT_EQ(1, mock_delegate_.update_system_input_method_count());
244 TestableBrowserStateMonitor monitor(&mock_manager); 187 EXPECT_EQ(0, mock_delegate_.update_user_input_method_count());
245 monitor.SetPrefServiceForTesting(&prefs); 188 monitor_.InputMethodChanged(&mock_manager_, false);
246 189 EXPECT_EQ(2, mock_delegate_.update_system_input_method_count());
247 EXPECT_EQ(InputMethodManager::STATE_LOGIN_SCREEN, monitor.state()); 190 EXPECT_EQ(0, mock_delegate_.update_user_input_method_count());
248 monitor.InputMethodChanged(&mock_manager, false); 191 }
249 EXPECT_EQ(1, monitor.update_local_state_count()); 192
250 EXPECT_EQ(0, monitor.update_user_pref_count()); 193 TEST_F(BrowserStateMonitorTest, TestUpdatePrefOnBrowserScreen) {
251 monitor.InputMethodChanged(&mock_manager, false); 194 monitor_.Observe(chrome::NOTIFICATION_LOGIN_USER_CHANGED,
252 EXPECT_EQ(2, monitor.update_local_state_count()); 195 content::NotificationService::AllSources(),
253 EXPECT_EQ(0, monitor.update_user_pref_count()); 196 content::NotificationService::NoDetails());
254 } 197 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor_.state());
255 198
256 TEST(BrowserStateMonitorTest, TestUpdatePrefOnBrowserScreen) { 199 monitor_.InputMethodChanged(&mock_manager_, false);
257 TestingPrefService prefs; 200 EXPECT_EQ(0, mock_delegate_.update_system_input_method_count());
258 RegisterTestPrefs(&prefs); 201 EXPECT_EQ(1, mock_delegate_.update_user_input_method_count());
259 MockInputMethodManager mock_manager; 202 monitor_.InputMethodChanged(&mock_manager_, false);
260 TestableBrowserStateMonitor monitor(&mock_manager); 203 EXPECT_EQ(0, mock_delegate_.update_system_input_method_count());
261 monitor.SetPrefServiceForTesting(&prefs); 204 EXPECT_EQ(2, mock_delegate_.update_user_input_method_count());
262 205
263 monitor.Observe(chrome::NOTIFICATION_LOGIN_USER_CHANGED, 206 monitor_.Observe(chrome::NOTIFICATION_SESSION_STARTED,
264 content::NotificationService::AllSources(), 207 content::NotificationService::AllSources(),
265 content::NotificationService::NoDetails()); 208 content::NotificationService::NoDetails());
266 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor.state()); 209 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor_.state());
267 210
268 monitor.InputMethodChanged(&mock_manager, false); 211 monitor_.InputMethodChanged(&mock_manager_, false);
269 EXPECT_EQ(0, monitor.update_local_state_count()); 212 EXPECT_EQ(0, mock_delegate_.update_system_input_method_count());
270 EXPECT_EQ(1, monitor.update_user_pref_count()); 213 EXPECT_EQ(3, mock_delegate_.update_user_input_method_count());
271 monitor.InputMethodChanged(&mock_manager, false); 214 monitor_.InputMethodChanged(&mock_manager_, false);
272 EXPECT_EQ(0, monitor.update_local_state_count()); 215 EXPECT_EQ(0, mock_delegate_.update_system_input_method_count());
273 EXPECT_EQ(2, monitor.update_user_pref_count()); 216 EXPECT_EQ(4, mock_delegate_.update_user_input_method_count());
274 217 }
275 monitor.Observe(chrome::NOTIFICATION_SESSION_STARTED, 218
276 content::NotificationService::AllSources(), 219 TEST_F(BrowserStateMonitorTest, TestUpdatePrefOnLoginScreenDetails) {
277 content::NotificationService::NoDetails()); 220 EXPECT_EQ(InputMethodManager::STATE_LOGIN_SCREEN, monitor_.state());
278 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor.state());
279
280 monitor.InputMethodChanged(&mock_manager, false);
281 EXPECT_EQ(0, monitor.update_local_state_count());
282 EXPECT_EQ(3, monitor.update_user_pref_count());
283 monitor.InputMethodChanged(&mock_manager, false);
284 EXPECT_EQ(0, monitor.update_local_state_count());
285 EXPECT_EQ(4, monitor.update_user_pref_count());
286 }
287
288 TEST(BrowserStateMonitorTest, TestUpdatePrefOnLoginScreenDetails) {
289 TestingPrefService prefs;
290 RegisterTestPrefs(&prefs);
291 MockInputMethodManager mock_manager;
292 TestableBrowserStateMonitor monitor(&mock_manager);
293 monitor.SetPrefServiceForTesting(&prefs);
294
295 EXPECT_EQ(InputMethodManager::STATE_LOGIN_SCREEN, monitor.state());
296 std::string input_method_id = "xkb:us:dvorak:eng"; 221 std::string input_method_id = "xkb:us:dvorak:eng";
297 mock_manager.SetCurrentInputMethodId(input_method_id); 222 mock_manager_.SetCurrentInputMethodId(input_method_id);
298 monitor.InputMethodChanged(&mock_manager, false); 223 monitor_.InputMethodChanged(&mock_manager_, false);
299 EXPECT_EQ(1, monitor.update_local_state_count()); 224 EXPECT_EQ(1, mock_delegate_.update_system_input_method_count());
300 EXPECT_EQ(0, monitor.update_user_pref_count()); 225 EXPECT_EQ(0, mock_delegate_.update_user_input_method_count());
301 EXPECT_EQ(input_method_id, monitor.last_local_state()); 226 EXPECT_EQ(input_method_id, mock_delegate_.system_input_method());
302 input_method_id = "xkb:us:colemak:eng"; 227 input_method_id = "xkb:us:colemak:eng";
303 mock_manager.SetCurrentInputMethodId(input_method_id); 228 mock_manager_.SetCurrentInputMethodId(input_method_id);
304 monitor.InputMethodChanged(&mock_manager, false); 229 monitor_.InputMethodChanged(&mock_manager_, false);
305 EXPECT_EQ(2, monitor.update_local_state_count()); 230 EXPECT_EQ(2, mock_delegate_.update_system_input_method_count());
306 EXPECT_EQ(0, monitor.update_user_pref_count()); 231 EXPECT_EQ(0, mock_delegate_.update_user_input_method_count());
307 EXPECT_EQ(input_method_id, monitor.last_local_state()); 232 EXPECT_EQ(input_method_id, mock_delegate_.system_input_method());
308 } 233 }
309 234
310 TEST(BrowserStateMonitorTest, TestUpdatePrefOnBrowserScreenDetails) { 235 TEST_F(BrowserStateMonitorTest, TestUpdatePrefOnBrowserScreenDetails) {
311 TestingPrefService prefs; 236 monitor_.Observe(chrome::NOTIFICATION_LOGIN_USER_CHANGED,
312 RegisterTestPrefs(&prefs); 237 content::NotificationService::AllSources(),
313 MockInputMethodManager mock_manager; 238 content::NotificationService::NoDetails());
314 TestableBrowserStateMonitor monitor(&mock_manager); 239 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor_.state());
315 monitor.SetPrefServiceForTesting(&prefs); 240 monitor_.Observe(chrome::NOTIFICATION_SESSION_STARTED,
316 241 content::NotificationService::AllSources(),
317 StringPrefMember previous; 242 content::NotificationService::NoDetails());
318 previous.Init(prefs::kLanguagePreviousInputMethod, &prefs); 243 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor_.state());
319 EXPECT_EQ("", previous.GetValue());
320 StringPrefMember current;
321 current.Init(prefs::kLanguageCurrentInputMethod, &prefs);
322 EXPECT_EQ("", current.GetValue());
323
324 monitor.Observe(chrome::NOTIFICATION_LOGIN_USER_CHANGED,
325 content::NotificationService::AllSources(),
326 content::NotificationService::NoDetails());
327 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor.state());
328 monitor.Observe(chrome::NOTIFICATION_SESSION_STARTED,
329 content::NotificationService::AllSources(),
330 content::NotificationService::NoDetails());
331 EXPECT_EQ(InputMethodManager::STATE_BROWSER_SCREEN, monitor.state());
332 244
333 const std::string input_method_id = "xkb:us:dvorak:eng"; 245 const std::string input_method_id = "xkb:us:dvorak:eng";
334 mock_manager.SetCurrentInputMethodId(input_method_id); 246 mock_manager_.SetCurrentInputMethodId(input_method_id);
335 monitor.InputMethodChanged(&mock_manager, false); 247 monitor_.InputMethodChanged(&mock_manager_, false);
336 EXPECT_EQ(0, monitor.update_local_state_count()); 248 EXPECT_EQ(0, mock_delegate_.update_system_input_method_count());
337 EXPECT_EQ(1, monitor.update_user_pref_count()); 249 EXPECT_EQ(1, mock_delegate_.update_user_input_method_count());
338 EXPECT_EQ(input_method_id, monitor.last_user_pref()); 250 EXPECT_EQ(input_method_id, mock_delegate_.user_input_method());
339 EXPECT_EQ("", previous.GetValue()); 251
340 EXPECT_EQ(input_method_id, current.GetValue()); 252 monitor_.InputMethodChanged(&mock_manager_, false);
341 253 EXPECT_EQ(0, mock_delegate_.update_system_input_method_count());
342 monitor.InputMethodChanged(&mock_manager, false); 254 EXPECT_EQ(2, mock_delegate_.update_user_input_method_count());
343 EXPECT_EQ(0, monitor.update_local_state_count()); 255 EXPECT_EQ(input_method_id, mock_delegate_.user_input_method());
344 EXPECT_EQ(2, monitor.update_user_pref_count());
345 EXPECT_EQ(input_method_id, monitor.last_user_pref());
346 EXPECT_EQ("", previous.GetValue());
347 EXPECT_EQ(input_method_id, current.GetValue());
348 256
349 const std::string input_method_id_2 = "xkb:us:colemak:eng"; 257 const std::string input_method_id_2 = "xkb:us:colemak:eng";
350 mock_manager.SetCurrentInputMethodId(input_method_id_2); 258 mock_manager_.SetCurrentInputMethodId(input_method_id_2);
351 monitor.InputMethodChanged(&mock_manager, false); 259 monitor_.InputMethodChanged(&mock_manager_, false);
352 EXPECT_EQ(0, monitor.update_local_state_count()); 260 EXPECT_EQ(0, mock_delegate_.update_system_input_method_count());
353 EXPECT_EQ(3, monitor.update_user_pref_count()); 261 EXPECT_EQ(3, mock_delegate_.update_user_input_method_count());
354 EXPECT_EQ(input_method_id_2, monitor.last_user_pref()); 262 EXPECT_EQ(input_method_id_2, mock_delegate_.user_input_method());
355 EXPECT_EQ(input_method_id, previous.GetValue());
356 EXPECT_EQ(input_method_id_2, current.GetValue());
357 263
358 const std::string input_method_id_3 = "xkb:us::eng"; 264 const std::string input_method_id_3 = "xkb:us::eng";
359 mock_manager.SetCurrentInputMethodId(input_method_id_3); 265 mock_manager_.SetCurrentInputMethodId(input_method_id_3);
360 monitor.InputMethodChanged(&mock_manager, false); 266 monitor_.InputMethodChanged(&mock_manager_, false);
361 EXPECT_EQ(0, monitor.update_local_state_count()); 267 EXPECT_EQ(0, mock_delegate_.update_system_input_method_count());
362 EXPECT_EQ(4, monitor.update_user_pref_count()); 268 EXPECT_EQ(4, mock_delegate_.update_user_input_method_count());
363 EXPECT_EQ(input_method_id_3, monitor.last_user_pref()); 269 EXPECT_EQ(input_method_id_3, mock_delegate_.user_input_method());
364 EXPECT_EQ(input_method_id_2, previous.GetValue()); 270
365 EXPECT_EQ(input_method_id_3, current.GetValue()); 271 monitor_.InputMethodChanged(&mock_manager_, false);
366 272 EXPECT_EQ(0, mock_delegate_.update_system_input_method_count());
367 monitor.InputMethodChanged(&mock_manager, false); 273 EXPECT_EQ(5, mock_delegate_.update_user_input_method_count());
368 EXPECT_EQ(0, monitor.update_local_state_count()); 274 EXPECT_EQ(input_method_id_3, mock_delegate_.user_input_method());
369 EXPECT_EQ(5, monitor.update_user_pref_count());
370 EXPECT_EQ(input_method_id_3, monitor.last_user_pref());
371 EXPECT_EQ(input_method_id_2, previous.GetValue());
372 EXPECT_EQ(input_method_id_3, current.GetValue());
373 } 275 }
374 276
375 } // namespace input_method 277 } // namespace input_method
376 } // namespace chromeos 278 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698