diff options
author | 2014-02-13 16:00:51 +0000 | |
---|---|---|
committer | 2014-02-13 16:00:51 +0000 | |
commit | ea7d08e3bbc45a0a573c1ac06afa4452f8d7000a (patch) | |
tree | f9b81ad1760a3a7538e61a8f23f44a6b77081c18 /tests/PictureTest.cpp | |
parent | 310ec8e32ca03757a9dec46be4f108efe01ba757 (diff) |
Add unit test for unbalanced save and restores in pictures.
R=reed@google.com
Author: bsalomon@google.com
Review URL: https://codereview.chromium.org/150653010
git-svn-id: http://skia.googlecode.com/svn/trunk@13430 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tests/PictureTest.cpp')
-rw-r--r-- | tests/PictureTest.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/PictureTest.cpp b/tests/PictureTest.cpp index e540181134..89f0af43fb 100644 --- a/tests/PictureTest.cpp +++ b/tests/PictureTest.cpp @@ -680,6 +680,62 @@ static void rand_op(SkCanvas* canvas, SkRandom& rand) { } } +static void set_canvas_to_save_count_4(SkCanvas* canvas) { + canvas->restoreToCount(1); + canvas->save(); + canvas->save(); + canvas->save(); +} + +static void test_unbalanced_save_restores(skiatest::Reporter* reporter) { + SkCanvas testCanvas(100, 100); + set_canvas_to_save_count_4(&testCanvas); + + REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount()); + + SkPaint paint; + SkRect rect = SkRect::MakeLTRB(-10000000, -10000000, 10000000, 10000000); + + SkPicture extra_save_picture; + extra_save_picture.beginRecording(100, 100); + extra_save_picture.getRecordingCanvas()->save(); + extra_save_picture.getRecordingCanvas()->translate(10, 10); + extra_save_picture.getRecordingCanvas()->drawRect(rect, paint); + extra_save_picture.getRecordingCanvas()->save(); + extra_save_picture.getRecordingCanvas()->translate(10, 10); + extra_save_picture.getRecordingCanvas()->drawRect(rect, paint); + + testCanvas.drawPicture(extra_save_picture); + REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount()); + + set_canvas_to_save_count_4(&testCanvas); + + SkPicture extra_restore_picture; + extra_restore_picture.beginRecording(100, 100); + extra_restore_picture.getRecordingCanvas()->save(); + extra_restore_picture.getRecordingCanvas()->translate(10, 10); + extra_restore_picture.getRecordingCanvas()->drawRect(rect, paint); + extra_restore_picture.getRecordingCanvas()->save(); + extra_restore_picture.getRecordingCanvas()->translate(10, 10); + extra_restore_picture.getRecordingCanvas()->drawRect(rect, paint); + extra_restore_picture.getRecordingCanvas()->restore(); + extra_restore_picture.getRecordingCanvas()->restore(); + extra_restore_picture.getRecordingCanvas()->restore(); + extra_restore_picture.getRecordingCanvas()->restore(); + + testCanvas.drawPicture(extra_save_picture); + REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount()); + + SkPicture no_save_picture; + extra_restore_picture.beginRecording(100, 100); + extra_restore_picture.getRecordingCanvas()->translate(10, 10); + extra_restore_picture.getRecordingCanvas()->drawRect(rect, paint); + + testCanvas.drawPicture(extra_save_picture); + REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount()); + REPORTER_ASSERT(reporter, testCanvas.getTotalMatrix().isIdentity()); +} + static void test_peephole() { SkRandom rand; @@ -1021,6 +1077,7 @@ DEF_TEST(Picture, reporter) { #else test_bad_bitmap(); #endif + test_unbalanced_save_restores(reporter); test_peephole(); test_gatherpixelrefs(reporter); test_gatherpixelrefsandrects(reporter); |