diff options
author | robertphillips <robertphillips@google.com> | 2015-09-29 11:24:07 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-09-29 11:24:07 -0700 |
commit | 05302f8f24cf0254e1fa713fbfc766387505e511 (patch) | |
tree | 40a6bc68a769be7150b7144d739d673526de43a3 /tests | |
parent | 3d096654b910e52768d7335a0c2c7d7cd32c8bb7 (diff) |
Handle inverted rects in SkRRect creation methods
An alternative way of addressing this is to alter SkCanvas::drawRoundRect to just reject isEmpty (i.e., un-sorted or truly empty) input rects.
BUG=skia:3786
Review URL: https://codereview.chromium.org/1373293002
Diffstat (limited to 'tests')
-rw-r--r-- | tests/RoundRectTest.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/RoundRectTest.cpp b/tests/RoundRectTest.cpp index 8d8f76fbf0..02dad22e08 100644 --- a/tests/RoundRectTest.cpp +++ b/tests/RoundRectTest.cpp @@ -47,6 +47,61 @@ static void test_empty_crbug_458524(skiatest::Reporter* reporter) { REPORTER_ASSERT(reporter, SkRRect::kEmpty_Type == other.getType()); } +// Test that all the SkRRect entry points correctly handle un-sorted and +// zero-sized input rects +static void test_empty(skiatest::Reporter* reporter) { + static const SkRect oooRects[] = { // out of order + { 100, 0, 0, 100 }, // ooo horizontal + { 0, 100, 100, 0 }, // ooo vertical + { 100, 100, 0, 0 }, // ooo both + }; + + static const SkRect emptyRects[] = { + { 100, 100, 100, 200 }, // empty horizontal + { 100, 100, 200, 100 }, // empty vertical + { 100, 100, 100, 100 }, // empty both + { 0, 0, 0, 0 } // setEmpty-empty + }; + + static const SkVector radii[4] = { { 0, 1 }, { 2, 3 }, { 4, 5 }, { 6, 7 } }; + + SkRRect r; + + for (size_t i = 0; i < SK_ARRAY_COUNT(oooRects); ++i) { + r.setRect(oooRects[i]); + REPORTER_ASSERT(reporter, !r.isEmpty()); + + r.setOval(oooRects[i]); + REPORTER_ASSERT(reporter, !r.isEmpty()); + + r.setRectXY(oooRects[i], 1, 2); + REPORTER_ASSERT(reporter, !r.isEmpty()); + + r.setNinePatch(oooRects[i], 0, 1, 2, 3); + REPORTER_ASSERT(reporter, !r.isEmpty()); + + r.setRectRadii(oooRects[i], radii); + REPORTER_ASSERT(reporter, !r.isEmpty()); + } + + for (size_t i = 0; i < SK_ARRAY_COUNT(emptyRects); ++i) { + r.setRect(emptyRects[i]); + REPORTER_ASSERT(reporter, r.isEmpty()); + + r.setOval(emptyRects[i]); + REPORTER_ASSERT(reporter, r.isEmpty()); + + r.setRectXY(emptyRects[i], 1, 2); + REPORTER_ASSERT(reporter, r.isEmpty()); + + r.setNinePatch(emptyRects[i], 0, 1, 2, 3); + REPORTER_ASSERT(reporter, r.isEmpty()); + + r.setRectRadii(emptyRects[i], radii); + REPORTER_ASSERT(reporter, r.isEmpty()); + } +} + static const SkScalar kWidth = 100.0f; static const SkScalar kHeight = 100.0f; @@ -679,4 +734,5 @@ DEF_TEST(RoundRect, reporter) { test_issue_2696(reporter); test_tricky_radii(reporter); test_empty_crbug_458524(reporter); + test_empty(reporter); } |