Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(445)

Side by Side Diff: skia/ext/vector_canvas_unittest.cc

Issue 16550: Move the vector canvas unit test data to the skia/ext directory. It wasn't... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/data/vectorcanvastest/uninitialized/00_vc_empty.png ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "skia/ext/vector_canvas.h" 5 #include "skia/ext/vector_canvas.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
11 #include "base/gfx/gdi_util.h" 11 #include "base/gfx/gdi_util.h"
12 #include "base/gfx/png_decoder.h" 12 #include "base/gfx/png_decoder.h"
13 #include "base/gfx/png_encoder.h" 13 #include "base/gfx/png_encoder.h"
14 #include "base/gfx/size.h" 14 #include "base/gfx/size.h"
15 #include "base/path_service.h" 15 #include "base/path_service.h"
16 #include "base/string_util.h" 16 #include "base/string_util.h"
17 #include "base/win_util.h" 17 #include "base/win_util.h"
18 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
19 19
20 #include "SkDashPathEffect.h" 20 #include "SkDashPathEffect.h"
21 21
22 namespace skia { 22 namespace skia {
23 23
24 namespace { 24 namespace {
25 25
26 const wchar_t* const kGenerateSwitch = L"vector-canvas-generate"; 26 const wchar_t* const kGenerateSwitch = L"vector-canvas-generate";
27 27
28 // Base class for unit test that uses data. It initializes a directory path
29 // based on the test's name.
30 class DataUnitTest : public testing::Test {
31 public:
32 DataUnitTest(const std::wstring& base_path) : base_path_(base_path) { }
33
34 protected:
35 // Load the test's data path.
36 virtual void SetUp() {
37 const testing::TestInfo& test_info =
38 *testing::UnitTest::GetInstance()->current_test_info();
39 PathService::Get(base::DIR_SOURCE_ROOT, &test_dir_);
40 file_util::AppendToPath(&test_dir_, base_path_);
41 file_util::AppendToPath(&test_dir_, L"data");
42 file_util::AppendToPath(&test_dir_,
43 ASCIIToWide(test_info.test_case_name()));
44 file_util::AppendToPath(&test_dir_, ASCIIToWide(test_info.name()));
45
46 // Hack for a quick lowercase. We assume all the tests names are ASCII.
47 std::string tmp(WideToASCII(test_dir_));
48 for (size_t i = 0; i < tmp.size(); ++i)
49 tmp[i] = ToLowerASCII(tmp[i]);
50 test_dir_ = ASCIIToWide(tmp);
51 }
52
53 // Returns the fully qualified path of directory containing test data files.
54 const std::wstring& test_dir() const {
55 return test_dir_;
56 }
57
58 // Returns the fully qualified path of a data file.
59 std::wstring test_file(const std::wstring& filename) const {
60 // Hack for a quick lowercase. We assume all the test data file names are
61 // ASCII.
62 std::string tmp(WideToASCII(filename));
63 for (size_t i = 0; i < tmp.size(); ++i)
64 tmp[i] = ToLowerASCII(tmp[i]);
65
66 std::wstring path(test_dir());
67 file_util::AppendToPath(&path, ASCIIToWide(tmp));
68 return path;
69 }
70
71 private:
72 // Path where the unit test is coming from: base, net, chrome, etc.
73 std::wstring base_path_;
74
75 // Path to directory used to contain the test data.
76 std::wstring test_dir_;
77
78 DISALLOW_EVIL_CONSTRUCTORS(DataUnitTest);
79 };
80
81 // Lightweight HDC management. 28 // Lightweight HDC management.
82 class Context { 29 class Context {
83 public: 30 public:
84 Context() : context_(CreateCompatibleDC(NULL)) { 31 Context() : context_(CreateCompatibleDC(NULL)) {
85 EXPECT_TRUE(context_); 32 EXPECT_TRUE(context_);
86 } 33 }
87 ~Context() { 34 ~Context() {
88 DeleteDC(context_); 35 DeleteDC(context_);
89 } 36 }
90 37
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 // 0xABGR). 189 // 0xABGR).
243 std::vector<unsigned char> data_; 190 std::vector<unsigned char> data_;
244 191
245 // Flag to signal if the comparison functions should ignore the alpha channel. 192 // Flag to signal if the comparison functions should ignore the alpha channel.
246 const bool ignore_alpha_; 193 const bool ignore_alpha_;
247 194
248 DISALLOW_EVIL_CONSTRUCTORS(Image); 195 DISALLOW_EVIL_CONSTRUCTORS(Image);
249 }; 196 };
250 197
251 // Base for tests. Capability to process an image. 198 // Base for tests. Capability to process an image.
252 class ImageTest : public DataUnitTest { 199 class ImageTest : public testing::Test {
253 public: 200 public:
254 typedef DataUnitTest parent;
255
256 // In what state is the test running. 201 // In what state is the test running.
257 enum ProcessAction { 202 enum ProcessAction {
258 GENERATE, 203 GENERATE,
259 COMPARE, 204 COMPARE,
260 NOOP, 205 NOOP,
261 }; 206 };
262 207
263 ImageTest(const std::wstring& base_path, ProcessAction default_action) 208 ImageTest(ProcessAction default_action)
264 : parent(base_path), 209 : action_(default_action) {
265 action_(default_action) {
266 } 210 }
267 211
268 protected: 212 protected:
269 virtual void SetUp() { 213 virtual void SetUp() {
270 parent::SetUp(); 214 const testing::TestInfo& test_info =
215 *testing::UnitTest::GetInstance()->current_test_info();
216 PathService::Get(base::DIR_SOURCE_ROOT, &test_dir_);
217 file_util::AppendToPath(&test_dir_, L"skia");
218 file_util::AppendToPath(&test_dir_, L"ext");
219 file_util::AppendToPath(&test_dir_, L"data");
220 file_util::AppendToPath(&test_dir_,
221 ASCIIToWide(test_info.test_case_name()));
222 file_util::AppendToPath(&test_dir_, ASCIIToWide(test_info.name()));
223
224 // Hack for a quick lowercase. We assume all the tests names are ASCII.
225 std::string tmp(WideToASCII(test_dir_));
226 for (size_t i = 0; i < tmp.size(); ++i)
227 tmp[i] = ToLowerASCII(tmp[i]);
228 test_dir_ = ASCIIToWide(tmp);
271 229
272 if (action_ == GENERATE) { 230 if (action_ == GENERATE) {
273 // Make sure the directory exist. 231 // Make sure the directory exist.
274 file_util::CreateDirectory(test_dir()); 232 file_util::CreateDirectory(test_dir_);
275 } 233 }
276 } 234 }
277 235
236 // Returns the fully qualified path of a data file.
237 std::wstring test_file(const std::wstring& filename) const {
238 // Hack for a quick lowercase. We assume all the test data file names are
239 // ASCII.
240 std::string tmp(WideToASCII(filename));
241 for (size_t i = 0; i < tmp.size(); ++i)
242 tmp[i] = ToLowerASCII(tmp[i]);
243
244 std::wstring path(test_dir_);
245 file_util::AppendToPath(&path, ASCIIToWide(tmp));
246 return path;
247 }
248
278 // Compares or saves the bitmap currently loaded in the context, depending on 249 // Compares or saves the bitmap currently loaded in the context, depending on
279 // kGenerating value. Returns 0 on success or any positive value between ]0, 250 // kGenerating value. Returns 0 on success or any positive value between ]0,
280 // 100] on failure. The return value is the percentage of difference between 251 // 100] on failure. The return value is the percentage of difference between
281 // the image in the file and the image in the canvas. 252 // the image in the file and the image in the canvas.
282 double ProcessCanvas(const skia::PlatformCanvasWin& canvas, 253 double ProcessCanvas(const skia::PlatformCanvasWin& canvas,
283 std::wstring filename) const { 254 std::wstring filename) const {
284 filename += L".png"; 255 filename += L".png";
285 switch (action_) { 256 switch (action_) {
286 case GENERATE: 257 case GENERATE:
287 SaveImage(canvas, filename); 258 SaveImage(canvas, filename);
(...skipping 19 matching lines...) Expand all
307 } 278 }
308 279
309 // Saves the bitmap currently loaded in the context into the file. 280 // Saves the bitmap currently loaded in the context into the file.
310 void SaveImage(const skia::PlatformCanvasWin& canvas, 281 void SaveImage(const skia::PlatformCanvasWin& canvas,
311 const std::wstring& filename) const { 282 const std::wstring& filename) const {
312 Image(canvas).SaveToFile(test_file(filename)); 283 Image(canvas).SaveToFile(test_file(filename));
313 } 284 }
314 285
315 ProcessAction action_; 286 ProcessAction action_;
316 287
288 // Path to directory used to contain the test data.
289 std::wstring test_dir_;
290
317 DISALLOW_EVIL_CONSTRUCTORS(ImageTest); 291 DISALLOW_EVIL_CONSTRUCTORS(ImageTest);
318 }; 292 };
319 293
320 // Premultiply the Alpha channel on the R, B and G channels. 294 // Premultiply the Alpha channel on the R, B and G channels.
321 void Premultiply(SkBitmap bitmap) { 295 void Premultiply(SkBitmap bitmap) {
322 SkAutoLockPixels lock(bitmap); 296 SkAutoLockPixels lock(bitmap);
323 for (int x = 0; x < bitmap.width(); ++x) { 297 for (int x = 0; x < bitmap.width(); ++x) {
324 for (int y = 0; y < bitmap.height(); ++y) { 298 for (int y = 0; y < bitmap.height(); ++y) {
325 uint32_t* pixel_addr = bitmap.getAddr32(x, y); 299 uint32_t* pixel_addr = bitmap.getAddr32(x, y);
326 uint32_t color = *pixel_addr; 300 uint32_t color = *pixel_addr;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 return out << "Image(" << image.size().width() << ", " 334 return out << "Image(" << image.size().width() << ", "
361 << image.size().height() << ", " << image.row_length() << ")"; 335 << image.size().height() << ", " << image.row_length() << ")";
362 } 336 }
363 337
364 // Runs simultaneously the same drawing commands on VectorCanvas and 338 // Runs simultaneously the same drawing commands on VectorCanvas and
365 // PlatformCanvas and compare the results. 339 // PlatformCanvas and compare the results.
366 class VectorCanvasTest : public ImageTest { 340 class VectorCanvasTest : public ImageTest {
367 public: 341 public:
368 typedef ImageTest parent; 342 typedef ImageTest parent;
369 343
370 VectorCanvasTest() : parent(L"base", CurrentMode()), compare_canvas_(true) { 344 VectorCanvasTest() : parent(CurrentMode()), compare_canvas_(true) {
371 } 345 }
372 346
373 protected: 347 protected:
374 virtual void SetUp() { 348 virtual void SetUp() {
375 parent::SetUp(); 349 parent::SetUp();
376 Init(100); 350 Init(100);
377 number_ = 0; 351 number_ = 0;
378 } 352 }
379 353
380 virtual void TearDown() { 354 virtual void TearDown() {
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after
1003 { 977 {
1004 vcanvas_->rotate(67); 978 vcanvas_->rotate(67);
1005 pcanvas_->rotate(67); 979 pcanvas_->rotate(67);
1006 vcanvas_->drawBitmap(bitmap, 20, -50, NULL); 980 vcanvas_->drawBitmap(bitmap, 20, -50, NULL);
1007 pcanvas_->drawBitmap(bitmap, 20, -50, NULL); 981 pcanvas_->drawBitmap(bitmap, 20, -50, NULL);
1008 EXPECT_EQ(0., ProcessImage(L"rotate")); 982 EXPECT_EQ(0., ProcessImage(L"rotate"));
1009 } 983 }
1010 } 984 }
1011 985
1012 } // namespace skia 986 } // namespace skia
OLDNEW
« no previous file with comments | « base/data/vectorcanvastest/uninitialized/00_vc_empty.png ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698