Index: tests/ARGBImageEncoderTest.cpp |
=================================================================== |
--- tests/ARGBImageEncoderTest.cpp (working copy) |
+++ tests/ARGBImageEncoderTest.cpp (working copy) |
@@ -1,4 +1,3 @@ |
- |
/* |
* Copyright 2012 Google Inc. |
* |
@@ -6,92 +5,74 @@ |
* found in the LICENSE file. |
*/ |
-/** |
- * Tests for SkBitmapTransformer.h and SkBitmapTransformer.cpp |
- */ |
+/** Tests for ARGBImageEncoder. */ |
#include "Test.h" |
#include "SkBitmap.h" |
-#include "SkBitmapTransformer.h" |
+#include "SkCanvas.h" |
+#include "SkImageEncoder.h" |
+#include "SkStream.h" |
namespace skiatest { |
- class BitmapTransformerTestClass : public Test { |
- public: |
- static Test* Factory(void*) {return SkNEW(BitmapTransformerTestClass); } |
- protected: |
- virtual void onGetName(SkString* name) { name->set("BitmapTransformer"); } |
- virtual void onRun(Reporter* reporter) { |
- this->fReporter = reporter; |
- RunTest(); |
- } |
- private: |
- void RunTest() { |
- SkBitmap bitmap; |
- SkBitmap::Config supportedConfig = SkBitmap::kARGB_8888_Config; |
- SkBitmap::Config unsupportedConfig = SkBitmap::kARGB_4444_Config; |
- SkBitmapTransformer::PixelFormat supportedPixelFormat = |
- SkBitmapTransformer::kARGB_8888_Premul_PixelFormat; |
- const int kWidth = 55; |
- const int kHeight = 333; |
- // Transformations that we know are unsupported: |
- { |
- bitmap.setConfig(unsupportedConfig, kWidth, kHeight); |
- SkBitmapTransformer transformer = SkBitmapTransformer(bitmap, supportedPixelFormat); |
- REPORTER_ASSERT(fReporter, !transformer.isValid()); |
- } |
+class BitmapTransformerTestClass : public Test { |
+public: |
+ static Test* Factory(void*) { return SkNEW(BitmapTransformerTestClass); } |
+protected: |
+ virtual void onGetName(SkString* name) SK_OVERRIDE { name->set("ARGBImageEncoder"); } |
+ virtual void onRun(Reporter* reporter) SK_OVERRIDE; |
+}; |
- // Valid transformations: |
- { |
- // Bytes we expect to get: |
- const int kWidth = 3; |
- const int kHeight = 5; |
- const unsigned char comparisonBuffer[] = { |
- // kHeight rows, each with kWidth pixels, premultiplied ARGB for each pixel |
- 0xff,0xff,0x00,0x00, 0xff,0xff,0x00,0x00, 0xff,0xff,0x00,0x00, // red |
- 0xff,0x00,0xff,0x00, 0xff,0x00,0xff,0x00, 0xff,0x00,0xff,0x00, // green |
- 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, // blue |
- 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, // blue |
- 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, // blue |
- }; |
+static SkBitmap::Config configs[] = { |
+ SkBitmap::kRGB_565_Config, |
+ SkBitmap::kARGB_4444_Config, |
+ SkBitmap::kARGB_8888_Config, |
+}; |
- // A bitmap that should generate the above bytes: |
- bitmap.setConfig(supportedConfig, kWidth, kHeight); |
- REPORTER_ASSERT(fReporter, bitmap.allocPixels()); |
- bitmap.setIsOpaque(true); |
- bitmap.eraseColor(SK_ColorBLUE); |
- bitmap.lockPixels(); |
- // Change rows [0,1] from blue to [red,green]. |
- SkColor oldColor = SK_ColorBLUE; |
- SkColor newColors[] = {SK_ColorRED, SK_ColorGREEN}; |
- for (int y = 0; y <= 1; y++) { |
- for (int x = 0; x < kWidth; x++) { |
- REPORTER_ASSERT(fReporter, bitmap.getColor(x, y) == oldColor); |
- SkPMColor* pixel = static_cast<SkPMColor *>(bitmap.getAddr(x, y)); |
- *pixel = SkPreMultiplyColor(newColors[y]); |
- REPORTER_ASSERT(fReporter, bitmap.getColor(x, y) == newColors[y]); |
- } |
- } |
- bitmap.unlockPixels(); |
+void BitmapTransformerTestClass::onRun(Reporter* reporter) { |
+ // Bytes we expect to get: |
+ const int kWidth = 3; |
+ const int kHeight = 5; |
+ const unsigned char comparisonBuffer[] = { |
+ // kHeight rows, each with kWidth pixels, premultiplied ARGB for each pixel |
+ 0xff,0xff,0x00,0x00, 0xff,0xff,0x00,0x00, 0xff,0xff,0x00,0x00, // red |
+ 0xff,0x00,0xff,0x00, 0xff,0x00,0xff,0x00, 0xff,0x00,0xff,0x00, // green |
+ 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, // blue |
+ 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, // blue |
+ 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, 0xff,0x00,0x00,0xff, // blue |
+ }; |
- // Transform the bitmap and confirm we got the expected results. |
- SkBitmapTransformer transformer = SkBitmapTransformer(bitmap, supportedPixelFormat); |
- REPORTER_ASSERT(fReporter, transformer.isValid()); |
- REPORTER_ASSERT(fReporter, transformer.bytesNeededPerRow() == kWidth * 4); |
- REPORTER_ASSERT(fReporter, transformer.bytesNeededTotal() == kWidth * kHeight * 4); |
- int bufferSize = transformer.bytesNeededTotal(); |
- SkAutoMalloc pixelBufferManager(bufferSize); |
- char *pixelBuffer = static_cast<char *>(pixelBufferManager.get()); |
- REPORTER_ASSERT(fReporter, |
- transformer.copyBitmapToPixelBuffer(pixelBuffer, bufferSize)); |
- REPORTER_ASSERT(fReporter, bufferSize == sizeof(comparisonBuffer)); |
- REPORTER_ASSERT(fReporter, memcmp(pixelBuffer, comparisonBuffer, bufferSize) == 0); |
- } |
- |
+ SkAutoTDelete<SkImageEncoder> enc(CreateARGBImageEncoder()); |
+ for (size_t configIndex = 0; configIndex < SK_ARRAY_COUNT(configs); ++configIndex) { |
+ // A bitmap that should generate the above bytes: |
+ SkBitmap bitmap; |
+ { |
+ bitmap.setConfig(configs[configIndex], kWidth, kHeight); |
+ REPORTER_ASSERT(reporter, bitmap.allocPixels()); |
+ bitmap.setIsOpaque(true); |
+ bitmap.eraseColor(SK_ColorBLUE); |
+ // Change rows [0,1] from blue to [red,green]. |
+ SkCanvas canvas(bitmap); |
+ SkPaint paint; |
+ paint.setColor(SK_ColorRED); |
+ canvas.drawIRect(SkIRect::MakeLTRB(0, 0, kWidth, 1), paint); |
+ paint.setColor(SK_ColorGREEN); |
+ canvas.drawIRect(SkIRect::MakeLTRB(0, 1, kWidth, 2), paint); |
} |
- Reporter* fReporter; |
- }; |
+ // Transform the bitmap. |
+ int bufferSize = bitmap.width() * bitmap.height() * 4; |
+ SkAutoMalloc pixelBufferManager(bufferSize); |
+ char *pixelBuffer = static_cast<char *>(pixelBufferManager.get()); |
+ SkMemoryWStream out(pixelBuffer, bufferSize); |
+ REPORTER_ASSERT(reporter, enc->encodeStream(&out, bitmap, SkImageEncoder::kDefaultQuality)); |
- static TestRegistry gReg(BitmapTransformerTestClass::Factory); |
+ // Confirm we got the expected results. |
+ REPORTER_ASSERT(reporter, bufferSize == sizeof(comparisonBuffer)); |
+ REPORTER_ASSERT(reporter, memcmp(pixelBuffer, comparisonBuffer, bufferSize) == 0); |
+ } |
} |
+ |
+static TestRegistry gReg(BitmapTransformerTestClass::Factory); |
+ |
+} |