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

Unified Diff: gm/gm_json.py

Issue 16155002: Split GM json schema out of display_json_results.py, for sharing with other tools (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 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
« no previous file with comments | « gm/gm_expectations.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gm/gm_json.py
===================================================================
--- gm/gm_json.py (revision 9289)
+++ gm/gm_json.py (working copy)
@@ -3,23 +3,16 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-"""Utility to display a summary of JSON-format GM results, and exit with
-a nonzero errorcode if there were non-ignored failures in the GM results.
+"""Schema of the JSON summary file written out by the GM tool.
-Usage:
- python display_json_results.py <filename>
-
-TODO(epoger): We may want to add flags to set the following:
-- which error types cause a nonzero return code
-- maximum number of tests to list for any one ResultAccumulator
- (to keep the output reasonably short)
+This must be kept in sync with the kJsonKey_ constants in gm_expectations.cpp !
"""
__author__ = 'Elliot Poger'
+# system-level imports
import json
-import sys
# These constants must be kept in sync with the kJsonKey_ constants in
@@ -30,91 +23,12 @@
JSONKEY_ACTUALRESULTS_NOCOMPARISON = 'no-comparison'
JSONKEY_ACTUALRESULTS_SUCCEEDED = 'succeeded'
-
-class ResultAccumulator(object):
- """Object that accumulates results of a given type, and can generate a
- summary upon request."""
-
- def __init__(self, name, do_list, do_fail):
- """name: name of the category this result type falls into
- do_list: whether to list all of the tests with this results type
- do_fail: whether to return with nonzero exit code if there are any
- results of this type
- """
- self._name = name
- self._do_list = do_list
- self._do_fail = do_fail
- self._testnames = []
-
- def AddResult(self, testname):
- """Adds a result of this particular type.
- testname: (string) name of the test"""
- self._testnames.append(testname)
-
- def ShouldSignalFailure(self):
- """Returns true if this result type is serious (self._do_fail is True)
- and there were any results of this type."""
- if self._do_fail and self._testnames:
- return True
- else:
- return False
-
- def GetSummaryLine(self):
- """Returns a single-line string summary of all results added to this
- accumulator so far."""
- summary = ''
- if self._do_fail:
- summary += '[*] '
- else:
- summary += '[ ] '
- summary += str(len(self._testnames))
- summary += ' '
- summary += self._name
- if self._do_list:
- summary += ': '
- for testname in self._testnames:
- summary += testname
- summary += ' '
- return summary
-
-
-def Display(filepath):
- """Displays a summary of the results in a JSON file.
- Returns True if the results are free of any significant failures.
- filepath: (string) path to JSON file"""
-
- # Map labels within the JSON file to the ResultAccumulator for each label.
- results_map = {
- JSONKEY_ACTUALRESULTS_FAILED:
- ResultAccumulator(name='ExpectationsMismatch',
- do_list=True, do_fail=True),
- JSONKEY_ACTUALRESULTS_FAILUREIGNORED:
- ResultAccumulator(name='IgnoredExpectationsMismatch',
- do_list=True, do_fail=False),
- JSONKEY_ACTUALRESULTS_NOCOMPARISON:
- ResultAccumulator(name='MissingExpectations',
- do_list=False, do_fail=False),
- JSONKEY_ACTUALRESULTS_SUCCEEDED:
- ResultAccumulator(name='Passed',
- do_list=False, do_fail=False),
- }
-
- success = True
+def Load(filepath):
+ """Loads the JSON summary written out by the GM tool.
+ Returns a dictionary keyed by the values listed as JSONKEY_ constants
+ above."""
+ # In the future, we should add a version number to the JSON file to ensure
+ # that the writer and reader agree on the schema (raising an exception
+ # otherwise).
json_dict = json.load(open(filepath))
- actual_results = json_dict[JSONKEY_ACTUALRESULTS]
- for label, accumulator in results_map.iteritems():
- results = actual_results[label]
- if results:
- for result in results:
- accumulator.AddResult(result)
- print accumulator.GetSummaryLine()
- if accumulator.ShouldSignalFailure():
- success = False
- print '(results marked with [*] will cause nonzero return value)'
- return success
-
-
-if '__main__' == __name__:
- if len(sys.argv) != 2:
- raise Exception('usage: %s <input-json-filepath>' % sys.argv[0])
- sys.exit(0 if Display(sys.argv[1]) else 1)
+ return json_dict
« no previous file with comments | « gm/gm_expectations.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698