Chromium Code Reviews| 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 |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6536088db903c2027ca02ca1c0af1f941a3c8c2d |
| --- /dev/null |
| +++ b/chrome/browser/ui/views/extensions/chooser_dialog_view_browsertest.cc |
| @@ -0,0 +1,132 @@ |
| +// 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 "chrome/browser/extensions/extension_browsertest.h" |
| +#include "chrome/browser/ui/tabs/tab_strip_model.h" |
| +#include "chrome/grit/generated_resources.h" |
| +#include "components/chooser_controller/chooser_controller.h" |
| +#include "testing/gmock/include/gmock/gmock.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| +#include "ui/base/l10n/l10n_util.h" |
| +#include "ui/gfx/range/range.h" |
| +#include "ui/views/controls/table/table_view.h" |
| + |
| +namespace { |
| + |
| +class MockChooserController : public ChooserController { |
|
msw
2016/06/08 01:16:32
Can you share this between the dialog and bubble?
juncai
2016/06/09 01:59:53
Done.
|
| + public: |
| + MockChooserController() : ChooserController(nullptr) {} |
| + ~MockChooserController() override {} |
| + |
| + // ChooserController: |
| + size_t NumOptions() const override { return option_names_.size(); } |
| + |
| + // ChooserController: |
| + const base::string16& GetOption(size_t index) const override { |
| + return option_names_[index]; |
| + } |
| + |
| + // ChooserController: |
| + MOCK_METHOD1(Select, void(size_t index)); |
| + |
| + // ChooserController: |
| + MOCK_METHOD0(Cancel, void()); |
| + |
| + // ChooserController: |
| + MOCK_METHOD0(Close, void()); |
| + |
| + // ChooserController: |
| + MOCK_CONST_METHOD0(OpenHelpCenterUrl, void()); |
| + |
| + void OptionAdded(const base::string16 option_name) { |
| + option_names_.push_back(option_name); |
| + if (observer()) |
| + observer()->OnOptionAdded(option_names_.size() - 1); |
| + } |
| + |
| + void OptionRemoved(const base::string16 option_name) { |
| + for (auto it = option_names_.begin(); it != option_names_.end(); ++it) { |
| + if (*it == option_name) { |
| + size_t index = it - option_names_.begin(); |
| + option_names_.erase(it); |
| + if (observer()) |
| + observer()->OnOptionRemoved(index); |
| + return; |
| + } |
| + } |
| + } |
| + |
| + private: |
| + std::vector<base::string16> option_names_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(MockChooserController); |
| +}; |
| + |
| +} // namespace |
| + |
| +class ChooserDialogViewTest : public ExtensionBrowserTest { |
| + public: |
| + ChooserDialogViewTest() {} |
| + ~ChooserDialogViewTest() override {} |
| + |
| + void SetUpOnMainThread() override { |
| + content::WebContents* web_contents = |
| + browser()->tab_strip_model()->GetWebContentsAt(0); |
| + mock_chooser_controller_.reset(new MockChooserController()); |
| + ASSERT_TRUE(mock_chooser_controller_); |
|
msw
2016/06/08 01:16:32
nit: this seems unnecessary.
juncai
2016/06/09 01:59:53
Done.
|
| + chooser_dialog_view_.reset( |
| + new ChooserDialogView(web_contents, mock_chooser_controller_.get())); |
| + ASSERT_TRUE(chooser_dialog_view_); |
|
msw
2016/06/08 01:16:32
nit: this seems unnecessary.
juncai
2016/06/09 01:59:53
Done.
|
| + table_view_ = chooser_dialog_view_->table_view_; |
| + ASSERT_TRUE(table_view_); |
| + table_model_ = chooser_dialog_view_->table_model_; |
| + ASSERT_TRUE(table_model_); |
| + } |
| + |
| + protected: |
| + std::unique_ptr<MockChooserController> mock_chooser_controller_; |
| + std::unique_ptr<ChooserDialogView> chooser_dialog_view_; |
| + views::TableView* table_view_; |
| + ui::TableModel* table_model_; |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(ChooserDialogViewTest); |
| +}; |
| + |
| +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(table_view_->RowCount(), 1); |
| + EXPECT_EQ( |
| + table_model_->GetText(0, 0), |
| + l10n_util::GetStringUTF16(IDS_CHOOSER_BUBBLE_NO_DEVICES_FOUND_PROMPT)); |
| + // |table_view_| should be disabled since there is no option shown. |
| + EXPECT_FALSE(table_view_->enabled()); |
| + // No option selected. |
| + EXPECT_EQ(table_view_->SelectedRowCount(), 0); |
| + EXPECT_EQ(table_view_->FirstSelectedRow(), -1); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, Accept) { |
| + EXPECT_CALL(*mock_chooser_controller_, Select(testing::_)).Times(1); |
| + chooser_dialog_view_->Accept(); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, Cancel) { |
| + EXPECT_CALL(*mock_chooser_controller_, Cancel()).Times(1); |
| + chooser_dialog_view_->Cancel(); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, Close) { |
| + EXPECT_CALL(*mock_chooser_controller_, Close()).Times(1); |
| + chooser_dialog_view_->Close(); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, ClickStyledLabelLink) { |
| + EXPECT_CALL(*mock_chooser_controller_, OpenHelpCenterUrl()).Times(1); |
| + chooser_dialog_view_->StyledLabelLinkClicked(nullptr, gfx::Range(), 0); |
| +} |