Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Side by Side Diff: chrome/browser/ui/views/chooser_content_view_unittest.cc

Issue 2171103002: Add test for WebBluetooth chooser spinner, status text and rescan button (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 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/ui/views/chooser_content_view.h" 5 #include "chrome/browser/ui/views/chooser_content_view.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
11 #include "chrome/browser/chooser_controller/mock_chooser_controller.h" 11 #include "chrome/browser/chooser_controller/mock_chooser_controller.h"
12 #include "chrome/grit/generated_resources.h" 12 #include "chrome/grit/generated_resources.h"
13 #include "testing/gmock/include/gmock/gmock.h" 13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "ui/base/l10n/l10n_util.h" 15 #include "ui/base/l10n/l10n_util.h"
16 #include "ui/views/controls/link.h"
16 #include "ui/views/controls/styled_label.h" 17 #include "ui/views/controls/styled_label.h"
17 #include "ui/views/controls/table/table_view.h" 18 #include "ui/views/controls/table/table_view.h"
18 #include "ui/views/controls/table/table_view_observer.h" 19 #include "ui/views/controls/table/table_view_observer.h"
20 #include "ui/views/controls/throbber.h"
19 21
20 namespace { 22 namespace {
21 23
22 class MockTableViewObserver : public views::TableViewObserver { 24 class MockTableViewObserver : public views::TableViewObserver {
23 public: 25 public:
24 // views::TableViewObserver: 26 // views::TableViewObserver:
25 MOCK_METHOD0(OnSelectionChanged, void()); 27 MOCK_METHOD0(OnSelectionChanged, void());
26 }; 28 };
27 29
28 } // namespace 30 } // namespace
29 31
30 class ChooserContentViewTest : public testing::Test { 32 class ChooserContentViewTest : public testing::Test {
31 public: 33 public:
32 ChooserContentViewTest() {} 34 ChooserContentViewTest() {}
33 35
34 // testing::Test: 36 // testing::Test:
35 void SetUp() override { 37 void SetUp() override {
36 std::unique_ptr<MockChooserController> mock_chooser_controller( 38 std::unique_ptr<MockChooserController> mock_chooser_controller(
37 new MockChooserController(nullptr)); 39 new MockChooserController(nullptr));
38 mock_chooser_controller_ = mock_chooser_controller.get(); 40 mock_chooser_controller_ = mock_chooser_controller.get();
39 mock_table_view_observer_.reset(new MockTableViewObserver()); 41 mock_table_view_observer_.reset(new MockTableViewObserver());
40 chooser_content_view_.reset(new ChooserContentView( 42 chooser_content_view_.reset(new ChooserContentView(
41 mock_table_view_observer_.get(), std::move(mock_chooser_controller))); 43 mock_table_view_observer_.get(), std::move(mock_chooser_controller)));
42 table_view_ = chooser_content_view_->table_view_for_test(); 44 table_view_ = chooser_content_view_->table_view_for_test();
43 ASSERT_TRUE(table_view_); 45 ASSERT_TRUE(table_view_);
44 table_model_ = table_view_->model(); 46 table_model_ = table_view_->model();
45 ASSERT_TRUE(table_model_); 47 ASSERT_TRUE(table_model_);
48 throbber_ = chooser_content_view_->throbber_for_test();
49 ASSERT_TRUE(throbber_);
50 discovery_state_.reset(chooser_content_view_->CreateExtraView());
51 ASSERT_TRUE(discovery_state_);
46 styled_label_.reset(chooser_content_view_->CreateFootnoteView()); 52 styled_label_.reset(chooser_content_view_->CreateFootnoteView());
47 ASSERT_TRUE(styled_label_); 53 ASSERT_TRUE(styled_label_);
48 } 54 }
49 55
50 protected: 56 protected:
57 // |discovery_state_| needs to be valid when |chooser_content_view_| is
58 // released, since ChooserContentView's destructor needs to access it.
59 // So it is declared before |chooser_content_view_|.
60 std::unique_ptr<views::Link> discovery_state_;
51 std::unique_ptr<MockTableViewObserver> mock_table_view_observer_; 61 std::unique_ptr<MockTableViewObserver> mock_table_view_observer_;
52 std::unique_ptr<ChooserContentView> chooser_content_view_; 62 std::unique_ptr<ChooserContentView> chooser_content_view_;
53 MockChooserController* mock_chooser_controller_; 63 MockChooserController* mock_chooser_controller_;
54 views::TableView* table_view_; 64 views::TableView* table_view_;
55 ui::TableModel* table_model_; 65 ui::TableModel* table_model_;
66 views::Throbber* throbber_;
56 std::unique_ptr<views::StyledLabel> styled_label_; 67 std::unique_ptr<views::StyledLabel> styled_label_;
57 68
58 private: 69 private:
59 DISALLOW_COPY_AND_ASSIGN(ChooserContentViewTest); 70 DISALLOW_COPY_AND_ASSIGN(ChooserContentViewTest);
60 }; 71 };
61 72
62 TEST_F(ChooserContentViewTest, InitialState) { 73 TEST_F(ChooserContentViewTest, InitialState) {
63 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(0); 74 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(0);
64 75
76 EXPECT_TRUE(table_view_->visible());
65 // Since "No devices found." needs to be displayed on the |table_view_|, 77 // Since "No devices found." needs to be displayed on the |table_view_|,
66 // the number of rows is 1. 78 // the number of rows is 1.
67 EXPECT_EQ(1, table_view_->RowCount()); 79 EXPECT_EQ(1, table_view_->RowCount());
68 EXPECT_EQ( 80 EXPECT_EQ(
69 l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT), 81 l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT),
70 table_model_->GetText(0, 0)); 82 table_model_->GetText(0, 0));
71 // |table_view_| should be disabled since there is no option shown. 83 // |table_view_| should be disabled since there is no option shown.
72 EXPECT_FALSE(table_view_->enabled()); 84 EXPECT_FALSE(table_view_->enabled());
73 // No option selected. 85 // No option selected.
74 EXPECT_EQ(0, table_view_->SelectedRowCount()); 86 EXPECT_EQ(0, table_view_->SelectedRowCount());
75 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); 87 EXPECT_EQ(-1, table_view_->FirstSelectedRow());
88 EXPECT_FALSE(throbber_->visible());
89 // |discovery_state_|'s text is an empty string.
90 EXPECT_TRUE(discovery_state_->text().empty());
76 } 91 }
77 92
78 TEST_F(ChooserContentViewTest, AddOption) { 93 TEST_F(ChooserContentViewTest, AddOption) {
79 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(0); 94 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(0);
80 95
81 mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a")); 96 mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
82 EXPECT_EQ(1, table_view_->RowCount()); 97 EXPECT_EQ(1, table_view_->RowCount());
83 EXPECT_EQ(base::ASCIIToUTF16("a"), table_model_->GetText(0, 0)); 98 EXPECT_EQ(base::ASCIIToUTF16("a"), table_model_->GetText(0, 0));
84 // |table_view_| should be enabled since there is an option. 99 // |table_view_| should be enabled since there is an option.
85 EXPECT_TRUE(table_view_->enabled()); 100 EXPECT_TRUE(table_view_->enabled());
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 EXPECT_EQ( 301 EXPECT_EQ(
287 l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT), 302 l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT),
288 table_model_->GetText(0, 0)); 303 table_model_->GetText(0, 0));
289 // |table_view_| should be disabled since all options are removed. 304 // |table_view_| should be disabled since all options are removed.
290 EXPECT_FALSE(table_view_->enabled()); 305 EXPECT_FALSE(table_view_->enabled());
291 // No option selected. 306 // No option selected.
292 EXPECT_EQ(0, table_view_->SelectedRowCount()); 307 EXPECT_EQ(0, table_view_->SelectedRowCount());
293 EXPECT_EQ(-1, table_view_->FirstSelectedRow()); 308 EXPECT_EQ(-1, table_view_->FirstSelectedRow());
294 } 309 }
295 310
311 TEST_F(ChooserContentViewTest, AdapterOnAndOff) {
312 EXPECT_CALL(*mock_table_view_observer_, OnSelectionChanged()).Times(2);
313
314 mock_chooser_controller_->OnAdapterPresenceChanged(
315 content::BluetoothChooser::AdapterPresence::POWERED_ON);
316 EXPECT_TRUE(table_view_->visible());
317 // Since "No devices found." needs to be displayed on the |table_view_|,
318 // the number of rows is 1.
319 EXPECT_EQ(1, table_view_->RowCount());
320 EXPECT_EQ(
321 l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT),
322 table_model_->GetText(0, 0));
323 // |table_view_| should be disabled since there is no option shown.
324 EXPECT_FALSE(table_view_->enabled());
325 // No option selected.
326 EXPECT_EQ(0, table_view_->SelectedRowCount());
327 EXPECT_EQ(-1, table_view_->FirstSelectedRow());
328 EXPECT_FALSE(throbber_->visible());
329 // |discovery_state_| is enabled and show a link.
330 EXPECT_TRUE(discovery_state_->enabled());
331 EXPECT_EQ(l10n_util::GetStringUTF16(IDS_BLUETOOTH_DEVICE_CHOOSER_RE_SCAN),
332 discovery_state_->text());
333
334 // Add options.
335 mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
336 mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("b"));
337 mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("c"));
338 EXPECT_EQ(3, table_view_->RowCount());
339 EXPECT_TRUE(table_view_->enabled());
340 // Select option 1.
341 table_view_->Select(1);
342 EXPECT_EQ(1, table_view_->SelectedRowCount());
343 EXPECT_EQ(1, table_view_->FirstSelectedRow());
344
345 mock_chooser_controller_->OnAdapterPresenceChanged(
346 content::BluetoothChooser::AdapterPresence::POWERED_OFF);
347 EXPECT_TRUE(table_view_->visible());
348 // Since "Bluetooth turned off." needs to be displayed on the |table_view_|,
349 // the number of rows is 1.
350 EXPECT_EQ(1, table_view_->RowCount());
351 EXPECT_EQ(l10n_util::GetStringUTF16(IDS_BLUETOOTH_DEVICE_CHOOSER_ADAPTER_OFF),
352 table_model_->GetText(0, 0));
353 // |table_view_| should be disabled since there is no option shown.
354 EXPECT_FALSE(table_view_->enabled());
355 // No option selected.
356 EXPECT_EQ(0, table_view_->SelectedRowCount());
357 EXPECT_EQ(-1, table_view_->FirstSelectedRow());
358 EXPECT_FALSE(throbber_->visible());
359 // |discovery_state_| is disabled and and shows an empty string.
360 EXPECT_FALSE(discovery_state_->enabled());
361 EXPECT_TRUE(discovery_state_->text().empty());
362 }
363
364 TEST_F(ChooserContentViewTest, ClickRescanLink) {
365 EXPECT_CALL(*mock_chooser_controller_, RefreshOptions()).Times(1);
366 chooser_content_view_->LinkClicked(nullptr, 0);
367 }
368
296 TEST_F(ChooserContentViewTest, ClickStyledLabelLink) { 369 TEST_F(ChooserContentViewTest, ClickStyledLabelLink) {
297 EXPECT_CALL(*mock_chooser_controller_, OpenHelpCenterUrl()).Times(1); 370 EXPECT_CALL(*mock_chooser_controller_, OpenHelpCenterUrl()).Times(1);
298 styled_label_->LinkClicked(nullptr, 0); 371 styled_label_->LinkClicked(nullptr, 0);
299 } 372 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698