Home | History | Annotate | Download | only in tests
      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