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..8d4e26d55d12bcdc6cea31805a35dc4f616720b1 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,6 +77,8 @@ class ChooserDialogViewTest : public ExtensionBrowserTest { |
}; |
IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, InitialState) { |
msw
2016/07/22 23:37:05
It seems like some of these could be unit tests; t
juncai
2016/07/25 20:14:10
Removed some redundant tests that are already in u
|
+ // |table_view_| is visible. |
msw
2016/07/22 23:37:05
ditto nit here and elsewhere
juncai
2016/07/25 20:14:10
Removed this line.
|
+ 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()); |
@@ -69,6 +90,143 @@ IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, InitialState) { |
// No option selected. |
EXPECT_EQ(0, table_view_->SelectedRowCount()); |
EXPECT_EQ(-1, table_view_->FirstSelectedRow()); |
+ // |throbber_| is not visible. |
+ 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()); |
+ // Check the text on buttons. |
+ EXPECT_EQ( |
+ 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()); |
+ // |discovery_state_|'s text is an empty string. |
+ EXPECT_EQ(base::string16(), discovery_state_->text()); |
msw
2016/07/22 23:37:04
nit: EXPECT_TRUE(discovery_state_->text().empty())
juncai
2016/07/25 20:14:10
Removed this line.
|
+} |
+ |
+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) { |
msw
2016/07/22 23:37:05
How is this usefully different from SelectAnOption
juncai
2016/07/25 20:14:10
In this case, since there is only one option added
msw
2016/07/26 00:18:56
I suppose it's okay.
|
+ 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 +248,101 @@ 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( |
+ MockChooserController::AdapterPresence::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( |
+ MockChooserController::AdapterPresence::OFF); |
+ // Since the adapter is turned off, the previously selected option |
msw
2016/07/22 23:37:04
nit: check the option count here and after the ada
juncai
2016/07/25 20:14:10
Done.
|
+ // becomes invalid, the OK button is disabled. |
+ EXPECT_FALSE(ok_button_->enabled()); |
+ EXPECT_TRUE(cancel_button_->enabled()); |
+ |
+ mock_chooser_controller_->OnAdapterPresenceChanged( |
+ MockChooserController::AdapterPresence::ON); |
+ 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")); |
+ // |table_view_| is visible. |
+ EXPECT_TRUE(table_view_->visible()); |
+ EXPECT_EQ(3, table_view_->RowCount()); |
+ EXPECT_EQ(base::ASCIIToUTF16("a"), table_model_->GetText(0, 0)); |
msw
2016/07/22 23:37:04
nit: Try to avoid adding tangential checks here an
juncai
2016/07/25 20:14:10
Done.
|
+ EXPECT_EQ(base::ASCIIToUTF16("b"), table_model_->GetText(1, 0)); |
+ EXPECT_EQ(base::ASCIIToUTF16("c"), table_model_->GetText(2, 0)); |
+ 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()); |
+ // |throbber_| is not visible. |
+ 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_EQ(base::string16(), discovery_state_->text()); |
+ |
+ mock_chooser_controller_->OnDiscoveryStateChanged( |
+ MockChooserController::DiscoveryState::DISCOVERING); |
+ // |table_view_| is not visible. |
+ EXPECT_FALSE(table_view_->visible()); |
+ // |throbber_| is visible. |
+ EXPECT_TRUE(throbber_->visible()); |
+ // |discovery_state_| is disabled and show a label instead of a link. |
msw
2016/07/22 23:37:04
nit: shows
juncai
2016/07/25 20:14:10
Done.
|
+ 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( |
+ MockChooserController::DiscoveryState::IDLE); |
+ // |table_view_| is visible. |
+ 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()); |
+ // |throbber_| is not visible. |
+ EXPECT_FALSE(throbber_->visible()); |
+ // |discovery_state_| is enabled and show a link. |
msw
2016/07/22 23:37:05
nit: shows
juncai
2016/07/25 20:14:10
Done.
|
+ 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()); |
+} |