1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 7e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.org 848543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "SkColor.h" 948543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#include "SkXfermode.h" 108f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "Test.h" 1148543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 12c0d4aa2088a0788f9df221497945d2ba1b342f44reed@google.com#define ILLEGAL_MODE ((SkXfermode::Mode)-1) 13c0d4aa2088a0788f9df221497945d2ba1b342f44reed@google.com 1448543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.orgstatic void test_asMode(skiatest::Reporter* reporter) { 1548543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org for (int mode = 0; mode <= SkXfermode::kLastMode; mode++) { 1648543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org SkXfermode* xfer = SkXfermode::Create((SkXfermode::Mode) mode); 17c0d4aa2088a0788f9df221497945d2ba1b342f44reed@google.com 18c0d4aa2088a0788f9df221497945d2ba1b342f44reed@google.com SkXfermode::Mode reportedMode = ILLEGAL_MODE; 19c0d4aa2088a0788f9df221497945d2ba1b342f44reed@google.com REPORTER_ASSERT(reporter, reportedMode != mode); 20c0d4aa2088a0788f9df221497945d2ba1b342f44reed@google.com 21c0d4aa2088a0788f9df221497945d2ba1b342f44reed@google.com // test IsMode 224469938e92d779dff05e745559e67907bbf21e78reed@google.com REPORTER_ASSERT(reporter, SkXfermode::AsMode(xfer, &reportedMode)); 23c0d4aa2088a0788f9df221497945d2ba1b342f44reed@google.com REPORTER_ASSERT(reporter, reportedMode == mode); 24c0d4aa2088a0788f9df221497945d2ba1b342f44reed@google.com 25c0d4aa2088a0788f9df221497945d2ba1b342f44reed@google.com // repeat that test, but with asMode instead 2648543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org if (xfer) { 27c0d4aa2088a0788f9df221497945d2ba1b342f44reed@google.com reportedMode = (SkXfermode::Mode) -1; 28c0d4aa2088a0788f9df221497945d2ba1b342f44reed@google.com REPORTER_ASSERT(reporter, xfer->asMode(&reportedMode)); 29c0d4aa2088a0788f9df221497945d2ba1b342f44reed@google.com REPORTER_ASSERT(reporter, reportedMode == mode); 30c0d4aa2088a0788f9df221497945d2ba1b342f44reed@google.com xfer->unref(); 31c0d4aa2088a0788f9df221497945d2ba1b342f44reed@google.com } else { 32d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com REPORTER_ASSERT(reporter, SkXfermode::kSrcOver_Mode == mode); 3348543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org } 3448543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org } 3548543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org} 3648543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 373565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.orgstatic void test_IsMode(skiatest::Reporter* reporter) { 383565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org REPORTER_ASSERT(reporter, SkXfermode::IsMode(NULL, 393565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org SkXfermode::kSrcOver_Mode)); 403565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org 413565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org for (int i = 0; i <= SkXfermode::kLastMode; ++i) { 423565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org SkXfermode::Mode mode = (SkXfermode::Mode)i; 43d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 443565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org SkXfermode* xfer = SkXfermode::Create(mode); 453565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org REPORTER_ASSERT(reporter, SkXfermode::IsMode(xfer, mode)); 463565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org SkSafeUnref(xfer); 473565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org 483565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org if (SkXfermode::kSrcOver_Mode != mode) { 493565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org REPORTER_ASSERT(reporter, !SkXfermode::IsMode(NULL, mode)); 503565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org } 513565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org } 523565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org} 533565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org 54e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.orgDEF_TEST(Xfermode, reporter) { 553565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org test_asMode(reporter); 563565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org test_IsMode(reporter); 573565f0fd25afad52b4a9dbb808d877e957475c6cmike@reedtribe.org} 58