Home | History | Annotate | Download | only in tests
      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 
     12 static SkPMColor bogusXfermodeProc(SkPMColor src, SkPMColor dst) {
     13     return 42;
     14 }
     15 
     16 #define ILLEGAL_MODE    ((SkXfermode::Mode)-1)
     17 
     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 = ILLEGAL_MODE;
     42     REPORTER_ASSERT(reporter, !bogusXfer->asMode(&reportedMode));
     43     REPORTER_ASSERT(reporter, reportedMode == ILLEGAL_MODE);
     44     REPORTER_ASSERT(reporter, !SkXfermode::IsMode(bogusXfer, &reportedMode));
     45     REPORTER_ASSERT(reporter, reportedMode == ILLEGAL_MODE);
     46     bogusXfer->unref();
     47 }
     48 
     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 
     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