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

Unified Diff: chrome/browser/ui/views/translate/translate_bubble_view_unittest.cc

Issue 2904443006: Views/Harmony Remove references to ui/views/layout/layout_constants.h (Closed)
Patch Set: Fix TranslateBubbleViewTest tests by setting up the ChromeLayoutProvider as the default provider Created 3 years, 7 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/translate/translate_bubble_view_unittest.cc
diff --git a/chrome/browser/ui/views/translate/translate_bubble_view_unittest.cc b/chrome/browser/ui/views/translate/translate_bubble_view_unittest.cc
index dfbe030611d70cfec1da08b7ec9321da1b796374..946f124906018b89332b67449fe36d31c54e4d40 100644
--- a/chrome/browser/ui/views/translate/translate_bubble_view_unittest.cc
+++ b/chrome/browser/ui/views/translate/translate_bubble_view_unittest.cc
@@ -1,467 +1,471 @@
-// Copyright 2013 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/translate/translate_bubble_view.h"
-
-#include <memory>
-#include <utility>
-
-#include "base/strings/utf_string_conversions.h"
-#include "base/test/scoped_feature_list.h"
-#include "chrome/browser/ui/translate/translate_bubble_model.h"
-#include "chrome/browser/ui/translate/translate_bubble_view_state_transition.h"
-#include "components/translate/core/browser/translate_prefs.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/events/event_constants.h"
-#include "ui/events/event_utils.h"
-#include "ui/gfx/range/range.h"
-#include "ui/views/bubble/bubble_frame_view.h"
-#include "ui/views/controls/button/checkbox.h"
-#include "ui/views/controls/combobox/combobox.h"
-#include "ui/views/controls/styled_label.h"
-#include "ui/views/test/combobox_test_api.h"
-#include "ui/views/test/views_test_base.h"
-#include "ui/views/widget/widget.h"
-
-namespace {
-
-class MockTranslateBubbleModel : public TranslateBubbleModel {
- public:
- explicit MockTranslateBubbleModel(TranslateBubbleModel::ViewState view_state)
- : view_state_transition_(view_state),
- error_type_(translate::TranslateErrors::NONE),
- original_language_index_(0),
- target_language_index_(1),
- never_translate_language_(false),
- never_translate_site_(false),
- should_always_translate_(false),
- always_translate_checked_(false),
- set_always_translate_called_count_(0),
- translate_called_(false),
- revert_translation_called_(false),
- translation_declined_(false),
- original_language_index_on_translation_(-1),
- target_language_index_on_translation_(-1) {}
-
- TranslateBubbleModel::ViewState GetViewState() const override {
- return view_state_transition_.view_state();
- }
-
- void SetViewState(TranslateBubbleModel::ViewState view_state) override {
- view_state_transition_.SetViewState(view_state);
- }
-
- void ShowError(translate::TranslateErrors::Type error_type) override {
- error_type_ = error_type;
- }
-
- void GoBackFromAdvanced() override {
- view_state_transition_.GoBackFromAdvanced();
- }
-
- int GetNumberOfLanguages() const override { return 1000; }
-
- base::string16 GetLanguageNameAt(int index) const override {
- return base::ASCIIToUTF16("English");
- }
-
- int GetOriginalLanguageIndex() const override {
- return original_language_index_;
- }
-
- void UpdateOriginalLanguageIndex(int index) override {
- original_language_index_ = index;
- }
-
- int GetTargetLanguageIndex() const override { return target_language_index_; }
-
- void UpdateTargetLanguageIndex(int index) override {
- target_language_index_ = index;
- }
-
- void DeclineTranslation() override { translation_declined_ = true; }
-
- void SetNeverTranslateLanguage(bool value) override {
- never_translate_language_ = value;
- }
-
- void SetNeverTranslateSite(bool value) override {
- never_translate_site_ = value;
- }
-
- bool ShouldAlwaysTranslateBeCheckedByDefault() const override {
- return always_translate_checked_;
- }
-
- bool ShouldAlwaysTranslate() const override {
- return should_always_translate_;
- }
-
- void SetAlwaysTranslate(bool value) override {
- should_always_translate_ = value;
- set_always_translate_called_count_++;
- }
-
- void Translate() override {
- translate_called_ = true;
- original_language_index_on_translation_ = original_language_index_;
- target_language_index_on_translation_ = target_language_index_;
- }
-
- void RevertTranslation() override { revert_translation_called_ = true; }
-
- void OnBubbleClosing() override {}
-
- bool IsPageTranslatedInCurrentLanguages() const override {
- return original_language_index_on_translation_ ==
- original_language_index_ &&
- target_language_index_on_translation_ == target_language_index_;
- }
-
- TranslateBubbleViewStateTransition view_state_transition_;
- translate::TranslateErrors::Type error_type_;
- int original_language_index_;
- int target_language_index_;
- bool never_translate_language_;
- bool never_translate_site_;
- bool should_always_translate_;
- bool always_translate_checked_;
- int set_always_translate_called_count_;
- bool translate_called_;
- bool revert_translation_called_;
- bool translation_declined_;
- int original_language_index_on_translation_;
- int target_language_index_on_translation_;
-};
-
-} // namespace
-
-class TranslateBubbleViewTest : public views::ViewsTestBase {
- public:
- TranslateBubbleViewTest() {}
-
- protected:
- void SetUp() override {
- views::ViewsTestBase::SetUp();
-
- // The bubble needs the parent as an anchor.
- views::Widget::InitParams params =
- CreateParams(views::Widget::InitParams::TYPE_WINDOW);
- params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
-
- anchor_widget_.reset(new views::Widget());
- anchor_widget_->Init(params);
- anchor_widget_->Show();
-
- mock_model_ = new MockTranslateBubbleModel(
- TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE);
- }
-
- void TurnOnTranslate2016Q2UIFlag() {
- scoped_feature_list_.InitAndEnableFeature(translate::kTranslateUI2016Q2);
- }
-
- void CreateAndShowBubble() {
- std::unique_ptr<TranslateBubbleModel> model(mock_model_);
- bubble_ = new TranslateBubbleView(anchor_widget_->GetContentsView(),
- std::move(model),
- translate::TranslateErrors::NONE, NULL);
- views::BubbleDialogDelegateView::CreateBubble(bubble_)->Show();
- }
-
- void TearDown() override {
- bubble_->GetWidget()->CloseNow();
- anchor_widget_.reset();
-
- views::ViewsTestBase::TearDown();
- }
-
- views::Combobox* denial_combobox() { return bubble_->denial_combobox_; }
- bool denial_button_clicked() { return mock_model_->translation_declined_; }
-
- std::unique_ptr<views::Widget> anchor_widget_;
- MockTranslateBubbleModel* mock_model_;
- TranslateBubbleView* bubble_;
- base::test::ScopedFeatureList scoped_feature_list_;
-};
-
-TEST_F(TranslateBubbleViewTest, TranslateButton) {
- CreateAndShowBubble();
- EXPECT_FALSE(mock_model_->translate_called_);
-
- // Press the "Translate" button.
- bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_TRANSLATE);
- EXPECT_TRUE(mock_model_->translate_called_);
-}
-
-TEST_F(TranslateBubbleViewTest, TranslateButtonIn2016Q2UI) {
- TurnOnTranslate2016Q2UIFlag();
- CreateAndShowBubble();
- EXPECT_FALSE(mock_model_->translate_called_);
-
- // Press the "Translate" button.
- bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_TRANSLATE);
- EXPECT_TRUE(mock_model_->translate_called_);
-}
-
-TEST_F(TranslateBubbleViewTest, CloseButtonIn2016Q2UI) {
- TurnOnTranslate2016Q2UIFlag();
- CreateAndShowBubble();
- EXPECT_FALSE(mock_model_->translate_called_);
- EXPECT_FALSE(mock_model_->translation_declined_);
- EXPECT_FALSE(bubble_->GetWidget()->IsClosed());
-
- // Press the "Close" button.
- bubble_->GetBubbleFrameView()->ButtonPressed(
- bubble_->GetBubbleFrameView()->GetCloseButtonForTest(),
- ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
- ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE));
-
- EXPECT_FALSE(mock_model_->translate_called_);
- EXPECT_TRUE(mock_model_->translation_declined_);
-}
-
-TEST_F(TranslateBubbleViewTest, ComboboxNope) {
- CreateAndShowBubble();
- views::test::ComboboxTestApi test_api(denial_combobox());
- EXPECT_FALSE(denial_button_clicked());
- EXPECT_FALSE(bubble_->GetWidget()->IsClosed());
-
- test_api.PerformActionAt(static_cast<int>(
- TranslateBubbleView::DenialComboboxIndex::DONT_TRANSLATE));
- EXPECT_TRUE(denial_button_clicked());
- EXPECT_TRUE(bubble_->GetWidget()->IsClosed());
-}
-
-TEST_F(TranslateBubbleViewTest, ComboboxNeverTranslateLanguage) {
- CreateAndShowBubble();
- views::test::ComboboxTestApi test_api(denial_combobox());
- EXPECT_FALSE(bubble_->GetWidget()->IsClosed());
- EXPECT_FALSE(mock_model_->never_translate_language_);
- EXPECT_FALSE(denial_button_clicked());
-
- test_api.PerformActionAt(static_cast<int>(
- TranslateBubbleView::DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE));
- EXPECT_TRUE(denial_button_clicked());
- EXPECT_TRUE(mock_model_->never_translate_language_);
- EXPECT_TRUE(bubble_->GetWidget()->IsClosed());
-}
-
-TEST_F(TranslateBubbleViewTest, ComboboxNeverTranslateSite) {
- CreateAndShowBubble();
- views::test::ComboboxTestApi test_api(denial_combobox());
- EXPECT_FALSE(mock_model_->never_translate_site_);
- EXPECT_FALSE(denial_button_clicked());
- EXPECT_FALSE(bubble_->GetWidget()->IsClosed());
-
- test_api.PerformActionAt(static_cast<int>(
- TranslateBubbleView::DenialComboboxIndex::NEVER_TRANSLATE_SITE));
- EXPECT_TRUE(denial_button_clicked());
- EXPECT_TRUE(mock_model_->never_translate_site_);
- EXPECT_TRUE(bubble_->GetWidget()->IsClosed());
-}
-
-TEST_F(TranslateBubbleViewTest, MenuButtonNeverTranslateLanguage) {
- TurnOnTranslate2016Q2UIFlag();
- CreateAndShowBubble();
- EXPECT_FALSE(bubble_->GetWidget()->IsClosed());
- EXPECT_FALSE(mock_model_->never_translate_language_);
- EXPECT_FALSE(denial_button_clicked());
-
- bubble_->ExecuteCommand(
- TranslateBubbleView::DenialMenuItem::NEVER_TRANSLATE_LANGUAGE, 0);
-
- EXPECT_TRUE(denial_button_clicked());
- EXPECT_TRUE(mock_model_->never_translate_language_);
- EXPECT_TRUE(bubble_->GetWidget()->IsClosed());
-}
-
-TEST_F(TranslateBubbleViewTest, MenuButtonNeverTranslateSite) {
- TurnOnTranslate2016Q2UIFlag();
- CreateAndShowBubble();
- EXPECT_FALSE(mock_model_->never_translate_site_);
- EXPECT_FALSE(denial_button_clicked());
- EXPECT_FALSE(bubble_->GetWidget()->IsClosed());
-
- bubble_->ExecuteCommand(
- TranslateBubbleView::DenialMenuItem::NEVER_TRANSLATE_SITE, 0);
-
- EXPECT_TRUE(denial_button_clicked());
- EXPECT_TRUE(mock_model_->never_translate_site_);
- EXPECT_TRUE(bubble_->GetWidget()->IsClosed());
-}
-
-TEST_F(TranslateBubbleViewTest, AdvancedLink) {
- CreateAndShowBubble();
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE,
- bubble_->GetViewState());
-
- // Click the "Advanced" link.
- bubble_->HandleLinkClicked(TranslateBubbleView::LINK_ID_ADVANCED);
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ADVANCED, bubble_->GetViewState());
-}
-
-TEST_F(TranslateBubbleViewTest, AdvancedLinkIn2016Q2UI) {
- TurnOnTranslate2016Q2UIFlag();
- CreateAndShowBubble();
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE,
- bubble_->GetViewState());
-
- // Click the styled label link.
- views::StyledLabel styled_label(base::ASCIIToUTF16("test"), nullptr);
- bubble_->StyledLabelLinkClicked(&styled_label, gfx::Range(), ui::EF_NONE);
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ADVANCED, bubble_->GetViewState());
-}
-
-TEST_F(TranslateBubbleViewTest, ShowOriginalButton) {
- CreateAndShowBubble();
- bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE);
-
- // Click the "Show original" button to revert translation.
- EXPECT_FALSE(mock_model_->revert_translation_called_);
- bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_SHOW_ORIGINAL);
- EXPECT_TRUE(mock_model_->revert_translation_called_);
-}
-
-TEST_F(TranslateBubbleViewTest, TryAgainButton) {
- CreateAndShowBubble();
- bubble_->SwitchToErrorView(translate::TranslateErrors::NETWORK);
-
- EXPECT_EQ(translate::TranslateErrors::NETWORK, mock_model_->error_type_);
-
- // Click the "Try again" button to translate.
- EXPECT_FALSE(mock_model_->translate_called_);
- bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_TRY_AGAIN);
- EXPECT_TRUE(mock_model_->translate_called_);
-}
-
-TEST_F(TranslateBubbleViewTest, AlwaysTranslateCheckboxAndCancelButton) {
- CreateAndShowBubble();
- bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
-
- // Click the "Always Translate" checkbox. Changing the state of this checkbox
- // should NOT affect the model after pressing the cancel button.
-
- // Check the initial state.
- EXPECT_FALSE(mock_model_->should_always_translate_);
- EXPECT_EQ(0, mock_model_->set_always_translate_called_count_);
- EXPECT_FALSE(bubble_->advanced_always_translate_checkbox_->checked());
-
- // Click the checkbox. The state is not saved yet.
- bubble_->advanced_always_translate_checkbox_->SetChecked(true);
- bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_ALWAYS_TRANSLATE);
- EXPECT_FALSE(mock_model_->should_always_translate_);
- EXPECT_EQ(0, mock_model_->set_always_translate_called_count_);
-
- // Click the cancel button. The state is not saved.
- bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_CANCEL);
- EXPECT_FALSE(mock_model_->should_always_translate_);
- EXPECT_EQ(0, mock_model_->set_always_translate_called_count_);
-}
-
-TEST_F(TranslateBubbleViewTest, AlwaysTranslateCheckboxAndDoneButton) {
- CreateAndShowBubble();
- bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
-
- // Click the "Always Translate" checkbox. Changing the state of this checkbox
- // should affect the model after pressing the done button.
-
- // Check the initial state.
- EXPECT_FALSE(mock_model_->should_always_translate_);
- EXPECT_EQ(0, mock_model_->set_always_translate_called_count_);
- EXPECT_FALSE(bubble_->advanced_always_translate_checkbox_->checked());
-
- // Click the checkbox. The state is not saved yet.
- bubble_->advanced_always_translate_checkbox_->SetChecked(true);
- bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_ALWAYS_TRANSLATE);
- EXPECT_FALSE(mock_model_->should_always_translate_);
- EXPECT_EQ(0, mock_model_->set_always_translate_called_count_);
-
- // Click the done button. The state is saved.
- bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_DONE);
- EXPECT_TRUE(mock_model_->should_always_translate_);
- EXPECT_EQ(1, mock_model_->set_always_translate_called_count_);
-}
-
-TEST_F(TranslateBubbleViewTest, DoneButton) {
- CreateAndShowBubble();
- bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
-
- // Click the "Done" button to translate. The selected languages by the user
- // are applied.
- EXPECT_FALSE(mock_model_->translate_called_);
- bubble_->source_language_combobox_->SetSelectedIndex(10);
- bubble_->HandleComboboxPerformAction(
- TranslateBubbleView::COMBOBOX_ID_SOURCE_LANGUAGE);
- bubble_->target_language_combobox_->SetSelectedIndex(20);
- bubble_->HandleComboboxPerformAction(
- TranslateBubbleView::COMBOBOX_ID_TARGET_LANGUAGE);
- bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_DONE);
- EXPECT_TRUE(mock_model_->translate_called_);
- EXPECT_EQ(10, mock_model_->original_language_index_);
- EXPECT_EQ(20, mock_model_->target_language_index_);
-}
-
-TEST_F(TranslateBubbleViewTest, DoneButtonWithoutTranslating) {
- CreateAndShowBubble();
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE,
- bubble_->GetViewState());
-
- // Translate the page once.
- mock_model_->Translate();
- EXPECT_TRUE(mock_model_->translate_called_);
-
- // Go back to the initial view.
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE,
- bubble_->GetViewState());
- mock_model_->translate_called_ = false;
-
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE,
- bubble_->GetViewState());
- bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
-
- // Click the "Done" button with the current language pair. This time,
- // translation is not performed and the view state will be back to the
- // previous view.
- bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_DONE);
- EXPECT_FALSE(mock_model_->translate_called_);
-
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE,
- bubble_->GetViewState());
-}
-
-TEST_F(TranslateBubbleViewTest, CancelButtonReturningBeforeTranslate) {
- CreateAndShowBubble();
- bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE);
- bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
-
- // Click the "Cancel" button to go back.
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ADVANCED, bubble_->GetViewState());
- bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_CANCEL);
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE,
- bubble_->GetViewState());
-}
-
-TEST_F(TranslateBubbleViewTest, CancelButtonReturningAfterTranslate) {
- CreateAndShowBubble();
- bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE);
- bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
-
- // Click the "Cancel" button to go back.
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ADVANCED, bubble_->GetViewState());
- bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_CANCEL);
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE,
- bubble_->GetViewState());
-}
-
-TEST_F(TranslateBubbleViewTest, CancelButtonReturningError) {
- CreateAndShowBubble();
- bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ERROR);
- bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
-
- // Click the "Cancel" button to go back.
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ADVANCED, bubble_->GetViewState());
- bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_CANCEL);
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ERROR, bubble_->GetViewState());
-}
+// Copyright 2013 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/translate/translate_bubble_view.h"
+
+#include <memory>
+#include <utility>
+
+#include "base/strings/utf_string_conversions.h"
+#include "base/test/scoped_feature_list.h"
+#include "chrome/browser/ui/translate/translate_bubble_model.h"
+#include "chrome/browser/ui/translate/translate_bubble_view_state_transition.h"
+#include "chrome/browser/ui/views/harmony/chrome_layout_provider.h"
+#include "components/translate/core/browser/translate_prefs.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/events/event_constants.h"
+#include "ui/events/event_utils.h"
+#include "ui/gfx/range/range.h"
+#include "ui/views/bubble/bubble_frame_view.h"
+#include "ui/views/controls/button/checkbox.h"
+#include "ui/views/controls/combobox/combobox.h"
+#include "ui/views/controls/styled_label.h"
+#include "ui/views/test/combobox_test_api.h"
+#include "ui/views/test/views_test_base.h"
+#include "ui/views/widget/widget.h"
+
+namespace {
+
+class MockTranslateBubbleModel : public TranslateBubbleModel {
+ public:
+ explicit MockTranslateBubbleModel(TranslateBubbleModel::ViewState view_state)
+ : view_state_transition_(view_state),
+ error_type_(translate::TranslateErrors::NONE),
+ original_language_index_(0),
+ target_language_index_(1),
+ never_translate_language_(false),
+ never_translate_site_(false),
+ should_always_translate_(false),
+ always_translate_checked_(false),
+ set_always_translate_called_count_(0),
+ translate_called_(false),
+ revert_translation_called_(false),
+ translation_declined_(false),
+ original_language_index_on_translation_(-1),
+ target_language_index_on_translation_(-1) {}
+
+ TranslateBubbleModel::ViewState GetViewState() const override {
+ return view_state_transition_.view_state();
+ }
+
+ void SetViewState(TranslateBubbleModel::ViewState view_state) override {
+ view_state_transition_.SetViewState(view_state);
+ }
+
+ void ShowError(translate::TranslateErrors::Type error_type) override {
+ error_type_ = error_type;
+ }
+
+ void GoBackFromAdvanced() override {
+ view_state_transition_.GoBackFromAdvanced();
+ }
+
+ int GetNumberOfLanguages() const override { return 1000; }
+
+ base::string16 GetLanguageNameAt(int index) const override {
+ return base::ASCIIToUTF16("English");
+ }
+
+ int GetOriginalLanguageIndex() const override {
+ return original_language_index_;
+ }
+
+ void UpdateOriginalLanguageIndex(int index) override {
+ original_language_index_ = index;
+ }
+
+ int GetTargetLanguageIndex() const override { return target_language_index_; }
+
+ void UpdateTargetLanguageIndex(int index) override {
+ target_language_index_ = index;
+ }
+
+ void DeclineTranslation() override { translation_declined_ = true; }
+
+ void SetNeverTranslateLanguage(bool value) override {
+ never_translate_language_ = value;
+ }
+
+ void SetNeverTranslateSite(bool value) override {
+ never_translate_site_ = value;
+ }
+
+ bool ShouldAlwaysTranslateBeCheckedByDefault() const override {
+ return always_translate_checked_;
+ }
+
+ bool ShouldAlwaysTranslate() const override {
+ return should_always_translate_;
+ }
+
+ void SetAlwaysTranslate(bool value) override {
+ should_always_translate_ = value;
+ set_always_translate_called_count_++;
+ }
+
+ void Translate() override {
+ translate_called_ = true;
+ original_language_index_on_translation_ = original_language_index_;
+ target_language_index_on_translation_ = target_language_index_;
+ }
+
+ void RevertTranslation() override { revert_translation_called_ = true; }
+
+ void OnBubbleClosing() override {}
+
+ bool IsPageTranslatedInCurrentLanguages() const override {
+ return original_language_index_on_translation_ ==
+ original_language_index_ &&
+ target_language_index_on_translation_ == target_language_index_;
+ }
+
+ TranslateBubbleViewStateTransition view_state_transition_;
+ translate::TranslateErrors::Type error_type_;
+ int original_language_index_;
+ int target_language_index_;
+ bool never_translate_language_;
+ bool never_translate_site_;
+ bool should_always_translate_;
+ bool always_translate_checked_;
+ int set_always_translate_called_count_;
+ bool translate_called_;
+ bool revert_translation_called_;
+ bool translation_declined_;
+ int original_language_index_on_translation_;
+ int target_language_index_on_translation_;
+};
+
+} // namespace
+
+class TranslateBubbleViewTest : public views::ViewsTestBase {
+ public:
+ TranslateBubbleViewTest() {}
+
+ protected:
+ void SetUp() override {
+ views::ViewsTestBase::SetUp();
+ // Set the ChromeLayoutProvider as the default layout provider.
+ test_views_delegate()->set_layout_provider(
+ ChromeLayoutProvider::CreateLayoutProvider());
+
+ // The bubble needs the parent as an anchor.
+ views::Widget::InitParams params =
+ CreateParams(views::Widget::InitParams::TYPE_WINDOW);
+ params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+
+ anchor_widget_.reset(new views::Widget());
+ anchor_widget_->Init(params);
+ anchor_widget_->Show();
+
+ mock_model_ = new MockTranslateBubbleModel(
+ TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE);
+ }
+
+ void TurnOnTranslate2016Q2UIFlag() {
+ scoped_feature_list_.InitAndEnableFeature(translate::kTranslateUI2016Q2);
+ }
+
+ void CreateAndShowBubble() {
+ std::unique_ptr<TranslateBubbleModel> model(mock_model_);
+ bubble_ = new TranslateBubbleView(anchor_widget_->GetContentsView(),
+ std::move(model),
+ translate::TranslateErrors::NONE, NULL);
+ views::BubbleDialogDelegateView::CreateBubble(bubble_)->Show();
+ }
+
+ void TearDown() override {
+ bubble_->GetWidget()->CloseNow();
+ anchor_widget_.reset();
+
+ views::ViewsTestBase::TearDown();
+ }
+
+ views::Combobox* denial_combobox() { return bubble_->denial_combobox_; }
+ bool denial_button_clicked() { return mock_model_->translation_declined_; }
+
+ std::unique_ptr<views::Widget> anchor_widget_;
+ MockTranslateBubbleModel* mock_model_;
+ TranslateBubbleView* bubble_;
+ base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+TEST_F(TranslateBubbleViewTest, TranslateButton) {
+ CreateAndShowBubble();
+ EXPECT_FALSE(mock_model_->translate_called_);
+
+ // Press the "Translate" button.
+ bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_TRANSLATE);
+ EXPECT_TRUE(mock_model_->translate_called_);
+}
+
+TEST_F(TranslateBubbleViewTest, TranslateButtonIn2016Q2UI) {
+ TurnOnTranslate2016Q2UIFlag();
+ CreateAndShowBubble();
+ EXPECT_FALSE(mock_model_->translate_called_);
+
+ // Press the "Translate" button.
+ bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_TRANSLATE);
+ EXPECT_TRUE(mock_model_->translate_called_);
+}
+
+TEST_F(TranslateBubbleViewTest, CloseButtonIn2016Q2UI) {
+ TurnOnTranslate2016Q2UIFlag();
+ CreateAndShowBubble();
+ EXPECT_FALSE(mock_model_->translate_called_);
+ EXPECT_FALSE(mock_model_->translation_declined_);
+ EXPECT_FALSE(bubble_->GetWidget()->IsClosed());
+
+ // Press the "Close" button.
+ bubble_->GetBubbleFrameView()->ButtonPressed(
+ bubble_->GetBubbleFrameView()->GetCloseButtonForTest(),
+ ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
+ ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE));
+
+ EXPECT_FALSE(mock_model_->translate_called_);
+ EXPECT_TRUE(mock_model_->translation_declined_);
+}
+
+TEST_F(TranslateBubbleViewTest, ComboboxNope) {
+ CreateAndShowBubble();
+ views::test::ComboboxTestApi test_api(denial_combobox());
+ EXPECT_FALSE(denial_button_clicked());
+ EXPECT_FALSE(bubble_->GetWidget()->IsClosed());
+
+ test_api.PerformActionAt(static_cast<int>(
+ TranslateBubbleView::DenialComboboxIndex::DONT_TRANSLATE));
+ EXPECT_TRUE(denial_button_clicked());
+ EXPECT_TRUE(bubble_->GetWidget()->IsClosed());
+}
+
+TEST_F(TranslateBubbleViewTest, ComboboxNeverTranslateLanguage) {
+ CreateAndShowBubble();
+ views::test::ComboboxTestApi test_api(denial_combobox());
+ EXPECT_FALSE(bubble_->GetWidget()->IsClosed());
+ EXPECT_FALSE(mock_model_->never_translate_language_);
+ EXPECT_FALSE(denial_button_clicked());
+
+ test_api.PerformActionAt(static_cast<int>(
+ TranslateBubbleView::DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE));
+ EXPECT_TRUE(denial_button_clicked());
+ EXPECT_TRUE(mock_model_->never_translate_language_);
+ EXPECT_TRUE(bubble_->GetWidget()->IsClosed());
+}
+
+TEST_F(TranslateBubbleViewTest, ComboboxNeverTranslateSite) {
+ CreateAndShowBubble();
+ views::test::ComboboxTestApi test_api(denial_combobox());
+ EXPECT_FALSE(mock_model_->never_translate_site_);
+ EXPECT_FALSE(denial_button_clicked());
+ EXPECT_FALSE(bubble_->GetWidget()->IsClosed());
+
+ test_api.PerformActionAt(static_cast<int>(
+ TranslateBubbleView::DenialComboboxIndex::NEVER_TRANSLATE_SITE));
+ EXPECT_TRUE(denial_button_clicked());
+ EXPECT_TRUE(mock_model_->never_translate_site_);
+ EXPECT_TRUE(bubble_->GetWidget()->IsClosed());
+}
+
+TEST_F(TranslateBubbleViewTest, MenuButtonNeverTranslateLanguage) {
+ TurnOnTranslate2016Q2UIFlag();
+ CreateAndShowBubble();
+ EXPECT_FALSE(bubble_->GetWidget()->IsClosed());
+ EXPECT_FALSE(mock_model_->never_translate_language_);
+ EXPECT_FALSE(denial_button_clicked());
+
+ bubble_->ExecuteCommand(
+ TranslateBubbleView::DenialMenuItem::NEVER_TRANSLATE_LANGUAGE, 0);
+
+ EXPECT_TRUE(denial_button_clicked());
+ EXPECT_TRUE(mock_model_->never_translate_language_);
+ EXPECT_TRUE(bubble_->GetWidget()->IsClosed());
+}
+
+TEST_F(TranslateBubbleViewTest, MenuButtonNeverTranslateSite) {
+ TurnOnTranslate2016Q2UIFlag();
+ CreateAndShowBubble();
+ EXPECT_FALSE(mock_model_->never_translate_site_);
+ EXPECT_FALSE(denial_button_clicked());
+ EXPECT_FALSE(bubble_->GetWidget()->IsClosed());
+
+ bubble_->ExecuteCommand(
+ TranslateBubbleView::DenialMenuItem::NEVER_TRANSLATE_SITE, 0);
+
+ EXPECT_TRUE(denial_button_clicked());
+ EXPECT_TRUE(mock_model_->never_translate_site_);
+ EXPECT_TRUE(bubble_->GetWidget()->IsClosed());
+}
+
+TEST_F(TranslateBubbleViewTest, AdvancedLink) {
+ CreateAndShowBubble();
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE,
+ bubble_->GetViewState());
+
+ // Click the "Advanced" link.
+ bubble_->HandleLinkClicked(TranslateBubbleView::LINK_ID_ADVANCED);
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ADVANCED, bubble_->GetViewState());
+}
+
+TEST_F(TranslateBubbleViewTest, AdvancedLinkIn2016Q2UI) {
+ TurnOnTranslate2016Q2UIFlag();
+ CreateAndShowBubble();
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE,
+ bubble_->GetViewState());
+
+ // Click the styled label link.
+ views::StyledLabel styled_label(base::ASCIIToUTF16("test"), nullptr);
+ bubble_->StyledLabelLinkClicked(&styled_label, gfx::Range(), ui::EF_NONE);
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ADVANCED, bubble_->GetViewState());
+}
+
+TEST_F(TranslateBubbleViewTest, ShowOriginalButton) {
+ CreateAndShowBubble();
+ bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE);
+
+ // Click the "Show original" button to revert translation.
+ EXPECT_FALSE(mock_model_->revert_translation_called_);
+ bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_SHOW_ORIGINAL);
+ EXPECT_TRUE(mock_model_->revert_translation_called_);
+}
+
+TEST_F(TranslateBubbleViewTest, TryAgainButton) {
+ CreateAndShowBubble();
+ bubble_->SwitchToErrorView(translate::TranslateErrors::NETWORK);
+
+ EXPECT_EQ(translate::TranslateErrors::NETWORK, mock_model_->error_type_);
+
+ // Click the "Try again" button to translate.
+ EXPECT_FALSE(mock_model_->translate_called_);
+ bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_TRY_AGAIN);
+ EXPECT_TRUE(mock_model_->translate_called_);
+}
+
+TEST_F(TranslateBubbleViewTest, AlwaysTranslateCheckboxAndCancelButton) {
+ CreateAndShowBubble();
+ bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
+
+ // Click the "Always Translate" checkbox. Changing the state of this checkbox
+ // should NOT affect the model after pressing the cancel button.
+
+ // Check the initial state.
+ EXPECT_FALSE(mock_model_->should_always_translate_);
+ EXPECT_EQ(0, mock_model_->set_always_translate_called_count_);
+ EXPECT_FALSE(bubble_->advanced_always_translate_checkbox_->checked());
+
+ // Click the checkbox. The state is not saved yet.
+ bubble_->advanced_always_translate_checkbox_->SetChecked(true);
+ bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_ALWAYS_TRANSLATE);
+ EXPECT_FALSE(mock_model_->should_always_translate_);
+ EXPECT_EQ(0, mock_model_->set_always_translate_called_count_);
+
+ // Click the cancel button. The state is not saved.
+ bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_CANCEL);
+ EXPECT_FALSE(mock_model_->should_always_translate_);
+ EXPECT_EQ(0, mock_model_->set_always_translate_called_count_);
+}
+
+TEST_F(TranslateBubbleViewTest, AlwaysTranslateCheckboxAndDoneButton) {
+ CreateAndShowBubble();
+ bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
+
+ // Click the "Always Translate" checkbox. Changing the state of this checkbox
+ // should affect the model after pressing the done button.
+
+ // Check the initial state.
+ EXPECT_FALSE(mock_model_->should_always_translate_);
+ EXPECT_EQ(0, mock_model_->set_always_translate_called_count_);
+ EXPECT_FALSE(bubble_->advanced_always_translate_checkbox_->checked());
+
+ // Click the checkbox. The state is not saved yet.
+ bubble_->advanced_always_translate_checkbox_->SetChecked(true);
+ bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_ALWAYS_TRANSLATE);
+ EXPECT_FALSE(mock_model_->should_always_translate_);
+ EXPECT_EQ(0, mock_model_->set_always_translate_called_count_);
+
+ // Click the done button. The state is saved.
+ bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_DONE);
+ EXPECT_TRUE(mock_model_->should_always_translate_);
+ EXPECT_EQ(1, mock_model_->set_always_translate_called_count_);
+}
+
+TEST_F(TranslateBubbleViewTest, DoneButton) {
+ CreateAndShowBubble();
+ bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
+
+ // Click the "Done" button to translate. The selected languages by the user
+ // are applied.
+ EXPECT_FALSE(mock_model_->translate_called_);
+ bubble_->source_language_combobox_->SetSelectedIndex(10);
+ bubble_->HandleComboboxPerformAction(
+ TranslateBubbleView::COMBOBOX_ID_SOURCE_LANGUAGE);
+ bubble_->target_language_combobox_->SetSelectedIndex(20);
+ bubble_->HandleComboboxPerformAction(
+ TranslateBubbleView::COMBOBOX_ID_TARGET_LANGUAGE);
+ bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_DONE);
+ EXPECT_TRUE(mock_model_->translate_called_);
+ EXPECT_EQ(10, mock_model_->original_language_index_);
+ EXPECT_EQ(20, mock_model_->target_language_index_);
+}
+
+TEST_F(TranslateBubbleViewTest, DoneButtonWithoutTranslating) {
+ CreateAndShowBubble();
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE,
+ bubble_->GetViewState());
+
+ // Translate the page once.
+ mock_model_->Translate();
+ EXPECT_TRUE(mock_model_->translate_called_);
+
+ // Go back to the initial view.
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE,
+ bubble_->GetViewState());
+ mock_model_->translate_called_ = false;
+
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE,
+ bubble_->GetViewState());
+ bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
+
+ // Click the "Done" button with the current language pair. This time,
+ // translation is not performed and the view state will be back to the
+ // previous view.
+ bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_DONE);
+ EXPECT_FALSE(mock_model_->translate_called_);
+
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE,
+ bubble_->GetViewState());
+}
+
+TEST_F(TranslateBubbleViewTest, CancelButtonReturningBeforeTranslate) {
+ CreateAndShowBubble();
+ bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE);
+ bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
+
+ // Click the "Cancel" button to go back.
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ADVANCED, bubble_->GetViewState());
+ bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_CANCEL);
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE,
+ bubble_->GetViewState());
+}
+
+TEST_F(TranslateBubbleViewTest, CancelButtonReturningAfterTranslate) {
+ CreateAndShowBubble();
+ bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE);
+ bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
+
+ // Click the "Cancel" button to go back.
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ADVANCED, bubble_->GetViewState());
+ bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_CANCEL);
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE,
+ bubble_->GetViewState());
+}
+
+TEST_F(TranslateBubbleViewTest, CancelButtonReturningError) {
+ CreateAndShowBubble();
+ bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ERROR);
+ bubble_->SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED);
+
+ // Click the "Cancel" button to go back.
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ADVANCED, bubble_->GetViewState());
+ bubble_->HandleButtonPressed(TranslateBubbleView::BUTTON_ID_CANCEL);
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ERROR, bubble_->GetViewState());
+}

Powered by Google App Engine
This is Rietveld 408576698