OLD | NEW |
| (Empty) |
1 // Copyright 2016 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/ui/views/chooser_content_view.h" | |
6 | |
7 #include <memory> | |
8 | |
9 #include "base/macros.h" | |
10 #include "base/memory/ptr_util.h" | |
11 #include "base/strings/utf_string_conversions.h" | |
12 #include "chrome/browser/chooser_controller/mock_chooser_controller.h" | |
13 #include "chrome/grit/generated_resources.h" | |
14 #include "testing/gmock/include/gmock/gmock.h" | |
15 #include "testing/gtest/include/gtest/gtest.h" | |
16 #include "ui/base/l10n/l10n_util.h" | |
17 #include "ui/base/models/list_selection_model.h" | |
18 #include "ui/views/controls/link.h" | |
19 #include "ui/views/controls/styled_label.h" | |
20 #include "ui/views/controls/table/table_view.h" | |
21 #include "ui/views/controls/table/table_view_observer.h" | |
22 #include "ui/views/controls/throbber.h" | |
23 #include "ui/views/test/views_test_base.h" | |
24 | |
25 namespace { | |
26 | |
27 class MockTableViewObserver : public views::TableViewObserver { | |
28 public: | |
29 // views::TableViewObserver: | |
30 MOCK_METHOD0(OnSelectionChanged, void()); | |
31 }; | |
32 | |
33 base::string16 GetPairedText(const std::string& device_name) { | |
34 return l10n_util::GetStringFUTF16( | |
35 IDS_DEVICE_CHOOSER_DEVICE_NAME_AND_PAIRED_STATUS_TEXT, | |
36 base::ASCIIToUTF16(device_name)); | |
37 } | |
38 | |
39 } // namespace | |
40 | |
41 class ChooserContentViewTest : public views::ViewsTestBase { | |
42 public: | |
43 ChooserContentViewTest() {} | |
44 | |
45 // views::ViewsTestBase: | |
46 void SetUp() override { | |
47 views::ViewsTestBase::SetUp(); | |
48 std::unique_ptr<MockChooserController> mock_chooser_controller( | |
49 new MockChooserController(nullptr)); | |
50 mock_chooser_controller_ = mock_chooser_controller.get(); | |
51 mock_table_view_observer_ = base::MakeUnique<MockTableViewObserver>(); | |
52 chooser_content_view_ = base::MakeUnique<ChooserContentView>( | |
53 mock_table_view_observer_.get(), std::move(mock_chooser_controller)); | |
54 table_view_ = chooser_content_view_->table_view_; | |
55 ASSERT_TRUE(table_view_); | |
56 table_model_ = table_view_->model(); | |
57 ASSERT_TRUE(table_model_); | |
58 throbber_ = chooser_content_view_->throbber_; | |
59 ASSERT_TRUE(throbber_); | |
60 turn_adapter_off_help_ = chooser_content_view_->turn_adapter_off_help_; | |
61 ASSERT_TRUE(turn_adapter_off_help_); | |
62 footnote_link_ = chooser_content_view_->footnote_link(); | |
63 ASSERT_TRUE(footnote_link_); | |
64 } | |
65 | |
66 protected: | |
67 std::unique_ptr<MockTableViewObserver> mock_table_view_observer_; | |
68 std::unique_ptr<ChooserContentView> chooser_content_view_; | |
69 MockChooserController* mock_chooser_controller_ = nullptr; | |
70 views::TableView* table_view_ = nullptr; | |
71 ui::TableModel* table_model_ = nullptr; | |
72 views::Throbber* throbber_ = nullptr; | |
73 views::StyledLabel* turn_adapter_off_help_ = nullptr; | |
74 views::StyledLabel* footnote_link_ = nullptr; | |
75 | |
76 private: | |
77 DISALLOW_COPY_AND_ASSIGN(ChooserContentViewTest); | |
78 }; | |
79 | |
80 TEST_F(ChooserContentViewTest, InitialState) { | |
81 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(0); | |
82 | |
83 EXPECT_TRUE(table_view_->visible()); | |
84 // Since "No devices found." needs to be displayed on the |table_view_|, | |
85 // the number of rows is 1. | |
86 EXPECT_EQ(1, table_view_->RowCount()); | |
87 EXPECT_EQ( | |
88 l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT), | |
89 table_model_->GetText(0, 0)); | |
90 // |table_view_| should be disabled since there is no option shown. | |
91 EXPECT_FALSE(table_view_->enabled()); | |
92 // No option selected. | |
93 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
94 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
95 EXPECT_FALSE(throbber_->visible()); | |
96 EXPECT_FALSE(turn_adapter_off_help_->visible()); | |
97 EXPECT_EQ(chooser_content_view_->help_text_, footnote_link_->text()); | |
98 } | |
99 | |
100 TEST_F(ChooserContentViewTest, AddOption) { | |
101 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(0); | |
102 | |
103 mock_chooser_controller_->OptionAdded( | |
104 base::ASCIIToUTF16("a"), | |
105 MockChooserController::kNoSignalStrengthLevelImage, | |
106 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
107 MockChooserController::ConnectedPairedStatus::PAIRED); | |
108 EXPECT_EQ(1, table_view_->RowCount()); | |
109 EXPECT_EQ(GetPairedText("a"), table_model_->GetText(0, 0)); | |
110 // |table_view_| should be enabled since there is an option. | |
111 EXPECT_TRUE(table_view_->enabled()); | |
112 // No option selected. | |
113 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
114 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
115 | |
116 mock_chooser_controller_->OptionAdded( | |
117 base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | |
118 MockChooserController::ConnectedPairedStatus::NONE); | |
119 EXPECT_EQ(2, table_view_->RowCount()); | |
120 EXPECT_EQ(base::ASCIIToUTF16("b"), table_model_->GetText(1, 0)); | |
121 EXPECT_TRUE(table_view_->enabled()); | |
122 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
123 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
124 | |
125 mock_chooser_controller_->OptionAdded( | |
126 base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | |
127 MockChooserController::ConnectedPairedStatus::NONE); | |
128 EXPECT_EQ(3, table_view_->RowCount()); | |
129 EXPECT_EQ(base::ASCIIToUTF16("c"), table_model_->GetText(2, 0)); | |
130 EXPECT_TRUE(table_view_->enabled()); | |
131 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
132 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
133 } | |
134 | |
135 TEST_F(ChooserContentViewTest, RemoveOption) { | |
136 // Called from TableView::OnItemsRemoved(). | |
137 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(3); | |
138 | |
139 mock_chooser_controller_->OptionAdded( | |
140 base::ASCIIToUTF16("a"), | |
141 MockChooserController::kNoSignalStrengthLevelImage, | |
142 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
143 MockChooserController::ConnectedPairedStatus::PAIRED); | |
144 mock_chooser_controller_->OptionAdded( | |
145 base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | |
146 MockChooserController::ConnectedPairedStatus::NONE); | |
147 mock_chooser_controller_->OptionAdded( | |
148 base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | |
149 MockChooserController::ConnectedPairedStatus::NONE); | |
150 | |
151 mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("b")); | |
152 EXPECT_EQ(2, table_view_->RowCount()); | |
153 EXPECT_EQ(GetPairedText("a"), table_model_->GetText(0, 0)); | |
154 EXPECT_EQ(base::ASCIIToUTF16("c"), table_model_->GetText(1, 0)); | |
155 EXPECT_TRUE(table_view_->enabled()); | |
156 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
157 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
158 | |
159 // Remove a non-existent option, the number of rows should not change. | |
160 mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("non-existent")); | |
161 EXPECT_EQ(2, table_view_->RowCount()); | |
162 EXPECT_EQ(GetPairedText("a"), table_model_->GetText(0, 0)); | |
163 EXPECT_EQ(base::ASCIIToUTF16("c"), table_model_->GetText(1, 0)); | |
164 EXPECT_TRUE(table_view_->enabled()); | |
165 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
166 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
167 | |
168 mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("c")); | |
169 EXPECT_EQ(1, table_view_->RowCount()); | |
170 EXPECT_EQ(GetPairedText("a"), table_model_->GetText(0, 0)); | |
171 EXPECT_TRUE(table_view_->enabled()); | |
172 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
173 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
174 | |
175 mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("a")); | |
176 // There is no option shown now. But since "No devices found." | |
177 // needs to be displayed on the |table_view_|, the number of rows is 1. | |
178 EXPECT_EQ(1, table_view_->RowCount()); | |
179 EXPECT_EQ( | |
180 l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT), | |
181 table_model_->GetText(0, 0)); | |
182 // |table_view_| should be disabled since all options are removed. | |
183 EXPECT_FALSE(table_view_->enabled()); | |
184 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
185 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
186 } | |
187 | |
188 TEST_F(ChooserContentViewTest, UpdateOption) { | |
189 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(0); | |
190 | |
191 mock_chooser_controller_->OptionAdded( | |
192 base::ASCIIToUTF16("a"), | |
193 MockChooserController::kNoSignalStrengthLevelImage, | |
194 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
195 MockChooserController::ConnectedPairedStatus::PAIRED); | |
196 mock_chooser_controller_->OptionAdded( | |
197 base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | |
198 MockChooserController::ConnectedPairedStatus::NONE); | |
199 mock_chooser_controller_->OptionAdded( | |
200 base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | |
201 MockChooserController::ConnectedPairedStatus::NONE); | |
202 | |
203 mock_chooser_controller_->OptionUpdated( | |
204 base::ASCIIToUTF16("b"), base::ASCIIToUTF16("d"), | |
205 MockChooserController::kNoSignalStrengthLevelImage, | |
206 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
207 MockChooserController::ConnectedPairedStatus::PAIRED); | |
208 EXPECT_EQ(3, table_view_->RowCount()); | |
209 EXPECT_EQ(GetPairedText("a"), table_model_->GetText(0, 0)); | |
210 EXPECT_EQ(GetPairedText("d"), table_model_->GetText(1, 0)); | |
211 EXPECT_EQ(base::ASCIIToUTF16("c"), table_model_->GetText(2, 0)); | |
212 EXPECT_TRUE(table_view_->enabled()); | |
213 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
214 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
215 } | |
216 | |
217 TEST_F(ChooserContentViewTest, AddAndRemoveOption) { | |
218 // Called from TableView::OnItemsRemoved(). | |
219 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(3); | |
220 | |
221 mock_chooser_controller_->OptionAdded( | |
222 base::ASCIIToUTF16("a"), | |
223 MockChooserController::kNoSignalStrengthLevelImage, | |
224 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
225 MockChooserController::ConnectedPairedStatus::PAIRED); | |
226 EXPECT_EQ(1, table_view_->RowCount()); | |
227 mock_chooser_controller_->OptionAdded( | |
228 base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | |
229 MockChooserController::ConnectedPairedStatus::NONE); | |
230 EXPECT_EQ(2, table_view_->RowCount()); | |
231 mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("b")); | |
232 EXPECT_EQ(1, table_view_->RowCount()); | |
233 mock_chooser_controller_->OptionAdded( | |
234 base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | |
235 MockChooserController::ConnectedPairedStatus::NONE); | |
236 EXPECT_EQ(2, table_view_->RowCount()); | |
237 mock_chooser_controller_->OptionAdded( | |
238 base::ASCIIToUTF16("d"), MockChooserController::kSignalStrengthLevel2Bar, | |
239 MockChooserController::ConnectedPairedStatus::NONE); | |
240 EXPECT_EQ(3, table_view_->RowCount()); | |
241 mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("d")); | |
242 EXPECT_EQ(2, table_view_->RowCount()); | |
243 mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("c")); | |
244 EXPECT_EQ(1, table_view_->RowCount()); | |
245 } | |
246 | |
247 TEST_F(ChooserContentViewTest, UpdateAndRemoveTheUpdatedOption) { | |
248 // Called from TableView::OnItemsRemoved(). | |
249 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(1); | |
250 | |
251 mock_chooser_controller_->OptionAdded( | |
252 base::ASCIIToUTF16("a"), | |
253 MockChooserController::kNoSignalStrengthLevelImage, | |
254 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
255 MockChooserController::ConnectedPairedStatus::PAIRED); | |
256 mock_chooser_controller_->OptionAdded( | |
257 base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | |
258 MockChooserController::ConnectedPairedStatus::NONE); | |
259 mock_chooser_controller_->OptionAdded( | |
260 base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | |
261 MockChooserController::ConnectedPairedStatus::NONE); | |
262 | |
263 mock_chooser_controller_->OptionUpdated( | |
264 base::ASCIIToUTF16("b"), base::ASCIIToUTF16("d"), | |
265 MockChooserController::kNoSignalStrengthLevelImage, | |
266 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
267 MockChooserController::ConnectedPairedStatus::PAIRED); | |
268 | |
269 mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("d")); | |
270 | |
271 EXPECT_EQ(2, table_view_->RowCount()); | |
272 EXPECT_EQ(GetPairedText("a"), table_model_->GetText(0, 0)); | |
273 EXPECT_EQ(base::ASCIIToUTF16("c"), table_model_->GetText(1, 0)); | |
274 EXPECT_TRUE(table_view_->enabled()); | |
275 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
276 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
277 } | |
278 | |
279 TEST_F(ChooserContentViewTest, SelectAndDeselectAnOption) { | |
280 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(4); | |
281 | |
282 mock_chooser_controller_->OptionAdded( | |
283 base::ASCIIToUTF16("a"), | |
284 MockChooserController::kNoSignalStrengthLevelImage, | |
285 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
286 MockChooserController::ConnectedPairedStatus::PAIRED); | |
287 mock_chooser_controller_->OptionAdded( | |
288 base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | |
289 MockChooserController::ConnectedPairedStatus::NONE); | |
290 mock_chooser_controller_->OptionAdded( | |
291 base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | |
292 MockChooserController::ConnectedPairedStatus::NONE); | |
293 | |
294 // Select option 0. | |
295 table_view_->Select(0); | |
296 EXPECT_EQ(1UL, table_view_->selection_model().size()); | |
297 EXPECT_EQ(0, table_view_->FirstSelectedRow()); | |
298 | |
299 // Unselect option 0. | |
300 table_view_->Select(-1); | |
301 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
302 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
303 | |
304 // Select option 1. | |
305 table_view_->Select(1); | |
306 EXPECT_EQ(1UL, table_view_->selection_model().size()); | |
307 EXPECT_EQ(1, table_view_->FirstSelectedRow()); | |
308 | |
309 // Unselect option 1. | |
310 table_view_->Select(-1); | |
311 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
312 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
313 } | |
314 | |
315 TEST_F(ChooserContentViewTest, SelectAnOptionAndThenSelectAnotherOption) { | |
316 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(3); | |
317 | |
318 mock_chooser_controller_->OptionAdded( | |
319 base::ASCIIToUTF16("a"), | |
320 MockChooserController::kNoSignalStrengthLevelImage, | |
321 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
322 MockChooserController::ConnectedPairedStatus::PAIRED); | |
323 mock_chooser_controller_->OptionAdded( | |
324 base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | |
325 MockChooserController::ConnectedPairedStatus::NONE); | |
326 mock_chooser_controller_->OptionAdded( | |
327 base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | |
328 MockChooserController::ConnectedPairedStatus::NONE); | |
329 | |
330 // Select option 0. | |
331 table_view_->Select(0); | |
332 EXPECT_EQ(1UL, table_view_->selection_model().size()); | |
333 EXPECT_EQ(0, table_view_->FirstSelectedRow()); | |
334 | |
335 // Select option 1. | |
336 table_view_->Select(1); | |
337 EXPECT_EQ(1UL, table_view_->selection_model().size()); | |
338 EXPECT_EQ(1, table_view_->FirstSelectedRow()); | |
339 | |
340 // Select option 2. | |
341 table_view_->Select(2); | |
342 EXPECT_EQ(1UL, table_view_->selection_model().size()); | |
343 EXPECT_EQ(2, table_view_->FirstSelectedRow()); | |
344 } | |
345 | |
346 TEST_F(ChooserContentViewTest, SelectAnOptionAndRemoveAnotherOption) { | |
347 // Called one time from TableView::Select() and two times from | |
348 // TableView::OnItemsRemoved(). | |
349 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(3); | |
350 | |
351 mock_chooser_controller_->OptionAdded( | |
352 base::ASCIIToUTF16("a"), | |
353 MockChooserController::kNoSignalStrengthLevelImage, | |
354 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
355 MockChooserController::ConnectedPairedStatus::PAIRED); | |
356 mock_chooser_controller_->OptionAdded( | |
357 base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | |
358 MockChooserController::ConnectedPairedStatus::NONE); | |
359 mock_chooser_controller_->OptionAdded( | |
360 base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | |
361 MockChooserController::ConnectedPairedStatus::NONE); | |
362 | |
363 // Select option 1. | |
364 table_view_->Select(1); | |
365 EXPECT_EQ(1UL, table_view_->selection_model().size()); | |
366 EXPECT_EQ(1, table_view_->FirstSelectedRow()); | |
367 | |
368 // Remove option 0, the list becomes: b c. | |
369 mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("a")); | |
370 EXPECT_EQ(2, table_view_->RowCount()); | |
371 EXPECT_EQ(1UL, table_view_->selection_model().size()); | |
372 // Since option 0 is removed, the original selected option 1 becomes | |
373 // the first option in the list. | |
374 EXPECT_EQ(0, table_view_->FirstSelectedRow()); | |
375 | |
376 // Remove option 1. | |
377 mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("c")); | |
378 EXPECT_EQ(1, table_view_->RowCount()); | |
379 EXPECT_EQ(1UL, table_view_->selection_model().size()); | |
380 EXPECT_EQ(0, table_view_->FirstSelectedRow()); | |
381 } | |
382 | |
383 TEST_F(ChooserContentViewTest, SelectAnOptionAndRemoveTheSelectedOption) { | |
384 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(2); | |
385 | |
386 mock_chooser_controller_->OptionAdded( | |
387 base::ASCIIToUTF16("a"), | |
388 MockChooserController::kNoSignalStrengthLevelImage, | |
389 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
390 MockChooserController::ConnectedPairedStatus::PAIRED); | |
391 mock_chooser_controller_->OptionAdded( | |
392 base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | |
393 MockChooserController::ConnectedPairedStatus::NONE); | |
394 mock_chooser_controller_->OptionAdded( | |
395 base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | |
396 MockChooserController::ConnectedPairedStatus::NONE); | |
397 | |
398 // Select option 1. | |
399 table_view_->Select(1); | |
400 EXPECT_EQ(1UL, table_view_->selection_model().size()); | |
401 EXPECT_EQ(1, table_view_->FirstSelectedRow()); | |
402 | |
403 // Remove option 1. | |
404 mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("b")); | |
405 EXPECT_EQ(2, table_view_->RowCount()); | |
406 // No option selected. | |
407 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
408 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
409 } | |
410 | |
411 TEST_F(ChooserContentViewTest, SelectAnOptionAndUpdateTheSelectedOption) { | |
412 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(1); | |
413 | |
414 mock_chooser_controller_->OptionAdded( | |
415 base::ASCIIToUTF16("a"), | |
416 MockChooserController::kNoSignalStrengthLevelImage, | |
417 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
418 MockChooserController::ConnectedPairedStatus::PAIRED); | |
419 mock_chooser_controller_->OptionAdded( | |
420 base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | |
421 MockChooserController::ConnectedPairedStatus::NONE); | |
422 mock_chooser_controller_->OptionAdded( | |
423 base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | |
424 MockChooserController::ConnectedPairedStatus::NONE); | |
425 | |
426 // Select option 1. | |
427 table_view_->Select(1); | |
428 | |
429 // Update option 1. | |
430 mock_chooser_controller_->OptionUpdated( | |
431 base::ASCIIToUTF16("b"), base::ASCIIToUTF16("d"), | |
432 MockChooserController::kNoSignalStrengthLevelImage, | |
433 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
434 MockChooserController::ConnectedPairedStatus::PAIRED); | |
435 | |
436 EXPECT_EQ(1UL, table_view_->selection_model().size()); | |
437 EXPECT_EQ(1, table_view_->FirstSelectedRow()); | |
438 EXPECT_EQ(GetPairedText("a"), table_model_->GetText(0, 0)); | |
439 EXPECT_EQ(GetPairedText("d"), table_model_->GetText(1, 0)); | |
440 EXPECT_EQ(base::ASCIIToUTF16("c"), table_model_->GetText(2, 0)); | |
441 } | |
442 | |
443 TEST_F(ChooserContentViewTest, | |
444 AddAnOptionAndSelectItAndRemoveTheSelectedOption) { | |
445 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(2); | |
446 | |
447 mock_chooser_controller_->OptionAdded( | |
448 base::ASCIIToUTF16("a"), | |
449 MockChooserController::kNoSignalStrengthLevelImage, | |
450 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
451 MockChooserController::ConnectedPairedStatus::PAIRED); | |
452 | |
453 // Select option 0. | |
454 table_view_->Select(0); | |
455 EXPECT_EQ(1UL, table_view_->selection_model().size()); | |
456 EXPECT_EQ(0, table_view_->FirstSelectedRow()); | |
457 | |
458 // Remove option 0. | |
459 mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("a")); | |
460 // There is no option shown now. But since "No devices found." | |
461 // needs to be displayed on the |table_view_|, the number of rows is 1. | |
462 EXPECT_EQ(1, table_view_->RowCount()); | |
463 EXPECT_EQ( | |
464 l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT), | |
465 table_model_->GetText(0, 0)); | |
466 // |table_view_| should be disabled since all options are removed. | |
467 EXPECT_FALSE(table_view_->enabled()); | |
468 // No option selected. | |
469 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
470 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
471 } | |
472 | |
473 TEST_F(ChooserContentViewTest, AdapterOnAndOffAndOn) { | |
474 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(2); | |
475 | |
476 mock_chooser_controller_->OnAdapterPresenceChanged( | |
477 content::BluetoothChooser::AdapterPresence::POWERED_ON); | |
478 EXPECT_TRUE(table_view_->visible()); | |
479 // Since "No devices found." needs to be displayed on the |table_view_|, | |
480 // the number of rows is 1. | |
481 EXPECT_EQ(1, table_view_->RowCount()); | |
482 EXPECT_EQ( | |
483 l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT), | |
484 table_model_->GetText(0, 0)); | |
485 // |table_view_| should be disabled since there is no option shown. | |
486 EXPECT_FALSE(table_view_->enabled()); | |
487 // No option selected. | |
488 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
489 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
490 EXPECT_FALSE(throbber_->visible()); | |
491 EXPECT_FALSE(turn_adapter_off_help_->visible()); | |
492 EXPECT_EQ(chooser_content_view_->help_and_re_scan_text_, | |
493 footnote_link_->text()); | |
494 | |
495 mock_chooser_controller_->OptionAdded( | |
496 base::ASCIIToUTF16("a"), | |
497 MockChooserController::kNoSignalStrengthLevelImage, | |
498 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
499 MockChooserController::ConnectedPairedStatus::PAIRED); | |
500 mock_chooser_controller_->OptionAdded( | |
501 base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | |
502 MockChooserController::ConnectedPairedStatus::NONE); | |
503 mock_chooser_controller_->OptionAdded( | |
504 base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | |
505 MockChooserController::ConnectedPairedStatus::NONE); | |
506 | |
507 table_view_->Select(1); | |
508 | |
509 mock_chooser_controller_->OnAdapterPresenceChanged( | |
510 content::BluetoothChooser::AdapterPresence::POWERED_OFF); | |
511 EXPECT_EQ(0u, mock_chooser_controller_->NumOptions()); | |
512 EXPECT_FALSE(table_view_->visible()); | |
513 EXPECT_FALSE(throbber_->visible()); | |
514 EXPECT_TRUE(turn_adapter_off_help_->visible()); | |
515 EXPECT_EQ(chooser_content_view_->help_text_, footnote_link_->text()); | |
516 | |
517 mock_chooser_controller_->OnAdapterPresenceChanged( | |
518 content::BluetoothChooser::AdapterPresence::POWERED_ON); | |
519 EXPECT_EQ(0u, mock_chooser_controller_->NumOptions()); | |
520 EXPECT_TRUE(table_view_->visible()); | |
521 EXPECT_EQ(1, table_view_->RowCount()); | |
522 EXPECT_EQ( | |
523 l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT), | |
524 table_model_->GetText(0, 0)); | |
525 EXPECT_FALSE(table_view_->enabled()); | |
526 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
527 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
528 EXPECT_FALSE(throbber_->visible()); | |
529 EXPECT_FALSE(turn_adapter_off_help_->visible()); | |
530 EXPECT_EQ(chooser_content_view_->help_and_re_scan_text_, | |
531 footnote_link_->text()); | |
532 } | |
533 | |
534 TEST_F(ChooserContentViewTest, DiscoveringAndNoOptionAddedAndIdle) { | |
535 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(2); | |
536 | |
537 mock_chooser_controller_->OptionAdded( | |
538 base::ASCIIToUTF16("a"), | |
539 MockChooserController::kNoSignalStrengthLevelImage, | |
540 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
541 MockChooserController::ConnectedPairedStatus::PAIRED); | |
542 mock_chooser_controller_->OptionAdded( | |
543 base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | |
544 MockChooserController::ConnectedPairedStatus::NONE); | |
545 mock_chooser_controller_->OptionAdded( | |
546 base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | |
547 MockChooserController::ConnectedPairedStatus::NONE); | |
548 table_view_->Select(1); | |
549 | |
550 mock_chooser_controller_->OnDiscoveryStateChanged( | |
551 content::BluetoothChooser::DiscoveryState::DISCOVERING); | |
552 EXPECT_FALSE(table_view_->visible()); | |
553 EXPECT_TRUE(throbber_->visible()); | |
554 EXPECT_EQ(chooser_content_view_->help_and_scanning_text_, | |
555 footnote_link_->text()); | |
556 | |
557 mock_chooser_controller_->OnDiscoveryStateChanged( | |
558 content::BluetoothChooser::DiscoveryState::IDLE); | |
559 EXPECT_TRUE(table_view_->visible()); | |
560 // Since "No devices found." needs to be displayed on the |table_view_|, | |
561 // the number of rows is 1. | |
562 EXPECT_EQ(1, table_view_->RowCount()); | |
563 EXPECT_EQ( | |
564 l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT), | |
565 table_model_->GetText(0, 0)); | |
566 // |table_view_| should be disabled since there is no option shown. | |
567 EXPECT_FALSE(table_view_->enabled()); | |
568 // No option selected. | |
569 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
570 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
571 EXPECT_FALSE(throbber_->visible()); | |
572 EXPECT_EQ(chooser_content_view_->help_and_re_scan_text_, | |
573 footnote_link_->text()); | |
574 } | |
575 | |
576 TEST_F(ChooserContentViewTest, DiscoveringAndOneOptionAddedAndSelectedAndIdle) { | |
577 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(3); | |
578 | |
579 mock_chooser_controller_->OptionAdded( | |
580 base::ASCIIToUTF16("a"), | |
581 MockChooserController::kNoSignalStrengthLevelImage, | |
582 MockChooserController::ConnectedPairedStatus::CONNECTED | | |
583 MockChooserController::ConnectedPairedStatus::PAIRED); | |
584 mock_chooser_controller_->OptionAdded( | |
585 base::ASCIIToUTF16("b"), MockChooserController::kSignalStrengthLevel0Bar, | |
586 MockChooserController::ConnectedPairedStatus::NONE); | |
587 mock_chooser_controller_->OptionAdded( | |
588 base::ASCIIToUTF16("c"), MockChooserController::kSignalStrengthLevel1Bar, | |
589 MockChooserController::ConnectedPairedStatus::NONE); | |
590 table_view_->Select(1); | |
591 | |
592 mock_chooser_controller_->OnDiscoveryStateChanged( | |
593 content::BluetoothChooser::DiscoveryState::DISCOVERING); | |
594 mock_chooser_controller_->OptionAdded( | |
595 base::ASCIIToUTF16("d"), MockChooserController::kSignalStrengthLevel2Bar, | |
596 MockChooserController::ConnectedPairedStatus::NONE); | |
597 EXPECT_TRUE(table_view_->visible()); | |
598 EXPECT_EQ(1, table_view_->RowCount()); | |
599 EXPECT_EQ(base::ASCIIToUTF16("d"), table_model_->GetText(0, 0)); | |
600 // |table_view_| should be enabled since there is an option. | |
601 EXPECT_TRUE(table_view_->enabled()); | |
602 // No option selected. | |
603 EXPECT_EQ(0UL, table_view_->selection_model().size()); | |
604 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); | |
605 EXPECT_FALSE(throbber_->visible()); | |
606 EXPECT_EQ(chooser_content_view_->help_and_scanning_text_, | |
607 footnote_link_->text()); | |
608 table_view_->Select(0); | |
609 EXPECT_EQ(1UL, table_view_->selection_model().size()); | |
610 EXPECT_EQ(0, table_view_->FirstSelectedRow()); | |
611 | |
612 mock_chooser_controller_->OnDiscoveryStateChanged( | |
613 content::BluetoothChooser::DiscoveryState::IDLE); | |
614 EXPECT_TRUE(table_view_->visible()); | |
615 EXPECT_EQ(1, table_view_->RowCount()); | |
616 EXPECT_EQ(base::ASCIIToUTF16("d"), table_model_->GetText(0, 0)); | |
617 // |table_view_| should be enabled since there is an option. | |
618 EXPECT_TRUE(table_view_->enabled()); | |
619 EXPECT_EQ(1UL, table_view_->selection_model().size()); | |
620 EXPECT_EQ(0, table_view_->FirstSelectedRow()); | |
621 EXPECT_FALSE(throbber_->visible()); | |
622 EXPECT_EQ(chooser_content_view_->help_and_re_scan_text_, | |
623 footnote_link_->text()); | |
624 } | |
625 | |
626 TEST_F(ChooserContentViewTest, ClickAdapterOffHelpLink) { | |
627 EXPECT_CALL(*mock_chooser_controller_, OpenAdapterOffHelpUrl()).Times(1); | |
628 turn_adapter_off_help_->LinkClicked(nullptr, 0); | |
629 } | |
630 | |
631 TEST_F(ChooserContentViewTest, ClickRescanLink) { | |
632 EXPECT_CALL(*mock_chooser_controller_, RefreshOptions()).Times(1); | |
633 chooser_content_view_->StyledLabelLinkClicked( | |
634 footnote_link_, chooser_content_view_->re_scan_text_range_, 0); | |
635 } | |
636 | |
637 TEST_F(ChooserContentViewTest, ClickGetHelpLink) { | |
638 EXPECT_CALL(*mock_chooser_controller_, OpenHelpCenterUrl()).Times(1); | |
639 chooser_content_view_->StyledLabelLinkClicked( | |
640 footnote_link_, chooser_content_view_->help_text_range_, 0); | |
641 } | |
OLD | NEW |