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