If only one result file is specified, just print all the tests
followed by the outcome.  For example:

fbo/FBO blit from missing attachment: pass
fbo/FBO blit to missing attachment: fail
fbo/fbo-1d: pass
fbo/fbo-3d: crash
[...]

If multiple result files are specified, we'll print pass/fail/etc
for each file.  Example:

fbo/FBO blit from missing attachment: pass pass
fbo/FBO blit to missing attachment: fail pass
[...]

If -s (--summary) is specified, only print a summary of the number of
passes, fails, crashes, etc.

if -d (-diff) is specified with multipe result files, only print the
tests which had different outcomes.  Good for spotting regressions.
---
 piglit-summary.py |  158 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 158 insertions(+), 0 deletions(-)
 create mode 100755 piglit-summary.py

diff --git a/piglit-summary.py b/piglit-summary.py
new file mode 100755
index 0000000..ae1e5ca
--- /dev/null
+++ b/piglit-summary.py
@@ -0,0 +1,158 @@
+#!/usr/bin/env python
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# This permission notice shall be included in all copies or
+# substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+# PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHOR(S) BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+
+# Print a very simple summary of piglit results file(s).
+# When multiple result files are specified, compare the results
+# of each test run to look for differences/regressions.
+#
+# Brian Paul
+# April 2013
+
+
+from getopt import getopt, GetoptError
+import cgi
+import os, os.path
+import sys
+import string
+
+sys.path.append(os.path.dirname(os.path.realpath(sys.argv[0])))
+import framework.core as core
+import framework.summary
+
+
+#############################################################################
+##### Main program
+#############################################################################
+def usage():
+       USAGE = """\
+Usage: %(progName)s [options] resultsfile [...]
+
+Print path/name of each test and the result.
+When multiple files are specified, count the number of differences in results.
+Tests are sorted by name.
+
+Options:
+  -h, --help            Show this message
+  -s, --summary         Only display pass/fail summary
+  -d, --diff            Only display the differences between multiple result 
files
+  -l, --list=listfile   Use test results from a list file
+"""
+       print USAGE % {'progName': sys.argv[0]}
+       sys.exit(1)
+
+
+def parse_listfile(filename):
+       file = open(filename, "r")
+       code = "".join([s for s in file])
+       file.close()
+       return eval(code)
+
+def loadresult(descr):
+       result = core.loadTestResults(descr[0])
+       if len(descr) > 1:
+               result.__dict__.update(descr[1])
+       return result
+
+def main():
+       try:
+               options, args = getopt(sys.argv[1:], "hsdl:", [ "help", 
"summary", "diff", "list" ])
+       except GetoptError:
+               usage()
+
+       OptionList = []
+       CountsOnly = False
+       DiffOnly = False
+       for name, value in options:
+               if name == "-h" or name == "--help":
+                       usage()
+               elif name == "-s" or name == "--summary":
+                       CountsOnly = True
+               elif name == "-d" or name == "--diff":
+                       DiffOnly = True
+               elif name == "-l" or name == "--list":
+                       OptionList += parse_listfile(value)
+
+       OptionList += [[name] for name in args[0:]]
+
+       if len(args) < 1 or len(OptionList) == 0:
+               usage()
+
+       # make list of results
+       results = []
+       for result_dir in OptionList:
+               results.append(loadresult(result_dir))
+
+       summary = framework.summary.Summary(results)
+
+       # possible test outcomes
+       possible_results = [ "pass", "fail", "crash", "skip", "warn" ]
+       if len(OptionList) > 1:
+                       possible_results.append("changes")
+
+       # init the summary counters
+       counts = {}
+       for result in possible_results:
+                       counts[result] = 0
+
+       # get all results
+       all = summary.allTests()
+
+       # sort the results list by path
+       all = sorted(all, key=lambda test: test.path)
+
+       # loop over the tests
+       for test in all:
+               results = []
+               anyChange = False
+               # loop over the results for multiple runs
+               for j in range(len(summary.testruns)):
+                       outcome = test.results[j]['result'] # 'pass', 'fail', 
etc.
+                       # check for different results between multiple runs
+                       if len(results) >= 1 and not outcome in results:
+                               # something changed
+                               counts["changes"] += 1
+                               anyChange = True
+                       results.append(outcome)
+
+               # if all test runs had the same outcome:
+               if not anyChange:
+                       counts[outcome] += 1
+
+               # print the individual test result line
+               if DiffOnly:
+                       if anyChange:
+                               print "%s: %s" % (test.path, 
string.join(results," "))
+               elif not CountsOnly:
+                       print "%s: %s" % (test.path, string.join(results," "))
+
+       # print the summary info
+       print "summary:"
+       total = 0
+       for result in possible_results:
+               print " %7s: %5d" % (result, counts[result])
+               total += counts[result]
+       print "   total: %5d" % total
+
+
+if __name__ == "__main__":
+       main()
-- 
1.7.3.4

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to