Index: ui/views/controls/scroll_view_unittest.cc |
diff --git a/ui/views/controls/scroll_view_unittest.cc b/ui/views/controls/scroll_view_unittest.cc |
index a5421892f11666483897485caeac4c7a49bd6ea5..9a9b002ff84e39b2c01d718c9a8c14c90ba13f7b 100644 |
--- a/ui/views/controls/scroll_view_unittest.cc |
+++ b/ui/views/controls/scroll_view_unittest.cc |
@@ -132,6 +132,45 @@ ui::MouseEvent TestLeftMouseAt(const gfx::Point& location, ui::EventType type) { |
using test::ScrollViewTestApi; |
+// Simple test harness for testing a ScrollView directly. |
+class ScrollViewTest : public testing::Test { |
+ public: |
+ ScrollViewTest() {} |
+ |
+ View* InstallContents() { |
+ const gfx::Rect default_outer_bounds(0, 0, 100, 100); |
+ View* contents = new View; |
+ scroll_view_.SetContents(contents); |
+ scroll_view_.SetBoundsRect(default_outer_bounds); |
+ return contents; |
+ } |
+ |
+ protected: |
+#if defined(OS_MACOSX) |
+ void SetOverlayScrollersEnabled(bool enabled) { |
+ // Ensure the old scroller override is destroyed before creating a new one. |
+ // Otherwise, the swizzlers are interleaved and restore incorrect methods. |
+ scroller_style_.reset(); |
+ scroller_style_ = |
+ base::MakeUnique<ui::test::ScopedPreferredScrollerStyle>(enabled); |
+ } |
+ |
+ private: |
+ // Disable overlay scrollers by default. This needs to be set before |
+ // |scroll_view_| is initialized, otherwise scrollers will try to animate to |
+ // change modes, which requires a MessageLoop to exist. Tests should only |
+ // modify this via SetOverlayScrollersEnabled(). |
+ std::unique_ptr<ui::test::ScopedPreferredScrollerStyle> scroller_style_ = |
+ base::MakeUnique<ui::test::ScopedPreferredScrollerStyle>(false); |
+ |
+ protected: |
+#endif |
+ ScrollView scroll_view_; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(ScrollViewTest); |
+}; |
+ |
// Test harness that includes a Widget to help test ui::Event handling. |
class WidgetScrollViewTest : public test::WidgetTest, |
public ui::CompositorObserver { |
@@ -233,25 +272,19 @@ const int WidgetScrollViewTest::kDefaultHeight; |
const int WidgetScrollViewTest::kDefaultWidth; |
// Verifies the viewport is sized to fit the available space. |
-TEST(ScrollViewTest, ViewportSizedToFit) { |
- ScrollView scroll_view; |
- View* contents = new View; |
- scroll_view.SetContents(contents); |
- scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100)); |
- scroll_view.Layout(); |
+TEST_F(ScrollViewTest, ViewportSizedToFit) { |
+ View* contents = InstallContents(); |
+ scroll_view_.Layout(); |
EXPECT_EQ("0,0 100x100", contents->parent()->bounds().ToString()); |
} |
// Verifies the viewport and content is sized to fit the available space for |
// bounded scroll view. |
-TEST(ScrollViewTest, BoundedViewportSizedToFit) { |
- ScrollView scroll_view; |
- View* contents = new View; |
- scroll_view.SetContents(contents); |
- scroll_view.ClipHeightTo(100, 200); |
- scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100)); |
- scroll_view.SetBorder(Border::CreateSolidBorder(2, 0)); |
- scroll_view.Layout(); |
+TEST_F(ScrollViewTest, BoundedViewportSizedToFit) { |
+ View* contents = InstallContents(); |
+ scroll_view_.ClipHeightTo(100, 200); |
+ scroll_view_.SetBorder(Border::CreateSolidBorder(2, 0)); |
+ scroll_view_.Layout(); |
EXPECT_EQ("2,2 96x96", contents->parent()->bounds().ToString()); |
// Make sure the width of |contents| is set properly not to overflow the |
@@ -261,128 +294,121 @@ TEST(ScrollViewTest, BoundedViewportSizedToFit) { |
// Verifies the scrollbars are added as necessary. |
// If on Mac, test the non-overlay scrollbars. |
-TEST(ScrollViewTest, ScrollBars) { |
-#if defined(OS_MACOSX) |
- ui::test::ScopedPreferredScrollerStyle scroller_style_override(false); |
-#endif |
- |
- ScrollView scroll_view; |
- View* contents = new View; |
- scroll_view.SetContents(contents); |
- scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100)); |
+TEST_F(ScrollViewTest, ScrollBars) { |
+ View* contents = InstallContents(); |
// Size the contents such that vertical scrollbar is needed. |
contents->SetBounds(0, 0, 50, 400); |
- scroll_view.Layout(); |
- EXPECT_EQ(100 - scroll_view.GetScrollBarWidth(), contents->parent()->width()); |
+ scroll_view_.Layout(); |
+ EXPECT_EQ(100 - scroll_view_.GetScrollBarWidth(), |
+ contents->parent()->width()); |
EXPECT_EQ(100, contents->parent()->height()); |
- CheckScrollbarVisibility(scroll_view, VERTICAL, true); |
- CheckScrollbarVisibility(scroll_view, HORIZONTAL, false); |
- EXPECT_TRUE(!scroll_view.horizontal_scroll_bar() || |
- !scroll_view.horizontal_scroll_bar()->visible()); |
- ASSERT_TRUE(scroll_view.vertical_scroll_bar() != NULL); |
- EXPECT_TRUE(scroll_view.vertical_scroll_bar()->visible()); |
+ CheckScrollbarVisibility(scroll_view_, VERTICAL, true); |
+ CheckScrollbarVisibility(scroll_view_, HORIZONTAL, false); |
+ EXPECT_TRUE(!scroll_view_.horizontal_scroll_bar() || |
+ !scroll_view_.horizontal_scroll_bar()->visible()); |
+ ASSERT_TRUE(scroll_view_.vertical_scroll_bar() != NULL); |
+ EXPECT_TRUE(scroll_view_.vertical_scroll_bar()->visible()); |
// Size the contents such that horizontal scrollbar is needed. |
contents->SetBounds(0, 0, 400, 50); |
- scroll_view.Layout(); |
+ scroll_view_.Layout(); |
EXPECT_EQ(100, contents->parent()->width()); |
- EXPECT_EQ(100 - scroll_view.GetScrollBarHeight(), |
+ EXPECT_EQ(100 - scroll_view_.GetScrollBarHeight(), |
contents->parent()->height()); |
- CheckScrollbarVisibility(scroll_view, VERTICAL, false); |
- CheckScrollbarVisibility(scroll_view, HORIZONTAL, true); |
+ CheckScrollbarVisibility(scroll_view_, VERTICAL, false); |
+ CheckScrollbarVisibility(scroll_view_, HORIZONTAL, true); |
// Both horizontal and vertical. |
contents->SetBounds(0, 0, 300, 400); |
- scroll_view.Layout(); |
- EXPECT_EQ(100 - scroll_view.GetScrollBarWidth(), contents->parent()->width()); |
- EXPECT_EQ(100 - scroll_view.GetScrollBarHeight(), |
+ scroll_view_.Layout(); |
+ EXPECT_EQ(100 - scroll_view_.GetScrollBarWidth(), |
+ contents->parent()->width()); |
+ EXPECT_EQ(100 - scroll_view_.GetScrollBarHeight(), |
contents->parent()->height()); |
- CheckScrollbarVisibility(scroll_view, VERTICAL, true); |
- CheckScrollbarVisibility(scroll_view, HORIZONTAL, true); |
+ CheckScrollbarVisibility(scroll_view_, VERTICAL, true); |
+ CheckScrollbarVisibility(scroll_view_, HORIZONTAL, true); |
// Add a border, test vertical scrollbar. |
const int kTopPadding = 1; |
const int kLeftPadding = 2; |
const int kBottomPadding = 3; |
const int kRightPadding = 4; |
- scroll_view.SetBorder(Border::CreateEmptyBorder( |
+ scroll_view_.SetBorder(Border::CreateEmptyBorder( |
kTopPadding, kLeftPadding, kBottomPadding, kRightPadding)); |
contents->SetBounds(0, 0, 50, 400); |
- scroll_view.Layout(); |
+ scroll_view_.Layout(); |
EXPECT_EQ( |
- 100 - scroll_view.GetScrollBarWidth() - kLeftPadding - kRightPadding, |
+ 100 - scroll_view_.GetScrollBarWidth() - kLeftPadding - kRightPadding, |
contents->parent()->width()); |
EXPECT_EQ(100 - kTopPadding - kBottomPadding, contents->parent()->height()); |
- EXPECT_TRUE(!scroll_view.horizontal_scroll_bar() || |
- !scroll_view.horizontal_scroll_bar()->visible()); |
- ASSERT_TRUE(scroll_view.vertical_scroll_bar() != NULL); |
- EXPECT_TRUE(scroll_view.vertical_scroll_bar()->visible()); |
- gfx::Rect bounds = scroll_view.vertical_scroll_bar()->bounds(); |
- EXPECT_EQ(100 - scroll_view.GetScrollBarWidth() - kRightPadding, bounds.x()); |
+ EXPECT_TRUE(!scroll_view_.horizontal_scroll_bar() || |
+ !scroll_view_.horizontal_scroll_bar()->visible()); |
+ ASSERT_TRUE(scroll_view_.vertical_scroll_bar() != NULL); |
+ EXPECT_TRUE(scroll_view_.vertical_scroll_bar()->visible()); |
+ gfx::Rect bounds = scroll_view_.vertical_scroll_bar()->bounds(); |
+ EXPECT_EQ(100 - scroll_view_.GetScrollBarWidth() - kRightPadding, bounds.x()); |
EXPECT_EQ(100 - kRightPadding, bounds.right()); |
EXPECT_EQ(kTopPadding, bounds.y()); |
EXPECT_EQ(100 - kBottomPadding, bounds.bottom()); |
// Horizontal with border. |
contents->SetBounds(0, 0, 400, 50); |
- scroll_view.Layout(); |
+ scroll_view_.Layout(); |
EXPECT_EQ(100 - kLeftPadding - kRightPadding, contents->parent()->width()); |
EXPECT_EQ( |
- 100 - scroll_view.GetScrollBarHeight() - kTopPadding - kBottomPadding, |
+ 100 - scroll_view_.GetScrollBarHeight() - kTopPadding - kBottomPadding, |
contents->parent()->height()); |
- ASSERT_TRUE(scroll_view.horizontal_scroll_bar() != NULL); |
- EXPECT_TRUE(scroll_view.horizontal_scroll_bar()->visible()); |
- EXPECT_TRUE(!scroll_view.vertical_scroll_bar() || |
- !scroll_view.vertical_scroll_bar()->visible()); |
- bounds = scroll_view.horizontal_scroll_bar()->bounds(); |
+ ASSERT_TRUE(scroll_view_.horizontal_scroll_bar() != NULL); |
+ EXPECT_TRUE(scroll_view_.horizontal_scroll_bar()->visible()); |
+ EXPECT_TRUE(!scroll_view_.vertical_scroll_bar() || |
+ !scroll_view_.vertical_scroll_bar()->visible()); |
+ bounds = scroll_view_.horizontal_scroll_bar()->bounds(); |
EXPECT_EQ(kLeftPadding, bounds.x()); |
EXPECT_EQ(100 - kRightPadding, bounds.right()); |
- EXPECT_EQ(100 - kBottomPadding - scroll_view.GetScrollBarHeight(), |
+ EXPECT_EQ(100 - kBottomPadding - scroll_view_.GetScrollBarHeight(), |
bounds.y()); |
EXPECT_EQ(100 - kBottomPadding, bounds.bottom()); |
// Both horizontal and vertical with border. |
contents->SetBounds(0, 0, 300, 400); |
- scroll_view.Layout(); |
+ scroll_view_.Layout(); |
EXPECT_EQ( |
- 100 - scroll_view.GetScrollBarWidth() - kLeftPadding - kRightPadding, |
+ 100 - scroll_view_.GetScrollBarWidth() - kLeftPadding - kRightPadding, |
contents->parent()->width()); |
EXPECT_EQ( |
- 100 - scroll_view.GetScrollBarHeight() - kTopPadding - kBottomPadding, |
+ 100 - scroll_view_.GetScrollBarHeight() - kTopPadding - kBottomPadding, |
contents->parent()->height()); |
- bounds = scroll_view.horizontal_scroll_bar()->bounds(); |
+ bounds = scroll_view_.horizontal_scroll_bar()->bounds(); |
// Check horiz. |
- ASSERT_TRUE(scroll_view.horizontal_scroll_bar() != NULL); |
- EXPECT_TRUE(scroll_view.horizontal_scroll_bar()->visible()); |
- bounds = scroll_view.horizontal_scroll_bar()->bounds(); |
+ ASSERT_TRUE(scroll_view_.horizontal_scroll_bar() != NULL); |
+ EXPECT_TRUE(scroll_view_.horizontal_scroll_bar()->visible()); |
+ bounds = scroll_view_.horizontal_scroll_bar()->bounds(); |
EXPECT_EQ(kLeftPadding, bounds.x()); |
- EXPECT_EQ(100 - kRightPadding - scroll_view.GetScrollBarWidth(), |
+ EXPECT_EQ(100 - kRightPadding - scroll_view_.GetScrollBarWidth(), |
bounds.right()); |
- EXPECT_EQ(100 - kBottomPadding - scroll_view.GetScrollBarHeight(), |
+ EXPECT_EQ(100 - kBottomPadding - scroll_view_.GetScrollBarHeight(), |
bounds.y()); |
EXPECT_EQ(100 - kBottomPadding, bounds.bottom()); |
// Check vert. |
- ASSERT_TRUE(scroll_view.vertical_scroll_bar() != NULL); |
- EXPECT_TRUE(scroll_view.vertical_scroll_bar()->visible()); |
- bounds = scroll_view.vertical_scroll_bar()->bounds(); |
- EXPECT_EQ(100 - scroll_view.GetScrollBarWidth() - kRightPadding, bounds.x()); |
+ ASSERT_TRUE(scroll_view_.vertical_scroll_bar() != NULL); |
+ EXPECT_TRUE(scroll_view_.vertical_scroll_bar()->visible()); |
+ bounds = scroll_view_.vertical_scroll_bar()->bounds(); |
+ EXPECT_EQ(100 - scroll_view_.GetScrollBarWidth() - kRightPadding, bounds.x()); |
EXPECT_EQ(100 - kRightPadding, bounds.right()); |
EXPECT_EQ(kTopPadding, bounds.y()); |
- EXPECT_EQ(100 - kBottomPadding - scroll_view.GetScrollBarHeight(), |
+ EXPECT_EQ(100 - kBottomPadding - scroll_view_.GetScrollBarHeight(), |
bounds.bottom()); |
} |
// Assertions around adding a header. |
-TEST(ScrollViewTest, Header) { |
- ScrollView scroll_view; |
- View* contents = new View; |
+TEST_F(ScrollViewTest, Header) { |
CustomView* header = new CustomView; |
- scroll_view.SetHeader(header); |
+ scroll_view_.SetHeader(header); |
View* header_parent = header->parent(); |
- scroll_view.SetContents(contents); |
- scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100)); |
- scroll_view.Layout(); |
+ View* contents = InstallContents(); |
+ |
+ scroll_view_.Layout(); |
// |header|s preferred size is empty, which should result in all space going |
// to contents. |
EXPECT_EQ("0,0 100x0", header->parent()->bounds().ToString()); |
@@ -409,7 +435,7 @@ TEST(ScrollViewTest, Header) { |
EXPECT_EQ("0,0 0x0", contents->bounds().ToString()); |
// Remove the header. |
- scroll_view.SetHeader(NULL); |
+ scroll_view_.SetHeader(NULL); |
// SetHeader(NULL) deletes header. |
header = NULL; |
EXPECT_EQ("0,0 100x0", header_parent->bounds().ToString()); |
@@ -417,114 +443,108 @@ TEST(ScrollViewTest, Header) { |
} |
// Verifies the scrollbars are added as necessary when a header is present. |
-TEST(ScrollViewTest, ScrollBarsWithHeader) { |
- ScrollView scroll_view; |
- View* contents = new View; |
- scroll_view.SetContents(contents); |
+TEST_F(ScrollViewTest, ScrollBarsWithHeader) { |
CustomView* header = new CustomView; |
- scroll_view.SetHeader(header); |
- scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100)); |
+ scroll_view_.SetHeader(header); |
+ View* contents = InstallContents(); |
header->SetPreferredSize(gfx::Size(10, 20)); |
// Size the contents such that vertical scrollbar is needed. |
contents->SetBounds(0, 0, 50, 400); |
- scroll_view.Layout(); |
+ scroll_view_.Layout(); |
EXPECT_EQ(0, contents->parent()->x()); |
EXPECT_EQ(20, contents->parent()->y()); |
- EXPECT_EQ(100 - scroll_view.GetScrollBarWidth(), contents->parent()->width()); |
+ EXPECT_EQ(100 - scroll_view_.GetScrollBarWidth(), |
+ contents->parent()->width()); |
EXPECT_EQ(80, contents->parent()->height()); |
EXPECT_EQ(0, header->parent()->x()); |
EXPECT_EQ(0, header->parent()->y()); |
- EXPECT_EQ(100 - scroll_view.GetScrollBarWidth(), header->parent()->width()); |
+ EXPECT_EQ(100 - scroll_view_.GetScrollBarWidth(), header->parent()->width()); |
EXPECT_EQ(20, header->parent()->height()); |
- EXPECT_TRUE(!scroll_view.horizontal_scroll_bar() || |
- !scroll_view.horizontal_scroll_bar()->visible()); |
- ASSERT_TRUE(scroll_view.vertical_scroll_bar() != NULL); |
- EXPECT_TRUE(scroll_view.vertical_scroll_bar()->visible()); |
+ EXPECT_TRUE(!scroll_view_.horizontal_scroll_bar() || |
+ !scroll_view_.horizontal_scroll_bar()->visible()); |
+ ASSERT_TRUE(scroll_view_.vertical_scroll_bar() != NULL); |
+ EXPECT_TRUE(scroll_view_.vertical_scroll_bar()->visible()); |
// Make sure the vertical scrollbar overlaps the header. |
- EXPECT_EQ(header->y(), scroll_view.vertical_scroll_bar()->y()); |
+ EXPECT_EQ(header->y(), scroll_view_.vertical_scroll_bar()->y()); |
EXPECT_EQ(header->y(), contents->y()); |
// Size the contents such that horizontal scrollbar is needed. |
contents->SetBounds(0, 0, 400, 50); |
- scroll_view.Layout(); |
+ scroll_view_.Layout(); |
EXPECT_EQ(0, contents->parent()->x()); |
EXPECT_EQ(20, contents->parent()->y()); |
EXPECT_EQ(100, contents->parent()->width()); |
- EXPECT_EQ(100 - scroll_view.GetScrollBarHeight() - 20, |
+ EXPECT_EQ(100 - scroll_view_.GetScrollBarHeight() - 20, |
contents->parent()->height()); |
EXPECT_EQ(0, header->parent()->x()); |
EXPECT_EQ(0, header->parent()->y()); |
EXPECT_EQ(100, header->parent()->width()); |
EXPECT_EQ(20, header->parent()->height()); |
- ASSERT_TRUE(scroll_view.horizontal_scroll_bar() != NULL); |
- EXPECT_TRUE(scroll_view.horizontal_scroll_bar()->visible()); |
- EXPECT_TRUE(!scroll_view.vertical_scroll_bar() || |
- !scroll_view.vertical_scroll_bar()->visible()); |
+ ASSERT_TRUE(scroll_view_.horizontal_scroll_bar() != NULL); |
+ EXPECT_TRUE(scroll_view_.horizontal_scroll_bar()->visible()); |
+ EXPECT_TRUE(!scroll_view_.vertical_scroll_bar() || |
+ !scroll_view_.vertical_scroll_bar()->visible()); |
// Both horizontal and vertical. |
contents->SetBounds(0, 0, 300, 400); |
- scroll_view.Layout(); |
+ scroll_view_.Layout(); |
EXPECT_EQ(0, contents->parent()->x()); |
EXPECT_EQ(20, contents->parent()->y()); |
- EXPECT_EQ(100 - scroll_view.GetScrollBarWidth(), contents->parent()->width()); |
- EXPECT_EQ(100 - scroll_view.GetScrollBarHeight() - 20, |
+ EXPECT_EQ(100 - scroll_view_.GetScrollBarWidth(), |
+ contents->parent()->width()); |
+ EXPECT_EQ(100 - scroll_view_.GetScrollBarHeight() - 20, |
contents->parent()->height()); |
EXPECT_EQ(0, header->parent()->x()); |
EXPECT_EQ(0, header->parent()->y()); |
- EXPECT_EQ(100 - scroll_view.GetScrollBarWidth(), header->parent()->width()); |
+ EXPECT_EQ(100 - scroll_view_.GetScrollBarWidth(), header->parent()->width()); |
EXPECT_EQ(20, header->parent()->height()); |
- ASSERT_TRUE(scroll_view.horizontal_scroll_bar() != NULL); |
- EXPECT_TRUE(scroll_view.horizontal_scroll_bar()->visible()); |
- ASSERT_TRUE(scroll_view.vertical_scroll_bar() != NULL); |
- EXPECT_TRUE(scroll_view.vertical_scroll_bar()->visible()); |
+ ASSERT_TRUE(scroll_view_.horizontal_scroll_bar() != NULL); |
+ EXPECT_TRUE(scroll_view_.horizontal_scroll_bar()->visible()); |
+ ASSERT_TRUE(scroll_view_.vertical_scroll_bar() != NULL); |
+ EXPECT_TRUE(scroll_view_.vertical_scroll_bar()->visible()); |
} |
// Verifies the header scrolls horizontally with the content. |
-TEST(ScrollViewTest, HeaderScrollsWithContent) { |
- ScrollView scroll_view; |
- ScrollViewTestApi test_api(&scroll_view); |
+TEST_F(ScrollViewTest, HeaderScrollsWithContent) { |
+ ScrollViewTestApi test_api(&scroll_view_); |
CustomView* contents = new CustomView; |
- scroll_view.SetContents(contents); |
+ scroll_view_.SetContents(contents); |
contents->SetPreferredSize(gfx::Size(500, 500)); |
CustomView* header = new CustomView; |
- scroll_view.SetHeader(header); |
+ scroll_view_.SetHeader(header); |
header->SetPreferredSize(gfx::Size(500, 20)); |
- scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100)); |
+ scroll_view_.SetBoundsRect(gfx::Rect(0, 0, 100, 100)); |
EXPECT_EQ("0,0", test_api.IntegralViewOffset().ToString()); |
EXPECT_EQ("0,0", header->bounds().origin().ToString()); |
// Scroll the horizontal scrollbar. |
- ASSERT_TRUE(scroll_view.horizontal_scroll_bar()); |
- scroll_view.ScrollToPosition( |
- const_cast<ScrollBar*>(scroll_view.horizontal_scroll_bar()), 1); |
+ ASSERT_TRUE(scroll_view_.horizontal_scroll_bar()); |
+ scroll_view_.ScrollToPosition( |
+ const_cast<ScrollBar*>(scroll_view_.horizontal_scroll_bar()), 1); |
EXPECT_EQ("-1,0", test_api.IntegralViewOffset().ToString()); |
EXPECT_EQ("-1,0", header->bounds().origin().ToString()); |
// Scrolling the vertical scrollbar shouldn't effect the header. |
- ASSERT_TRUE(scroll_view.vertical_scroll_bar()); |
- scroll_view.ScrollToPosition( |
- const_cast<ScrollBar*>(scroll_view.vertical_scroll_bar()), 1); |
+ ASSERT_TRUE(scroll_view_.vertical_scroll_bar()); |
+ scroll_view_.ScrollToPosition( |
+ const_cast<ScrollBar*>(scroll_view_.vertical_scroll_bar()), 1); |
EXPECT_EQ("-1,-1", test_api.IntegralViewOffset().ToString()); |
EXPECT_EQ("-1,0", header->bounds().origin().ToString()); |
} |
// Verifies ScrollRectToVisible() on the child works. |
-TEST(ScrollViewTest, ScrollRectToVisible) { |
-#if defined(OS_MACOSX) |
- ui::test::ScopedPreferredScrollerStyle scroller_style_override(false); |
-#endif |
- ScrollView scroll_view; |
- ScrollViewTestApi test_api(&scroll_view); |
+TEST_F(ScrollViewTest, ScrollRectToVisible) { |
+ ScrollViewTestApi test_api(&scroll_view_); |
CustomView* contents = new CustomView; |
- scroll_view.SetContents(contents); |
+ scroll_view_.SetContents(contents); |
contents->SetPreferredSize(gfx::Size(500, 1000)); |
- scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100)); |
- scroll_view.Layout(); |
+ scroll_view_.SetBoundsRect(gfx::Rect(0, 0, 100, 100)); |
+ scroll_view_.Layout(); |
EXPECT_EQ("0,0", test_api.IntegralViewOffset().ToString()); |
// Scroll to y=405 height=10, this should make the y position of the content |
@@ -545,215 +565,195 @@ TEST(ScrollViewTest, ScrollRectToVisible) { |
// Verifies ClipHeightTo() uses the height of the content when it is between the |
// minimum and maximum height values. |
-TEST(ScrollViewTest, ClipHeightToNormalContentHeight) { |
- ScrollView scroll_view; |
- |
- scroll_view.ClipHeightTo(kMinHeight, kMaxHeight); |
+TEST_F(ScrollViewTest, ClipHeightToNormalContentHeight) { |
+ scroll_view_.ClipHeightTo(kMinHeight, kMaxHeight); |
const int kNormalContentHeight = 75; |
- scroll_view.SetContents( |
+ scroll_view_.SetContents( |
new views::StaticSizedView(gfx::Size(kWidth, kNormalContentHeight))); |
EXPECT_EQ(gfx::Size(kWidth, kNormalContentHeight), |
- scroll_view.GetPreferredSize()); |
+ scroll_view_.GetPreferredSize()); |
- scroll_view.SizeToPreferredSize(); |
- scroll_view.Layout(); |
+ scroll_view_.SizeToPreferredSize(); |
+ scroll_view_.Layout(); |
EXPECT_EQ(gfx::Size(kWidth, kNormalContentHeight), |
- scroll_view.contents()->size()); |
- EXPECT_EQ(gfx::Size(kWidth, kNormalContentHeight), scroll_view.size()); |
+ scroll_view_.contents()->size()); |
+ EXPECT_EQ(gfx::Size(kWidth, kNormalContentHeight), scroll_view_.size()); |
} |
// Verifies ClipHeightTo() uses the minimum height when the content is shorter |
// than the minimum height value. |
-TEST(ScrollViewTest, ClipHeightToShortContentHeight) { |
- ScrollView scroll_view; |
- |
- scroll_view.ClipHeightTo(kMinHeight, kMaxHeight); |
+TEST_F(ScrollViewTest, ClipHeightToShortContentHeight) { |
+ scroll_view_.ClipHeightTo(kMinHeight, kMaxHeight); |
const int kShortContentHeight = 10; |
View* contents = |
new views::StaticSizedView(gfx::Size(kWidth, kShortContentHeight)); |
- scroll_view.SetContents(contents); |
+ scroll_view_.SetContents(contents); |
- EXPECT_EQ(gfx::Size(kWidth, kMinHeight), scroll_view.GetPreferredSize()); |
+ EXPECT_EQ(gfx::Size(kWidth, kMinHeight), scroll_view_.GetPreferredSize()); |
- scroll_view.SizeToPreferredSize(); |
- scroll_view.Layout(); |
+ scroll_view_.SizeToPreferredSize(); |
+ scroll_view_.Layout(); |
// Layered scrolling requires the contents to fill the viewport. |
if (contents->layer()) { |
- EXPECT_EQ(gfx::Size(kWidth, kMinHeight), scroll_view.contents()->size()); |
+ EXPECT_EQ(gfx::Size(kWidth, kMinHeight), scroll_view_.contents()->size()); |
} else { |
EXPECT_EQ(gfx::Size(kWidth, kShortContentHeight), |
- scroll_view.contents()->size()); |
+ scroll_view_.contents()->size()); |
} |
- EXPECT_EQ(gfx::Size(kWidth, kMinHeight), scroll_view.size()); |
+ EXPECT_EQ(gfx::Size(kWidth, kMinHeight), scroll_view_.size()); |
} |
// Verifies ClipHeightTo() uses the maximum height when the content is longer |
// thamn the maximum height value. |
-TEST(ScrollViewTest, ClipHeightToTallContentHeight) { |
- ScrollView scroll_view; |
- |
+TEST_F(ScrollViewTest, ClipHeightToTallContentHeight) { |
// Use a scrollbar that is disabled by default, so the width of the content is |
// not affected. |
- scroll_view.SetVerticalScrollBar(new views::OverlayScrollBar(false)); |
+ scroll_view_.SetVerticalScrollBar(new views::OverlayScrollBar(false)); |
- scroll_view.ClipHeightTo(kMinHeight, kMaxHeight); |
+ scroll_view_.ClipHeightTo(kMinHeight, kMaxHeight); |
const int kTallContentHeight = 1000; |
- scroll_view.SetContents( |
+ scroll_view_.SetContents( |
new views::StaticSizedView(gfx::Size(kWidth, kTallContentHeight))); |
- EXPECT_EQ(gfx::Size(kWidth, kMaxHeight), scroll_view.GetPreferredSize()); |
+ EXPECT_EQ(gfx::Size(kWidth, kMaxHeight), scroll_view_.GetPreferredSize()); |
- scroll_view.SizeToPreferredSize(); |
- scroll_view.Layout(); |
+ scroll_view_.SizeToPreferredSize(); |
+ scroll_view_.Layout(); |
EXPECT_EQ(gfx::Size(kWidth, kTallContentHeight), |
- scroll_view.contents()->size()); |
- EXPECT_EQ(gfx::Size(kWidth, kMaxHeight), scroll_view.size()); |
+ scroll_view_.contents()->size()); |
+ EXPECT_EQ(gfx::Size(kWidth, kMaxHeight), scroll_view_.size()); |
} |
// Verifies that when ClipHeightTo() produces a scrollbar, it reduces the width |
// of the inner content of the ScrollView. |
-TEST(ScrollViewTest, ClipHeightToScrollbarUsesWidth) { |
- ScrollView scroll_view; |
- |
- scroll_view.ClipHeightTo(kMinHeight, kMaxHeight); |
+TEST_F(ScrollViewTest, ClipHeightToScrollbarUsesWidth) { |
+ scroll_view_.ClipHeightTo(kMinHeight, kMaxHeight); |
// Create a view that will be much taller than it is wide. |
- scroll_view.SetContents(new views::ProportionallySizedView(1000)); |
+ scroll_view_.SetContents(new views::ProportionallySizedView(1000)); |
// Without any width, it will default to 0,0 but be overridden by min height. |
- scroll_view.SizeToPreferredSize(); |
- EXPECT_EQ(gfx::Size(0, kMinHeight), scroll_view.GetPreferredSize()); |
+ scroll_view_.SizeToPreferredSize(); |
+ EXPECT_EQ(gfx::Size(0, kMinHeight), scroll_view_.GetPreferredSize()); |
- gfx::Size new_size(kWidth, scroll_view.GetHeightForWidth(kWidth)); |
- scroll_view.SetSize(new_size); |
- scroll_view.Layout(); |
+ gfx::Size new_size(kWidth, scroll_view_.GetHeightForWidth(kWidth)); |
+ scroll_view_.SetSize(new_size); |
+ scroll_view_.Layout(); |
- int scroll_bar_width = scroll_view.GetScrollBarWidth(); |
+ int scroll_bar_width = scroll_view_.GetScrollBarWidth(); |
int expected_width = kWidth - scroll_bar_width; |
- EXPECT_EQ(scroll_view.contents()->size().width(), expected_width); |
- EXPECT_EQ(scroll_view.contents()->size().height(), 1000 * expected_width); |
- EXPECT_EQ(gfx::Size(kWidth, kMaxHeight), scroll_view.size()); |
+ EXPECT_EQ(scroll_view_.contents()->size().width(), expected_width); |
+ EXPECT_EQ(scroll_view_.contents()->size().height(), 1000 * expected_width); |
+ EXPECT_EQ(gfx::Size(kWidth, kMaxHeight), scroll_view_.size()); |
} |
-TEST(ScrollViewTest, CornerViewVisibility) { |
- ScrollView scroll_view; |
- View* contents = new View; |
- scroll_view.SetContents(contents); |
- scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100)); |
- View* corner_view = ScrollViewTestApi(&scroll_view).corner_view(); |
+TEST_F(ScrollViewTest, CornerViewVisibility) { |
+ View* contents = InstallContents(); |
+ View* corner_view = ScrollViewTestApi(&scroll_view_).corner_view(); |
// Corner view should be visible when both scrollbars are visible. |
contents->SetBounds(0, 0, 200, 200); |
- scroll_view.Layout(); |
- EXPECT_EQ(&scroll_view, corner_view->parent()); |
+ scroll_view_.Layout(); |
+ EXPECT_EQ(&scroll_view_, corner_view->parent()); |
EXPECT_TRUE(corner_view->visible()); |
// Corner view should be aligned to the scrollbars. |
- EXPECT_EQ(scroll_view.vertical_scroll_bar()->x(), corner_view->x()); |
- EXPECT_EQ(scroll_view.horizontal_scroll_bar()->y(), corner_view->y()); |
- EXPECT_EQ(scroll_view.GetScrollBarWidth(), corner_view->width()); |
- EXPECT_EQ(scroll_view.GetScrollBarHeight(), corner_view->height()); |
+ EXPECT_EQ(scroll_view_.vertical_scroll_bar()->x(), corner_view->x()); |
+ EXPECT_EQ(scroll_view_.horizontal_scroll_bar()->y(), corner_view->y()); |
+ EXPECT_EQ(scroll_view_.GetScrollBarWidth(), corner_view->width()); |
+ EXPECT_EQ(scroll_view_.GetScrollBarHeight(), corner_view->height()); |
// Corner view should be removed when only the vertical scrollbar is visible. |
contents->SetBounds(0, 0, 50, 200); |
- scroll_view.Layout(); |
+ scroll_view_.Layout(); |
EXPECT_FALSE(corner_view->parent()); |
// ... or when only the horizontal scrollbar is visible. |
contents->SetBounds(0, 0, 200, 50); |
- scroll_view.Layout(); |
+ scroll_view_.Layout(); |
EXPECT_FALSE(corner_view->parent()); |
// ... or when no scrollbar is visible. |
contents->SetBounds(0, 0, 50, 50); |
- scroll_view.Layout(); |
+ scroll_view_.Layout(); |
EXPECT_FALSE(corner_view->parent()); |
// Corner view should reappear when both scrollbars reappear. |
contents->SetBounds(0, 0, 200, 200); |
- scroll_view.Layout(); |
- EXPECT_EQ(&scroll_view, corner_view->parent()); |
+ scroll_view_.Layout(); |
+ EXPECT_EQ(&scroll_view_, corner_view->parent()); |
EXPECT_TRUE(corner_view->visible()); |
} |
#if defined(OS_MACOSX) |
// Tests the overlay scrollbars on Mac. Ensure that they show up properly and |
// do not overlap each other. |
-TEST(ScrollViewTest, CocoaOverlayScrollBars) { |
- std::unique_ptr<ui::test::ScopedPreferredScrollerStyle> |
- scroller_style_override; |
- scroller_style_override.reset( |
- new ui::test::ScopedPreferredScrollerStyle(true)); |
- ScrollView scroll_view; |
- View* contents = new View; |
- scroll_view.SetContents(contents); |
- scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100)); |
+TEST_F(ScrollViewTest, CocoaOverlayScrollBars) { |
+ SetOverlayScrollersEnabled(true); |
+ View* contents = InstallContents(); |
// Size the contents such that vertical scrollbar is needed. |
// Since it is overlaid, the ViewPort size should match the ScrollView. |
contents->SetBounds(0, 0, 50, 400); |
- scroll_view.Layout(); |
+ scroll_view_.Layout(); |
EXPECT_EQ(100, contents->parent()->width()); |
EXPECT_EQ(100, contents->parent()->height()); |
- EXPECT_EQ(0, scroll_view.GetScrollBarWidth()); |
- CheckScrollbarVisibility(scroll_view, VERTICAL, true); |
- CheckScrollbarVisibility(scroll_view, HORIZONTAL, false); |
+ EXPECT_EQ(0, scroll_view_.GetScrollBarWidth()); |
+ CheckScrollbarVisibility(scroll_view_, VERTICAL, true); |
+ CheckScrollbarVisibility(scroll_view_, HORIZONTAL, false); |
// Size the contents such that horizontal scrollbar is needed. |
contents->SetBounds(0, 0, 400, 50); |
- scroll_view.Layout(); |
+ scroll_view_.Layout(); |
EXPECT_EQ(100, contents->parent()->width()); |
EXPECT_EQ(100, contents->parent()->height()); |
- EXPECT_EQ(0, scroll_view.GetScrollBarHeight()); |
- CheckScrollbarVisibility(scroll_view, VERTICAL, false); |
- CheckScrollbarVisibility(scroll_view, HORIZONTAL, true); |
+ EXPECT_EQ(0, scroll_view_.GetScrollBarHeight()); |
+ CheckScrollbarVisibility(scroll_view_, VERTICAL, false); |
+ CheckScrollbarVisibility(scroll_view_, HORIZONTAL, true); |
// Both horizontal and vertical scrollbars. |
contents->SetBounds(0, 0, 300, 400); |
- scroll_view.Layout(); |
+ scroll_view_.Layout(); |
EXPECT_EQ(100, contents->parent()->width()); |
EXPECT_EQ(100, contents->parent()->height()); |
- EXPECT_EQ(0, scroll_view.GetScrollBarWidth()); |
- EXPECT_EQ(0, scroll_view.GetScrollBarHeight()); |
- CheckScrollbarVisibility(scroll_view, VERTICAL, true); |
- CheckScrollbarVisibility(scroll_view, HORIZONTAL, true); |
+ EXPECT_EQ(0, scroll_view_.GetScrollBarWidth()); |
+ EXPECT_EQ(0, scroll_view_.GetScrollBarHeight()); |
+ CheckScrollbarVisibility(scroll_view_, VERTICAL, true); |
+ CheckScrollbarVisibility(scroll_view_, HORIZONTAL, true); |
// Make sure the horizontal and vertical scrollbars don't overlap each other. |
- gfx::Rect vert_bounds = scroll_view.vertical_scroll_bar()->bounds(); |
- gfx::Rect horiz_bounds = scroll_view.horizontal_scroll_bar()->bounds(); |
+ gfx::Rect vert_bounds = scroll_view_.vertical_scroll_bar()->bounds(); |
+ gfx::Rect horiz_bounds = scroll_view_.horizontal_scroll_bar()->bounds(); |
EXPECT_EQ(vert_bounds.x(), horiz_bounds.right()); |
EXPECT_EQ(horiz_bounds.y(), vert_bounds.bottom()); |
// Switch to the non-overlay style and check that the ViewPort is now sized |
// to be smaller, and ScrollbarWidth and ScrollbarHeight are non-zero. |
- scroller_style_override.reset( |
- new ui::test::ScopedPreferredScrollerStyle(false)); |
- EXPECT_EQ(100 - scroll_view.GetScrollBarWidth(), contents->parent()->width()); |
- EXPECT_EQ(100 - scroll_view.GetScrollBarHeight(), |
+ SetOverlayScrollersEnabled(false); |
+ EXPECT_EQ(100 - scroll_view_.GetScrollBarWidth(), |
+ contents->parent()->width()); |
+ EXPECT_EQ(100 - scroll_view_.GetScrollBarHeight(), |
contents->parent()->height()); |
- EXPECT_NE(0, scroll_view.GetScrollBarWidth()); |
- EXPECT_NE(0, scroll_view.GetScrollBarHeight()); |
+ EXPECT_NE(0, scroll_view_.GetScrollBarWidth()); |
+ EXPECT_NE(0, scroll_view_.GetScrollBarHeight()); |
} |
#endif |
// Test that increasing the size of the viewport "below" scrolled content causes |
// the content to scroll up so that it still fills the viewport. |
-TEST(ScrollViewTest, ConstrainScrollToBounds) { |
- ScrollView scroll_view; |
- ScrollViewTestApi test_api(&scroll_view); |
+TEST_F(ScrollViewTest, ConstrainScrollToBounds) { |
+ ScrollViewTestApi test_api(&scroll_view_); |
- View* contents = new View; |
+ View* contents = InstallContents(); |
contents->SetBoundsRect(gfx::Rect(0, 0, 300, 300)); |
- scroll_view.SetContents(contents); |
- scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100)); |
- scroll_view.Layout(); |
+ scroll_view_.Layout(); |
EXPECT_EQ(gfx::ScrollOffset(), test_api.CurrentOffset()); |
@@ -763,15 +763,15 @@ TEST(ScrollViewTest, ConstrainScrollToBounds) { |
EXPECT_NE(gfx::ScrollOffset(), fully_scrolled); |
// Making the viewport 55 pixels taller should scroll up the same amount. |
- scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 155)); |
- scroll_view.Layout(); |
+ scroll_view_.SetBoundsRect(gfx::Rect(0, 0, 100, 155)); |
+ scroll_view_.Layout(); |
EXPECT_EQ(fully_scrolled.y() - 55, test_api.CurrentOffset().y()); |
EXPECT_EQ(fully_scrolled.x(), test_api.CurrentOffset().x()); |
// And 77 pixels wider should scroll left. Also make it short again: the y- |
// offset from the last change should remain. |
- scroll_view.SetBoundsRect(gfx::Rect(0, 0, 177, 100)); |
- scroll_view.Layout(); |
+ scroll_view_.SetBoundsRect(gfx::Rect(0, 0, 177, 100)); |
+ scroll_view_.Layout(); |
EXPECT_EQ(fully_scrolled.y() - 55, test_api.CurrentOffset().y()); |
EXPECT_EQ(fully_scrolled.x() - 77, test_api.CurrentOffset().x()); |
} |