| OLD | NEW |
| 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 |
| OLD | NEW |