Chromium Code Reviews| 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()); |
| +} |