network_screen_browsertest.cc revision 731df977c0511bca2206b5f333555b1205ff1f43
1// Copyright (c) 2010 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 <string>
6
7#include "app/combobox_model.h"
8#include "app/l10n_util.h"
9#include "base/message_loop.h"
10#include "base/scoped_ptr.h"
11#include "base/string16.h"
12#include "base/string_number_conversions.h"
13#include "base/utf_string_conversions.h"
14#include "chrome/browser/chromeos/cros/cros_library.h"
15#include "chrome/browser/chromeos/cros/mock_login_library.h"
16#include "chrome/browser/chromeos/cros/mock_network_library.h"
17#include "chrome/browser/chromeos/cros/network_library.h"
18#include "chrome/browser/chromeos/login/mock_screen_observer.h"
19#include "chrome/browser/chromeos/login/network_screen.h"
20#include "chrome/browser/chromeos/login/network_selection_view.h"
21#include "chrome/browser/chromeos/login/view_screen.h"
22#include "chrome/browser/chromeos/login/wizard_controller.h"
23#include "chrome/browser/chromeos/login/wizard_in_process_browser_test.h"
24#include "chrome/browser/chromeos/login/wizard_screen.h"
25#include "chrome/test/ui_test_utils.h"
26#include "grit/generated_resources.h"
27#include "testing/gmock/include/gmock/gmock.h"
28#include "testing/gtest/include/gtest/gtest.h"
29#include "views/controls/button/text_button.h"
30#include "views/controls/combobox/combobox.h"
31
32namespace chromeos {
33using ::testing::AnyNumber;
34using ::testing::InvokeWithoutArgs;
35using ::testing::Return;
36using ::testing::ReturnRef;
37using ::testing::_;
38using ::testing::A;
39using views::Button;
40
41class DummyButtonListener : public views::ButtonListener {
42 public:
43  virtual void ButtonPressed(views::Button* sender,
44                             const views::Event& event) {}
45};
46
47class NetworkScreenTest : public WizardInProcessBrowserTest {
48 public:
49  NetworkScreenTest(): WizardInProcessBrowserTest("network"),
50                       mock_login_library_(NULL),
51                       mock_network_library_(NULL) {
52  }
53
54 protected:
55  virtual void SetUpInProcessBrowserTestFixture() {
56    cros_mock_->InitStatusAreaMocks();
57    mock_network_library_ = cros_mock_->mock_network_library();
58    mock_login_library_ = new MockLoginLibrary();
59    cros_mock_->test_api()->SetLoginLibrary(mock_login_library_, true);
60    EXPECT_CALL(*mock_login_library_, EmitLoginPromptReady())
61        .Times(1);
62
63    // Minimal set of expectations needed on NetworkScreen initialization.
64    // Status bar expectations are defined with RetiresOnSaturation() so
65    // these mocks will be active once status bar is initialized.
66    EXPECT_CALL(*mock_network_library_, ethernet_connected())
67        .Times(3)
68        .WillRepeatedly(Return(false));
69    EXPECT_CALL(*mock_network_library_, ethernet_connecting())
70        .Times(1)
71        .WillRepeatedly(Return(false));
72    EXPECT_CALL(*mock_network_library_, wifi_connected())
73        .Times(3)
74        .WillRepeatedly(Return(false));
75    EXPECT_CALL(*mock_network_library_, wifi_connecting())
76        .Times(3)
77        .WillRepeatedly(Return(false));
78    EXPECT_CALL(*mock_network_library_, cellular_connected())
79        .Times(3)
80        .WillRepeatedly(Return(false));
81    EXPECT_CALL(*mock_network_library_, cellular_connecting())
82        .Times(3)
83        .WillRepeatedly(Return(false));
84    EXPECT_CALL(*mock_network_library_, Connected())
85        .Times(3)
86        .WillRepeatedly(Return(false));
87    EXPECT_CALL(*mock_network_library_, Connecting())
88        .Times(2)
89        .WillRepeatedly(Return(false));
90    EXPECT_CALL(*mock_network_library_, AddObserver(_))
91        .Times(2);
92    EXPECT_CALL(*mock_network_library_, RemoveObserver(_))
93        .Times(2);
94
95    cros_mock_->SetStatusAreaMocksExpectations();
96  }
97
98  virtual void TearDownInProcessBrowserTestFixture() {
99    CrosInProcessBrowserTest::TearDownInProcessBrowserTestFixture();
100    cros_mock_->test_api()->SetLoginLibrary(NULL, false);
101  }
102
103  void EmulateContinueButtonExit(NetworkScreen* network_screen) {
104    scoped_ptr<MockScreenObserver>
105        mock_screen_observer(new MockScreenObserver());
106    EXPECT_CALL(*mock_screen_observer,
107                OnExit(ScreenObserver::NETWORK_CONNECTED))
108        .Times(1);
109    EXPECT_CALL(*mock_network_library_, Connected())
110        .WillOnce(Return(true));
111    controller()->set_observer(mock_screen_observer.get());
112    DummyButtonListener button_listener;
113    views::TextButton button(&button_listener, L"Button");
114    views::MouseEvent event(views::Event::ET_MOUSE_RELEASED,
115                            0, 0,
116                            views::Event::EF_LEFT_BUTTON_DOWN);
117    network_screen->ButtonPressed(&button, event);
118    ui_test_utils::RunAllPendingInMessageLoop();
119    controller()->set_observer(NULL);
120  }
121
122  MockLoginLibrary* mock_login_library_;
123  MockNetworkLibrary* mock_network_library_;
124
125 private:
126  DISALLOW_COPY_AND_ASSIGN(NetworkScreenTest);
127};
128
129IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Ethernet) {
130  ASSERT_TRUE(controller());
131  NetworkScreen* network_screen = controller()->GetNetworkScreen();
132  ASSERT_TRUE(network_screen != NULL);
133  ASSERT_EQ(network_screen, controller()->current_screen());
134
135  NetworkSelectionView* network_view = network_screen->view();
136  ASSERT_TRUE(network_view != NULL);
137  EXPECT_FALSE(network_view->IsContinueEnabled());
138
139  EXPECT_CALL(*mock_network_library_, ethernet_connected())
140      .WillOnce((Return(false)));
141  EXPECT_CALL(*mock_network_library_, wifi_connected())
142      .WillOnce((Return(false)));
143  EXPECT_CALL(*mock_network_library_, cellular_connected())
144      .WillOnce((Return(false)));
145  EXPECT_CALL(*mock_network_library_, ethernet_connecting())
146      .WillOnce((Return(true)));
147
148  network_screen->NetworkChanged(mock_network_library_);
149  EXPECT_FALSE(network_view->IsContinueEnabled());
150  EXPECT_FALSE(network_view->IsConnecting());
151
152  EXPECT_CALL(*mock_network_library_, ethernet_connected())
153      .WillOnce(Return(true));
154  EXPECT_CALL(*mock_network_library_, Connected())
155      .WillOnce(Return(true));
156
157  network_screen->NetworkChanged(mock_network_library_);
158  EXPECT_TRUE(network_view->IsContinueEnabled());
159
160  EmulateContinueButtonExit(network_screen);
161}
162
163IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Wifi) {
164  ASSERT_TRUE(controller());
165  NetworkScreen* network_screen = controller()->GetNetworkScreen();
166  ASSERT_TRUE(network_screen != NULL);
167  ASSERT_EQ(network_screen, controller()->current_screen());
168
169  NetworkSelectionView* network_view = network_screen->view();
170  ASSERT_TRUE(network_view != NULL);
171  EXPECT_FALSE(network_view->IsContinueEnabled());
172
173  EXPECT_CALL(*mock_network_library_, ethernet_connected())
174      .WillOnce((Return(false)));
175  EXPECT_CALL(*mock_network_library_, wifi_connected())
176      .WillOnce((Return(false)));
177  EXPECT_CALL(*mock_network_library_, cellular_connected())
178      .WillOnce((Return(false)));
179  EXPECT_CALL(*mock_network_library_, ethernet_connecting())
180      .WillOnce((Return(false)));
181  EXPECT_CALL(*mock_network_library_, wifi_connecting())
182      .WillOnce((Return(true)));
183  WifiNetwork wifi;
184  EXPECT_CALL(*mock_network_library_, wifi_network())
185      .WillOnce(ReturnRef(wifi));
186
187  network_screen->NetworkChanged(mock_network_library_);
188  EXPECT_FALSE(network_view->IsContinueEnabled());
189  EXPECT_FALSE(network_view->IsConnecting());
190
191  EXPECT_CALL(*mock_network_library_, ethernet_connected())
192      .WillOnce(Return(true));
193  EXPECT_CALL(*mock_network_library_, Connected())
194      .WillOnce(Return(true));
195
196  network_screen->NetworkChanged(mock_network_library_);
197  EXPECT_TRUE(network_view->IsContinueEnabled());
198
199  EmulateContinueButtonExit(network_screen);
200}
201
202IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Cellular) {
203  ASSERT_TRUE(controller());
204  NetworkScreen* network_screen = controller()->GetNetworkScreen();
205  ASSERT_TRUE(network_screen != NULL);
206  ASSERT_EQ(network_screen, controller()->current_screen());
207
208  NetworkSelectionView* network_view = network_screen->view();
209  ASSERT_TRUE(network_view != NULL);
210  EXPECT_FALSE(network_view->IsContinueEnabled());
211
212  EXPECT_CALL(*mock_network_library_, ethernet_connected())
213      .WillOnce((Return(false)));
214  EXPECT_CALL(*mock_network_library_, wifi_connected())
215      .WillOnce((Return(false)));
216  EXPECT_CALL(*mock_network_library_, cellular_connected())
217      .WillOnce((Return(false)));
218  EXPECT_CALL(*mock_network_library_, ethernet_connecting())
219      .WillOnce((Return(false)));
220  EXPECT_CALL(*mock_network_library_, wifi_connecting())
221      .WillOnce((Return(false)));
222  EXPECT_CALL(*mock_network_library_, cellular_connecting())
223      .WillOnce((Return(true)));
224  CellularNetwork cellular;
225  EXPECT_CALL(*mock_network_library_, cellular_network())
226      .WillOnce(ReturnRef(cellular));
227
228  network_screen->NetworkChanged(mock_network_library_);
229  EXPECT_FALSE(network_view->IsContinueEnabled());
230  EXPECT_FALSE(network_view->IsConnecting());
231
232  EXPECT_CALL(*mock_network_library_, ethernet_connected())
233      .WillOnce(Return(true));
234  EXPECT_CALL(*mock_network_library_, Connected())
235      .WillOnce(Return(true));
236
237  network_screen->NetworkChanged(mock_network_library_);
238  EXPECT_TRUE(network_view->IsContinueEnabled());
239
240  EmulateContinueButtonExit(network_screen);
241}
242
243IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Timeout) {
244  ASSERT_TRUE(controller());
245  NetworkScreen* network_screen = controller()->GetNetworkScreen();
246  ASSERT_TRUE(network_screen != NULL);
247  ASSERT_EQ(network_screen, controller()->current_screen());
248
249  NetworkSelectionView* network_view = network_screen->view();
250  ASSERT_TRUE(network_view != NULL);
251  EXPECT_FALSE(network_view->IsContinueEnabled());
252
253  EXPECT_CALL(*mock_network_library_, ethernet_connected())
254      .WillOnce((Return(false)));
255  EXPECT_CALL(*mock_network_library_, wifi_connected())
256      .WillOnce((Return(false)));
257  EXPECT_CALL(*mock_network_library_, cellular_connected())
258      .WillOnce((Return(false)));
259  EXPECT_CALL(*mock_network_library_, ethernet_connecting())
260      .WillOnce((Return(false)));
261  EXPECT_CALL(*mock_network_library_, wifi_connecting())
262      .WillOnce((Return(true)));
263  WifiNetwork wifi;
264  EXPECT_CALL(*mock_network_library_, wifi_network())
265      .WillOnce(ReturnRef(wifi));
266  EXPECT_CALL(*mock_network_library_, Connected())
267      .WillOnce(Return(false));
268
269  network_screen->NetworkChanged(mock_network_library_);
270  EXPECT_FALSE(network_view->IsContinueEnabled());
271  EXPECT_FALSE(network_view->IsConnecting());
272
273  network_screen->OnConnectionTimeout();
274  EXPECT_FALSE(network_view->IsContinueEnabled());
275  EXPECT_FALSE(network_view->IsConnecting());
276
277  // Close infobubble with error message - it makes test stable.
278  network_screen->ClearErrors();
279}
280
281}  // namespace chromeos
282