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

Unified Diff: ui/gfx/geometry/rect_unittest.cc

Issue 2384063007: Fix scrollbar overflow with ScaleToEnclosingRectSafe (Closed)
Patch Set: With comment Created 4 years, 2 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/gfx/geometry/rect.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/geometry/rect_unittest.cc
diff --git a/ui/gfx/geometry/rect_unittest.cc b/ui/gfx/geometry/rect_unittest.cc
index b436f0a8468c79f50c40cd3d91eb72b651d1a21b..179e3f5828703b9a0e92d1e13df61b2284f61d5c 100644
--- a/ui/gfx/geometry/rect_unittest.cc
+++ b/ui/gfx/geometry/rect_unittest.cc
@@ -683,9 +683,12 @@ TEST(RectTest, ScaleToEnclosingRect) {
};
for (size_t i = 0; i < arraysize(tests); ++i) {
- Rect result = ScaleToEnclosingRect(tests[i].input_rect,
- tests[i].input_scale);
+ Rect result =
+ ScaleToEnclosingRect(tests[i].input_rect, tests[i].input_scale);
EXPECT_EQ(tests[i].expected_rect, result);
+ Rect result_safe =
+ ScaleToEnclosingRectSafe(tests[i].input_rect, tests[i].input_scale);
+ EXPECT_EQ(tests[i].expected_rect, result_safe);
}
}
@@ -983,4 +986,44 @@ TEST(RectTest, IntegerOverflow) {
EXPECT_EQ(expected_size, operator_overflow.size());
}
+TEST(RectTest, ScaleToEnclosingRectSafe) {
+ const int max_int = std::numeric_limits<int>::max();
+ const int min_int = std::numeric_limits<int>::min();
+
+ Rect xy_underflow(-100000, -123456, 10, 20);
+ EXPECT_EQ(ScaleToEnclosingRectSafe(xy_underflow, 100000, 100000),
+ Rect(min_int, min_int, 1000000, 2000000));
+
+ // A location overflow means that width/right and bottom/top also
+ // overflow so need to be clamped.
+ Rect xy_overflow(100000, 123456, 10, 20);
+ EXPECT_EQ(ScaleToEnclosingRectSafe(xy_overflow, 100000, 100000),
+ Rect(max_int, max_int, 0, 0));
+
+ // In practice all rects are clamped to 0 width / 0 height so
+ // negative sizes don't matter, but try this for the sake of testing.
+ Rect size_underflow(-1, -2, 100000, 100000);
+ EXPECT_EQ(ScaleToEnclosingRectSafe(size_underflow, -100000, -100000),
+ Rect(100000, 200000, 0, 0));
+
+ Rect size_overflow(-1, -2, 123456, 234567);
+ EXPECT_EQ(ScaleToEnclosingRectSafe(size_overflow, 100000, 100000),
+ Rect(-100000, -200000, max_int, max_int));
+ // Verify width/right gets clamped properly too if x/y positive.
+ Rect size_overflow2(1, 2, 123456, 234567);
+ EXPECT_EQ(ScaleToEnclosingRectSafe(size_overflow2, 100000, 100000),
+ Rect(100000, 200000, max_int - 100000, max_int - 200000));
+
+ Rect max_rect(max_int, max_int, max_int, max_int);
+ EXPECT_EQ(ScaleToEnclosingRectSafe(max_rect, max_int, max_int),
+ Rect(max_int, max_int, 0, 0));
+
+ Rect min_rect(min_int, min_int, max_int, max_int);
+ // Min rect can't be scaled up any further in any dimension.
+ EXPECT_EQ(ScaleToEnclosingRectSafe(min_rect, 2, 3.5), min_rect);
+ EXPECT_EQ(ScaleToEnclosingRectSafe(min_rect, max_int, max_int), min_rect);
+ // Min rect scaled by min is an empty rect at (max, max)
+ EXPECT_EQ(ScaleToEnclosingRectSafe(min_rect, min_int, min_int), max_rect);
+}
+
} // namespace gfx
« no previous file with comments | « ui/gfx/geometry/rect.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698