OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 | 2 |
3 """ | 3 """ |
4 Copyright 2014 Google Inc. | 4 Copyright 2014 Google Inc. |
5 | 5 |
6 Use of this source code is governed by a BSD-style license that can be | 6 Use of this source code is governed by a BSD-style license that can be |
7 found in the LICENSE file. | 7 found in the LICENSE file. |
8 | 8 |
9 Test the render_pictures binary. | 9 Test the render_pictures binary. |
10 """ | 10 """ |
11 | 11 |
12 # System-level imports | 12 # System-level imports |
13 import json | 13 import json |
14 import os | 14 import os |
15 import shutil | 15 import shutil |
16 import tempfile | 16 import tempfile |
17 | 17 |
18 # Imports from within Skia | 18 # Imports from within Skia |
19 import base_unittest | 19 import base_unittest |
20 | 20 |
| 21 # Maximum length of text diffs to show when tests fail |
| 22 MAX_DIFF_LENGTH = 30000 |
| 23 |
21 | 24 |
22 class RenderPicturesTest(base_unittest.TestCase): | 25 class RenderPicturesTest(base_unittest.TestCase): |
23 | 26 |
24 def setUp(self): | 27 def setUp(self): |
25 self._temp_dir = tempfile.mkdtemp() | 28 self._temp_dir = tempfile.mkdtemp() |
| 29 self.maxDiff = MAX_DIFF_LENGTH |
26 | 30 |
27 def tearDown(self): | 31 def tearDown(self): |
28 shutil.rmtree(self._temp_dir) | 32 shutil.rmtree(self._temp_dir) |
29 | 33 |
30 def test_tiled_whole_image_no_comparison(self): | 34 def test_tiled_whole_image_no_comparison(self): |
31 """Run render_pictures with tiles and --writeWholeImage flag.""" | 35 """Run render_pictures with tiles and --writeWholeImage flag.""" |
32 input_skp_path = os.path.join(self._temp_dir, 'input.skp') | 36 input_skp_path = os.path.join(self._temp_dir, 'input.skp') |
33 output_json_path = os.path.join(self._temp_dir, 'output.json') | 37 output_json_path = os.path.join(self._temp_dir, 'output.json') |
34 self._run_skpmaker(['--writePath', input_skp_path]) | 38 self._run_skpmaker(['--writePath', input_skp_path]) |
35 self._run_render_pictures(['-r', input_skp_path, | 39 self._run_render_pictures(['-r', input_skp_path, |
36 '--bbh', 'grid', '256', '256', | 40 '--bbh', 'grid', '256', '256', |
37 '--mode', 'tile', '256', '256', | 41 '--mode', 'tile', '256', '256', |
38 '--writeJsonSummaryPath', output_json_path, | 42 '--writeJsonSummaryPath', output_json_path, |
39 '--writeWholeImage']) | 43 '--writeWholeImage']) |
40 expected_summary_dict = { | 44 expected_summary_dict = { |
41 "actual-results" : { | 45 "actual-results" : { |
42 "no-comparison" : { | 46 "no-comparison" : { |
43 # Manually verified: 640x400 red image with black border | 47 # Manually verified: 640x400 red rectangle with black border |
44 "input.png" : [ "bitmap-64bitMD5", 11092453015575919668 ] | 48 "input.png" : [ "bitmap-64bitMD5", 11092453015575919668 ] |
45 } | 49 } |
46 } | 50 } |
47 } | 51 } |
48 self._assert_json_contents(output_json_path, expected_summary_dict) | 52 self._assert_json_contents(output_json_path, expected_summary_dict) |
49 | 53 |
50 def test_tiled_no_comparison(self): | 54 def test_untiled_no_comparison(self): |
51 """Generate individual tiles. | 55 """Run without tiles.""" |
52 | |
53 TODO(epoger): The results of this test are currently broken! | |
54 The summary should contain a list of tiles, but for some reason, it is | |
55 empty.""" | |
56 input_skp_path = os.path.join(self._temp_dir, 'input.skp') | 56 input_skp_path = os.path.join(self._temp_dir, 'input.skp') |
57 output_json_path = os.path.join(self._temp_dir, 'output.json') | 57 output_json_path = os.path.join(self._temp_dir, 'output.json') |
58 self._run_skpmaker(['--writePath', input_skp_path]) | 58 self._run_skpmaker(['--writePath', input_skp_path]) |
59 self._run_render_pictures(['-r', input_skp_path, | 59 self._run_render_pictures(['-r', input_skp_path, |
60 '--bbh', 'grid', '256', '256', | 60 '--writePath', self._temp_dir, |
61 '--mode', 'tile', '256', '256', | |
62 '--writeJsonSummaryPath', output_json_path]) | 61 '--writeJsonSummaryPath', output_json_path]) |
63 expected_summary_dict = { | 62 expected_summary_dict = { |
64 "actual-results" : { | 63 "actual-results" : { |
65 "no-comparison" : None | 64 "no-comparison" : { |
| 65 # Manually verified: 640x400 red rectangle with black border |
| 66 "input.png" : ["bitmap-64bitMD5", 11092453015575919668], |
66 } | 67 } |
67 } | 68 } |
| 69 } |
68 self._assert_json_contents(output_json_path, expected_summary_dict) | 70 self._assert_json_contents(output_json_path, expected_summary_dict) |
69 | 71 |
70 def test_untiled_no_comparison(self): | 72 def test_validate(self): |
71 """Run without tiles. | 73 """Same as test_untiled_no_comparison, but with --validate. |
72 | 74 |
73 TODO(epoger): The results of this test are currently broken! | 75 TODO(epoger): This test generates undesired results! The call |
74 The summary should contain a single image, but for some reason, it is | 76 to render_pictures should succeed, and generate the same output as |
75 empty.""" | 77 test_untiled_no_comparison. |
| 78 See https://code.google.com/p/skia/issues/detail?id=2044 ('render_pictures: |
| 79 --validate fails') |
| 80 """ |
| 81 input_skp_path = os.path.join(self._temp_dir, 'input.skp') |
| 82 output_json_path = os.path.join(self._temp_dir, 'output.json') |
| 83 self._run_skpmaker(['--writePath', input_skp_path]) |
| 84 with self.assertRaises(Exception): |
| 85 self._run_render_pictures(['-r', input_skp_path, |
| 86 '--validate', |
| 87 '--writePath', self._temp_dir, |
| 88 '--writeJsonSummaryPath', output_json_path]) |
| 89 |
| 90 def test_without_writePath(self): |
| 91 """Same as test_untiled_no_comparison, but without --writePath. |
| 92 |
| 93 TODO(epoger): This test generates undesired results! |
| 94 See https://code.google.com/p/skia/issues/detail?id=2043 ('render_pictures: |
| 95 --writeJsonSummaryPath fails unless --writePath is specified') |
| 96 """ |
76 input_skp_path = os.path.join(self._temp_dir, 'input.skp') | 97 input_skp_path = os.path.join(self._temp_dir, 'input.skp') |
77 output_json_path = os.path.join(self._temp_dir, 'output.json') | 98 output_json_path = os.path.join(self._temp_dir, 'output.json') |
78 self._run_skpmaker(['--writePath', input_skp_path]) | 99 self._run_skpmaker(['--writePath', input_skp_path]) |
79 self._run_render_pictures(['-r', input_skp_path, | 100 self._run_render_pictures(['-r', input_skp_path, |
80 '--writeJsonSummaryPath', output_json_path]) | 101 '--writeJsonSummaryPath', output_json_path]) |
81 expected_summary_dict = { | 102 expected_summary_dict = { |
82 "actual-results" : { | 103 "actual-results" : { |
83 "no-comparison" : None | 104 "no-comparison" : None, |
| 105 } |
| 106 } |
| 107 self._assert_json_contents(output_json_path, expected_summary_dict) |
| 108 |
| 109 def test_tiled_no_comparison(self): |
| 110 """Generate individual tiles.""" |
| 111 input_skp_path = os.path.join(self._temp_dir, 'input.skp') |
| 112 output_json_path = os.path.join(self._temp_dir, 'output.json') |
| 113 self._run_skpmaker(['--writePath', input_skp_path]) |
| 114 self._run_render_pictures(['-r', input_skp_path, |
| 115 '--bbh', 'grid', '256', '256', |
| 116 '--mode', 'tile', '256', '256', |
| 117 '--writePath', self._temp_dir, |
| 118 '--writeJsonSummaryPath', output_json_path]) |
| 119 expected_summary_dict = { |
| 120 "actual-results" : { |
| 121 "no-comparison" : { |
| 122 # Manually verified these 6 images, all 256x256 tiles, |
| 123 # consistent with a tiled version of the 640x400 red rect |
| 124 # with black borders. |
| 125 "input0.png" : ["bitmap-64bitMD5", 5815827069051002745], |
| 126 "input1.png" : ["bitmap-64bitMD5", 9323613075234140270], |
| 127 "input2.png" : ["bitmap-64bitMD5", 16670399404877552232], |
| 128 "input3.png" : ["bitmap-64bitMD5", 2507897274083364964], |
| 129 "input4.png" : ["bitmap-64bitMD5", 7325267995523877959], |
| 130 "input5.png" : ["bitmap-64bitMD5", 2181381724594493116], |
84 } | 131 } |
85 } | 132 } |
| 133 } |
86 self._assert_json_contents(output_json_path, expected_summary_dict) | 134 self._assert_json_contents(output_json_path, expected_summary_dict) |
87 | 135 |
88 def _run_render_pictures(self, args): | 136 def _run_render_pictures(self, args): |
89 binary = self.find_path_to_program('render_pictures') | 137 binary = self.find_path_to_program('render_pictures') |
90 return self.run_command([binary, | 138 return self.run_command([binary, |
91 '--clone', '1', | 139 '--clone', '1', |
92 '--config', '8888', | 140 '--config', '8888', |
93 '--validate' | |
94 ] + args) | 141 ] + args) |
95 | 142 |
96 def _run_skpmaker(self, args): | 143 def _run_skpmaker(self, args): |
97 binary = self.find_path_to_program('skpmaker') | 144 binary = self.find_path_to_program('skpmaker') |
98 return self.run_command([binary, | 145 return self.run_command([binary, |
99 '--red', '255', | 146 '--red', '255', |
100 '--green', '0', | 147 '--green', '0', |
101 '--blue', '0', | 148 '--blue', '0', |
102 '--width', '640', | 149 '--width', '640', |
103 '--height', '400', | 150 '--height', '400', |
(...skipping 15 matching lines...) Expand all Loading... |
119 actual_dict = json.loads(file_contents) | 166 actual_dict = json.loads(file_contents) |
120 self.assertEqual(actual_dict, expected_dict) | 167 self.assertEqual(actual_dict, expected_dict) |
121 | 168 |
122 | 169 |
123 def main(): | 170 def main(): |
124 base_unittest.main(RenderPicturesTest) | 171 base_unittest.main(RenderPicturesTest) |
125 | 172 |
126 | 173 |
127 if __name__ == '__main__': | 174 if __name__ == '__main__': |
128 main() | 175 main() |
OLD | NEW |