Chromium Code Reviews| Index: tools/testrunner/local/progress.py |
| diff --git a/tools/testrunner/local/progress.py b/tools/testrunner/local/progress.py |
| index 03116ee768d758cb1d0d6b3d6f8ab94dc08a7a0c..9ee4090707572370a545b52d9822f07e3617e23e 100644 |
| --- a/tools/testrunner/local/progress.py |
| +++ b/tools/testrunner/local/progress.py |
| @@ -26,11 +26,17 @@ |
| # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| +import json |
| +import os |
| import sys |
| import time |
| from . import junit_output |
| + |
| +ABS_PATH_PREFIX = os.getcwd() + os.sep |
| + |
| + |
| def EscapeCommand(command): |
| parts = [] |
| for part in command: |
| @@ -277,6 +283,56 @@ class JUnitTestProgressIndicator(ProgressIndicator): |
| fail_text) |
| +class JsonTestProgressIndicator(ProgressIndicator): |
| + |
| + def __init__(self, progress_indicator, json_test_results, arch, mode): |
| + self.progress_indicator = progress_indicator |
| + self.json_test_results = json_test_results |
| + self.arch = arch |
| + self.mode = mode |
| + self.results = [] |
| + |
| + def Starting(self): |
| + self.progress_indicator.runner = self.runner |
| + self.progress_indicator.Starting() |
| + |
| + def Done(self): |
| + self.progress_indicator.Done() |
| + complete_results = [] |
| + if os.path.exists(self.json_test_results): |
| + with open(self.json_test_results, "r") as f: |
| + # Buildbot might start out with an empty file. |
| + complete_results = json.loads(f.read() or "[]") |
| + |
| + complete_results.append({ |
| + "arch": self.arch, |
| + "mode": self.mode, |
| + "results": self.results, |
| + }) |
| + |
| + with open(self.json_test_results, "w") as f: |
| + f.write(json.dumps(complete_results)) |
| + |
| + def AboutToRun(self, test): |
| + self.progress_indicator.AboutToRun(test) |
| + |
| + def HasRun(self, test, has_unexpected_output): |
| + self.progress_indicator.HasRun(test, has_unexpected_output) |
| + if not has_unexpected_output: |
| + return |
| + self.results.append({ |
| + "suite": test.suite.name, |
|
Jakob Kummerow
2014/05/16 15:28:34
Consider combining "suite" and "path" to:
"test":
|
| + "path": test.path, |
| + "flags": test.flags, |
| + "command": EscapeCommand(self.runner.GetCommand(test)).replace( |
| + ABS_PATH_PREFIX, ""), |
| + "stdout": test.output.stdout, |
| + "stderr": test.output.stderr, |
| + "exit_code": test.output.exit_code, |
| + "result": "CRASH" if test.output.HasCrashed() else "FAIL", |
| + }) |
| + |
| + |
| PROGRESS_INDICATORS = { |
| 'verbose': VerboseProgressIndicator, |
| 'dots': DotsProgressIndicator, |