diff options
| author | Chris Matthews <cmatthews5@apple.com> | 2018-05-11 00:25:42 +0000 |
|---|---|---|
| committer | Chris Matthews <cmatthews5@apple.com> | 2018-05-11 00:25:42 +0000 |
| commit | 5f74591847db036f2fb23cf568886a6a71af3522 (patch) | |
| tree | 93c13ad3938faf5553303e33a5bb1c837be6b56b | |
| parent | a119322c1de3518e7d6acc0d5bfa0b5942f874cf (diff) | |
| download | bcm5719-llvm-5f74591847db036f2fb23cf568886a6a71af3522.tar.gz bcm5719-llvm-5f74591847db036f2fb23cf568886a6a71af3522.zip | |
Refactor xunit test case builder to not use as much str addition
String concatenation in python is slow. Refactor to not concatenate the
possibly large strings of test output and instead write them directly
to the output file.
llvm-svn: 332064
| -rw-r--r-- | llvm/utils/lit/lit/Test.py | 20 | ||||
| -rwxr-xr-x | llvm/utils/lit/lit/main.py | 3 |
2 files changed, 12 insertions, 11 deletions
diff --git a/llvm/utils/lit/lit/Test.py b/llvm/utils/lit/lit/Test.py index d87906cf5ed..c68b6d97f4e 100644 --- a/llvm/utils/lit/lit/Test.py +++ b/llvm/utils/lit/lit/Test.py @@ -360,7 +360,8 @@ class Test: """ return self.suite.config.is_early - def getJUnitXML(self): + def writeJUnitXML(self, fil): + """Write the test's report xml representation to a file handle.""" test_name = escape(self.path_in_suite[-1]) test_path = self.path_in_suite[:-1] safe_test_path = [x.replace(".","_") for x in test_path] @@ -370,14 +371,13 @@ class Test: class_name = safe_name + "." + "/".join(safe_test_path) else: class_name = safe_name + "." + safe_name - - xml = "<testcase classname='" + class_name + "' name='" + \ - test_name + "'" - xml += " time='{:.2f}'".format( - self.result.elapsed if self.result.elapsed is not None else 0.0) + testcase_template = u"<testcase classname='{class_name}' name='{test_name}' time='{time:.2f}'" + elapsed_time = self.result.elapsed if self.result.elapsed is not None else 0.0 + testcase_xml = testcase_template.format(class_name=class_name, test_name=test_name, time=elapsed_time) + fil.write(testcase_xml) if self.result.code.isFailure: - xml += ">\n\t<failure >\n" + escape(self.result.output) - xml += "\n\t</failure>\n</testcase>" + fil.write(">\n\t<failure >\n") + fil.write(escape(self.result.output)) + fil.write("\n\t</failure>\n</testcase>") else: - xml += "/>" - return xml + fil.write("/>") diff --git a/llvm/utils/lit/lit/main.py b/llvm/utils/lit/lit/main.py index 6c1673754e8..d20b88109e6 100755 --- a/llvm/utils/lit/lit/main.py +++ b/llvm/utils/lit/lit/main.py @@ -614,7 +614,8 @@ def main_with_tmp(builtinParameters): xunit_output_file.write(" failures='" + str(suite['failures']) + "'>\n") for result_test in suite['tests']: - xunit_output_file.write(result_test.getJUnitXML() + "\n") + result_test.writeJUnitXML(xunit_output_file) + xunit_output_file.write("\n") xunit_output_file.write("</testsuite>\n") xunit_output_file.write("</testsuites>") xunit_output_file.close() |

