180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2011 Google Inc. 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 7910f694aefb0b671dd8522a9afe9b6be645701c1Derek Sollenberger 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "Test.h" 9910f694aefb0b671dd8522a9afe9b6be645701c1Derek Sollenberger#include "TestClassDef.h" 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkColor.h" 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkXfermode.h" 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic SkPMColor bogusXfermodeProc(SkPMColor src, SkPMColor dst) { 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return 42; 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define ILLEGAL_MODE ((SkXfermode::Mode)-1) 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void test_asMode(skiatest::Reporter* reporter) { 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (int mode = 0; mode <= SkXfermode::kLastMode; mode++) { 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkXfermode* xfer = SkXfermode::Create((SkXfermode::Mode) mode); 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkXfermode::Mode reportedMode = ILLEGAL_MODE; 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, reportedMode != mode); 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // test IsMode 270a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger REPORTER_ASSERT(reporter, SkXfermode::AsMode(xfer, &reportedMode)); 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, reportedMode == mode); 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // repeat that test, but with asMode instead 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (xfer) { 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru reportedMode = (SkXfermode::Mode) -1; 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, xfer->asMode(&reportedMode)); 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, reportedMode == mode); 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru xfer->unref(); 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } else { 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, SkXfermode::kSrcOver_Mode == mode); 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkXfermode* bogusXfer = new SkProcXfermode(bogusXfermodeProc); 427839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkXfermode::Mode reportedMode = ILLEGAL_MODE; 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, !bogusXfer->asMode(&reportedMode)); 447839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger REPORTER_ASSERT(reporter, reportedMode == ILLEGAL_MODE); 450a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger REPORTER_ASSERT(reporter, !SkXfermode::AsMode(bogusXfer, &reportedMode)); 467839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger REPORTER_ASSERT(reporter, reportedMode == ILLEGAL_MODE); 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bogusXfer->unref(); 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void test_IsMode(skiatest::Reporter* reporter) { 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, SkXfermode::IsMode(NULL, 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkXfermode::kSrcOver_Mode)); 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (int i = 0; i <= SkXfermode::kLastMode; ++i) { 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkXfermode::Mode mode = (SkXfermode::Mode)i; 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkXfermode* xfer = SkXfermode::Create(mode); 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, SkXfermode::IsMode(xfer, mode)); 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkSafeUnref(xfer); 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (SkXfermode::kSrcOver_Mode != mode) { 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, !SkXfermode::IsMode(NULL, mode)); 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 67910f694aefb0b671dd8522a9afe9b6be645701c1Derek SollenbergerDEF_TEST(Xfermode, reporter) { 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru test_asMode(reporter); 6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru test_IsMode(reporter); 7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 71