Index: chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc |
diff --git a/chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc b/chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c827ca626b19a1ab20c2fea1f32c8a4b4e749a72 |
--- /dev/null |
+++ b/chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc |
@@ -0,0 +1,256 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#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/ui/views/chooser_content_view.h" |
+#include "chrome/grit/generated_resources.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
msw
2016/07/27 20:25:46
optional nit: not needed (included via views_test_
juncai
2016/07/27 21:36:09
Done.
|
+#include "ui/base/l10n/l10n_util.h" |
+#include "ui/views/controls/button/label_button.h" |
+#include "ui/views/controls/table/table_view.h" |
+#include "ui/views/test/views_test_base.h" |
+#include "ui/views/widget/widget.h" |
+#include "ui/views/window/dialog_client_view.h" |
+ |
+class ChooserDialogViewTest : public views::ViewsTestBase { |
+ public: |
+ ChooserDialogViewTest() {} |
+ ~ChooserDialogViewTest() override {} |
+ |
+ // views::ViewsTestBase: |
+ void SetUp() override { |
+ views::ViewsTestBase::SetUp(); |
+ std::unique_ptr<MockChooserController> mock_chooser_controller( |
+ new MockChooserController(nullptr)); |
+ mock_chooser_controller_ = mock_chooser_controller.get(); |
+ std::unique_ptr<ChooserDialogView> chooser_dialog_view( |
+ new ChooserDialogView(std::move(mock_chooser_controller))); |
+ chooser_dialog_view_ = chooser_dialog_view.get(); |
+ table_view_ = chooser_dialog_view_->chooser_content_view_for_test() |
+ ->table_view_for_test(); |
+ ASSERT_TRUE(table_view_); |
+ dialog_ = views::DialogDelegate::CreateDialogWidget( |
+ chooser_dialog_view.release(), GetContext(), nullptr); |
+ ok_button_ = chooser_dialog_view_->GetDialogClientView()->ok_button(); |
+ ASSERT_TRUE(ok_button_); |
+ cancel_button_ = |
+ chooser_dialog_view_->GetDialogClientView()->cancel_button(); |
+ ASSERT_TRUE(cancel_button_); |
+ } |
+ |
+ // views::ViewsTestBase: |
+ void TearDown() override { |
+ dialog_->CloseNow(); |
+ views::ViewsTestBase::TearDown(); |
+ } |
+ |
+ protected: |
+ MockChooserController* mock_chooser_controller_; |
+ ChooserDialogView* chooser_dialog_view_; |
+ views::TableView* table_view_; |
+ views::LabelButton* ok_button_; |
+ views::LabelButton* cancel_button_; |
+ views::Widget* dialog_; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(ChooserDialogViewTest); |
+}; |
+ |
+TEST_F(ChooserDialogViewTest, InitialState) { |
+ // 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_USB_DEVICE_CHOOSER_CONNECT_BUTTON_TEXT), |
+ ok_button_->GetText()); |
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_CANCEL_BUTTON_TEXT), |
+ cancel_button_->GetText()); |
+} |
+ |
+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()); |
+} |
+ |
+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); |
+ EXPECT_TRUE(ok_button_->enabled()); |
+ EXPECT_TRUE(cancel_button_->enabled()); |
+ |
+ // Select option 2. |
+ table_view_->Select(2); |
+ EXPECT_TRUE(ok_button_->enabled()); |
+ EXPECT_TRUE(cancel_button_->enabled()); |
+} |
+ |
+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")); |
+ EXPECT_TRUE(ok_button_->enabled()); |
+ EXPECT_TRUE(cancel_button_->enabled()); |
+ |
+ // Remove option 1. |
+ mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("c")); |
+ EXPECT_TRUE(ok_button_->enabled()); |
+ EXPECT_TRUE(cancel_button_->enabled()); |
+} |
+ |
+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()); |
+} |
+ |
+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()); |
+} |
+ |
+TEST_F(ChooserDialogViewTest, Accept) { |
+ EXPECT_CALL(*mock_chooser_controller_, Select(testing::_)).Times(1); |
+ chooser_dialog_view_->GetDialogClientView()->AcceptWindow(); |
+} |
+ |
+TEST_F(ChooserDialogViewTest, Cancel) { |
+ EXPECT_CALL(*mock_chooser_controller_, Cancel()).Times(1); |
+ chooser_dialog_view_->GetDialogClientView()->CancelWindow(); |
+} |
+ |
+TEST_F(ChooserDialogViewTest, Close) { |
+ EXPECT_CALL(*mock_chooser_controller_, Close()).Times(1); |
+ chooser_dialog_view_->GetDialogClientView()->GetWidget()->Close(); |
+} |
+ |
+TEST_F(ChooserDialogViewTest, AdapterOnAndOffAndOn) { |
+ mock_chooser_controller_->OnAdapterPresenceChanged( |
+ content::BluetoothChooser::AdapterPresence::POWERED_ON); |
+ EXPECT_FALSE(ok_button_->enabled()); |
+ EXPECT_TRUE(cancel_button_->enabled()); |
+ |
+ 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()); |
+ |
+ 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_FALSE(ok_button_->enabled()); |
+ EXPECT_TRUE(cancel_button_->enabled()); |
+ |
+ mock_chooser_controller_->OnAdapterPresenceChanged( |
+ content::BluetoothChooser::AdapterPresence::POWERED_ON); |
+ EXPECT_FALSE(ok_button_->enabled()); |
+ EXPECT_TRUE(cancel_button_->enabled()); |
+} |
+ |
+TEST_F(ChooserDialogViewTest, DiscoveringAndIdle) { |
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a")); |
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("b")); |
+ mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("c")); |
+ table_view_->Select(1); |
+ EXPECT_TRUE(ok_button_->enabled()); |
+ EXPECT_TRUE(cancel_button_->enabled()); |
+ |
+ mock_chooser_controller_->OnDiscoveryStateChanged( |
+ content::BluetoothChooser::DiscoveryState::DISCOVERING); |
+ // 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); |
+ // OK button is disabled since the chooser refreshed options. |
+ EXPECT_FALSE(ok_button_->enabled()); |
+ EXPECT_TRUE(cancel_button_->enabled()); |
+} |