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

Unified Diff: ui/views/controls/scroll_view_unittest.cc

Issue 1680613002: Adding momentum/overscroll to views:: ScrollViews Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix Tableview layout. aaaand I think we are done Created 4 years, 5 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
« no previous file with comments | « ui/views/controls/scroll_view.cc ('k') | ui/views/controls/scrollbar/cocoa_scroll_bar.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 d90784ca906d5d57097fece67c4518275f0ea19c..54da0d3fd63043c91872d8a250b1fe8805698abb 100644
--- a/ui/views/controls/scroll_view_unittest.cc
+++ b/ui/views/controls/scroll_view_unittest.cc
@@ -15,6 +15,26 @@
#endif
namespace views {
+namespace test {
+
+class ScrollViewTestApi {
+ public:
+ explicit ScrollViewTestApi(ScrollView* scroll_view)
+ : scroll_view_(scroll_view) {}
+
+ gfx::Point IntegralViewOffset() {
+ return gfx::Point() - gfx::ScrollOffsetToFlooredVector2d(CurrentOffset());
+ }
+
+ gfx::ScrollOffset CurrentOffset() { return scroll_view_->CurrentOffset(); }
+ View* corner_view() { return scroll_view_->corner_view_; }
+ View* contents_viewport() { return scroll_view_->contents_viewport_; }
+
+ private:
+ ScrollView* scroll_view_;
+};
+
+} // namespace test
namespace {
@@ -69,14 +89,17 @@ void CheckScrollbarVisibility(const ScrollView& scroll_view,
} // namespace
+using test::ScrollViewTestApi;
+
// Verifies the viewport is sized to fit the available space.
TEST(ScrollViewTest, ViewportSizedToFit) {
ScrollView scroll_view;
+ ScrollViewTestApi test_api(&scroll_view);
View* contents = new View;
scroll_view.SetContents(contents);
scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100));
scroll_view.Layout();
- EXPECT_EQ("0,0 100x100", contents->parent()->bounds().ToString());
+ EXPECT_EQ("0,0 100x100", test_api.contents_viewport()->bounds().ToString());
}
// Verifies the scrollbars are added as necessary.
@@ -87,6 +110,7 @@ TEST(ScrollViewTest, ScrollBars) {
#endif
ScrollView scroll_view;
+ ScrollViewTestApi test_api(&scroll_view);
View* contents = new View;
scroll_view.SetContents(contents);
scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100));
@@ -94,8 +118,9 @@ TEST(ScrollViewTest, ScrollBars) {
// 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());
- EXPECT_EQ(100, contents->parent()->height());
+ EXPECT_EQ(100 - scroll_view.GetScrollBarWidth(),
+ test_api.contents_viewport()->width());
+ EXPECT_EQ(100, test_api.contents_viewport()->height());
CheckScrollbarVisibility(scroll_view, VERTICAL, true);
CheckScrollbarVisibility(scroll_view, HORIZONTAL, false);
EXPECT_TRUE(!scroll_view.horizontal_scroll_bar() ||
@@ -106,18 +131,19 @@ TEST(ScrollViewTest, ScrollBars) {
// Size the contents such that horizontal scrollbar is needed.
contents->SetBounds(0, 0, 400, 50);
scroll_view.Layout();
- EXPECT_EQ(100, contents->parent()->width());
+ EXPECT_EQ(100, test_api.contents_viewport()->width());
EXPECT_EQ(100 - scroll_view.GetScrollBarHeight(),
- contents->parent()->height());
+ test_api.contents_viewport()->height());
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.GetScrollBarWidth(),
+ test_api.contents_viewport()->width());
EXPECT_EQ(100 - scroll_view.GetScrollBarHeight(),
- contents->parent()->height());
+ test_api.contents_viewport()->height());
CheckScrollbarVisibility(scroll_view, VERTICAL, true);
CheckScrollbarVisibility(scroll_view, HORIZONTAL, true);
@@ -132,8 +158,9 @@ TEST(ScrollViewTest, ScrollBars) {
scroll_view.Layout();
EXPECT_EQ(
100 - scroll_view.GetScrollBarWidth() - kLeftPadding - kRightPadding,
- contents->parent()->width());
- EXPECT_EQ(100 - kTopPadding - kBottomPadding, contents->parent()->height());
+ test_api.contents_viewport()->width());
+ EXPECT_EQ(100 - kTopPadding - kBottomPadding,
+ test_api.contents_viewport()->height());
EXPECT_TRUE(!scroll_view.horizontal_scroll_bar() ||
!scroll_view.horizontal_scroll_bar()->visible());
ASSERT_TRUE(scroll_view.vertical_scroll_bar() != NULL);
@@ -147,10 +174,11 @@ TEST(ScrollViewTest, ScrollBars) {
// Horizontal with border.
contents->SetBounds(0, 0, 400, 50);
scroll_view.Layout();
- EXPECT_EQ(100 - kLeftPadding - kRightPadding, contents->parent()->width());
+ EXPECT_EQ(100 - kLeftPadding - kRightPadding,
+ test_api.contents_viewport()->width());
EXPECT_EQ(
100 - scroll_view.GetScrollBarHeight() - kTopPadding - kBottomPadding,
- contents->parent()->height());
+ test_api.contents_viewport()->height());
ASSERT_TRUE(scroll_view.horizontal_scroll_bar() != NULL);
EXPECT_TRUE(scroll_view.horizontal_scroll_bar()->visible());
EXPECT_TRUE(!scroll_view.vertical_scroll_bar() ||
@@ -167,10 +195,10 @@ TEST(ScrollViewTest, ScrollBars) {
scroll_view.Layout();
EXPECT_EQ(
100 - scroll_view.GetScrollBarWidth() - kLeftPadding - kRightPadding,
- contents->parent()->width());
+ test_api.contents_viewport()->width());
EXPECT_EQ(
100 - scroll_view.GetScrollBarHeight() - kTopPadding - kBottomPadding,
- contents->parent()->height());
+ test_api.contents_viewport()->height());
bounds = scroll_view.horizontal_scroll_bar()->bounds();
// Check horiz.
ASSERT_TRUE(scroll_view.horizontal_scroll_bar() != NULL);
@@ -196,6 +224,7 @@ TEST(ScrollViewTest, ScrollBars) {
// Assertions around adding a header.
TEST(ScrollViewTest, Header) {
ScrollView scroll_view;
+ ScrollViewTestApi test_api(&scroll_view);
View* contents = new View;
CustomView* header = new CustomView;
scroll_view.SetHeader(header);
@@ -206,24 +235,25 @@ TEST(ScrollViewTest, Header) {
// |header|s preferred size is empty, which should result in all space going
// to contents.
EXPECT_EQ("0,0 100x0", header->parent()->bounds().ToString());
- EXPECT_EQ("0,0 100x100", contents->parent()->bounds().ToString());
+ EXPECT_EQ("0,0 100x100", test_api.contents_viewport()->bounds().ToString());
// Get the header a height of 20.
header->SetPreferredSize(gfx::Size(10, 20));
EXPECT_EQ("0,0 100x20", header->parent()->bounds().ToString());
- EXPECT_EQ("0,20 100x80", contents->parent()->bounds().ToString());
+ EXPECT_EQ("0,20 100x80", test_api.contents_viewport()->bounds().ToString());
// Remove the header.
scroll_view.SetHeader(NULL);
// SetHeader(NULL) deletes header.
header = NULL;
EXPECT_EQ("0,0 100x0", header_parent->bounds().ToString());
- EXPECT_EQ("0,0 100x100", contents->parent()->bounds().ToString());
+ EXPECT_EQ("0,0 100x100", test_api.contents_viewport()->bounds().ToString());
}
// Verifies the scrollbars are added as necessary when a header is present.
TEST(ScrollViewTest, ScrollBarsWithHeader) {
ScrollView scroll_view;
+ ScrollViewTestApi test_api(&scroll_view);
View* contents = new View;
scroll_view.SetContents(contents);
CustomView* header = new CustomView;
@@ -235,10 +265,11 @@ TEST(ScrollViewTest, ScrollBarsWithHeader) {
// Size the contents such that vertical scrollbar is needed.
contents->SetBounds(0, 0, 50, 400);
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(80, contents->parent()->height());
+ EXPECT_EQ(0, test_api.contents_viewport()->x());
+ EXPECT_EQ(20, test_api.contents_viewport()->y());
+ EXPECT_EQ(100 - scroll_view.GetScrollBarWidth(),
+ test_api.contents_viewport()->width());
+ EXPECT_EQ(80, test_api.contents_viewport()->height());
EXPECT_EQ(0, header->parent()->x());
EXPECT_EQ(0, header->parent()->y());
EXPECT_EQ(100 - scroll_view.GetScrollBarWidth(), header->parent()->width());
@@ -254,11 +285,11 @@ TEST(ScrollViewTest, ScrollBarsWithHeader) {
// Size the contents such that horizontal scrollbar is needed.
contents->SetBounds(0, 0, 400, 50);
scroll_view.Layout();
- EXPECT_EQ(0, contents->parent()->x());
- EXPECT_EQ(20, contents->parent()->y());
- EXPECT_EQ(100, contents->parent()->width());
+ EXPECT_EQ(0, test_api.contents_viewport()->x());
+ EXPECT_EQ(20, test_api.contents_viewport()->y());
+ EXPECT_EQ(100, test_api.contents_viewport()->width());
EXPECT_EQ(100 - scroll_view.GetScrollBarHeight() - 20,
- contents->parent()->height());
+ test_api.contents_viewport()->height());
EXPECT_EQ(0, header->parent()->x());
EXPECT_EQ(0, header->parent()->y());
EXPECT_EQ(100, header->parent()->width());
@@ -271,11 +302,12 @@ TEST(ScrollViewTest, ScrollBarsWithHeader) {
// Both horizontal and vertical.
contents->SetBounds(0, 0, 300, 400);
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(0, test_api.contents_viewport()->x());
+ EXPECT_EQ(20, test_api.contents_viewport()->y());
+ EXPECT_EQ(100 - scroll_view.GetScrollBarWidth(),
+ test_api.contents_viewport()->width());
EXPECT_EQ(100 - scroll_view.GetScrollBarHeight() - 20,
- contents->parent()->height());
+ test_api.contents_viewport()->height());
EXPECT_EQ(0, header->parent()->x());
EXPECT_EQ(0, header->parent()->y());
EXPECT_EQ(100 - scroll_view.GetScrollBarWidth(), header->parent()->width());
@@ -289,6 +321,7 @@ TEST(ScrollViewTest, ScrollBarsWithHeader) {
// Verifies the header scrolls horizontally with the content.
TEST(ScrollViewTest, HeaderScrollsWithContent) {
ScrollView scroll_view;
+ ScrollViewTestApi test_api(&scroll_view);
CustomView* contents = new CustomView;
scroll_view.SetContents(contents);
contents->SetPreferredSize(gfx::Size(500, 500));
@@ -298,44 +331,50 @@ TEST(ScrollViewTest, HeaderScrollsWithContent) {
header->SetPreferredSize(gfx::Size(500, 20));
scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100));
- EXPECT_EQ("0,0", contents->bounds().origin().ToString());
+ 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);
- EXPECT_EQ("-1,0", contents->bounds().origin().ToString());
+ 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);
- EXPECT_EQ("-1,-1", contents->bounds().origin().ToString());
+ 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) {
ScrollView scroll_view;
+ ScrollViewTestApi test_api(&scroll_view);
CustomView* contents = new CustomView;
scroll_view.SetContents(contents);
contents->SetPreferredSize(gfx::Size(500, 1000));
scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100));
scroll_view.Layout();
- EXPECT_EQ("0,0", contents->bounds().origin().ToString());
+ EXPECT_EQ("0,0", test_api.IntegralViewOffset().ToString());
// Scroll to y=405 height=10, this should make the y position of the content
// at (405 + 10) - viewport_height (scroll region bottom aligned).
contents->ScrollRectToVisible(gfx::Rect(0, 405, 10, 10));
- const int viewport_height = contents->parent()->height();
- EXPECT_EQ(-(415 - viewport_height), contents->y());
+ const int viewport_height = test_api.contents_viewport()->height();
+
+ // Expect there to be a horizontal scrollbar, making the viewport shorter.
+ EXPECT_LT(viewport_height, 100);
+
+ gfx::ScrollOffset offset = test_api.CurrentOffset();
+ EXPECT_EQ(415 - viewport_height, offset.y());
// Scroll to the current y-location and 10x10; should do nothing.
- contents->ScrollRectToVisible(gfx::Rect(0, -contents->y(), 10, 10));
- EXPECT_EQ(-(415 - viewport_height), contents->y());
+ contents->ScrollRectToVisible(gfx::Rect(0, offset.y(), 10, 10));
+ EXPECT_EQ(415 - viewport_height, test_api.CurrentOffset().y());
}
// Verifies ClipHeightTo() uses the height of the content when it is between the
@@ -436,7 +475,7 @@ TEST(ScrollViewTest, CornerViewVisibility) {
View* contents = new View;
scroll_view.SetContents(contents);
scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100));
- View* corner_view = scroll_view.corner_view_;
+ View* corner_view = ScrollViewTestApi(&scroll_view).corner_view();
// Corner view should be visible when both scrollbars are visible.
contents->SetBounds(0, 0, 200, 200);
@@ -481,6 +520,7 @@ TEST(ScrollViewTest, CocoaOverlayScrollBars) {
scroller_style_override.reset(
new ui::test::ScopedPreferredScrollerStyle(true));
ScrollView scroll_view;
+ ScrollViewTestApi test_api(&scroll_view);
View* contents = new View;
scroll_view.SetContents(contents);
scroll_view.SetBoundsRect(gfx::Rect(0, 0, 100, 100));
@@ -489,8 +529,8 @@ TEST(ScrollViewTest, CocoaOverlayScrollBars) {
// Since it is overlaid, the ViewPort size should match the ScrollView.
contents->SetBounds(0, 0, 50, 400);
scroll_view.Layout();
- EXPECT_EQ(100, contents->parent()->width());
- EXPECT_EQ(100, contents->parent()->height());
+ EXPECT_EQ(100, test_api.contents_viewport()->width());
+ EXPECT_EQ(100, test_api.contents_viewport()->height());
EXPECT_EQ(0, scroll_view.GetScrollBarWidth());
CheckScrollbarVisibility(scroll_view, VERTICAL, true);
CheckScrollbarVisibility(scroll_view, HORIZONTAL, false);
@@ -498,8 +538,8 @@ TEST(ScrollViewTest, CocoaOverlayScrollBars) {
// Size the contents such that horizontal scrollbar is needed.
contents->SetBounds(0, 0, 400, 50);
scroll_view.Layout();
- EXPECT_EQ(100, contents->parent()->width());
- EXPECT_EQ(100, contents->parent()->height());
+ EXPECT_EQ(100, test_api.contents_viewport()->width());
+ EXPECT_EQ(100, test_api.contents_viewport()->height());
EXPECT_EQ(0, scroll_view.GetScrollBarHeight());
CheckScrollbarVisibility(scroll_view, VERTICAL, false);
CheckScrollbarVisibility(scroll_view, HORIZONTAL, true);
@@ -507,8 +547,8 @@ TEST(ScrollViewTest, CocoaOverlayScrollBars) {
// Both horizontal and vertical scrollbars.
contents->SetBounds(0, 0, 300, 400);
scroll_view.Layout();
- EXPECT_EQ(100, contents->parent()->width());
- EXPECT_EQ(100, contents->parent()->height());
+ EXPECT_EQ(100, test_api.contents_viewport()->width());
+ EXPECT_EQ(100, test_api.contents_viewport()->height());
EXPECT_EQ(0, scroll_view.GetScrollBarWidth());
EXPECT_EQ(0, scroll_view.GetScrollBarHeight());
CheckScrollbarVisibility(scroll_view, VERTICAL, true);
@@ -524,9 +564,10 @@ TEST(ScrollViewTest, CocoaOverlayScrollBars) {
// 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.GetScrollBarWidth(),
+ test_api.contents_viewport()->width());
EXPECT_EQ(100 - scroll_view.GetScrollBarHeight(),
- contents->parent()->height());
+ test_api.contents_viewport()->height());
EXPECT_NE(0, scroll_view.GetScrollBarWidth());
EXPECT_NE(0, scroll_view.GetScrollBarHeight());
}
« no previous file with comments | « ui/views/controls/scroll_view.cc ('k') | ui/views/controls/scrollbar/cocoa_scroll_bar.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698