1 // SkPaints only have an SkPaintOptionsAndroid if SK_BUILD_FOR_ANDROID is true. 2 #ifdef SK_BUILD_FOR_ANDROID 3 4 #include "SkReadBuffer.h" 5 #include "SkWriteBuffer.h" 6 #include "SkPaint.h" 7 #include "SkPaintOptionsAndroid.h" 8 #include "Test.h" 9 10 static size_t Reconstruct(const SkPaint& src, SkPaint* dst) { 11 SkWriteBuffer writer; 12 src.flatten(writer); 13 14 const size_t size = writer.bytesWritten(); 15 SkAutoMalloc bytes(size); 16 writer.writeToMemory(bytes.get()); 17 18 SkReadBuffer reader(bytes.get(), size); 19 dst->unflatten(reader); 20 21 return size; 22 } 23 24 DEF_TEST(AndroidOptionsSerialization, reporter) { 25 // We want to make sure that Android's paint options survive a flatten/unflatten round trip. 26 // These are all non-default options. 27 SkPaintOptionsAndroid options; 28 options.setLanguage("ja-JP"); 29 options.setFontVariant(SkPaintOptionsAndroid::kElegant_Variant); 30 options.setUseFontFallbacks(true); 31 32 SkPaint paint; 33 paint.setPaintOptionsAndroid(options); 34 35 SkPaint reconstructed; 36 Reconstruct(paint, &reconstructed); 37 38 REPORTER_ASSERT(reporter, options == reconstructed.getPaintOptionsAndroid()); 39 } 40 41 DEF_TEST(AndroidOptionsSerializationReverse, reporter) { 42 // Opposite test of above: make sure the serialized default values of a paint overwrite 43 // non-default values on the paint we're unflattening into. 44 const SkPaint defaultOptions; 45 46 SkPaintOptionsAndroid options; 47 options.setLanguage("ja-JP"); 48 options.setFontVariant(SkPaintOptionsAndroid::kElegant_Variant); 49 options.setUseFontFallbacks(true); 50 SkPaint nonDefaultOptions; 51 nonDefaultOptions.setPaintOptionsAndroid(options); 52 53 Reconstruct(defaultOptions, &nonDefaultOptions); 54 55 REPORTER_ASSERT(reporter, 56 defaultOptions.getPaintOptionsAndroid() == 57 nonDefaultOptions.getPaintOptionsAndroid()); 58 } 59 60 DEF_TEST(AndroidOptionsSize, reporter) { 61 // A paint with default android options should serialize to something smaller than 62 // a paint with non-default android options. 63 64 SkPaint defaultOptions; 65 66 SkPaintOptionsAndroid options; 67 options.setUseFontFallbacks(true); 68 SkPaint nonDefaultOptions; 69 nonDefaultOptions.setPaintOptionsAndroid(options); 70 71 SkPaint dummy; 72 73 REPORTER_ASSERT(reporter, 74 Reconstruct(defaultOptions, &dummy) < Reconstruct(nonDefaultOptions, &dummy)); 75 } 76 77 #endif // SK_BUILD_FOR_ANDROID 78