Add a SkPixelSerializer SkImage encode variant
R=reed@google.com
BUG=skia:4285
Review URL: https://codereview.chromium.org/1310633006
diff --git a/tests/ImageTest.cpp b/tests/ImageTest.cpp
index bbf6682..d271966 100644
--- a/tests/ImageTest.cpp
+++ b/tests/ImageTest.cpp
@@ -10,6 +10,7 @@
#include "SkDevice.h"
#include "SkImageEncoder.h"
#include "SkImage_Base.h"
+#include "SkPixelSerializer.h"
#include "SkRRect.h"
#include "SkSurface.h"
#include "SkUtils.h"
@@ -104,6 +105,36 @@
}
#endif
+namespace {
+
+const char* kSerializedData = "serialized";
+
+class MockSerializer : public SkPixelSerializer {
+protected:
+ bool onUseEncodedData(const void*, size_t) override {
+ return false;
+ }
+
+ SkData* onEncodePixels(const SkImageInfo&, const void*, size_t) override {
+ return SkData::NewWithCString(kSerializedData);
+ }
+};
+
+} // anonymous namespace
+
+// Test that SkImage encoding observes custom pixel serializers.
+DEF_TEST(Image_Encode_Serializer, reporter) {
+ MockSerializer serializer;
+ const SkIRect ir = SkIRect::MakeXYWH(5, 5, 10, 10);
+ SkAutoTUnref<SkImage> image(make_image(nullptr, 20, 20, ir));
+ SkAutoTUnref<SkData> encoded(image->encode(&serializer));
+ SkAutoTUnref<SkData> reference(SkData::NewWithCString(kSerializedData));
+
+ REPORTER_ASSERT(reporter, encoded);
+ REPORTER_ASSERT(reporter, encoded->size() > 0);
+ REPORTER_ASSERT(reporter, encoded->equals(reference));
+}
+
DEF_TEST(Image_NewRasterCopy, reporter) {
const SkPMColor red = SkPackARGB32(0xFF, 0xFF, 0, 0);
const SkPMColor green = SkPackARGB32(0xFF, 0, 0xFF, 0);