X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fthird_party%2Fskia%2Ftests%2FRoundRectTest.cpp;h=261ec67ca0963cc313db4d1c178bec6505d69e47;hb=4a1a0bdd01eef90b0826a0e761d3379d3715c10f;hp=0a528a65357f8f83fb4e18036b63841f49bf4a93;hpb=b1be5ca53587d23e7aeb77b26861fdc0a181ffd8;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/third_party/skia/tests/RoundRectTest.cpp b/src/third_party/skia/tests/RoundRectTest.cpp index 0a528a6..261ec67 100644 --- a/src/third_party/skia/tests/RoundRectTest.cpp +++ b/src/third_party/skia/tests/RoundRectTest.cpp @@ -582,6 +582,35 @@ static void test_round_rect_transform(skiatest::Reporter* reporter) { } } +// Test out the case where an oval already off in space is translated/scaled +// further off into space - yielding numerical issues when the rect & radii +// are transformed separatly +// BUG=skia:2696 +static void test_issue_2696(skiatest::Reporter* reporter) { + SkRRect rrect; + SkRect r = { 28443.8594f, 53.1428604f, 28446.7148f, 56.0000038f }; + rrect.setOval(r); + + SkMatrix xform; + xform.setAll(2.44f, 0.0f, 485411.7f, + 0.0f, 2.44f, -438.7f, + 0.0f, 0.0f, 1.0f); + SkRRect dst; + + bool success = rrect.transform(xform, &dst); + REPORTER_ASSERT(reporter, success); + + SkScalar halfWidth = SkScalarHalf(dst.width()); + SkScalar halfHeight = SkScalarHalf(dst.height()); + + for (int i = 0; i < 4; ++i) { + REPORTER_ASSERT(reporter, + SkScalarNearlyEqual(dst.radii((SkRRect::Corner)i).fX, halfWidth)); + REPORTER_ASSERT(reporter, + SkScalarNearlyEqual(dst.radii((SkRRect::Corner)i).fY, halfHeight)); + } +} + DEF_TEST(RoundRect, reporter) { test_round_rect_basic(reporter); test_round_rect_rects(reporter); @@ -591,4 +620,5 @@ DEF_TEST(RoundRect, reporter) { test_inset(reporter); test_round_rect_contains_rect(reporter); test_round_rect_transform(reporter); + test_issue_2696(reporter); }