• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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