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