|  | // Copyright (c) 2017 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "platform/mac/GraphicsContextCanvas.h" | 
|  | #include "skia/ext/skia_utils_mac.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  | namespace blink { | 
|  |  | 
|  | enum TestType { | 
|  | kTestIdentity = 0, | 
|  | kTestTranslate = 1, | 
|  | kTestClip = 2, | 
|  | kTestXClip = kTestTranslate | kTestClip, | 
|  | }; | 
|  |  | 
|  | void RunTest(TestType test) { | 
|  | const unsigned kWidth = 2; | 
|  | const unsigned kHeight = 2; | 
|  | const unsigned kStorageSize = kWidth * kHeight; | 
|  | const unsigned kOriginal[] = {0xFF333333, 0xFF666666, 0xFF999999, 0xFFCCCCCC}; | 
|  | EXPECT_EQ(kStorageSize, sizeof(kOriginal) / sizeof(kOriginal[0])); | 
|  | unsigned bits[kStorageSize]; | 
|  | memcpy(bits, kOriginal, sizeof(kOriginal)); | 
|  | SkImageInfo info = SkImageInfo::MakeN32Premul(kWidth, kHeight); | 
|  | SkBitmap bitmap; | 
|  | bitmap.installPixels(info, bits, info.minRowBytes()); | 
|  |  | 
|  | SkiaPaintCanvas canvas(bitmap); | 
|  | if (test & kTestTranslate) | 
|  | canvas.translate(kWidth / 2, 0); | 
|  | if (test & kTestClip) { | 
|  | SkRect clip_rect = {0, kHeight / 2, kWidth, kHeight}; | 
|  | canvas.clipRect(clip_rect); | 
|  | } | 
|  | { | 
|  | SkIRect clip = SkIRect::MakeWH(kWidth, kHeight); | 
|  | GraphicsContextCanvas bit_locker(&canvas, clip); | 
|  | CGContextRef cg_context = bit_locker.CgContext(); | 
|  | CGColorRef test_color = CGColorGetConstantColor(kCGColorWhite); | 
|  | CGContextSetFillColorWithColor(cg_context, test_color); | 
|  | CGRect cg_rect = {{0, 0}, {kWidth, kHeight}}; | 
|  | CGContextFillRect(cg_context, cg_rect); | 
|  | } | 
|  | const unsigned kResults[][kStorageSize] = { | 
|  | {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF},  // identity | 
|  | {0xFF333333, 0xFFFFFFFF, 0xFF999999, 0xFFFFFFFF},  // translate | 
|  | {0xFF333333, 0xFF666666, 0xFFFFFFFF, 0xFFFFFFFF},  // clip | 
|  | {0xFF333333, 0xFF666666, 0xFF999999, 0xFFFFFFFF}   // translate | clip | 
|  | }; | 
|  | for (unsigned index = 0; index < kStorageSize; index++) | 
|  | EXPECT_EQ(kResults[test][index], bits[index]) << "Index: " << index; | 
|  | } | 
|  |  | 
|  | TEST(GraphicsContextCanvasTest, Identity) { | 
|  | RunTest(kTestIdentity); | 
|  | } | 
|  |  | 
|  | TEST(GraphicsContextCanvasTest, Translate) { | 
|  | RunTest(kTestTranslate); | 
|  | } | 
|  |  | 
|  | TEST(GraphicsContextCanvasTest, Clip) { | 
|  | RunTest(kTestClip); | 
|  | } | 
|  |  | 
|  | TEST(GraphicsContextCanvasTest, XClip) { | 
|  | RunTest(kTestXClip); | 
|  | } | 
|  |  | 
|  | }  // namespace |