cros_mock.cc revision ddb351dbec246cf1fab5ec20d2d5520909041de1
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
26namespace chromeos {
27
28using ::testing::AnyNumber;
29using ::testing::AtMost;
30using ::testing::InSequence;
31using ::testing::InvokeWithoutArgs;
32using ::testing::Return;
33using ::testing::ReturnRef;
34using ::testing::StrictMock;
35using ::testing::_;
36
37CrosMock::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
52CrosMock::~CrosMock() {
53}
54
55chromeos::CrosLibrary::TestApi* CrosMock::test_api() {
56  return chromeos::CrosLibrary::Get()->GetTestApi();
57}
58
59void CrosMock::InitStatusAreaMocks() {
60  InitMockInputMethodLibrary();
61  InitMockNetworkLibrary();
62  InitMockPowerLibrary();
63  InitMockTouchpadLibrary();
64}
65
66void 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
76void 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
84void 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
92void 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
100void 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
108void 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
116void 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
125void 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.
134MockCryptohomeLibrary* CrosMock::mock_cryptohome_library() {
135  return mock_cryptohome_library_;
136}
137
138MockInputMethodLibrary* CrosMock::mock_input_method_library() {
139  return mock_input_method_library_;
140}
141
142MockNetworkLibrary* CrosMock::mock_network_library() {
143  return mock_network_library_;
144}
145
146MockPowerLibrary* CrosMock::mock_power_library() {
147  return mock_power_library_;
148}
149
150MockScreenLockLibrary* CrosMock::mock_screen_lock_library() {
151  return mock_screen_lock_library_;
152}
153
154MockSpeechSynthesisLibrary* CrosMock::mock_speech_synthesis_library() {
155  return mock_speech_synthesis_library_;
156}
157
158MockTouchpadLibrary* CrosMock::mock_touchpad_library() {
159  return mock_touchpad_library_;
160}
161
162void CrosMock::SetStatusAreaMocksExpectations() {
163  SetInputMethodLibraryStatusAreaExpectations();
164  SetNetworkLibraryStatusAreaExpectations();
165  SetPowerLibraryStatusAreaExpectations();
166  SetPowerLibraryExpectations();
167  SetTouchpadLibraryExpectations();
168}
169
170void 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
220void 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
313void 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
346void 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
353void 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
377void CrosMock::SetTouchpadLibraryExpectations() {
378  EXPECT_CALL(*mock_touchpad_library_, SetSensitivity(_))
379      .Times(AnyNumber());
380  EXPECT_CALL(*mock_touchpad_library_, SetTapToClick(_))
381      .Times(AnyNumber());
382}
383
384void 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
404InputMethodDescriptors* CrosMock::CreateInputMethodDescriptors() {
405  InputMethodDescriptors* descriptors = new InputMethodDescriptors;
406  descriptors->push_back(
407      input_method::GetFallbackInputMethodDescriptor());
408  return descriptors;
409}
410
411}  // namespace chromeos
412