OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "build/build_config.h" | 5 #include "build/build_config.h" |
6 | 6 |
7 #include "webkit/tools/test_shell/image_decoder_unittest.h" | 7 #include "webkit/tools/test_shell/image_decoder_unittest.h" |
8 | 8 |
9 #if !defined(OS_WIN) | 9 #if !defined(OS_WIN) |
10 #include <unistd.h> | 10 #include <unistd.h> |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 void* data_; | 77 void* data_; |
78 | 78 |
79 DISALLOW_COPY_AND_ASSIGN(Bitmap); | 79 DISALLOW_COPY_AND_ASSIGN(Bitmap); |
80 }; | 80 }; |
81 | 81 |
82 // Lightweight raw-bitmap management. The image, once initialized, is immuable. | 82 // Lightweight raw-bitmap management. The image, once initialized, is immuable. |
83 // It is mainly used for comparison. | 83 // It is mainly used for comparison. |
84 class Image { | 84 class Image { |
85 public: | 85 public: |
86 // Creates the image from the given filename on disk. | 86 // Creates the image from the given filename on disk. |
87 Image(const std::wstring& filename) : ignore_alpha_(true) { | 87 explicit Image(const FilePath& filename) : ignore_alpha_(true) { |
88 Vector<char> compressed; | 88 Vector<char> compressed; |
89 ReadFileToVector(filename, &compressed); | 89 ReadFileToVector(filename, &compressed); |
90 EXPECT_TRUE(compressed.size()); | 90 EXPECT_TRUE(compressed.size()); |
91 WebCore::PNGImageDecoder decoder; | 91 WebCore::PNGImageDecoder decoder; |
92 decoder.setData(WebCore::SharedBuffer::adoptVector(compressed).get(), true); | 92 decoder.setData(WebCore::SharedBuffer::adoptVector(compressed).get(), true); |
93 scoped_ptr<NativeImageSkia> image_data( | 93 scoped_ptr<NativeImageSkia> image_data( |
94 decoder.frameBufferAtIndex(0)->asNewNativeImage()); | 94 decoder.frameBufferAtIndex(0)->asNewNativeImage()); |
95 SetSkBitmap(*image_data); | 95 SetSkBitmap(*image_data); |
96 } | 96 } |
97 | 97 |
(...skipping 18 matching lines...) Expand all Loading... |
116 // Loads the image from a canvas. | 116 // Loads the image from a canvas. |
117 Image(const SkBitmap& bitmap) : ignore_alpha_(true) { | 117 Image(const SkBitmap& bitmap) : ignore_alpha_(true) { |
118 SetSkBitmap(bitmap); | 118 SetSkBitmap(bitmap); |
119 } | 119 } |
120 | 120 |
121 int width() const { return width_; } | 121 int width() const { return width_; } |
122 int height() const { return height_; } | 122 int height() const { return height_; } |
123 int row_length() const { return row_length_; } | 123 int row_length() const { return row_length_; } |
124 | 124 |
125 // Save the image to a png file. Used to create the initial test files. | 125 // Save the image to a png file. Used to create the initial test files. |
126 void SaveToFile(const std::wstring& filename) { | 126 void SaveToFile(const FilePath& filename) { |
127 std::vector<unsigned char> compressed; | 127 std::vector<unsigned char> compressed; |
128 ASSERT_TRUE(gfx::PNGCodec::Encode(&*data_.begin(), | 128 ASSERT_TRUE(gfx::PNGCodec::Encode(&*data_.begin(), |
129 gfx::PNGCodec::FORMAT_BGRA, | 129 gfx::PNGCodec::FORMAT_BGRA, |
130 width_, | 130 width_, |
131 height_, | 131 height_, |
132 row_length_, | 132 row_length_, |
133 true, | 133 true, |
134 &compressed)); | 134 &compressed)); |
135 ASSERT_TRUE(compressed.size()); | 135 ASSERT_TRUE(compressed.size()); |
136 FILE* f = file_util::OpenFile(filename, "wb"); | 136 FILE* f = file_util::OpenFile(filename, "wb"); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 | 222 |
223 ImageTest(ProcessAction default_action) | 223 ImageTest(ProcessAction default_action) |
224 : action_(default_action) { | 224 : action_(default_action) { |
225 } | 225 } |
226 | 226 |
227 protected: | 227 protected: |
228 virtual void SetUp() { | 228 virtual void SetUp() { |
229 const testing::TestInfo& test_info = | 229 const testing::TestInfo& test_info = |
230 *testing::UnitTest::GetInstance()->current_test_info(); | 230 *testing::UnitTest::GetInstance()->current_test_info(); |
231 PathService::Get(base::DIR_SOURCE_ROOT, &test_dir_); | 231 PathService::Get(base::DIR_SOURCE_ROOT, &test_dir_); |
232 file_util::AppendToPath(&test_dir_, L"skia"); | 232 test_dir_ = test_dir_.AppendASCII("skia"). |
233 file_util::AppendToPath(&test_dir_, L"ext"); | 233 AppendASCII("ext"). |
234 file_util::AppendToPath(&test_dir_, L"data"); | 234 AppendASCII("data"). |
235 file_util::AppendToPath(&test_dir_, | 235 AppendASCII(test_info.test_case_name()). |
236 ASCIIToWide(test_info.test_case_name())); | 236 AppendASCII(test_info.name()); |
237 file_util::AppendToPath(&test_dir_, ASCIIToWide(test_info.name())); | |
238 | 237 |
239 // Hack for a quick lowercase. We assume all the tests names are ASCII. | 238 // Hack for a quick lowercase. We assume all the tests names are ASCII. |
240 std::string tmp(WideToASCII(test_dir_)); | 239 std::string tmp(WideToASCII(test_dir_.ToWStringHack())); |
241 for (size_t i = 0; i < tmp.size(); ++i) | 240 for (size_t i = 0; i < tmp.size(); ++i) |
242 tmp[i] = ToLowerASCII(tmp[i]); | 241 tmp[i] = ToLowerASCII(tmp[i]); |
243 test_dir_ = ASCIIToWide(tmp); | 242 test_dir_ = FilePath::FromWStringHack(ASCIIToWide(tmp)); |
244 | 243 |
245 if (action_ == GENERATE) { | 244 if (action_ == GENERATE) { |
246 // Make sure the directory exist. | 245 // Make sure the directory exist. |
247 file_util::CreateDirectory(test_dir_); | 246 file_util::CreateDirectory(test_dir_); |
248 } | 247 } |
249 } | 248 } |
250 | 249 |
251 // Returns the fully qualified path of a data file. | 250 // Returns the fully qualified path of a data file. |
252 std::wstring test_file(const std::wstring& filename) const { | 251 FilePath test_file(const FilePath::StringType& filename) const { |
253 // Hack for a quick lowercase. We assume all the test data file names are | 252 // Hack for a quick lowercase. We assume all the test data file names are |
254 // ASCII. | 253 // ASCII. |
255 std::string tmp(WideToASCII(filename)); | 254 #if defined(OS_WIN) |
| 255 std::string tmp = WideToASCII(filename); |
| 256 #else |
| 257 std::string tmp(filename); |
| 258 #endif |
256 for (size_t i = 0; i < tmp.size(); ++i) | 259 for (size_t i = 0; i < tmp.size(); ++i) |
257 tmp[i] = ToLowerASCII(tmp[i]); | 260 tmp[i] = ToLowerASCII(tmp[i]); |
258 | 261 |
259 std::wstring path(test_dir_); | 262 return test_dir_.AppendASCII(tmp); |
260 file_util::AppendToPath(&path, ASCIIToWide(tmp)); | |
261 return path; | |
262 } | 263 } |
263 | 264 |
264 // Compares or saves the bitmap currently loaded in the context, depending on | 265 // Compares or saves the bitmap currently loaded in the context, depending on |
265 // kGenerating value. Returns 0 on success or any positive value between ]0, | 266 // kGenerating value. Returns 0 on success or any positive value between ]0, |
266 // 100] on failure. The return value is the percentage of difference between | 267 // 100] on failure. The return value is the percentage of difference between |
267 // the image in the file and the image in the canvas. | 268 // the image in the file and the image in the canvas. |
268 double ProcessCanvas(const skia::PlatformCanvas& canvas, | 269 double ProcessCanvas(const skia::PlatformCanvas& canvas, |
269 std::wstring filename) const { | 270 FilePath::StringType filename) const { |
270 filename += L".png"; | 271 filename = filename + FILE_PATH_LITERAL(".png"); |
271 switch (action_) { | 272 switch (action_) { |
272 case GENERATE: | 273 case GENERATE: |
273 SaveImage(canvas, filename); | 274 SaveImage(canvas, filename); |
274 return 0.; | 275 return 0.; |
275 case COMPARE: | 276 case COMPARE: |
276 return CompareImage(canvas, filename); | 277 return CompareImage(canvas, filename); |
277 case NOOP: | 278 case NOOP: |
278 return 0; | 279 return 0; |
279 default: | 280 default: |
280 // Invalid state, returns that the image is 100 different. | 281 // Invalid state, returns that the image is 100 different. |
281 return 100.; | 282 return 100.; |
282 } | 283 } |
283 } | 284 } |
284 | 285 |
285 // Compares the bitmap currently loaded in the context with the file. Returns | 286 // Compares the bitmap currently loaded in the context with the file. Returns |
286 // the percentage of pixel difference between both images, between 0 and 100. | 287 // the percentage of pixel difference between both images, between 0 and 100. |
287 double CompareImage(const skia::PlatformCanvas& canvas, | 288 double CompareImage(const skia::PlatformCanvas& canvas, |
288 const std::wstring& filename) const { | 289 const FilePath::StringType& filename) const { |
289 Image image1(canvas); | 290 Image image1(canvas); |
290 Image image2(test_file(filename)); | 291 Image image2(test_file(filename)); |
291 double diff = image1.PercentageDifferent(image2); | 292 double diff = image1.PercentageDifferent(image2); |
292 return diff; | 293 return diff; |
293 } | 294 } |
294 | 295 |
295 // Saves the bitmap currently loaded in the context into the file. | 296 // Saves the bitmap currently loaded in the context into the file. |
296 void SaveImage(const skia::PlatformCanvas& canvas, | 297 void SaveImage(const skia::PlatformCanvas& canvas, |
297 const std::wstring& filename) const { | 298 const FilePath::StringType& filename) const { |
298 Image(canvas).SaveToFile(test_file(filename)); | 299 Image(canvas).SaveToFile(test_file(filename)); |
299 } | 300 } |
300 | 301 |
301 ProcessAction action_; | 302 ProcessAction action_; |
302 | 303 |
303 // Path to directory used to contain the test data. | 304 // Path to directory used to contain the test data. |
304 std::wstring test_dir_; | 305 FilePath test_dir_; |
305 | 306 |
306 DISALLOW_COPY_AND_ASSIGN(ImageTest); | 307 DISALLOW_COPY_AND_ASSIGN(ImageTest); |
307 }; | 308 }; |
308 | 309 |
309 // Premultiply the Alpha channel on the R, B and G channels. | 310 // Premultiply the Alpha channel on the R, B and G channels. |
310 void Premultiply(SkBitmap bitmap) { | 311 void Premultiply(SkBitmap bitmap) { |
311 SkAutoLockPixels lock(bitmap); | 312 SkAutoLockPixels lock(bitmap); |
312 for (int x = 0; x < bitmap.width(); ++x) { | 313 for (int x = 0; x < bitmap.width(); ++x) { |
313 for (int y = 0; y < bitmap.height(); ++y) { | 314 for (int y = 0; y < bitmap.height(); ++y) { |
314 uint32_t* pixel_addr = bitmap.getAddr32(x, y); | 315 uint32_t* pixel_addr = bitmap.getAddr32(x, y); |
315 uint32_t color = *pixel_addr; | 316 uint32_t color = *pixel_addr; |
316 BYTE alpha = SkColorGetA(color); | 317 BYTE alpha = SkColorGetA(color); |
317 if (!alpha) { | 318 if (!alpha) { |
318 *pixel_addr = 0; | 319 *pixel_addr = 0; |
319 } else { | 320 } else { |
320 BYTE alpha_offset = alpha / 2; | 321 BYTE alpha_offset = alpha / 2; |
321 *pixel_addr = SkColorSetARGB( | 322 *pixel_addr = SkColorSetARGB( |
322 SkColorGetA(color), | 323 SkColorGetA(color), |
323 (SkColorGetR(color) * 255 + alpha_offset) / alpha, | 324 (SkColorGetR(color) * 255 + alpha_offset) / alpha, |
324 (SkColorGetG(color) * 255 + alpha_offset) / alpha, | 325 (SkColorGetG(color) * 255 + alpha_offset) / alpha, |
325 (SkColorGetB(color) * 255 + alpha_offset) / alpha); | 326 (SkColorGetB(color) * 255 + alpha_offset) / alpha); |
326 } | 327 } |
327 } | 328 } |
328 } | 329 } |
329 } | 330 } |
330 | 331 |
331 void LoadPngFileToSkBitmap(const std::wstring& filename, | 332 void LoadPngFileToSkBitmap(const FilePath& filename, |
332 SkBitmap* bitmap, | 333 SkBitmap* bitmap, |
333 bool is_opaque) { | 334 bool is_opaque) { |
334 Vector<char> compressed; | 335 Vector<char> compressed; |
335 ReadFileToVector(filename, &compressed); | 336 ReadFileToVector(filename, &compressed); |
336 EXPECT_TRUE(compressed.size()); | 337 EXPECT_TRUE(compressed.size()); |
337 WebCore::PNGImageDecoder decoder; | 338 WebCore::PNGImageDecoder decoder; |
338 decoder.setData(WebCore::SharedBuffer::adoptVector(compressed).get(), true); | 339 decoder.setData(WebCore::SharedBuffer::adoptVector(compressed).get(), true); |
339 scoped_ptr<NativeImageSkia> image_data( | 340 scoped_ptr<NativeImageSkia> image_data( |
340 decoder.frameBufferAtIndex(0)->asNewNativeImage()); | 341 decoder.frameBufferAtIndex(0)->asNewNativeImage()); |
341 *bitmap = *image_data; | 342 *bitmap = *image_data; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
390 vcanvas_ = new VectorCanvas(context_->context(), size_, size_); | 391 vcanvas_ = new VectorCanvas(context_->context(), size_, size_); |
391 pcanvas_ = new PlatformCanvas(size_, size_, false); | 392 pcanvas_ = new PlatformCanvas(size_, size_, false); |
392 | 393 |
393 // Clear white. | 394 // Clear white. |
394 vcanvas_->drawARGB(255, 255, 255, 255, SkXfermode::kSrc_Mode); | 395 vcanvas_->drawARGB(255, 255, 255, 255, SkXfermode::kSrc_Mode); |
395 pcanvas_->drawARGB(255, 255, 255, 255, SkXfermode::kSrc_Mode); | 396 pcanvas_->drawARGB(255, 255, 255, 255, SkXfermode::kSrc_Mode); |
396 } | 397 } |
397 | 398 |
398 // Compares both canvas and returns the pixel difference in percentage between | 399 // Compares both canvas and returns the pixel difference in percentage between |
399 // both images. 0 on success and ]0, 100] on failure. | 400 // both images. 0 on success and ]0, 100] on failure. |
400 double ProcessImage(const std::wstring& filename) { | 401 double ProcessImage(const FilePath::StringType& filename) { |
401 std::wstring number(StringPrintf(L"%02d_", number_++)); | 402 std::wstring number(StringPrintf(L"%02d_", number_++)); |
402 double diff1 = parent::ProcessCanvas(*vcanvas_, number + L"vc_" + filename); | 403 double diff1 = parent::ProcessCanvas(*vcanvas_, number + L"vc_" + filename); |
403 double diff2 = parent::ProcessCanvas(*pcanvas_, number + L"pc_" + filename); | 404 double diff2 = parent::ProcessCanvas(*pcanvas_, number + L"pc_" + filename); |
404 if (!compare_canvas_) | 405 if (!compare_canvas_) |
405 return std::max(diff1, diff2); | 406 return std::max(diff1, diff2); |
406 | 407 |
407 Image image1(*vcanvas_); | 408 Image image1(*vcanvas_); |
408 Image image2(*pcanvas_); | 409 Image image2(*pcanvas_); |
409 double diff = image1.PercentageDifferent(image2); | 410 double diff = image1.PercentageDifferent(image2); |
410 return std::max(std::max(diff1, diff2), diff); | 411 return std::max(std::max(diff1, diff2), diff); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
453 | 454 |
454 context_ = new Context(); | 455 context_ = new Context(); |
455 bitmap_ = new Bitmap(*context_, size_, size_); | 456 bitmap_ = new Bitmap(*context_, size_, size_); |
456 vcanvas_ = new VectorCanvas(context_->context(), size_, size_); | 457 vcanvas_ = new VectorCanvas(context_->context(), size_, size_); |
457 pcanvas_ = new PlatformCanvas(size_, size_, false); | 458 pcanvas_ = new PlatformCanvas(size_, size_, false); |
458 | 459 |
459 // VectorCanvas default initialization is black. | 460 // VectorCanvas default initialization is black. |
460 // PlatformCanvas default initialization is almost white 0x01FFFEFD (invalid | 461 // PlatformCanvas default initialization is almost white 0x01FFFEFD (invalid |
461 // Skia color) in both Debug and Release. See magicTransparencyColor in | 462 // Skia color) in both Debug and Release. See magicTransparencyColor in |
462 // platform_device.cc | 463 // platform_device.cc |
463 EXPECT_EQ(0., ProcessImage(L"empty")); | 464 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("empty"))); |
464 } | 465 } |
465 | 466 |
466 TEST_F(VectorCanvasTest, BasicDrawing) { | 467 TEST_F(VectorCanvasTest, BasicDrawing) { |
467 EXPECT_EQ(Image(*vcanvas_).PercentageDifferent(Image(*pcanvas_)), 0.) | 468 EXPECT_EQ(Image(*vcanvas_).PercentageDifferent(Image(*pcanvas_)), 0.) |
468 << L"clean"; | 469 << L"clean"; |
469 EXPECT_EQ(0., ProcessImage(L"clean")); | 470 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("clean"))); |
470 | 471 |
471 // Clear white. | 472 // Clear white. |
472 { | 473 { |
473 vcanvas_->drawARGB(255, 255, 255, 255, SkXfermode::kSrc_Mode); | 474 vcanvas_->drawARGB(255, 255, 255, 255, SkXfermode::kSrc_Mode); |
474 pcanvas_->drawARGB(255, 255, 255, 255, SkXfermode::kSrc_Mode); | 475 pcanvas_->drawARGB(255, 255, 255, 255, SkXfermode::kSrc_Mode); |
475 } | 476 } |
476 EXPECT_EQ(0., ProcessImage(L"drawARGB")); | 477 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawARGB"))); |
477 | 478 |
478 // Diagonal line top-left to bottom-right. | 479 // Diagonal line top-left to bottom-right. |
479 { | 480 { |
480 SkPaint paint; | 481 SkPaint paint; |
481 // Default color is black. | 482 // Default color is black. |
482 vcanvas_->drawLine(10, 10, 90, 90, paint); | 483 vcanvas_->drawLine(10, 10, 90, 90, paint); |
483 pcanvas_->drawLine(10, 10, 90, 90, paint); | 484 pcanvas_->drawLine(10, 10, 90, 90, paint); |
484 } | 485 } |
485 EXPECT_EQ(0., ProcessImage(L"drawLine_black")); | 486 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawLine_black"))); |
486 | 487 |
487 // Rect. | 488 // Rect. |
488 { | 489 { |
489 SkPaint paint; | 490 SkPaint paint; |
490 paint.setColor(SK_ColorGREEN); | 491 paint.setColor(SK_ColorGREEN); |
491 vcanvas_->drawRectCoords(25, 25, 75, 75, paint); | 492 vcanvas_->drawRectCoords(25, 25, 75, 75, paint); |
492 pcanvas_->drawRectCoords(25, 25, 75, 75, paint); | 493 pcanvas_->drawRectCoords(25, 25, 75, 75, paint); |
493 } | 494 } |
494 EXPECT_EQ(0., ProcessImage(L"drawRect_green")); | 495 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawRect_green"))); |
495 | 496 |
496 // A single-point rect doesn't leave any mark. | 497 // A single-point rect doesn't leave any mark. |
497 { | 498 { |
498 SkPaint paint; | 499 SkPaint paint; |
499 paint.setColor(SK_ColorBLUE); | 500 paint.setColor(SK_ColorBLUE); |
500 vcanvas_->drawRectCoords(5, 5, 5, 5, paint); | 501 vcanvas_->drawRectCoords(5, 5, 5, 5, paint); |
501 pcanvas_->drawRectCoords(5, 5, 5, 5, paint); | 502 pcanvas_->drawRectCoords(5, 5, 5, 5, paint); |
502 } | 503 } |
503 EXPECT_EQ(0., ProcessImage(L"drawRect_noop")); | 504 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawRect_noop"))); |
504 | 505 |
505 // Rect. | 506 // Rect. |
506 { | 507 { |
507 SkPaint paint; | 508 SkPaint paint; |
508 paint.setColor(SK_ColorBLUE); | 509 paint.setColor(SK_ColorBLUE); |
509 vcanvas_->drawRectCoords(75, 50, 80, 55, paint); | 510 vcanvas_->drawRectCoords(75, 50, 80, 55, paint); |
510 pcanvas_->drawRectCoords(75, 50, 80, 55, paint); | 511 pcanvas_->drawRectCoords(75, 50, 80, 55, paint); |
511 } | 512 } |
512 EXPECT_EQ(0., ProcessImage(L"drawRect_noop")); | 513 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawRect_noop"))); |
513 | 514 |
514 // Empty again | 515 // Empty again |
515 { | 516 { |
516 vcanvas_->drawPaint(SkPaint()); | 517 vcanvas_->drawPaint(SkPaint()); |
517 pcanvas_->drawPaint(SkPaint()); | 518 pcanvas_->drawPaint(SkPaint()); |
518 } | 519 } |
519 EXPECT_EQ(0., ProcessImage(L"drawPaint_black")); | 520 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawPaint_black"))); |
520 | 521 |
521 // Horizontal line left to right. | 522 // Horizontal line left to right. |
522 { | 523 { |
523 SkPaint paint; | 524 SkPaint paint; |
524 paint.setColor(SK_ColorRED); | 525 paint.setColor(SK_ColorRED); |
525 vcanvas_->drawLine(10, 20, 90, 20, paint); | 526 vcanvas_->drawLine(10, 20, 90, 20, paint); |
526 pcanvas_->drawLine(10, 20, 90, 20, paint); | 527 pcanvas_->drawLine(10, 20, 90, 20, paint); |
527 } | 528 } |
528 EXPECT_EQ(0., ProcessImage(L"drawLine_left_to_right")); | 529 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawLine_left_to_right"))); |
529 | 530 |
530 // Vertical line downward. | 531 // Vertical line downward. |
531 { | 532 { |
532 SkPaint paint; | 533 SkPaint paint; |
533 paint.setColor(SK_ColorRED); | 534 paint.setColor(SK_ColorRED); |
534 vcanvas_->drawLine(30, 10, 30, 90, paint); | 535 vcanvas_->drawLine(30, 10, 30, 90, paint); |
535 pcanvas_->drawLine(30, 10, 30, 90, paint); | 536 pcanvas_->drawLine(30, 10, 30, 90, paint); |
536 } | 537 } |
537 EXPECT_EQ(0., ProcessImage(L"drawLine_red")); | 538 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawLine_red"))); |
538 } | 539 } |
539 | 540 |
540 TEST_F(VectorCanvasTest, Circles) { | 541 TEST_F(VectorCanvasTest, Circles) { |
541 // There is NO WAY to make them agree. At least verify that the output doesn't | 542 // There is NO WAY to make them agree. At least verify that the output doesn't |
542 // change across versions. This test is disabled. See bug 1060231. | 543 // change across versions. This test is disabled. See bug 1060231. |
543 compare_canvas_ = false; | 544 compare_canvas_ = false; |
544 | 545 |
545 // Stroked Circle. | 546 // Stroked Circle. |
546 { | 547 { |
547 SkPaint paint; | 548 SkPaint paint; |
548 SkPath path; | 549 SkPath path; |
549 path.addCircle(50, 75, 10); | 550 path.addCircle(50, 75, 10); |
550 paint.setStyle(SkPaint::kStroke_Style); | 551 paint.setStyle(SkPaint::kStroke_Style); |
551 paint.setColor(SK_ColorMAGENTA); | 552 paint.setColor(SK_ColorMAGENTA); |
552 vcanvas_->drawPath(path, paint); | 553 vcanvas_->drawPath(path, paint); |
553 pcanvas_->drawPath(path, paint); | 554 pcanvas_->drawPath(path, paint); |
554 } | 555 } |
555 EXPECT_EQ(0., ProcessImage(L"circle_stroke")); | 556 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("circle_stroke"))); |
556 | 557 |
557 // Filled Circle. | 558 // Filled Circle. |
558 { | 559 { |
559 SkPaint paint; | 560 SkPaint paint; |
560 SkPath path; | 561 SkPath path; |
561 path.addCircle(50, 25, 10); | 562 path.addCircle(50, 25, 10); |
562 paint.setStyle(SkPaint::kFill_Style); | 563 paint.setStyle(SkPaint::kFill_Style); |
563 vcanvas_->drawPath(path, paint); | 564 vcanvas_->drawPath(path, paint); |
564 pcanvas_->drawPath(path, paint); | 565 pcanvas_->drawPath(path, paint); |
565 } | 566 } |
566 EXPECT_EQ(0., ProcessImage(L"circle_fill")); | 567 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("circle_fill"))); |
567 | 568 |
568 // Stroked Circle over. | 569 // Stroked Circle over. |
569 { | 570 { |
570 SkPaint paint; | 571 SkPaint paint; |
571 SkPath path; | 572 SkPath path; |
572 path.addCircle(50, 25, 10); | 573 path.addCircle(50, 25, 10); |
573 paint.setStyle(SkPaint::kStroke_Style); | 574 paint.setStyle(SkPaint::kStroke_Style); |
574 paint.setColor(SK_ColorBLUE); | 575 paint.setColor(SK_ColorBLUE); |
575 vcanvas_->drawPath(path, paint); | 576 vcanvas_->drawPath(path, paint); |
576 pcanvas_->drawPath(path, paint); | 577 pcanvas_->drawPath(path, paint); |
577 } | 578 } |
578 EXPECT_EQ(0., ProcessImage(L"circle_over_strike")); | 579 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("circle_over_strike"))); |
579 | 580 |
580 // Stroke and Fill Circle. | 581 // Stroke and Fill Circle. |
581 { | 582 { |
582 SkPaint paint; | 583 SkPaint paint; |
583 SkPath path; | 584 SkPath path; |
584 path.addCircle(12, 50, 10); | 585 path.addCircle(12, 50, 10); |
585 paint.setStyle(SkPaint::kStrokeAndFill_Style); | 586 paint.setStyle(SkPaint::kStrokeAndFill_Style); |
586 paint.setColor(SK_ColorRED); | 587 paint.setColor(SK_ColorRED); |
587 vcanvas_->drawPath(path, paint); | 588 vcanvas_->drawPath(path, paint); |
588 pcanvas_->drawPath(path, paint); | 589 pcanvas_->drawPath(path, paint); |
589 } | 590 } |
590 EXPECT_EQ(0., ProcessImage(L"circle_stroke_and_fill")); | 591 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("circle_stroke_and_fill"))); |
591 | 592 |
592 // Line + Quad + Cubic. | 593 // Line + Quad + Cubic. |
593 { | 594 { |
594 SkPaint paint; | 595 SkPaint paint; |
595 SkPath path; | 596 SkPath path; |
596 paint.setStyle(SkPaint::kStroke_Style); | 597 paint.setStyle(SkPaint::kStroke_Style); |
597 paint.setColor(SK_ColorGREEN); | 598 paint.setColor(SK_ColorGREEN); |
598 path.moveTo(1, 1); | 599 path.moveTo(1, 1); |
599 path.lineTo(60, 40); | 600 path.lineTo(60, 40); |
600 path.lineTo(80, 80); | 601 path.lineTo(80, 80); |
601 path.quadTo(20, 50, 10, 90); | 602 path.quadTo(20, 50, 10, 90); |
602 path.quadTo(50, 20, 90, 10); | 603 path.quadTo(50, 20, 90, 10); |
603 path.cubicTo(20, 40, 50, 50, 10, 10); | 604 path.cubicTo(20, 40, 50, 50, 10, 10); |
604 path.cubicTo(30, 20, 50, 50, 90, 10); | 605 path.cubicTo(30, 20, 50, 50, 90, 10); |
605 path.addRect(90, 90, 95, 96); | 606 path.addRect(90, 90, 95, 96); |
606 vcanvas_->drawPath(path, paint); | 607 vcanvas_->drawPath(path, paint); |
607 pcanvas_->drawPath(path, paint); | 608 pcanvas_->drawPath(path, paint); |
608 } | 609 } |
609 EXPECT_EQ(0., ProcessImage(L"mixed_stroke")); | 610 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("mixed_stroke"))); |
610 } | 611 } |
611 | 612 |
612 TEST_F(VectorCanvasTest, LineOrientation) { | 613 TEST_F(VectorCanvasTest, LineOrientation) { |
613 // There is NO WAY to make them agree. At least verify that the output doesn't | 614 // There is NO WAY to make them agree. At least verify that the output doesn't |
614 // change across versions. This test is disabled. See bug 1060231. | 615 // change across versions. This test is disabled. See bug 1060231. |
615 compare_canvas_ = false; | 616 compare_canvas_ = false; |
616 | 617 |
617 // Horizontal lines. | 618 // Horizontal lines. |
618 { | 619 { |
619 SkPaint paint; | 620 SkPaint paint; |
620 paint.setColor(SK_ColorRED); | 621 paint.setColor(SK_ColorRED); |
621 // Left to right. | 622 // Left to right. |
622 vcanvas_->drawLine(10, 20, 90, 20, paint); | 623 vcanvas_->drawLine(10, 20, 90, 20, paint); |
623 pcanvas_->drawLine(10, 20, 90, 20, paint); | 624 pcanvas_->drawLine(10, 20, 90, 20, paint); |
624 // Right to left. | 625 // Right to left. |
625 vcanvas_->drawLine(90, 30, 10, 30, paint); | 626 vcanvas_->drawLine(90, 30, 10, 30, paint); |
626 pcanvas_->drawLine(90, 30, 10, 30, paint); | 627 pcanvas_->drawLine(90, 30, 10, 30, paint); |
627 } | 628 } |
628 EXPECT_EQ(0., ProcessImage(L"horizontal")); | 629 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("horizontal"))); |
629 | 630 |
630 // Vertical lines. | 631 // Vertical lines. |
631 { | 632 { |
632 SkPaint paint; | 633 SkPaint paint; |
633 paint.setColor(SK_ColorRED); | 634 paint.setColor(SK_ColorRED); |
634 // Top down. | 635 // Top down. |
635 vcanvas_->drawLine(20, 10, 20, 90, paint); | 636 vcanvas_->drawLine(20, 10, 20, 90, paint); |
636 pcanvas_->drawLine(20, 10, 20, 90, paint); | 637 pcanvas_->drawLine(20, 10, 20, 90, paint); |
637 // Bottom up. | 638 // Bottom up. |
638 vcanvas_->drawLine(30, 90, 30, 10, paint); | 639 vcanvas_->drawLine(30, 90, 30, 10, paint); |
639 pcanvas_->drawLine(30, 90, 30, 10, paint); | 640 pcanvas_->drawLine(30, 90, 30, 10, paint); |
640 } | 641 } |
641 EXPECT_EQ(0., ProcessImage(L"vertical")); | 642 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("vertical"))); |
642 | 643 |
643 // Try again with a 180 degres rotation. | 644 // Try again with a 180 degres rotation. |
644 vcanvas_->rotate(180); | 645 vcanvas_->rotate(180); |
645 pcanvas_->rotate(180); | 646 pcanvas_->rotate(180); |
646 | 647 |
647 // Horizontal lines (rotated). | 648 // Horizontal lines (rotated). |
648 { | 649 { |
649 SkPaint paint; | 650 SkPaint paint; |
650 paint.setColor(SK_ColorRED); | 651 paint.setColor(SK_ColorRED); |
651 vcanvas_->drawLine(-10, -25, -90, -25, paint); | 652 vcanvas_->drawLine(-10, -25, -90, -25, paint); |
652 pcanvas_->drawLine(-10, -25, -90, -25, paint); | 653 pcanvas_->drawLine(-10, -25, -90, -25, paint); |
653 vcanvas_->drawLine(-90, -35, -10, -35, paint); | 654 vcanvas_->drawLine(-90, -35, -10, -35, paint); |
654 pcanvas_->drawLine(-90, -35, -10, -35, paint); | 655 pcanvas_->drawLine(-90, -35, -10, -35, paint); |
655 } | 656 } |
656 EXPECT_EQ(0., ProcessImage(L"horizontal_180")); | 657 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("horizontal_180"))); |
657 | 658 |
658 // Vertical lines (rotated). | 659 // Vertical lines (rotated). |
659 { | 660 { |
660 SkPaint paint; | 661 SkPaint paint; |
661 paint.setColor(SK_ColorRED); | 662 paint.setColor(SK_ColorRED); |
662 vcanvas_->drawLine(-25, -10, -25, -90, paint); | 663 vcanvas_->drawLine(-25, -10, -25, -90, paint); |
663 pcanvas_->drawLine(-25, -10, -25, -90, paint); | 664 pcanvas_->drawLine(-25, -10, -25, -90, paint); |
664 vcanvas_->drawLine(-35, -90, -35, -10, paint); | 665 vcanvas_->drawLine(-35, -90, -35, -10, paint); |
665 pcanvas_->drawLine(-35, -90, -35, -10, paint); | 666 pcanvas_->drawLine(-35, -90, -35, -10, paint); |
666 } | 667 } |
667 EXPECT_EQ(0., ProcessImage(L"vertical_180")); | 668 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("vertical_180"))); |
668 } | 669 } |
669 | 670 |
670 TEST_F(VectorCanvasTest, PathOrientation) { | 671 TEST_F(VectorCanvasTest, PathOrientation) { |
671 // There is NO WAY to make them agree. At least verify that the output doesn't | 672 // There is NO WAY to make them agree. At least verify that the output doesn't |
672 // change across versions. This test is disabled. See bug 1060231. | 673 // change across versions. This test is disabled. See bug 1060231. |
673 compare_canvas_ = false; | 674 compare_canvas_ = false; |
674 | 675 |
675 // Horizontal lines. | 676 // Horizontal lines. |
676 { | 677 { |
677 SkPaint paint; | 678 SkPaint paint; |
678 paint.setStyle(SkPaint::kStroke_Style); | 679 paint.setStyle(SkPaint::kStroke_Style); |
679 paint.setColor(SK_ColorRED); | 680 paint.setColor(SK_ColorRED); |
680 SkPath path; | 681 SkPath path; |
681 SkPoint start; | 682 SkPoint start; |
682 start.set(10, 20); | 683 start.set(10, 20); |
683 SkPoint end; | 684 SkPoint end; |
684 end.set(90, 20); | 685 end.set(90, 20); |
685 path.moveTo(start); | 686 path.moveTo(start); |
686 path.lineTo(end); | 687 path.lineTo(end); |
687 vcanvas_->drawPath(path, paint); | 688 vcanvas_->drawPath(path, paint); |
688 pcanvas_->drawPath(path, paint); | 689 pcanvas_->drawPath(path, paint); |
689 } | 690 } |
690 EXPECT_EQ(0., ProcessImage(L"drawPath_ltr")); | 691 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawPath_ltr"))); |
691 | 692 |
692 // Horizontal lines. | 693 // Horizontal lines. |
693 { | 694 { |
694 SkPaint paint; | 695 SkPaint paint; |
695 paint.setStyle(SkPaint::kStroke_Style); | 696 paint.setStyle(SkPaint::kStroke_Style); |
696 paint.setColor(SK_ColorRED); | 697 paint.setColor(SK_ColorRED); |
697 SkPath path; | 698 SkPath path; |
698 SkPoint start; | 699 SkPoint start; |
699 start.set(90, 30); | 700 start.set(90, 30); |
700 SkPoint end; | 701 SkPoint end; |
701 end.set(10, 30); | 702 end.set(10, 30); |
702 path.moveTo(start); | 703 path.moveTo(start); |
703 path.lineTo(end); | 704 path.lineTo(end); |
704 vcanvas_->drawPath(path, paint); | 705 vcanvas_->drawPath(path, paint); |
705 pcanvas_->drawPath(path, paint); | 706 pcanvas_->drawPath(path, paint); |
706 } | 707 } |
707 EXPECT_EQ(0., ProcessImage(L"drawPath_rtl")); | 708 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("drawPath_rtl"))); |
708 } | 709 } |
709 | 710 |
710 TEST_F(VectorCanvasTest, DiagonalLines) { | 711 TEST_F(VectorCanvasTest, DiagonalLines) { |
711 SkPaint paint; | 712 SkPaint paint; |
712 paint.setColor(SK_ColorRED); | 713 paint.setColor(SK_ColorRED); |
713 | 714 |
714 vcanvas_->drawLine(10, 10, 90, 90, paint); | 715 vcanvas_->drawLine(10, 10, 90, 90, paint); |
715 pcanvas_->drawLine(10, 10, 90, 90, paint); | 716 pcanvas_->drawLine(10, 10, 90, 90, paint); |
716 EXPECT_EQ(0., ProcessImage(L"nw-se")); | 717 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("nw-se"))); |
717 | 718 |
718 // Starting here, there is NO WAY to make them agree. At least verify that the | 719 // Starting here, there is NO WAY to make them agree. At least verify that the |
719 // output doesn't change across versions. This test is disabled. See bug | 720 // output doesn't change across versions. This test is disabled. See bug |
720 // 1060231. | 721 // 1060231. |
721 compare_canvas_ = false; | 722 compare_canvas_ = false; |
722 | 723 |
723 vcanvas_->drawLine(10, 95, 90, 15, paint); | 724 vcanvas_->drawLine(10, 95, 90, 15, paint); |
724 pcanvas_->drawLine(10, 95, 90, 15, paint); | 725 pcanvas_->drawLine(10, 95, 90, 15, paint); |
725 EXPECT_EQ(0., ProcessImage(L"sw-ne")); | 726 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("sw-ne"))); |
726 | 727 |
727 vcanvas_->drawLine(90, 10, 10, 90, paint); | 728 vcanvas_->drawLine(90, 10, 10, 90, paint); |
728 pcanvas_->drawLine(90, 10, 10, 90, paint); | 729 pcanvas_->drawLine(90, 10, 10, 90, paint); |
729 EXPECT_EQ(0., ProcessImage(L"ne-sw")); | 730 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("ne-sw"))); |
730 | 731 |
731 vcanvas_->drawLine(95, 90, 15, 10, paint); | 732 vcanvas_->drawLine(95, 90, 15, 10, paint); |
732 pcanvas_->drawLine(95, 90, 15, 10, paint); | 733 pcanvas_->drawLine(95, 90, 15, 10, paint); |
733 EXPECT_EQ(0., ProcessImage(L"se-nw")); | 734 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("se-nw"))); |
734 } | 735 } |
735 | 736 |
736 TEST_F(VectorCanvasTest, PathEffects) { | 737 TEST_F(VectorCanvasTest, PathEffects) { |
737 { | 738 { |
738 SkPaint paint; | 739 SkPaint paint; |
739 SkScalar intervals[] = { 1, 1 }; | 740 SkScalar intervals[] = { 1, 1 }; |
740 SkPathEffect* effect = new SkDashPathEffect(intervals, arraysize(intervals), | 741 SkPathEffect* effect = new SkDashPathEffect(intervals, arraysize(intervals), |
741 0); | 742 0); |
742 paint.setPathEffect(effect)->unref(); | 743 paint.setPathEffect(effect)->unref(); |
743 paint.setColor(SK_ColorMAGENTA); | 744 paint.setColor(SK_ColorMAGENTA); |
744 paint.setStyle(SkPaint::kStroke_Style); | 745 paint.setStyle(SkPaint::kStroke_Style); |
745 | 746 |
746 vcanvas_->drawLine(10, 10, 90, 10, paint); | 747 vcanvas_->drawLine(10, 10, 90, 10, paint); |
747 pcanvas_->drawLine(10, 10, 90, 10, paint); | 748 pcanvas_->drawLine(10, 10, 90, 10, paint); |
748 } | 749 } |
749 EXPECT_EQ(0., ProcessImage(L"dash_line")); | 750 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("dash_line"))); |
750 | 751 |
751 | 752 |
752 // Starting here, there is NO WAY to make them agree. At least verify that the | 753 // Starting here, there is NO WAY to make them agree. At least verify that the |
753 // output doesn't change across versions. This test is disabled. See bug | 754 // output doesn't change across versions. This test is disabled. See bug |
754 // 1060231. | 755 // 1060231. |
755 compare_canvas_ = false; | 756 compare_canvas_ = false; |
756 | 757 |
757 { | 758 { |
758 SkPaint paint; | 759 SkPaint paint; |
759 SkScalar intervals[] = { 3, 5 }; | 760 SkScalar intervals[] = { 3, 5 }; |
760 SkPathEffect* effect = new SkDashPathEffect(intervals, arraysize(intervals), | 761 SkPathEffect* effect = new SkDashPathEffect(intervals, arraysize(intervals), |
761 0); | 762 0); |
762 paint.setPathEffect(effect)->unref(); | 763 paint.setPathEffect(effect)->unref(); |
763 paint.setColor(SK_ColorMAGENTA); | 764 paint.setColor(SK_ColorMAGENTA); |
764 paint.setStyle(SkPaint::kStroke_Style); | 765 paint.setStyle(SkPaint::kStroke_Style); |
765 | 766 |
766 SkPath path; | 767 SkPath path; |
767 path.moveTo(10, 15); | 768 path.moveTo(10, 15); |
768 path.lineTo(90, 15); | 769 path.lineTo(90, 15); |
769 path.lineTo(90, 90); | 770 path.lineTo(90, 90); |
770 vcanvas_->drawPath(path, paint); | 771 vcanvas_->drawPath(path, paint); |
771 pcanvas_->drawPath(path, paint); | 772 pcanvas_->drawPath(path, paint); |
772 } | 773 } |
773 EXPECT_EQ(0., ProcessImage(L"dash_path")); | 774 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("dash_path"))); |
774 | 775 |
775 { | 776 { |
776 SkPaint paint; | 777 SkPaint paint; |
777 SkScalar intervals[] = { 2, 1 }; | 778 SkScalar intervals[] = { 2, 1 }; |
778 SkPathEffect* effect = new SkDashPathEffect(intervals, arraysize(intervals), | 779 SkPathEffect* effect = new SkDashPathEffect(intervals, arraysize(intervals), |
779 0); | 780 0); |
780 paint.setPathEffect(effect)->unref(); | 781 paint.setPathEffect(effect)->unref(); |
781 paint.setColor(SK_ColorMAGENTA); | 782 paint.setColor(SK_ColorMAGENTA); |
782 paint.setStyle(SkPaint::kStroke_Style); | 783 paint.setStyle(SkPaint::kStroke_Style); |
783 | 784 |
784 vcanvas_->drawRectCoords(20, 20, 30, 30, paint); | 785 vcanvas_->drawRectCoords(20, 20, 30, 30, paint); |
785 pcanvas_->drawRectCoords(20, 20, 30, 30, paint); | 786 pcanvas_->drawRectCoords(20, 20, 30, 30, paint); |
786 } | 787 } |
787 EXPECT_EQ(0., ProcessImage(L"dash_rect")); | 788 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("dash_rect"))); |
788 | 789 |
789 // This thing looks like it has been drawn by a 3 years old kid. I haven't | 790 // This thing looks like it has been drawn by a 3 years old kid. I haven't |
790 // filed a bug on this since I guess nobody is expecting this to look nice. | 791 // filed a bug on this since I guess nobody is expecting this to look nice. |
791 { | 792 { |
792 SkPaint paint; | 793 SkPaint paint; |
793 SkScalar intervals[] = { 1, 1 }; | 794 SkScalar intervals[] = { 1, 1 }; |
794 SkPathEffect* effect = new SkDashPathEffect(intervals, arraysize(intervals), | 795 SkPathEffect* effect = new SkDashPathEffect(intervals, arraysize(intervals), |
795 0); | 796 0); |
796 paint.setPathEffect(effect)->unref(); | 797 paint.setPathEffect(effect)->unref(); |
797 paint.setColor(SK_ColorMAGENTA); | 798 paint.setColor(SK_ColorMAGENTA); |
798 paint.setStyle(SkPaint::kStroke_Style); | 799 paint.setStyle(SkPaint::kStroke_Style); |
799 | 800 |
800 SkPath path; | 801 SkPath path; |
801 path.addCircle(50, 75, 10); | 802 path.addCircle(50, 75, 10); |
802 vcanvas_->drawPath(path, paint); | 803 vcanvas_->drawPath(path, paint); |
803 pcanvas_->drawPath(path, paint); | 804 pcanvas_->drawPath(path, paint); |
804 EXPECT_EQ(0., ProcessImage(L"circle")); | 805 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("circle"))); |
805 } | 806 } |
806 } | 807 } |
807 | 808 |
808 TEST_F(VectorCanvasTest, Bitmaps) { | 809 TEST_F(VectorCanvasTest, Bitmaps) { |
809 { | 810 { |
810 SkBitmap bitmap; | 811 SkBitmap bitmap; |
811 LoadPngFileToSkBitmap(test_file(L"bitmap_opaque.png"), &bitmap, true); | 812 LoadPngFileToSkBitmap(test_file(L"bitmap_opaque.png"), &bitmap, true); |
812 vcanvas_->drawBitmap(bitmap, 13, 3, NULL); | 813 vcanvas_->drawBitmap(bitmap, 13, 3, NULL); |
813 pcanvas_->drawBitmap(bitmap, 13, 3, NULL); | 814 pcanvas_->drawBitmap(bitmap, 13, 3, NULL); |
814 EXPECT_EQ(0., ProcessImage(L"opaque")); | 815 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("opaque"))); |
815 } | 816 } |
816 | 817 |
817 { | 818 { |
818 SkBitmap bitmap; | 819 SkBitmap bitmap; |
819 LoadPngFileToSkBitmap(test_file(L"bitmap_alpha.png"), &bitmap, false); | 820 LoadPngFileToSkBitmap(test_file(L"bitmap_alpha.png"), &bitmap, false); |
820 vcanvas_->drawBitmap(bitmap, 5, 15, NULL); | 821 vcanvas_->drawBitmap(bitmap, 5, 15, NULL); |
821 pcanvas_->drawBitmap(bitmap, 5, 15, NULL); | 822 pcanvas_->drawBitmap(bitmap, 5, 15, NULL); |
822 EXPECT_EQ(0., ProcessImage(L"alpha")); | 823 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("alpha"))); |
823 } | 824 } |
824 } | 825 } |
825 | 826 |
826 TEST_F(VectorCanvasTest, ClippingRect) { | 827 TEST_F(VectorCanvasTest, ClippingRect) { |
827 SkBitmap bitmap; | 828 SkBitmap bitmap; |
828 LoadPngFileToSkBitmap(test_file(L"..\\bitmaps\\bitmap_opaque.png"), &bitmap, | 829 LoadPngFileToSkBitmap(test_file(L"..\\bitmaps\\bitmap_opaque.png"), &bitmap, |
829 true); | 830 true); |
830 SkRect rect; | 831 SkRect rect; |
831 rect.fLeft = 2; | 832 rect.fLeft = 2; |
832 rect.fTop = 2; | 833 rect.fTop = 2; |
833 rect.fRight = 30.5f; | 834 rect.fRight = 30.5f; |
834 rect.fBottom = 30.5f; | 835 rect.fBottom = 30.5f; |
835 vcanvas_->clipRect(rect); | 836 vcanvas_->clipRect(rect); |
836 pcanvas_->clipRect(rect); | 837 pcanvas_->clipRect(rect); |
837 | 838 |
838 vcanvas_->drawBitmap(bitmap, 13, 3, NULL); | 839 vcanvas_->drawBitmap(bitmap, 13, 3, NULL); |
839 pcanvas_->drawBitmap(bitmap, 13, 3, NULL); | 840 pcanvas_->drawBitmap(bitmap, 13, 3, NULL); |
840 EXPECT_EQ(0., ProcessImage(L"rect")); | 841 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("rect"))); |
841 } | 842 } |
842 | 843 |
843 TEST_F(VectorCanvasTest, ClippingPath) { | 844 TEST_F(VectorCanvasTest, ClippingPath) { |
844 SkBitmap bitmap; | 845 SkBitmap bitmap; |
845 LoadPngFileToSkBitmap(test_file(L"..\\bitmaps\\bitmap_opaque.png"), &bitmap, | 846 LoadPngFileToSkBitmap(test_file(L"..\\bitmaps\\bitmap_opaque.png"), &bitmap, |
846 true); | 847 true); |
847 SkPath path; | 848 SkPath path; |
848 path.addCircle(20, 20, 10); | 849 path.addCircle(20, 20, 10); |
849 vcanvas_->clipPath(path); | 850 vcanvas_->clipPath(path); |
850 pcanvas_->clipPath(path); | 851 pcanvas_->clipPath(path); |
851 | 852 |
852 vcanvas_->drawBitmap(bitmap, 14, 3, NULL); | 853 vcanvas_->drawBitmap(bitmap, 14, 3, NULL); |
853 pcanvas_->drawBitmap(bitmap, 14, 3, NULL); | 854 pcanvas_->drawBitmap(bitmap, 14, 3, NULL); |
854 EXPECT_EQ(0., ProcessImage(L"path")); | 855 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("path"))); |
855 } | 856 } |
856 | 857 |
857 TEST_F(VectorCanvasTest, ClippingCombined) { | 858 TEST_F(VectorCanvasTest, ClippingCombined) { |
858 SkBitmap bitmap; | 859 SkBitmap bitmap; |
859 LoadPngFileToSkBitmap(test_file(L"..\\bitmaps\\bitmap_opaque.png"), &bitmap, | 860 LoadPngFileToSkBitmap(test_file(L"..\\bitmaps\\bitmap_opaque.png"), &bitmap, |
860 true); | 861 true); |
861 | 862 |
862 SkRect rect; | 863 SkRect rect; |
863 rect.fLeft = 2; | 864 rect.fLeft = 2; |
864 rect.fTop = 2; | 865 rect.fTop = 2; |
865 rect.fRight = 30.5f; | 866 rect.fRight = 30.5f; |
866 rect.fBottom = 30.5f; | 867 rect.fBottom = 30.5f; |
867 vcanvas_->clipRect(rect); | 868 vcanvas_->clipRect(rect); |
868 pcanvas_->clipRect(rect); | 869 pcanvas_->clipRect(rect); |
869 SkPath path; | 870 SkPath path; |
870 path.addCircle(20, 20, 10); | 871 path.addCircle(20, 20, 10); |
871 vcanvas_->clipPath(path, SkRegion::kUnion_Op); | 872 vcanvas_->clipPath(path, SkRegion::kUnion_Op); |
872 pcanvas_->clipPath(path, SkRegion::kUnion_Op); | 873 pcanvas_->clipPath(path, SkRegion::kUnion_Op); |
873 | 874 |
874 vcanvas_->drawBitmap(bitmap, 15, 3, NULL); | 875 vcanvas_->drawBitmap(bitmap, 15, 3, NULL); |
875 pcanvas_->drawBitmap(bitmap, 15, 3, NULL); | 876 pcanvas_->drawBitmap(bitmap, 15, 3, NULL); |
876 EXPECT_EQ(0., ProcessImage(L"combined")); | 877 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("combined"))); |
877 } | 878 } |
878 | 879 |
879 TEST_F(VectorCanvasTest, ClippingIntersect) { | 880 TEST_F(VectorCanvasTest, ClippingIntersect) { |
880 SkBitmap bitmap; | 881 SkBitmap bitmap; |
881 LoadPngFileToSkBitmap(test_file(L"..\\bitmaps\\bitmap_opaque.png"), &bitmap, | 882 LoadPngFileToSkBitmap(test_file(L"..\\bitmaps\\bitmap_opaque.png"), &bitmap, |
882 true); | 883 true); |
883 | 884 |
884 SkRect rect; | 885 SkRect rect; |
885 rect.fLeft = 2; | 886 rect.fLeft = 2; |
886 rect.fTop = 2; | 887 rect.fTop = 2; |
887 rect.fRight = 30.5f; | 888 rect.fRight = 30.5f; |
888 rect.fBottom = 30.5f; | 889 rect.fBottom = 30.5f; |
889 vcanvas_->clipRect(rect); | 890 vcanvas_->clipRect(rect); |
890 pcanvas_->clipRect(rect); | 891 pcanvas_->clipRect(rect); |
891 SkPath path; | 892 SkPath path; |
892 path.addCircle(23, 23, 15); | 893 path.addCircle(23, 23, 15); |
893 vcanvas_->clipPath(path); | 894 vcanvas_->clipPath(path); |
894 pcanvas_->clipPath(path); | 895 pcanvas_->clipPath(path); |
895 | 896 |
896 vcanvas_->drawBitmap(bitmap, 15, 3, NULL); | 897 vcanvas_->drawBitmap(bitmap, 15, 3, NULL); |
897 pcanvas_->drawBitmap(bitmap, 15, 3, NULL); | 898 pcanvas_->drawBitmap(bitmap, 15, 3, NULL); |
898 EXPECT_EQ(0., ProcessImage(L"intersect")); | 899 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("intersect"))); |
899 } | 900 } |
900 | 901 |
901 TEST_F(VectorCanvasTest, ClippingClean) { | 902 TEST_F(VectorCanvasTest, ClippingClean) { |
902 SkBitmap bitmap; | 903 SkBitmap bitmap; |
903 LoadPngFileToSkBitmap(test_file(L"..\\bitmaps\\bitmap_opaque.png"), &bitmap, | 904 LoadPngFileToSkBitmap(test_file(L"..\\bitmaps\\bitmap_opaque.png"), &bitmap, |
904 true); | 905 true); |
905 { | 906 { |
906 SkRegion old_region(pcanvas_->getTotalClip()); | 907 SkRegion old_region(pcanvas_->getTotalClip()); |
907 SkRect rect; | 908 SkRect rect; |
908 rect.fLeft = 2; | 909 rect.fLeft = 2; |
909 rect.fTop = 2; | 910 rect.fTop = 2; |
910 rect.fRight = 30.5f; | 911 rect.fRight = 30.5f; |
911 rect.fBottom = 30.5f; | 912 rect.fBottom = 30.5f; |
912 vcanvas_->clipRect(rect); | 913 vcanvas_->clipRect(rect); |
913 pcanvas_->clipRect(rect); | 914 pcanvas_->clipRect(rect); |
914 | 915 |
915 vcanvas_->drawBitmap(bitmap, 15, 3, NULL); | 916 vcanvas_->drawBitmap(bitmap, 15, 3, NULL); |
916 pcanvas_->drawBitmap(bitmap, 15, 3, NULL); | 917 pcanvas_->drawBitmap(bitmap, 15, 3, NULL); |
917 EXPECT_EQ(0., ProcessImage(L"clipped")); | 918 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("clipped"))); |
918 vcanvas_->clipRegion(old_region, SkRegion::kReplace_Op); | 919 vcanvas_->clipRegion(old_region, SkRegion::kReplace_Op); |
919 pcanvas_->clipRegion(old_region, SkRegion::kReplace_Op); | 920 pcanvas_->clipRegion(old_region, SkRegion::kReplace_Op); |
920 } | 921 } |
921 { | 922 { |
922 // Verify that the clipping region has been fixed back. | 923 // Verify that the clipping region has been fixed back. |
923 vcanvas_->drawBitmap(bitmap, 55, 3, NULL); | 924 vcanvas_->drawBitmap(bitmap, 55, 3, NULL); |
924 pcanvas_->drawBitmap(bitmap, 55, 3, NULL); | 925 pcanvas_->drawBitmap(bitmap, 55, 3, NULL); |
925 EXPECT_EQ(0., ProcessImage(L"unclipped")); | 926 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("unclipped"))); |
926 } | 927 } |
927 } | 928 } |
928 | 929 |
929 TEST_F(VectorCanvasTest, DISABLED_Matrix) { | 930 TEST_F(VectorCanvasTest, DISABLED_Matrix) { |
930 SkBitmap bitmap; | 931 SkBitmap bitmap; |
931 LoadPngFileToSkBitmap(test_file(L"..\\bitmaps\\bitmap_opaque.png"), &bitmap, | 932 LoadPngFileToSkBitmap(test_file(L"..\\bitmaps\\bitmap_opaque.png"), &bitmap, |
932 true); | 933 true); |
933 { | 934 { |
934 vcanvas_->translate(15, 3); | 935 vcanvas_->translate(15, 3); |
935 pcanvas_->translate(15, 3); | 936 pcanvas_->translate(15, 3); |
936 vcanvas_->drawBitmap(bitmap, 0, 0, NULL); | 937 vcanvas_->drawBitmap(bitmap, 0, 0, NULL); |
937 pcanvas_->drawBitmap(bitmap, 0, 0, NULL); | 938 pcanvas_->drawBitmap(bitmap, 0, 0, NULL); |
938 EXPECT_EQ(0., ProcessImage(L"translate1")); | 939 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("translate1"))); |
939 } | 940 } |
940 { | 941 { |
941 vcanvas_->translate(-30, -23); | 942 vcanvas_->translate(-30, -23); |
942 pcanvas_->translate(-30, -23); | 943 pcanvas_->translate(-30, -23); |
943 vcanvas_->drawBitmap(bitmap, 0, 0, NULL); | 944 vcanvas_->drawBitmap(bitmap, 0, 0, NULL); |
944 pcanvas_->drawBitmap(bitmap, 0, 0, NULL); | 945 pcanvas_->drawBitmap(bitmap, 0, 0, NULL); |
945 EXPECT_EQ(0., ProcessImage(L"translate2")); | 946 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("translate2"))); |
946 } | 947 } |
947 vcanvas_->resetMatrix(); | 948 vcanvas_->resetMatrix(); |
948 pcanvas_->resetMatrix(); | 949 pcanvas_->resetMatrix(); |
949 | 950 |
950 // For scaling and rotation, they use a different algorithm (nearest | 951 // For scaling and rotation, they use a different algorithm (nearest |
951 // neighborhood vs smoothing). At least verify that the output doesn't change | 952 // neighborhood vs smoothing). At least verify that the output doesn't change |
952 // across versions. | 953 // across versions. |
953 compare_canvas_ = false; | 954 compare_canvas_ = false; |
954 | 955 |
955 { | 956 { |
956 vcanvas_->scale(SkDoubleToScalar(1.9), SkDoubleToScalar(1.5)); | 957 vcanvas_->scale(SkDoubleToScalar(1.9), SkDoubleToScalar(1.5)); |
957 pcanvas_->scale(SkDoubleToScalar(1.9), SkDoubleToScalar(1.5)); | 958 pcanvas_->scale(SkDoubleToScalar(1.9), SkDoubleToScalar(1.5)); |
958 vcanvas_->drawBitmap(bitmap, 1, 1, NULL); | 959 vcanvas_->drawBitmap(bitmap, 1, 1, NULL); |
959 pcanvas_->drawBitmap(bitmap, 1, 1, NULL); | 960 pcanvas_->drawBitmap(bitmap, 1, 1, NULL); |
960 EXPECT_EQ(0., ProcessImage(L"scale")); | 961 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("scale"))); |
961 } | 962 } |
962 vcanvas_->resetMatrix(); | 963 vcanvas_->resetMatrix(); |
963 pcanvas_->resetMatrix(); | 964 pcanvas_->resetMatrix(); |
964 | 965 |
965 { | 966 { |
966 vcanvas_->rotate(67); | 967 vcanvas_->rotate(67); |
967 pcanvas_->rotate(67); | 968 pcanvas_->rotate(67); |
968 vcanvas_->drawBitmap(bitmap, 20, -50, NULL); | 969 vcanvas_->drawBitmap(bitmap, 20, -50, NULL); |
969 pcanvas_->drawBitmap(bitmap, 20, -50, NULL); | 970 pcanvas_->drawBitmap(bitmap, 20, -50, NULL); |
970 EXPECT_EQ(0., ProcessImage(L"rotate")); | 971 EXPECT_EQ(0., ProcessImage(FILE_PATH_LITERAL("rotate"))); |
971 } | 972 } |
972 } | 973 } |
973 | 974 |
974 } // namespace skia | 975 } // namespace skia |
OLD | NEW |