1 #include "Test.h"
2 #include "SkColor.h"
3 #include "SkXfermode.h"
4
bogusXfermodeProc(SkPMColor src,SkPMColor dst)5 SkPMColor bogusXfermodeProc(SkPMColor src, SkPMColor dst) {
6 return 42;
7 }
8
9 #define ILLEGAL_MODE ((SkXfermode::Mode)-1)
10
test_asMode(skiatest::Reporter * reporter)11 static void test_asMode(skiatest::Reporter* reporter) {
12 for (int mode = 0; mode <= SkXfermode::kLastMode; mode++) {
13 SkXfermode* xfer = SkXfermode::Create((SkXfermode::Mode) mode);
14
15 SkXfermode::Mode reportedMode = ILLEGAL_MODE;
16 REPORTER_ASSERT(reporter, reportedMode != mode);
17
18 // test IsMode
19 REPORTER_ASSERT(reporter, SkXfermode::IsMode(xfer, &reportedMode));
20 REPORTER_ASSERT(reporter, reportedMode == mode);
21
22 // repeat that test, but with asMode instead
23 if (xfer) {
24 reportedMode = (SkXfermode::Mode) -1;
25 REPORTER_ASSERT(reporter, xfer->asMode(&reportedMode));
26 REPORTER_ASSERT(reporter, reportedMode == mode);
27 xfer->unref();
28 } else {
29 REPORTER_ASSERT(reporter, SkXfermode::kSrcOver_Mode == mode);
30 }
31 }
32
33 SkXfermode* bogusXfer = new SkProcXfermode(bogusXfermodeProc);
34 SkXfermode::Mode reportedMode = (SkXfermode::Mode) -1;
35 REPORTER_ASSERT(reporter, !bogusXfer->asMode(&reportedMode));
36 REPORTER_ASSERT(reporter, reportedMode == -1);
37 REPORTER_ASSERT(reporter, !SkXfermode::IsMode(bogusXfer, &reportedMode));
38 REPORTER_ASSERT(reporter, reportedMode == -1);
39 bogusXfer->unref();
40 }
41
42 #include "TestClassDef.h"
43 DEFINE_TESTCLASS("Xfermode", XfermodeTestClass, test_asMode)
44