aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/RoundRectTest.cpp
diff options
context:
space:
mode:
authorGravatar robertphillips <robertphillips@google.com>2015-09-29 11:24:07 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-09-29 11:24:07 -0700
commit05302f8f24cf0254e1fa713fbfc766387505e511 (patch)
tree40a6bc68a769be7150b7144d739d673526de43a3 /tests/RoundRectTest.cpp
parent3d096654b910e52768d7335a0c2c7d7cd32c8bb7 (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/RoundRectTest.cpp')
-rw-r--r--tests/RoundRectTest.cpp56
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);
}