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

Unified Diff: tools/tests/render_pictures_test.py

Issue 273783004: add --readJsonSummaryPath to render_pictures (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: make BitmapAndDigest lazily compute the bitmap Created 6 years, 7 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 side-by-side diff with in-line comments
Download patch
« tools/PictureRenderer.cpp ('K') | « tools/render_pictures_main.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/tests/render_pictures_test.py
diff --git a/tools/tests/render_pictures_test.py b/tools/tests/render_pictures_test.py
index d378a546885d72221da8d9e5cf322730fd41e0a1..4b11e56ae924a8b1307419c1e3c6b95600ef0af3 100755
--- a/tools/tests/render_pictures_test.py
+++ b/tools/tests/render_pictures_test.py
@@ -10,6 +10,7 @@ Test the render_pictures binary.
"""
# System-level imports
+import copy
import json
import os
import shutil
@@ -27,100 +28,138 @@ EXPECTED_HEADER_CONTENTS = {
}
# Manually verified: 640x400 red rectangle with black border
+# Standard expectations will be set up in such a way that this image fails
+# the comparison.
RED_WHOLEIMAGE = {
"checksumAlgorithm" : "bitmap-64bitMD5",
"checksumValue" : 11092453015575919668,
- "comparisonResult" : "no-comparison",
+ "comparisonResult" : "failed",
"filepath" : "red_skp.png",
}
# Manually verified: 640x400 green rectangle with black border
+# Standard expectations will be set up in such a way that this image passes
+# the comparison.
GREEN_WHOLEIMAGE = {
"checksumAlgorithm" : "bitmap-64bitMD5",
"checksumValue" : 8891695120562235492,
- "comparisonResult" : "no-comparison",
+ "comparisonResult" : "succeeded",
"filepath" : "green_skp.png",
}
# Manually verified these 6 images, all 256x256 tiles,
# consistent with a tiled version of the 640x400 red rect
# with black borders.
+# Standard expectations will be set up in such a way that these images fail
+# the comparison.
RED_TILES = [{
"checksumAlgorithm" : "bitmap-64bitMD5",
"checksumValue" : 5815827069051002745,
- "comparisonResult" : "no-comparison",
+ "comparisonResult" : "failed",
"filepath" : "red_skp-tile0.png",
},{
"checksumAlgorithm" : "bitmap-64bitMD5",
"checksumValue" : 9323613075234140270,
- "comparisonResult" : "no-comparison",
+ "comparisonResult" : "failed",
"filepath" : "red_skp-tile1.png",
}, {
"checksumAlgorithm" : "bitmap-64bitMD5",
"checksumValue" : 16670399404877552232,
- "comparisonResult" : "no-comparison",
+ "comparisonResult" : "failed",
"filepath" : "red_skp-tile2.png",
}, {
"checksumAlgorithm" : "bitmap-64bitMD5",
"checksumValue" : 2507897274083364964,
- "comparisonResult" : "no-comparison",
+ "comparisonResult" : "failed",
"filepath" : "red_skp-tile3.png",
}, {
"checksumAlgorithm" : "bitmap-64bitMD5",
"checksumValue" : 7325267995523877959,
- "comparisonResult" : "no-comparison",
+ "comparisonResult" : "failed",
"filepath" : "red_skp-tile4.png",
}, {
"checksumAlgorithm" : "bitmap-64bitMD5",
"checksumValue" : 2181381724594493116,
- "comparisonResult" : "no-comparison",
+ "comparisonResult" : "failed",
"filepath" : "red_skp-tile5.png",
}]
# Manually verified these 6 images, all 256x256 tiles,
# consistent with a tiled version of the 640x400 green rect
# with black borders.
+# Standard expectations will be set up in such a way that these images pass
+# the comparison.
GREEN_TILES = [{
"checksumAlgorithm" : "bitmap-64bitMD5",
"checksumValue" : 12587324416545178013,
- "comparisonResult" : "no-comparison",
+ "comparisonResult" : "succeeded",
"filepath" : "green_skp-tile0.png",
}, {
"checksumAlgorithm" : "bitmap-64bitMD5",
"checksumValue" : 7624374914829746293,
- "comparisonResult" : "no-comparison",
+ "comparisonResult" : "succeeded",
"filepath" : "green_skp-tile1.png",
}, {
"checksumAlgorithm" : "bitmap-64bitMD5",
"checksumValue" : 5686489729535631913,
- "comparisonResult" : "no-comparison",
+ "comparisonResult" : "succeeded",
"filepath" : "green_skp-tile2.png",
}, {
"checksumAlgorithm" : "bitmap-64bitMD5",
"checksumValue" : 7980646035555096146,
- "comparisonResult" : "no-comparison",
+ "comparisonResult" : "succeeded",
"filepath" : "green_skp-tile3.png",
}, {
"checksumAlgorithm" : "bitmap-64bitMD5",
"checksumValue" : 17817086664365875131,
- "comparisonResult" : "no-comparison",
+ "comparisonResult" : "succeeded",
"filepath" : "green_skp-tile4.png",
}, {
"checksumAlgorithm" : "bitmap-64bitMD5",
"checksumValue" : 10673669813016809363,
- "comparisonResult" : "no-comparison",
+ "comparisonResult" : "succeeded",
"filepath" : "green_skp-tile5.png",
}]
+def modified_dict(input_dict, modification_dict):
+ """Returns a dict, with some modifications applied to it.
+
+ Args:
+ input_dict: a dictionary (which will be copied, not modified in place)
+ modification_dict: a set of key/value pairs to overwrite in the dict
+ """
+ output_dict = input_dict.copy()
+ output_dict.update(modification_dict)
+ return output_dict
+
+
+def modified_list_of_dicts(input_list, modification_dict):
+ """Returns a list of dicts, with some modifications applied to each dict.
+
+ Args:
+ input_list: a list of dictionaries; these dicts will be copied, not
+ modified in place
+ modification_dict: a set of key/value pairs to overwrite in each dict
+ within input_list
+ """
+ output_list = []
+ for input_dict in input_list:
+ output_dict = modified_dict(input_dict, modification_dict)
+ output_list.append(output_dict)
+ return output_list
+
+
class RenderPicturesTest(base_unittest.TestCase):
def setUp(self):
+ self.maxDiff = MAX_DIFF_LENGTH
+ self._expectations_dir = tempfile.mkdtemp()
self._input_skp_dir = tempfile.mkdtemp()
self._temp_dir = tempfile.mkdtemp()
- self.maxDiff = MAX_DIFF_LENGTH
def tearDown(self):
+ shutil.rmtree(self._expectations_dir)
shutil.rmtree(self._input_skp_dir)
shutil.rmtree(self._temp_dir)
@@ -137,14 +176,17 @@ class RenderPicturesTest(base_unittest.TestCase):
probably shouldn't write out red_skp.png and green_skp.png at all!
See http://skbug.com/2464
"""
- output_json_path = os.path.join(self._temp_dir, 'output.json')
+ output_json_path = os.path.join(self._temp_dir, 'actuals.json')
self._generate_skps()
- self._run_render_pictures(['-r', self._input_skp_dir,
- '--bbh', 'grid', '256', '256',
- '--mode', 'tile', '256', '256',
- '--writeJsonSummaryPath', output_json_path,
- '--writePath', self._temp_dir,
- '--writeWholeImage'])
+ expectations_path = self._create_expectations()
+ self._run_render_pictures([
+ '-r', self._input_skp_dir,
+ '--bbh', 'grid', '256', '256',
+ '--mode', 'tile', '256', '256',
+ '--readJsonSummaryPath', expectations_path,
+ '--writeJsonSummaryPath', output_json_path,
+ '--writePath', self._temp_dir,
+ '--writeWholeImage'])
expected_summary_dict = {
"header" : EXPECTED_HEADER_CONTENTS,
"actual-results" : {
@@ -160,15 +202,50 @@ class RenderPicturesTest(base_unittest.TestCase):
}
self._assert_json_contents(output_json_path, expected_summary_dict)
self._assert_directory_contents(
- self._temp_dir, ['red_skp.png', 'green_skp.png', 'output.json'])
+ self._temp_dir, ['red_skp.png', 'green_skp.png', 'actuals.json'])
+
+ def test_missing_tile_and_whole_image(self):
+ """test_tiled_whole_image, but missing expectations for some images.
+ """
+ output_json_path = os.path.join(self._temp_dir, 'actuals.json')
+ self._generate_skps()
+ expectations_path = self._create_expectations(missing_some_images=True)
+ self._run_render_pictures([
+ '-r', self._input_skp_dir,
+ '--bbh', 'grid', '256', '256',
+ '--mode', 'tile', '256', '256',
+ '--readJsonSummaryPath', expectations_path,
+ '--writeJsonSummaryPath', output_json_path,
+ '--writePath', self._temp_dir,
+ '--writeWholeImage'])
+ modified_red_tiles = copy.deepcopy(RED_TILES)
+ modified_red_tiles[5]['comparisonResult'] = 'no-comparison'
+ expected_summary_dict = {
+ "header" : EXPECTED_HEADER_CONTENTS,
+ "actual-results" : {
+ "red.skp": {
+ "tiled-images": modified_red_tiles,
+ "whole-image": modified_dict(
+ RED_WHOLEIMAGE, {"comparisonResult" : "no-comparison"}),
+ },
+ "green.skp": {
+ "tiled-images": GREEN_TILES,
+ "whole-image": GREEN_WHOLEIMAGE,
+ }
+ }
+ }
+ self._assert_json_contents(output_json_path, expected_summary_dict)
def test_untiled(self):
"""Run without tiles."""
- output_json_path = os.path.join(self._temp_dir, 'output.json')
+ output_json_path = os.path.join(self._temp_dir, 'actuals.json')
self._generate_skps()
- self._run_render_pictures(['-r', self._input_skp_dir,
- '--writePath', self._temp_dir,
- '--writeJsonSummaryPath', output_json_path])
+ expectations_path = self._create_expectations()
+ self._run_render_pictures([
+ '-r', self._input_skp_dir,
+ '--readJsonSummaryPath', expectations_path,
+ '--writePath', self._temp_dir,
+ '--writeJsonSummaryPath', output_json_path])
expected_summary_dict = {
"header" : EXPECTED_HEADER_CONTENTS,
"actual-results" : {
@@ -182,11 +259,11 @@ class RenderPicturesTest(base_unittest.TestCase):
}
self._assert_json_contents(output_json_path, expected_summary_dict)
self._assert_directory_contents(
- self._temp_dir, ['red_skp.png', 'green_skp.png', 'output.json'])
+ self._temp_dir, ['red_skp.png', 'green_skp.png', 'actuals.json'])
def test_untiled_writeChecksumBasedFilenames(self):
"""Same as test_untiled, but with --writeChecksumBasedFilenames."""
- output_json_path = os.path.join(self._temp_dir, 'output.json')
+ output_json_path = os.path.join(self._temp_dir, 'actuals.json')
self._generate_skps()
self._run_render_pictures(['-r', self._input_skp_dir,
'--writeChecksumBasedFilenames',
@@ -217,7 +294,7 @@ class RenderPicturesTest(base_unittest.TestCase):
}
self._assert_json_contents(output_json_path, expected_summary_dict)
self._assert_directory_contents(self._temp_dir, [
- 'red_skp', 'green_skp', 'output.json'])
+ 'red_skp', 'green_skp', 'actuals.json'])
self._assert_directory_contents(
os.path.join(self._temp_dir, 'red_skp'),
['bitmap-64bitMD5_11092453015575919668.png'])
@@ -227,12 +304,15 @@ class RenderPicturesTest(base_unittest.TestCase):
def test_untiled_validate(self):
"""Same as test_untiled, but with --validate."""
- output_json_path = os.path.join(self._temp_dir, 'output.json')
+ output_json_path = os.path.join(self._temp_dir, 'actuals.json')
self._generate_skps()
- self._run_render_pictures(['-r', self._input_skp_dir,
- '--validate',
- '--writePath', self._temp_dir,
- '--writeJsonSummaryPath', output_json_path])
+ expectations_path = self._create_expectations()
+ self._run_render_pictures([
+ '-r', self._input_skp_dir,
+ '--readJsonSummaryPath', expectations_path,
+ '--validate',
+ '--writePath', self._temp_dir,
+ '--writeJsonSummaryPath', output_json_path])
expected_summary_dict = {
"header" : EXPECTED_HEADER_CONTENTS,
"actual-results" : {
@@ -246,14 +326,17 @@ class RenderPicturesTest(base_unittest.TestCase):
}
self._assert_json_contents(output_json_path, expected_summary_dict)
self._assert_directory_contents(
- self._temp_dir, ['red_skp.png', 'green_skp.png', 'output.json'])
+ self._temp_dir, ['red_skp.png', 'green_skp.png', 'actuals.json'])
def test_untiled_without_writePath(self):
"""Same as test_untiled, but without --writePath."""
- output_json_path = os.path.join(self._temp_dir, 'output.json')
+ output_json_path = os.path.join(self._temp_dir, 'actuals.json')
self._generate_skps()
- self._run_render_pictures(['-r', self._input_skp_dir,
- '--writeJsonSummaryPath', output_json_path])
+ expectations_path = self._create_expectations()
+ self._run_render_pictures([
+ '-r', self._input_skp_dir,
+ '--readJsonSummaryPath', expectations_path,
+ '--writeJsonSummaryPath', output_json_path])
expected_summary_dict = {
"header" : EXPECTED_HEADER_CONTENTS,
"actual-results" : {
@@ -269,13 +352,16 @@ class RenderPicturesTest(base_unittest.TestCase):
def test_tiled(self):
"""Generate individual tiles."""
- output_json_path = os.path.join(self._temp_dir, 'output.json')
+ output_json_path = os.path.join(self._temp_dir, 'actuals.json')
self._generate_skps()
- self._run_render_pictures(['-r', self._input_skp_dir,
- '--bbh', 'grid', '256', '256',
- '--mode', 'tile', '256', '256',
- '--writePath', self._temp_dir,
- '--writeJsonSummaryPath', output_json_path])
+ expectations_path = self._create_expectations()
+ self._run_render_pictures([
+ '-r', self._input_skp_dir,
+ '--bbh', 'grid', '256', '256',
+ '--mode', 'tile', '256', '256',
+ '--readJsonSummaryPath', expectations_path,
+ '--writePath', self._temp_dir,
+ '--writeJsonSummaryPath', output_json_path])
expected_summary_dict = {
"header" : EXPECTED_HEADER_CONTENTS,
"actual-results" : {
@@ -294,11 +380,11 @@ class RenderPicturesTest(base_unittest.TestCase):
'red_skp-tile3.png', 'red_skp-tile4.png', 'red_skp-tile5.png',
'green_skp-tile0.png', 'green_skp-tile1.png', 'green_skp-tile2.png',
'green_skp-tile3.png', 'green_skp-tile4.png', 'green_skp-tile5.png',
- 'output.json'])
+ 'actuals.json'])
def test_tiled_writeChecksumBasedFilenames(self):
"""Same as test_tiled, but with --writeChecksumBasedFilenames."""
- output_json_path = os.path.join(self._temp_dir, 'output.json')
+ output_json_path = os.path.join(self._temp_dir, 'actuals.json')
self._generate_skps()
self._run_render_pictures(['-r', self._input_skp_dir,
'--bbh', 'grid', '256', '256',
@@ -385,7 +471,7 @@ class RenderPicturesTest(base_unittest.TestCase):
}
self._assert_json_contents(output_json_path, expected_summary_dict)
self._assert_directory_contents(self._temp_dir, [
- 'red_skp', 'green_skp', 'output.json'])
+ 'red_skp', 'green_skp', 'actuals.json'])
self._assert_directory_contents(
os.path.join(self._temp_dir, 'red_skp'),
['bitmap-64bitMD5_5815827069051002745.png',
@@ -410,6 +496,43 @@ class RenderPicturesTest(base_unittest.TestCase):
'--config', '8888',
] + args)
+ def _create_expectations(self, missing_some_images=False,
+ rel_path='expectations.json'):
+ """Creates expectations JSON file within self._expectations_dir .
+
+ Args:
+ missing_some_images: (bool) whether to remove expectations for a subset
+ of the images
+ rel_path: (string) relative path within self._expectations_dir to write
+ the expectations into
+
+ Returns: full path to the expectations file created.
+ """
+ expectations_dict = {
+ "header" : EXPECTED_HEADER_CONTENTS,
+ "expected-results" : {
+ # red.skp: these should fail the comparison
+ "red.skp": {
+ "tiled-images": modified_list_of_dicts(
+ RED_TILES, {'checksumValue': 11111}),
+ "whole-image": modified_dict(
+ RED_WHOLEIMAGE, {'checksumValue': 22222}),
+ },
+ # green.skp: these should pass the comparison
+ "green.skp": {
+ "tiled-images": GREEN_TILES,
+ "whole-image": GREEN_WHOLEIMAGE,
+ }
+ }
+ }
+ if missing_some_images:
+ del expectations_dict['expected-results']['red.skp']['whole-image']
+ del expectations_dict['expected-results']['red.skp']['tiled-images'][-1]
+ path = os.path.join(self._expectations_dir, rel_path)
+ with open(path, 'w') as fh:
+ json.dump(expectations_dict, fh)
+ return path
+
def _generate_skps(self):
"""Runs the skpmaker binary to generate files in self._input_skp_dir."""
self._run_skpmaker(
@@ -452,7 +575,6 @@ class RenderPicturesTest(base_unittest.TestCase):
"""
self.assertEqual(set(os.listdir(dir_path)), set(expected_filenames))
-
def _assert_json_contents(self, json_path, expected_dict):
"""Asserts that contents of a JSON file are identical to expected_dict.
@@ -465,9 +587,13 @@ class RenderPicturesTest(base_unittest.TestCase):
AssertionError: contents of the JSON file are not identical to
expected_dict.
"""
- file_contents = open(json_path, 'r').read()
- actual_dict = json.loads(file_contents)
- self.assertEqual(actual_dict, expected_dict)
+ prettyprinted_expected_dict = json.dumps(expected_dict, sort_keys=True,
+ indent=2)
+ with open(json_path, 'r') as fh:
+ prettyprinted_json_dict = json.dumps(json.load(fh), sort_keys=True,
+ indent=2)
+ self.assertMultiLineEqual(prettyprinted_expected_dict,
+ prettyprinted_json_dict)
def main():
« tools/PictureRenderer.cpp ('K') | « tools/render_pictures_main.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698