blob: 0fc2f9b03a07035b237bbb121a55883cb418dd88 [file] [log] [blame]
commit-bot@chromium.org97f81672013-09-26 15:16:12 +00001// SkPaints only have an SkPaintOptionsAndroid if SK_BUILD_FOR_ANDROID is true.
2#ifdef SK_BUILD_FOR_ANDROID
3
commit-bot@chromium.org8b0e8ac2014-01-30 18:58:24 +00004#include "SkReadBuffer.h"
5#include "SkWriteBuffer.h"
commit-bot@chromium.org97f81672013-09-26 15:16:12 +00006#include "SkPaint.h"
tfarina@chromium.org8f6884a2014-01-24 20:56:26 +00007#include "SkPaintOptionsAndroid.h"
commit-bot@chromium.org97f81672013-09-26 15:16:12 +00008#include "Test.h"
commit-bot@chromium.org97f81672013-09-26 15:16:12 +00009
10static size_t Reconstruct(const SkPaint& src, SkPaint* dst) {
commit-bot@chromium.org8b0e8ac2014-01-30 18:58:24 +000011 SkWriteBuffer writer;
commit-bot@chromium.org97f81672013-09-26 15:16:12 +000012 src.flatten(writer);
13
14 const size_t size = writer.bytesWritten();
15 SkAutoMalloc bytes(size);
16 writer.writeToMemory(bytes.get());
17
commit-bot@chromium.org8b0e8ac2014-01-30 18:58:24 +000018 SkReadBuffer reader(bytes.get(), size);
commit-bot@chromium.org97f81672013-09-26 15:16:12 +000019 dst->unflatten(reader);
20
21 return size;
22}
23
tfarina@chromium.org78e7b4e2014-01-02 21:45:03 +000024DEF_TEST(AndroidOptionsSerialization, reporter) {
commit-bot@chromium.org97f81672013-09-26 15:16:12 +000025 // 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}
commit-bot@chromium.org97f81672013-09-26 15:16:12 +000040
tfarina@chromium.org78e7b4e2014-01-02 21:45:03 +000041DEF_TEST(AndroidOptionsSerializationReverse, reporter) {
commit-bot@chromium.org97f81672013-09-26 15:16:12 +000042 // 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}
commit-bot@chromium.org97f81672013-09-26 15:16:12 +000059
tfarina@chromium.org78e7b4e2014-01-02 21:45:03 +000060DEF_TEST(AndroidOptionsSize, reporter) {
commit-bot@chromium.org97f81672013-09-26 15:16:12 +000061 // 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}
commit-bot@chromium.org97f81672013-09-26 15:16:12 +000076
77#endif // SK_BUILD_FOR_ANDROID