• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/chromeos/cros/cros_mock.h"
6 
7 #include "base/memory/ref_counted.h"
8 #include "base/message_loop.h"
9 #include "base/time.h"
10 #include "chrome/browser/chromeos/cros/mock_cryptohome_library.h"
11 #include "chrome/browser/chromeos/cros/mock_input_method_library.h"
12 #include "chrome/browser/chromeos/cros/mock_library_loader.h"
13 #include "chrome/browser/chromeos/cros/mock_network_library.h"
14 #include "chrome/browser/chromeos/cros/mock_power_library.h"
15 #include "chrome/browser/chromeos/cros/mock_screen_lock_library.h"
16 #include "chrome/browser/chromeos/cros/mock_speech_synthesis_library.h"
17 #include "chrome/browser/chromeos/cros/mock_touchpad_library.h"
18 #include "chrome/browser/chromeos/input_method/input_method_util.h"
19 #include "chrome/browser/chromeos/login/wizard_controller.h"
20 #include "chrome/browser/chromeos/login/wizard_screen.h"
21 #include "chrome/test/in_process_browser_test.h"
22 #include "chrome/test/ui_test_utils.h"
23 #include "testing/gmock/include/gmock/gmock.h"
24 #include "testing/gtest/include/gtest/gtest.h"
25 
26 namespace chromeos {
27 
28 using ::testing::AnyNumber;
29 using ::testing::AtMost;
30 using ::testing::InSequence;
31 using ::testing::InvokeWithoutArgs;
32 using ::testing::Return;
33 using ::testing::ReturnRef;
34 using ::testing::StrictMock;
35 using ::testing::_;
36 
CrosMock()37 CrosMock::CrosMock()
38     : loader_(NULL),
39       mock_cryptohome_library_(NULL),
40       mock_input_method_library_(NULL),
41       mock_network_library_(NULL),
42       mock_power_library_(NULL),
43       mock_screen_lock_library_(NULL),
44       mock_speech_synthesis_library_(NULL),
45       mock_touchpad_library_(NULL),
46       current_input_method_("", "", "", ""),
47       previous_input_method_("", "", "", "") {
48   current_input_method_ =
49       input_method::GetFallbackInputMethodDescriptor();
50 }
51 
~CrosMock()52 CrosMock::~CrosMock() {
53 }
54 
test_api()55 chromeos::CrosLibrary::TestApi* CrosMock::test_api() {
56   return chromeos::CrosLibrary::Get()->GetTestApi();
57 }
58 
InitStatusAreaMocks()59 void CrosMock::InitStatusAreaMocks() {
60   InitMockInputMethodLibrary();
61   InitMockNetworkLibrary();
62   InitMockPowerLibrary();
63   InitMockTouchpadLibrary();
64 }
65 
InitMockLibraryLoader()66 void CrosMock::InitMockLibraryLoader() {
67   if (loader_)
68     return;
69   loader_ = new StrictMock<MockLibraryLoader>();
70   EXPECT_CALL(*loader_, Load(_))
71       .Times(AnyNumber())
72       .WillRepeatedly(Return(true));
73   test_api()->SetLibraryLoader(loader_, true);
74 }
75 
InitMockCryptohomeLibrary()76 void CrosMock::InitMockCryptohomeLibrary() {
77   InitMockLibraryLoader();
78   if (mock_cryptohome_library_)
79     return;
80   mock_cryptohome_library_ = new StrictMock<MockCryptohomeLibrary>();
81   test_api()->SetCryptohomeLibrary(mock_cryptohome_library_, true);
82 }
83 
InitMockInputMethodLibrary()84 void CrosMock::InitMockInputMethodLibrary() {
85   InitMockLibraryLoader();
86   if (mock_input_method_library_)
87     return;
88   mock_input_method_library_ = new StrictMock<MockInputMethodLibrary>();
89   test_api()->SetInputMethodLibrary(mock_input_method_library_, true);
90 }
91 
InitMockNetworkLibrary()92 void CrosMock::InitMockNetworkLibrary() {
93   InitMockLibraryLoader();
94   if (mock_network_library_)
95     return;
96   mock_network_library_ = new StrictMock<MockNetworkLibrary>();
97   test_api()->SetNetworkLibrary(mock_network_library_, true);
98 }
99 
InitMockPowerLibrary()100 void CrosMock::InitMockPowerLibrary() {
101   InitMockLibraryLoader();
102   if (mock_power_library_)
103     return;
104   mock_power_library_ = new StrictMock<MockPowerLibrary>();
105   test_api()->SetPowerLibrary(mock_power_library_, true);
106 }
107 
InitMockScreenLockLibrary()108 void CrosMock::InitMockScreenLockLibrary() {
109   InitMockLibraryLoader();
110   if (mock_screen_lock_library_)
111     return;
112   mock_screen_lock_library_ = new StrictMock<MockScreenLockLibrary>();
113   test_api()->SetScreenLockLibrary(mock_screen_lock_library_, true);
114 }
115 
InitMockSpeechSynthesisLibrary()116 void CrosMock::InitMockSpeechSynthesisLibrary() {
117   InitMockLibraryLoader();
118   if (mock_speech_synthesis_library_)
119     return;
120   mock_speech_synthesis_library_ =
121       new StrictMock<MockSpeechSynthesisLibrary>();
122   test_api()->SetSpeechSynthesisLibrary(mock_speech_synthesis_library_, true);
123 }
124 
InitMockTouchpadLibrary()125 void CrosMock::InitMockTouchpadLibrary() {
126   InitMockLibraryLoader();
127   if (mock_touchpad_library_)
128     return;
129   mock_touchpad_library_ = new StrictMock<MockTouchpadLibrary>();
130   test_api()->SetTouchpadLibrary(mock_touchpad_library_, true);
131 }
132 
133 // Initialization of mocks.
mock_cryptohome_library()134 MockCryptohomeLibrary* CrosMock::mock_cryptohome_library() {
135   return mock_cryptohome_library_;
136 }
137 
mock_input_method_library()138 MockInputMethodLibrary* CrosMock::mock_input_method_library() {
139   return mock_input_method_library_;
140 }
141 
mock_network_library()142 MockNetworkLibrary* CrosMock::mock_network_library() {
143   return mock_network_library_;
144 }
145 
mock_power_library()146 MockPowerLibrary* CrosMock::mock_power_library() {
147   return mock_power_library_;
148 }
149 
mock_screen_lock_library()150 MockScreenLockLibrary* CrosMock::mock_screen_lock_library() {
151   return mock_screen_lock_library_;
152 }
153 
mock_speech_synthesis_library()154 MockSpeechSynthesisLibrary* CrosMock::mock_speech_synthesis_library() {
155   return mock_speech_synthesis_library_;
156 }
157 
mock_touchpad_library()158 MockTouchpadLibrary* CrosMock::mock_touchpad_library() {
159   return mock_touchpad_library_;
160 }
161 
SetStatusAreaMocksExpectations()162 void CrosMock::SetStatusAreaMocksExpectations() {
163   SetInputMethodLibraryStatusAreaExpectations();
164   SetNetworkLibraryStatusAreaExpectations();
165   SetPowerLibraryStatusAreaExpectations();
166   SetPowerLibraryExpectations();
167   SetTouchpadLibraryExpectations();
168 }
169 
SetInputMethodLibraryStatusAreaExpectations()170 void CrosMock::SetInputMethodLibraryStatusAreaExpectations() {
171   EXPECT_CALL(*mock_input_method_library_, AddObserver(_))
172       .Times(AnyNumber())
173       .RetiresOnSaturation();
174   EXPECT_CALL(*mock_input_method_library_, GetActiveInputMethods())
175       .Times(AnyNumber())
176       .WillRepeatedly(InvokeWithoutArgs(CreateInputMethodDescriptors))
177       .RetiresOnSaturation();
178   EXPECT_CALL(*mock_input_method_library_, GetSupportedInputMethods())
179       .Times(AnyNumber())
180       .WillRepeatedly(InvokeWithoutArgs(CreateInputMethodDescriptors))
181       .RetiresOnSaturation();
182   EXPECT_CALL(*mock_input_method_library_, GetKeyboardOverlayId(_))
183       .Times(AnyNumber())
184       .WillRepeatedly((Return("en_US")))
185       .RetiresOnSaturation();
186   EXPECT_CALL(*mock_input_method_library_, current_input_method())
187       .Times(AnyNumber())
188       .WillRepeatedly((Return(current_input_method_)))
189       .RetiresOnSaturation();
190   EXPECT_CALL(*mock_input_method_library_, previous_input_method())
191       .Times(AnyNumber())
192       .WillRepeatedly((Return(previous_input_method_)))
193       .RetiresOnSaturation();
194   EXPECT_CALL(*mock_input_method_library_, current_ime_properties())
195       .Times(AnyNumber())
196       .WillRepeatedly((ReturnRef(ime_properties_)))
197       .RetiresOnSaturation();
198   EXPECT_CALL(*mock_input_method_library_, GetNumActiveInputMethods())
199       .Times(AnyNumber())
200       .WillRepeatedly((Return(1)))
201       .RetiresOnSaturation();
202   EXPECT_CALL(*mock_input_method_library_, SetImeConfig(_, _, _))
203       .Times(AnyNumber())
204       .WillRepeatedly((Return(true)))
205       .RetiresOnSaturation();
206   EXPECT_CALL(*mock_input_method_library_, RemoveObserver(_))
207       .Times(AnyNumber())
208       .RetiresOnSaturation();
209   EXPECT_CALL(*mock_input_method_library_, SetDeferImeStartup(_))
210       .Times(AnyNumber())
211       .RetiresOnSaturation();
212   EXPECT_CALL(*mock_input_method_library_, StopInputMethodDaemon())
213       .Times(AnyNumber())
214       .RetiresOnSaturation();
215   EXPECT_CALL(*mock_input_method_library_, ChangeInputMethod(_))
216       .Times(AnyNumber())
217       .RetiresOnSaturation();
218 }
219 
SetNetworkLibraryStatusAreaExpectations()220 void CrosMock::SetNetworkLibraryStatusAreaExpectations() {
221   // We don't care how often these are called, just set their return values:
222   EXPECT_CALL(*mock_network_library_, AddNetworkManagerObserver(_))
223       .Times(AnyNumber());
224   EXPECT_CALL(*mock_network_library_, AddNetworkDeviceObserver(_, _))
225       .Times(AnyNumber());
226   EXPECT_CALL(*mock_network_library_, AddCellularDataPlanObserver(_))
227       .Times(AnyNumber());
228   EXPECT_CALL(*mock_network_library_, RemoveNetworkManagerObserver(_))
229       .Times(AnyNumber());
230   EXPECT_CALL(*mock_network_library_, RemoveNetworkDeviceObserver(_, _))
231       .Times(AnyNumber());
232   EXPECT_CALL(*mock_network_library_, RemoveObserverForAllNetworks(_))
233       .Times(AnyNumber());
234   EXPECT_CALL(*mock_network_library_, RemoveCellularDataPlanObserver(_))
235       .Times(AnyNumber());
236   EXPECT_CALL(*mock_network_library_, IsLocked())
237       .Times(AnyNumber())
238       .WillRepeatedly((Return(false)));
239   EXPECT_CALL(*mock_network_library_, FindCellularDevice())
240       .Times(AnyNumber())
241       .WillRepeatedly((Return((const NetworkDevice*)(NULL))));
242   EXPECT_CALL(*mock_network_library_, ethernet_available())
243       .Times(AnyNumber())
244       .WillRepeatedly((Return(true)));
245   EXPECT_CALL(*mock_network_library_, wifi_available())
246       .Times(AnyNumber())
247       .WillRepeatedly((Return(false)));
248   EXPECT_CALL(*mock_network_library_, cellular_available())
249       .Times(AnyNumber())
250       .WillRepeatedly((Return(false)));
251   EXPECT_CALL(*mock_network_library_, ethernet_enabled())
252       .Times(AnyNumber())
253       .WillRepeatedly((Return(true)));
254   EXPECT_CALL(*mock_network_library_, wifi_enabled())
255       .Times(AnyNumber())
256       .WillRepeatedly((Return(false)));
257   EXPECT_CALL(*mock_network_library_, cellular_enabled())
258       .Times(AnyNumber())
259       .WillRepeatedly((Return(false)));
260   EXPECT_CALL(*mock_network_library_, active_network())
261       .Times(AnyNumber())
262       .WillRepeatedly((Return((const Network*)(NULL))));
263   EXPECT_CALL(*mock_network_library_, wifi_network())
264       .Times(AnyNumber())
265       .WillRepeatedly((Return((const WifiNetwork*)(NULL))));
266   EXPECT_CALL(*mock_network_library_, cellular_network())
267       .Times(AnyNumber())
268       .WillRepeatedly((Return((const CellularNetwork*)(NULL))));
269   EXPECT_CALL(*mock_network_library_, virtual_network())
270       .Times(AnyNumber())
271       .WillRepeatedly((Return((const VirtualNetwork*)(NULL))));
272   EXPECT_CALL(*mock_network_library_, wifi_networks())
273       .Times(AnyNumber())
274       .WillRepeatedly((ReturnRef(wifi_networks_)));
275   EXPECT_CALL(*mock_network_library_, cellular_networks())
276       .Times(AnyNumber())
277       .WillRepeatedly((ReturnRef(cellular_networks_)));
278   EXPECT_CALL(*mock_network_library_, virtual_networks())
279       .Times(AnyNumber())
280       .WillRepeatedly((ReturnRef(virtual_networks_)));
281 
282   // Set specific expectations for interesting functions:
283 
284   // NetworkMenuButton::OnNetworkChanged() calls:
285   EXPECT_CALL(*mock_network_library_, Connected())
286       .Times(AnyNumber())
287       .WillRepeatedly((Return(false)))
288       .RetiresOnSaturation();
289   EXPECT_CALL(*mock_network_library_, Connecting())
290       .Times(AnyNumber())
291       .WillRepeatedly((Return(false)))
292       .RetiresOnSaturation();
293   EXPECT_CALL(*mock_network_library_, cellular_connected())
294       .Times(AnyNumber())
295       .WillRepeatedly((Return(false)))
296       .RetiresOnSaturation();
297 
298   // NetworkMenu::InitMenuItems() calls:
299   EXPECT_CALL(*mock_network_library_, IsLocked())
300       .Times(AnyNumber())
301       .WillRepeatedly((Return(false)))
302       .RetiresOnSaturation();
303   EXPECT_CALL(*mock_network_library_, ethernet_connected())
304       .Times(1)
305       .WillRepeatedly((Return(false)))
306       .RetiresOnSaturation();
307   EXPECT_CALL(*mock_network_library_, ethernet_connecting())
308       .Times(1)
309       .WillRepeatedly((Return(false)))
310       .RetiresOnSaturation();
311 }
312 
SetPowerLibraryStatusAreaExpectations()313 void CrosMock::SetPowerLibraryStatusAreaExpectations() {
314   EXPECT_CALL(*mock_power_library_, AddObserver(_))
315       .Times(2)
316       .RetiresOnSaturation();
317   EXPECT_CALL(*mock_power_library_, battery_fully_charged())
318       .Times(1)
319       .WillRepeatedly((Return(false)))
320       .RetiresOnSaturation();
321   EXPECT_CALL(*mock_power_library_, battery_is_present())
322       .Times(1)
323       .WillOnce((Return(true)))
324       .RetiresOnSaturation();
325   EXPECT_CALL(*mock_power_library_, battery_percentage())
326       .Times(1)
327       .WillRepeatedly((Return(42.0)))
328       .RetiresOnSaturation();
329   EXPECT_CALL(*mock_power_library_, line_power_on())
330       .Times(1)
331       .WillRepeatedly((Return(false)))
332       .RetiresOnSaturation();
333   EXPECT_CALL(*mock_power_library_, battery_time_to_empty())
334       .Times(1)
335       .WillRepeatedly((Return(base::TimeDelta::FromMinutes(42))))
336       .RetiresOnSaturation();
337   EXPECT_CALL(*mock_power_library_, battery_time_to_full())
338       .Times(1)
339       .WillRepeatedly((Return(base::TimeDelta::FromMinutes(24))))
340       .RetiresOnSaturation();
341   EXPECT_CALL(*mock_power_library_, RemoveObserver(_))
342       .Times(2)
343       .RetiresOnSaturation();
344 }
345 
SetPowerLibraryExpectations()346 void CrosMock::SetPowerLibraryExpectations() {
347   // EnableScreenLock is currently bounded with a prefs value and thus is
348   // always called when loading
349   EXPECT_CALL(*mock_power_library_, EnableScreenLock(_))
350       .Times(AnyNumber());
351 }
352 
SetSpeechSynthesisLibraryExpectations()353 void CrosMock::SetSpeechSynthesisLibraryExpectations() {
354   InSequence s;
355   EXPECT_CALL(*mock_speech_synthesis_library_, StopSpeaking())
356       .WillOnce(Return(true))
357       .RetiresOnSaturation();
358   EXPECT_CALL(*mock_speech_synthesis_library_, Speak(_))
359       .WillOnce(Return(true))
360       .RetiresOnSaturation();
361   EXPECT_CALL(*mock_speech_synthesis_library_, IsSpeaking())
362       .Times(AnyNumber())
363       .WillRepeatedly(Return(true));
364   EXPECT_CALL(*mock_speech_synthesis_library_, StopSpeaking())
365       .WillOnce(Return(true))
366       .RetiresOnSaturation();
367   EXPECT_CALL(*mock_speech_synthesis_library_, Speak(_))
368       .WillOnce(Return(true))
369       .RetiresOnSaturation();
370   EXPECT_CALL(*mock_speech_synthesis_library_, IsSpeaking())
371       .WillOnce(Return(true))
372       .WillOnce(Return(true))
373       .WillOnce(Return(false))
374       .RetiresOnSaturation();
375 }
376 
SetTouchpadLibraryExpectations()377 void CrosMock::SetTouchpadLibraryExpectations() {
378   EXPECT_CALL(*mock_touchpad_library_, SetSensitivity(_))
379       .Times(AnyNumber());
380   EXPECT_CALL(*mock_touchpad_library_, SetTapToClick(_))
381       .Times(AnyNumber());
382 }
383 
TearDownMocks()384 void CrosMock::TearDownMocks() {
385   // Prevent bogus gMock leak check from firing.
386   if (loader_)
387     test_api()->SetLibraryLoader(NULL, false);
388   if (mock_cryptohome_library_)
389     test_api()->SetCryptohomeLibrary(NULL, false);
390   if (mock_input_method_library_)
391     test_api()->SetInputMethodLibrary(NULL, false);
392   if (mock_network_library_)
393     test_api()->SetNetworkLibrary(NULL, false);
394   if (mock_power_library_)
395     test_api()->SetPowerLibrary(NULL, false);
396   if (mock_screen_lock_library_)
397     test_api()->SetScreenLockLibrary(NULL, false);
398   if (mock_speech_synthesis_library_)
399     test_api()->SetSpeechSynthesisLibrary(NULL, false);
400   if (mock_touchpad_library_)
401     test_api()->SetTouchpadLibrary(NULL, false);
402 }
403 
CreateInputMethodDescriptors()404 InputMethodDescriptors* CrosMock::CreateInputMethodDescriptors() {
405   InputMethodDescriptors* descriptors = new InputMethodDescriptors;
406   descriptors->push_back(
407       input_method::GetFallbackInputMethodDescriptor());
408   return descriptors;
409 }
410 
411 }  // namespace chromeos
412