1 /* 2 * Copyright 2011 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "SkColor.h" 9 #include "SkXfermode.h" 10 #include "Test.h" 11 12 #define ILLEGAL_MODE ((SkXfermode::Mode)-1) 13 14 static void test_asMode(skiatest::Reporter* reporter) { 15 for (int mode = 0; mode <= SkXfermode::kLastMode; mode++) { 16 SkXfermode* xfer = SkXfermode::Create((SkXfermode::Mode) mode); 17 18 SkXfermode::Mode reportedMode = ILLEGAL_MODE; 19 REPORTER_ASSERT(reporter, reportedMode != mode); 20 21 // test IsMode 22 REPORTER_ASSERT(reporter, SkXfermode::AsMode(xfer, &reportedMode)); 23 REPORTER_ASSERT(reporter, reportedMode == mode); 24 25 // repeat that test, but with asMode instead 26 if (xfer) { 27 reportedMode = (SkXfermode::Mode) -1; 28 REPORTER_ASSERT(reporter, xfer->asMode(&reportedMode)); 29 REPORTER_ASSERT(reporter, reportedMode == mode); 30 xfer->unref(); 31 } else { 32 REPORTER_ASSERT(reporter, SkXfermode::kSrcOver_Mode == mode); 33 } 34 } 35 } 36 37 static void test_IsMode(skiatest::Reporter* reporter) { 38 REPORTER_ASSERT(reporter, SkXfermode::IsMode(nullptr, 39 SkXfermode::kSrcOver_Mode)); 40 41 for (int i = 0; i <= SkXfermode::kLastMode; ++i) { 42 SkXfermode::Mode mode = (SkXfermode::Mode)i; 43 44 SkXfermode* xfer = SkXfermode::Create(mode); 45 REPORTER_ASSERT(reporter, SkXfermode::IsMode(xfer, mode)); 46 SkSafeUnref(xfer); 47 48 if (SkXfermode::kSrcOver_Mode != mode) { 49 REPORTER_ASSERT(reporter, !SkXfermode::IsMode(nullptr, mode)); 50 } 51 } 52 } 53 54 DEF_TEST(Xfermode, reporter) { 55 test_asMode(reporter); 56 test_IsMode(reporter); 57 } 58