• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2011 Google Inc.
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 #include "Test.h"
9 #include "SkColor.h"
10 #include "SkXfermode.h"
11 
bogusXfermodeProc(SkPMColor src,SkPMColor dst)12 SkPMColor bogusXfermodeProc(SkPMColor src, SkPMColor dst) {
13     return 42;
14 }
15 
16 #define ILLEGAL_MODE    ((SkXfermode::Mode)-1)
17 
test_asMode(skiatest::Reporter * reporter)18 static void test_asMode(skiatest::Reporter* reporter) {
19     for (int mode = 0; mode <= SkXfermode::kLastMode; mode++) {
20         SkXfermode* xfer = SkXfermode::Create((SkXfermode::Mode) mode);
21 
22         SkXfermode::Mode reportedMode = ILLEGAL_MODE;
23         REPORTER_ASSERT(reporter, reportedMode != mode);
24 
25         // test IsMode
26         REPORTER_ASSERT(reporter, SkXfermode::IsMode(xfer, &reportedMode));
27         REPORTER_ASSERT(reporter, reportedMode == mode);
28 
29         // repeat that test, but with asMode instead
30         if (xfer) {
31             reportedMode = (SkXfermode::Mode) -1;
32             REPORTER_ASSERT(reporter, xfer->asMode(&reportedMode));
33             REPORTER_ASSERT(reporter, reportedMode == mode);
34             xfer->unref();
35         } else {
36             REPORTER_ASSERT(reporter, SkXfermode::kSrcOver_Mode == mode);
37         }
38     }
39 
40     SkXfermode* bogusXfer = new SkProcXfermode(bogusXfermodeProc);
41     SkXfermode::Mode reportedMode = (SkXfermode::Mode) -1;
42     REPORTER_ASSERT(reporter, !bogusXfer->asMode(&reportedMode));
43     REPORTER_ASSERT(reporter, reportedMode == -1);
44     REPORTER_ASSERT(reporter, !SkXfermode::IsMode(bogusXfer, &reportedMode));
45     REPORTER_ASSERT(reporter, reportedMode == -1);
46     bogusXfer->unref();
47 }
48 
test_IsMode(skiatest::Reporter * reporter)49 static void test_IsMode(skiatest::Reporter* reporter) {
50     REPORTER_ASSERT(reporter, SkXfermode::IsMode(NULL,
51                                                  SkXfermode::kSrcOver_Mode));
52 
53     for (int i = 0; i <= SkXfermode::kLastMode; ++i) {
54         SkXfermode::Mode mode = (SkXfermode::Mode)i;
55 
56         SkXfermode* xfer = SkXfermode::Create(mode);
57         REPORTER_ASSERT(reporter, SkXfermode::IsMode(xfer, mode));
58         SkSafeUnref(xfer);
59 
60         if (SkXfermode::kSrcOver_Mode != mode) {
61             REPORTER_ASSERT(reporter, !SkXfermode::IsMode(NULL, mode));
62         }
63     }
64 }
65 
test_xfermodes(skiatest::Reporter * reporter)66 static void test_xfermodes(skiatest::Reporter* reporter) {
67     test_asMode(reporter);
68     test_IsMode(reporter);
69 }
70 
71 #include "TestClassDef.h"
72 DEFINE_TESTCLASS("Xfermode", XfermodeTestClass, test_xfermodes)
73