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

Unified Diff: chrome/browser/ui/views/extensions/chooser_dialog_view_browsertest.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, 5 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/views/extensions/chooser_dialog_view_browsertest.cc
diff --git a/chrome/browser/ui/views/extensions/chooser_dialog_view_browsertest.cc b/chrome/browser/ui/views/extensions/chooser_dialog_view_browsertest.cc
index 0fb6111e3110c876b297f6ec8337975c0dd91eb9..05fe260bb2bbe8caf4845b06c6ee7e8a48330a6b 100644
--- a/chrome/browser/ui/views/extensions/chooser_dialog_view_browsertest.cc
+++ b/chrome/browser/ui/views/extensions/chooser_dialog_view_browsertest.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/ui/views/extensions/chooser_dialog_view.h"
#include "base/macros.h"
+#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/chooser_controller/mock_chooser_controller.h"
#include "chrome/browser/extensions/extension_browsertest.h"
#include "chrome/browser/platform_util.h"
@@ -14,8 +15,11 @@
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/l10n/l10n_util.h"
+#include "ui/views/controls/button/label_button.h"
+#include "ui/views/controls/link.h"
#include "ui/views/controls/styled_label.h"
#include "ui/views/controls/table/table_view.h"
+#include "ui/views/controls/throbber.h"
#include "ui/views/widget/widget.h"
#include "ui/views/window/dialog_client_view.h"
@@ -41,6 +45,17 @@ class ChooserDialogViewTest : public ExtensionBrowserTest {
platform_util::GetViewForWindow(
browser()->window()->GetNativeWindow()));
modal_dialog->Show();
+ throbber_ = chooser_dialog_view_->chooser_content_view_for_test()
+ ->throbber_for_test();
+ ASSERT_TRUE(throbber_);
+ discovery_state_ = chooser_dialog_view_->chooser_content_view_for_test()
+ ->discovery_state_for_test();
+ ASSERT_TRUE(discovery_state_);
+ ok_button_ = chooser_dialog_view_->GetDialogClientView()->ok_button();
+ ASSERT_TRUE(ok_button_);
+ cancel_button_ =
+ chooser_dialog_view_->GetDialogClientView()->cancel_button();
+ ASSERT_TRUE(cancel_button_);
styled_label_ = chooser_dialog_view_->chooser_content_view_for_test()
->styled_label_for_test();
ASSERT_TRUE(styled_label_);
@@ -51,6 +66,10 @@ class ChooserDialogViewTest : public ExtensionBrowserTest {
ChooserDialogView* chooser_dialog_view_;
views::TableView* table_view_;
ui::TableModel* table_model_;
+ views::Throbber* throbber_;
+ views::Link* discovery_state_;
+ views::LabelButton* ok_button_;
+ views::LabelButton* cancel_button_;
views::StyledLabel* styled_label_;
private:
@@ -58,17 +77,139 @@ class ChooserDialogViewTest : public ExtensionBrowserTest {
};
IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, InitialState) {
- // Since "No devices found." needs to be displayed on the |table_view_|,
- // the number of rows is 1.
- EXPECT_EQ(1, table_view_->RowCount());
+ EXPECT_FALSE(throbber_->visible());
+ // OK button is disabled since there is no option.
+ EXPECT_FALSE(ok_button_->enabled());
+ // Cancel button is always enabled.
+ EXPECT_TRUE(cancel_button_->enabled());
EXPECT_EQ(
- l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT),
- table_model_->GetText(0, 0));
- // |table_view_| should be disabled since there is no option shown.
- EXPECT_FALSE(table_view_->enabled());
- // No option selected.
- EXPECT_EQ(0, table_view_->SelectedRowCount());
- EXPECT_EQ(-1, table_view_->FirstSelectedRow());
+ l10n_util::GetStringUTF16(IDS_USB_DEVICE_CHOOSER_CONNECT_BUTTON_TEXT),
+ ok_button_->GetText());
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_CANCEL_BUTTON_TEXT),
+ cancel_button_->GetText());
+}
+
+IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, SelectAndDeselectAnOption) {
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("b"));
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("c"));
+ // OK button is disabled since no option is selected.
+ EXPECT_FALSE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Select option 0.
+ table_view_->Select(0);
+ // OK button is enabled since an option is selected.
+ EXPECT_TRUE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Unselect option 0.
+ table_view_->Select(-1);
+ // OK button is disabled since no option is selected.
+ EXPECT_FALSE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Select option 1.
+ table_view_->Select(1);
+ // OK button is enabled since an option is selected.
+ EXPECT_TRUE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Unselect option 1.
+ table_view_->Select(-1);
+ // OK button is disabled since no option is selected.
+ EXPECT_FALSE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+}
+
+IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest,
+ SelectAnOptionAndThenSelectAnotherOption) {
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("b"));
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("c"));
+ EXPECT_FALSE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Select option 0.
+ table_view_->Select(0);
+ EXPECT_TRUE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Select option 1.
+ table_view_->Select(1);
+ // Both OK and Cancel buttons are still enabled.
+ EXPECT_TRUE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Select option 2.
+ table_view_->Select(2);
+ // Both OK and Cancel buttons are still enabled.
+ EXPECT_TRUE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+}
+
+IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest,
+ SelectAnOptionAndRemoveAnotherOption) {
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("b"));
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("c"));
+ EXPECT_FALSE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Select option 1.
+ table_view_->Select(1);
+ EXPECT_TRUE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Remove option 0, the list becomes: b c.
+ mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("a"));
+ // Both OK and Cancel buttons are still enabled.
+ EXPECT_TRUE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Remove option 1.
+ mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("c"));
+ // Both OK and Cancel buttons are still enabled.
+ EXPECT_TRUE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+}
+
+IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest,
+ SelectAnOptionAndRemoveTheSelectedOption) {
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("b"));
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("c"));
+ EXPECT_FALSE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Select option 1.
+ table_view_->Select(1);
+ EXPECT_TRUE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Remove option 1.
+ mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("b"));
+ // OK button is disabled since the selected option is removed.
+ EXPECT_FALSE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+}
+
+IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest,
+ AddAnOptionAndSelectItAndRemoveTheSelectedOption) {
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
+ EXPECT_FALSE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Select option 0.
+ table_view_->Select(0);
+ EXPECT_TRUE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Remove option 0.
+ mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("a"));
+ // There is no option shown now and the OK button is disabled.
+ EXPECT_FALSE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
}
IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, Accept) {
@@ -90,3 +231,94 @@ IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, ClickStyledLabelLink) {
EXPECT_CALL(*mock_chooser_controller_, OpenHelpCenterUrl()).Times(1);
styled_label_->LinkClicked(nullptr, 0);
}
+
+IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, AdapterOnAndOffAndOn) {
+ mock_chooser_controller_->OnAdapterPresenceChanged(
+ content::BluetoothChooser::AdapterPresence::POWERED_ON);
+ EXPECT_FALSE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Add options.
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("b"));
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("c"));
+ EXPECT_FALSE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ // Select option 1.
+ table_view_->Select(1);
+ EXPECT_TRUE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ mock_chooser_controller_->OnAdapterPresenceChanged(
+ content::BluetoothChooser::AdapterPresence::POWERED_OFF);
+ // Since the adapter is turned off, the previously selected option
+ // becomes invalid, the OK button is disabled.
+ EXPECT_EQ(0u, mock_chooser_controller_->NumOptions());
+ EXPECT_FALSE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ mock_chooser_controller_->OnAdapterPresenceChanged(
+ content::BluetoothChooser::AdapterPresence::POWERED_ON);
+ EXPECT_EQ(0u, mock_chooser_controller_->NumOptions());
+ EXPECT_FALSE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+}
+
+IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, DiscoveringAndIdle) {
+ // Add options.
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("b"));
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("c"));
+ EXPECT_TRUE(table_view_->visible());
+ EXPECT_EQ(3, table_view_->RowCount());
+ EXPECT_TRUE(table_view_->enabled());
+ // No option selected.
+ EXPECT_EQ(0, table_view_->SelectedRowCount());
+ EXPECT_EQ(-1, table_view_->FirstSelectedRow());
+ // Select option 1.
+ table_view_->Select(1);
+ EXPECT_EQ(1, table_view_->SelectedRowCount());
+ EXPECT_EQ(1, table_view_->FirstSelectedRow());
+ EXPECT_FALSE(throbber_->visible());
+ // Both OK and Cancel buttons are enabled.
+ EXPECT_TRUE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+ // |discovery_state_|'s text is an empty string.
+ EXPECT_TRUE(discovery_state_->text().empty());
+
+ mock_chooser_controller_->OnDiscoveryStateChanged(
+ content::BluetoothChooser::DiscoveryState::DISCOVERING);
+ EXPECT_FALSE(table_view_->visible());
+ EXPECT_TRUE(throbber_->visible());
+ // |discovery_state_| is disabled and shows a label instead of a link.
+ EXPECT_FALSE(discovery_state_->enabled());
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_BLUETOOTH_DEVICE_CHOOSER_SCANNING),
+ discovery_state_->text());
+ // OK button is disabled since the chooser is refreshing options.
+ EXPECT_FALSE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+
+ mock_chooser_controller_->OnDiscoveryStateChanged(
+ content::BluetoothChooser::DiscoveryState::IDLE);
+ EXPECT_TRUE(table_view_->visible());
+ // Since "No devices found." needs to be displayed on the |table_view_|,
+ // the number of rows is 1.
+ EXPECT_EQ(1, table_view_->RowCount());
+ EXPECT_EQ(
+ l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT),
+ table_model_->GetText(0, 0));
+ // |table_view_| should be disabled since there is no option shown.
+ EXPECT_FALSE(table_view_->enabled());
+ // No option selected.
+ EXPECT_EQ(0, table_view_->SelectedRowCount());
+ EXPECT_EQ(-1, table_view_->FirstSelectedRow());
+ EXPECT_FALSE(throbber_->visible());
+ // |discovery_state_| is enabled and shows a link.
+ EXPECT_TRUE(discovery_state_->enabled());
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_BLUETOOTH_DEVICE_CHOOSER_RE_SCAN),
+ discovery_state_->text());
+ // OK button is disabled since the chooser refreshed options.
+ EXPECT_FALSE(ok_button_->enabled());
+ EXPECT_TRUE(cancel_button_->enabled());
+}

Powered by Google App Engine
This is Rietveld 408576698