mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-12 13:30:51 +00:00
Merging r223163:
------------------------------------------------------------------------ r223163 | cmatthews | 2014-12-02 14:19:21 -0800 (Tue, 02 Dec 2014) | 5 lines Give lit a --xunit-xml-output option for saving results in xunit format --xunit-xml-output saves test results to disk in JUnit's xml format. This will allow Jenkins to report the details of a lit run. Based on a patch by David Chisnall. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_35@223250 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
59b40b0f4b
commit
0817ac89c2
@ -1,4 +1,5 @@
|
||||
import os
|
||||
from xml.sax.saxutils import escape
|
||||
|
||||
# Test result codes.
|
||||
|
||||
@ -194,3 +195,17 @@ class Test:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def getJUnitXML(self):
|
||||
test_name = self.path_in_suite[-1]
|
||||
test_path = self.path_in_suite[:-1]
|
||||
|
||||
xml = "<testcase classname='" + self.suite.name + "." + "/".join(test_path) + "'" + " name='" + test_name + "'"
|
||||
xml += " time='%.2f'" % (self.result.elapsed,)
|
||||
if self.result.code.isFailure:
|
||||
xml += ">\n\t<failure >\n" + escape(self.result.output)
|
||||
xml += "\n\t</failure>\n</testcase>"
|
||||
else:
|
||||
xml += "/>"
|
||||
return xml
|
@ -194,6 +194,9 @@ def main(builtinParameters = {}):
|
||||
group.add_option("", "--no-execute", dest="noExecute",
|
||||
help="Don't execute any tests (assume PASS)",
|
||||
action="store_true", default=False)
|
||||
group.add_option("", "--xunit-xml-output", dest="xunit_output_file",
|
||||
help=("Write XUnit-compatible XML test reports to the"
|
||||
" specified file"), default=None)
|
||||
parser.add_option_group(group)
|
||||
|
||||
group = OptionGroup(parser, "Test Selection")
|
||||
@ -285,10 +288,10 @@ def main(builtinParameters = {}):
|
||||
if opts.showSuites or opts.showTests:
|
||||
# Aggregate the tests by suite.
|
||||
suitesAndTests = {}
|
||||
for t in run.tests:
|
||||
if t.suite not in suitesAndTests:
|
||||
suitesAndTests[t.suite] = []
|
||||
suitesAndTests[t.suite].append(t)
|
||||
for result_test in run.tests:
|
||||
if result_test.suite not in suitesAndTests:
|
||||
suitesAndTests[result_test.suite] = []
|
||||
suitesAndTests[result_test.suite].append(result_test)
|
||||
suitesAndTests = list(suitesAndTests.items())
|
||||
suitesAndTests.sort(key = lambda item: item[0].name)
|
||||
|
||||
@ -321,8 +324,8 @@ def main(builtinParameters = {}):
|
||||
except:
|
||||
parser.error("invalid regular expression for --filter: %r" % (
|
||||
opts.filter))
|
||||
run.tests = [t for t in run.tests
|
||||
if rex.search(t.getFullName())]
|
||||
run.tests = [result_test for result_test in run.tests
|
||||
if rex.search(result_test.getFullName())]
|
||||
|
||||
# Then select the order.
|
||||
if opts.shuffle:
|
||||
@ -330,7 +333,7 @@ def main(builtinParameters = {}):
|
||||
elif opts.incremental:
|
||||
sort_by_incremental_cache(run)
|
||||
else:
|
||||
run.tests.sort(key = lambda t: t.getFullName())
|
||||
run.tests.sort(key = lambda result_test: result_test.getFullName())
|
||||
|
||||
# Finally limit the number of tests, if desired.
|
||||
if opts.maxTests is not None:
|
||||
@ -415,6 +418,36 @@ def main(builtinParameters = {}):
|
||||
if N:
|
||||
print(' %s: %d' % (name,N))
|
||||
|
||||
if opts.xunit_output_file:
|
||||
# Collect the tests, indexed by test suite
|
||||
by_suite = {}
|
||||
for result_test in run.tests:
|
||||
suite = result_test.suite.config.name
|
||||
if suite not in by_suite:
|
||||
by_suite[suite] = {
|
||||
'passes' : 0,
|
||||
'failures' : 0,
|
||||
'tests' : [] }
|
||||
by_suite[suite]['tests'].append(result_test)
|
||||
if result_test.result.code.isFailure:
|
||||
by_suite[suite]['failures'] += 1
|
||||
else:
|
||||
by_suite[suite]['passes'] += 1
|
||||
xunit_output_file = open(opts.xunit_output_file, "w")
|
||||
xunit_output_file.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n")
|
||||
xunit_output_file.write("<testsuites>\n")
|
||||
for suite_name, suite in by_suite.items():
|
||||
xunit_output_file.write("<testsuite name='" + suite_name + "'")
|
||||
xunit_output_file.write(" tests='" + str(suite['passes'] +
|
||||
suite['failures']) + "'")
|
||||
xunit_output_file.write(" failures='" + str(suite['failures']) +
|
||||
"'>\n")
|
||||
for result_test in suite['tests']:
|
||||
xunit_output_file.write(result_test.getJUnitXML() + "\n")
|
||||
xunit_output_file.write("</testsuite>\n")
|
||||
xunit_output_file.write("</testsuites>")
|
||||
xunit_output_file.close()
|
||||
|
||||
# If we encountered any additional errors, exit abnormally.
|
||||
if litConfig.numErrors:
|
||||
sys.stderr.write('\n%d error(s), exiting.\n' % litConfig.numErrors)
|
||||
|
Loading…
Reference in New Issue
Block a user