Index: chrome/browser/ui/views/tabs/tab_unittest.cc |
diff --git a/chrome/browser/ui/views/tabs/tab_unittest.cc b/chrome/browser/ui/views/tabs/tab_unittest.cc |
index e475417e910223a6e0032f0401b139c530f839a1..6584f146748e0becc0e8e992ccbff70151b29a1b 100644 |
--- a/chrome/browser/ui/views/tabs/tab_unittest.cc |
+++ b/chrome/browser/ui/views/tabs/tab_unittest.cc |
@@ -4,7 +4,9 @@ |
#include "chrome/browser/ui/views/tabs/tab.h" |
+#include "base/i18n/rtl.h" |
#include "base/strings/utf_string_conversions.h" |
+#include "chrome/browser/ui/views/tabs/media_indicator_button.h" |
#include "chrome/browser/ui/views/tabs/tab_controller.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "ui/base/models/list_selection_model.h" |
@@ -33,6 +35,7 @@ class FakeTabController : public TabController { |
virtual void ToggleSelected(Tab* tab) OVERRIDE {} |
virtual void AddSelectionFromAnchorTo(Tab* tab) OVERRIDE {} |
virtual void CloseTab(Tab* tab, CloseTabSource source) OVERRIDE {} |
+ virtual void ToggleTabAudioMute(Tab* tab) OVERRIDE {} |
virtual void ShowContextMenuForTab(Tab* tab, |
const gfx::Point& p, |
ui::MenuSourceType source_type) OVERRIDE {} |
@@ -71,14 +74,26 @@ class FakeTabController : public TabController { |
DISALLOW_COPY_AND_ASSIGN(FakeTabController); |
}; |
-class TabTest : public views::ViewsTestBase { |
+class TabTest : public views::ViewsTestBase, |
+ public ::testing::WithParamInterface<bool> { |
public: |
TabTest() {} |
virtual ~TabTest() {} |
- static void DisableMediaIndicatorAnimation(Tab* tab) { |
- tab->media_indicator_animation_.reset(); |
- tab->animating_media_state_ = tab->data_.media_state; |
+ bool testing_for_rtl_locale() const { return GetParam(); } |
+ |
+ virtual void SetUp() OVERRIDE { |
+ if (testing_for_rtl_locale()) { |
+ original_locale_ = base::i18n::GetConfiguredLocale(); |
+ base::i18n::SetICUDefaultLocale("he"); |
+ } |
+ views::ViewsTestBase::SetUp(); |
+ } |
+ |
+ virtual void TearDown() OVERRIDE { |
+ views::ViewsTestBase::TearDown(); |
+ if (testing_for_rtl_locale()) |
+ base::i18n::SetICUDefaultLocale(original_locale_); |
} |
static void CheckForExpectedLayoutAndVisibilityOfElements(const Tab& tab) { |
@@ -159,20 +174,21 @@ class TabTest : public views::ViewsTestBase { |
EXPECT_LE(tab.favicon_bounds_.bottom(), contents_bounds.bottom()); |
} |
if (tab.ShouldShowIcon() && tab.ShouldShowMediaIndicator()) |
- EXPECT_LE(tab.favicon_bounds_.right(), tab.media_indicator_bounds_.x()); |
+ EXPECT_LE(tab.favicon_bounds_.right(), GetMediaIndicatorBounds(tab).x()); |
if (tab.ShouldShowMediaIndicator()) { |
if (tab.title_->width() > 0) { |
EXPECT_LE(tab.title_->bounds().right(), |
- tab.media_indicator_bounds_.x()); |
+ GetMediaIndicatorBounds(tab).x()); |
} |
- EXPECT_LE(tab.media_indicator_bounds_.right(), contents_bounds.right()); |
- EXPECT_LE(contents_bounds.y(), tab.media_indicator_bounds_.y()); |
- EXPECT_LE(tab.media_indicator_bounds_.bottom(), contents_bounds.bottom()); |
+ EXPECT_LE(GetMediaIndicatorBounds(tab).right(), contents_bounds.right()); |
+ EXPECT_LE(contents_bounds.y(), GetMediaIndicatorBounds(tab).y()); |
+ EXPECT_LE(GetMediaIndicatorBounds(tab).bottom(), |
+ contents_bounds.bottom()); |
} |
if (tab.ShouldShowMediaIndicator() && tab.ShouldShowCloseBox()) { |
// Note: The media indicator can overlap the left-insets of the close box, |
// but should otherwise be to the left of the close button. |
- EXPECT_LE(tab.media_indicator_bounds_.right(), |
+ EXPECT_LE(GetMediaIndicatorBounds(tab).right(), |
tab.close_button_->bounds().x() + |
tab.close_button_->GetInsets().left()); |
} |
@@ -189,9 +205,25 @@ class TabTest : public views::ViewsTestBase { |
EXPECT_LE(tab.close_button_->bounds().bottom(), contents_bounds.bottom()); |
} |
} |
+ |
+ private: |
+ static gfx::Rect GetMediaIndicatorBounds(const Tab& tab) { |
+ if (!tab.media_indicator_button_) { |
+ ADD_FAILURE(); |
+ return gfx::Rect(); |
+ } |
+ return tab.media_indicator_button_->bounds(); |
+ } |
+ |
+ std::string original_locale_; |
}; |
-TEST_F(TabTest, HitTestTopPixel) { |
+TEST_P(TabTest, HitTestTopPixel) { |
+ if (testing_for_rtl_locale() && !base::i18n::IsRTL()) { |
+ LOG(WARNING) << "Testing of RTL locale not supported on current platform."; |
+ return; |
+ } |
+ |
Widget widget; |
Widget::InitParams params(CreateParams(Widget::InitParams::TYPE_WINDOW)); |
params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
@@ -221,10 +253,15 @@ TEST_F(TabTest, HitTestTopPixel) { |
EXPECT_FALSE(tab.HitTestPoint(gfx::Point(tab.width() - 1, 0))); |
} |
-TEST_F(TabTest, LayoutAndVisibilityOfElements) { |
+TEST_P(TabTest, LayoutAndVisibilityOfElements) { |
+ if (testing_for_rtl_locale() && !base::i18n::IsRTL()) { |
+ LOG(WARNING) << "Testing of RTL locale not supported on current platform."; |
+ return; |
+ } |
+ |
static const TabMediaState kMediaStatesToTest[] = { |
TAB_MEDIA_STATE_NONE, TAB_MEDIA_STATE_CAPTURING, |
- TAB_MEDIA_STATE_AUDIO_PLAYING |
+ TAB_MEDIA_STATE_AUDIO_PLAYING, TAB_MEDIA_STATE_AUDIO_MUTING |
}; |
FakeTabController controller; |
@@ -253,12 +290,6 @@ TEST_F(TabTest, LayoutAndVisibilityOfElements) { |
data.media_state = media_state; |
tab.SetData(data); |
- // Disable the media indicator animation so that the layout/visibility |
- // logic can be tested effectively. If the animation was left enabled, |
- // the ShouldShowMediaIndicator() method would return true during |
- // fade-out transitions. |
- DisableMediaIndicatorAnimation(&tab); |
- |
// Test layout for every width from standard to minimum. |
gfx::Rect bounds(gfx::Point(0, 0), Tab::GetStandardSize()); |
int min_width; |
@@ -282,7 +313,12 @@ TEST_F(TabTest, LayoutAndVisibilityOfElements) { |
// Regression test for http://crbug.com/226253. Calling Layout() more than once |
// shouldn't change the insets of the close button. |
-TEST_F(TabTest, CloseButtonLayout) { |
+TEST_P(TabTest, CloseButtonLayout) { |
+ if (testing_for_rtl_locale() && !base::i18n::IsRTL()) { |
+ LOG(WARNING) << "Testing of RTL locale not supported on current platform."; |
+ return; |
+ } |
+ |
FakeTabController tab_controller; |
Tab tab(&tab_controller); |
tab.SetBounds(0, 0, 100, 50); |
@@ -298,3 +334,11 @@ TEST_F(TabTest, CloseButtonLayout) { |
// Also make sure the close button is sized as large as the tab. |
EXPECT_EQ(50, tab.close_button_->bounds().height()); |
} |
+ |
+// Test in both a LTR and a RTL locale. Note: The fact that the UI code is |
+// configured for an RTL locale does *not* change how the coordinates are |
+// examined in the tests above because views::View and friends are supposed to |
+// auto-mirror the widgets when painting. Thus, what we're testing here is that |
+// there's no code in Tab that will erroneously subvert this automatic |
+// coordinate translation. http://crbug.com/384179 |
+INSTANTIATE_TEST_CASE_P(, TabTest, ::testing::Values(false, true)); |