diff options
Diffstat (limited to 'tests/FlatDataTest.cpp')
-rw-r--r-- | tests/FlatDataTest.cpp | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/tests/FlatDataTest.cpp b/tests/FlatDataTest.cpp new file mode 100644 index 0000000000..755d8cd944 --- /dev/null +++ b/tests/FlatDataTest.cpp @@ -0,0 +1,85 @@ + +/* + * Copyright 2012 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 "SkColor.h" +#include "SkColorFilter.h" +#include "SkGradientShader.h" +#include "SkPaint.h" +#include "SkPictureFlat.h" +#include "SkShader.h" +#include "SkXfermode.h" +#include "Test.h" + +static void flattenFlattenableProc(SkOrderedWriteBuffer& buffer, + const void* obj) { + buffer.writeFlattenable((SkFlattenable*)obj); +} + +/** + * Verify that two SkFlatData objects that created from the same object are + * identical when using an SkNamedFactorySet. + * @param reporter Object to report failures. + * @param obj Flattenable object to be flattened. + * @param flattenProc Function that flattens objects with the same type as obj. + */ +static void testCreate(skiatest::Reporter* reporter, const void* obj, + void (*flattenProc)(SkOrderedWriteBuffer&, const void*)) { + SkChunkFlatController controller(1024); + SkNamedFactorySet factorySet; + // No need to delete data because that will be taken care of by the + // controller. + SkFlatData* data1 = SkFlatData::Create(&controller, obj, 0, flattenProc, + NULL, NULL, 0, &factorySet); + data1->setSentinelInCache(); + SkFlatData* data2 = SkFlatData::Create(&controller, obj, 0, flattenProc, + NULL, NULL, 0, &factorySet); + data2->setSentinelAsCandidate(); + REPORTER_ASSERT(reporter, SkFlatData::Compare(data1, data2) == 0); +} + +static void Tests(skiatest::Reporter* reporter) { + // Test flattening SkShader + SkPoint points[2]; + points[0].set(0, 0); + points[1].set(SkIntToScalar(20), SkIntToScalar(20)); + SkColor colors[2]; + colors[0] = SK_ColorRED; + colors[1] = SK_ColorBLUE; + SkShader* shader = SkGradientShader::CreateLinear(points, colors, NULL, + 2, SkShader::kRepeat_TileMode); + SkAutoUnref aur(shader); + testCreate(reporter, shader, flattenFlattenableProc); + + // Test SkBitmap + { + SkBitmap bm; + bm.setConfig(SkBitmap::kARGB_8888_Config, 50, 50); + bm.allocPixels(); + SkCanvas canvas(bm); + SkPaint paint; + paint.setShader(shader); + canvas.drawPaint(paint); + testCreate(reporter, &bm, &SkFlattenObjectProc<SkBitmap>); + } + + // Test SkColorFilter + SkColorFilter* cf = SkColorFilter::CreateLightingFilter(SK_ColorBLUE, + SK_ColorRED); + SkAutoUnref aurcf(cf); + testCreate(reporter, cf, &flattenFlattenableProc); + + // Test SkXfermode + SkXfermode* xfer = SkXfermode::Create(SkXfermode::kDstOver_Mode); + SkAutoUnref aurxf(xfer); + testCreate(reporter, xfer, &flattenFlattenableProc); +} + +#include "TestClassDef.h" +DEFINE_TESTCLASS("FlatData", FlatDataClass, Tests) |