Index: tests/PDFInvalidBitmapTest.cpp |
diff --git a/tests/PDFInvalidBitmapTest.cpp b/tests/PDFInvalidBitmapTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2f4753e4a440f1d29abb431a1921745d9be71664 |
--- /dev/null |
+++ b/tests/PDFInvalidBitmapTest.cpp |
@@ -0,0 +1,60 @@ |
+/* |
+ * Copyright 2013 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "SkBitmap.h" |
+#include "SkCanvas.h" |
+#include "SkDocument.h" |
+#include "SkImageInfo.h" |
+#include "SkPixelRef.h" |
+#include "SkRefCnt.h" |
+#include "SkStream.h" |
+ |
+#include "Test.h" |
+ |
+namespace { |
+ |
+// SkPixelRef which fails to lock, as a lazy pixel ref might if its pixels |
+// cannot be generated. |
+class InvalidPixelRef : public SkPixelRef { |
+public: |
+ InvalidPixelRef(const SkImageInfo& info) : SkPixelRef(info) {} |
+private: |
+ virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE { return false; } |
+ virtual void onUnlockPixels() SK_OVERRIDE { |
+ SkDEBUGFAIL("InvalidPixelRef can't be locked"); |
+ } |
+}; |
+ |
+SkBitmap make_invalid_bitmap(const SkImageInfo& imageInfo) { |
+ SkBitmap bitmap; |
+ bitmap.setInfo(imageInfo); |
+ bitmap.setPixelRef(SkNEW_ARGS(InvalidPixelRef, (imageInfo)))->unref(); |
+ return bitmap; |
+} |
+ |
+SkBitmap make_invalid_bitmap(SkColorType colorType) { |
+ return make_invalid_bitmap( |
+ SkImageInfo::Make(100, 100, colorType, kPremul_SkAlphaType)); |
+} |
+ |
+} // namespace |
+ |
+DEF_TEST(PDFInvalidBitmap, reporter) { |
+ SkDynamicMemoryWStream stream; |
+ SkAutoTUnref<SkDocument> document(SkDocument::CreatePDF(&stream)); |
+ SkCanvas* canvas = document->beginPage(100, 100); |
+ |
+ canvas->drawBitmap(SkBitmap(), 0, 0); |
+ canvas->drawBitmap(make_invalid_bitmap(SkImageInfo()), 0, 0); |
+ canvas->drawBitmap(make_invalid_bitmap(kN32_SkColorType), 0, 0); |
+ canvas->drawBitmap(make_invalid_bitmap(kIndex_8_SkColorType), 0, 0); |
+ canvas->drawBitmap(make_invalid_bitmap(kARGB_4444_SkColorType), 0, 0); |
+ canvas->drawBitmap(make_invalid_bitmap(kRGB_565_SkColorType), 0, 0); |
+ canvas->drawBitmap(make_invalid_bitmap(kAlpha_8_SkColorType), 0, 0); |
+ |
+ // This test passes if it does not crash. |
+} |