blob: b552ce0bbf0016f232af38684bd5d3793430f582 [file] [log] [blame]
vandebo@chromium.org48543272011-02-08 19:28:07 +00001#include "Test.h"
2#include "SkColor.h"
3#include "SkXfermode.h"
4
5SkPMColor bogusXfermodeProc(SkPMColor src, SkPMColor dst) {
6 return 42;
7}
8
reed@google.comc0d4aa22011-04-13 21:12:04 +00009#define ILLEGAL_MODE ((SkXfermode::Mode)-1)
10
vandebo@chromium.org48543272011-02-08 19:28:07 +000011static void test_asMode(skiatest::Reporter* reporter) {
12 for (int mode = 0; mode <= SkXfermode::kLastMode; mode++) {
13 SkXfermode* xfer = SkXfermode::Create((SkXfermode::Mode) mode);
reed@google.comc0d4aa22011-04-13 21:12:04 +000014
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
vandebo@chromium.org48543272011-02-08 19:28:07 +000023 if (xfer) {
reed@google.comc0d4aa22011-04-13 21:12:04 +000024 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);
vandebo@chromium.org48543272011-02-08 19:28:07 +000030 }
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);
reed@google.comc0d4aa22011-04-13 21:12:04 +000037 REPORTER_ASSERT(reporter, !SkXfermode::IsMode(bogusXfer, &reportedMode));
38 REPORTER_ASSERT(reporter, reportedMode == -1);
vandebo@chromium.org48543272011-02-08 19:28:07 +000039 bogusXfer->unref();
40}
41
42#include "TestClassDef.h"
43DEFINE_TESTCLASS("Xfermode", XfermodeTestClass, test_asMode)