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

Side by Side Diff: tools/testrunner/local/progress.py

Issue 13813003: Add support for JUnit compatible XML output in the new test runner. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fixed nits. Created 7 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tools/testrunner/local/junit_output.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2012 the V8 project authors. All rights reserved. 1 # Copyright 2012 the V8 project authors. All rights reserved.
2 # Redistribution and use in source and binary forms, with or without 2 # Redistribution and use in source and binary forms, with or without
3 # modification, are permitted provided that the following conditions are 3 # modification, are permitted provided that the following conditions are
4 # met: 4 # met:
5 # 5 #
6 # * Redistributions of source code must retain the above copyright 6 # * Redistributions of source code must retain the above copyright
7 # notice, this list of conditions and the following disclaimer. 7 # notice, this list of conditions and the following disclaimer.
8 # * Redistributions in binary form must reproduce the above 8 # * Redistributions in binary form must reproduce the above
9 # copyright notice, this list of conditions and the following 9 # copyright notice, this list of conditions and the following
10 # disclaimer in the documentation and/or other materials provided 10 # disclaimer in the documentation and/or other materials provided
(...skipping 11 matching lines...) Expand all
22 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 28
29 import sys 29 import sys
30 import time 30 import time
31 31
32 from . import junit_output
33
32 def EscapeCommand(command): 34 def EscapeCommand(command):
33 parts = [] 35 parts = []
34 for part in command: 36 for part in command:
35 if ' ' in part: 37 if ' ' in part:
36 # Escape spaces. We may need to escape more characters for this 38 # Escape spaces. We may need to escape more characters for this
37 # to work properly. 39 # to work properly.
38 parts.append('"%s"' % part) 40 parts.append('"%s"' % part)
39 else: 41 else:
40 parts.append(part) 42 parts.append(part)
41 return " ".join(parts) 43 return " ".join(parts)
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 "+%(passed) 4d|-%(failed) 4d]: %(test)s"), 225 "+%(passed) 4d|-%(failed) 4d]: %(test)s"),
224 'stdout': '%s', 226 'stdout': '%s',
225 'stderr': '%s', 227 'stderr': '%s',
226 } 228 }
227 super(MonochromeProgressIndicator, self).__init__(templates) 229 super(MonochromeProgressIndicator, self).__init__(templates)
228 230
229 def ClearLine(self, last_line_length): 231 def ClearLine(self, last_line_length):
230 print ("\r" + (" " * last_line_length) + "\r"), 232 print ("\r" + (" " * last_line_length) + "\r"),
231 233
232 234
235 class JUnitTestProgressIndicator(ProgressIndicator):
236
237 def __init__(self, progress_indicator, junitout, junittestsuite):
238 self.progress_indicator = progress_indicator
239 self.outputter = junit_output.JUnitTestOutput(junittestsuite)
240 if junitout:
241 self.outfile = open(junitout, "w")
242 else:
243 self.outfile = sys.stdout
244
245 def Starting(self):
246 self.progress_indicator.runner = self.runner
247 self.progress_indicator.Starting()
248
249 def Done(self):
250 self.progress_indicator.Done()
251 self.outputter.FinishAndWrite(self.outfile)
252 if self.outfile != sys.stdout:
253 self.outfile.close()
254
255 def AboutToRun(self, test):
256 self.progress_indicator.AboutToRun(test)
257
258 def HasRun(self, test):
259 self.progress_indicator.HasRun(test)
260 fail_text = ""
261 if test.suite.HasUnexpectedOutput(test):
262 stdout = test.output.stdout.strip()
263 if len(stdout):
264 fail_text += "stdout:\n%s\n" % stdout
265 stderr = test.output.stderr.strip()
266 if len(stderr):
267 fail_text += "stderr:\n%s\n" % stderr
268 fail_text += "Command: %s" % EscapeCommand(self.runner.GetCommand(test))
269 if test.output.HasCrashed():
270 fail_text += "exit code: %d\n--- CRASHED ---" % test.output.exit_code
271 if test.output.HasTimedOut():
272 fail_text += "--- TIMEOUT ---"
273 self.outputter.HasRunTest(
274 [test.GetLabel()] + self.runner.context.mode_flags + test.flags,
275 test.duration,
276 fail_text)
277
278
233 PROGRESS_INDICATORS = { 279 PROGRESS_INDICATORS = {
234 'verbose': VerboseProgressIndicator, 280 'verbose': VerboseProgressIndicator,
235 'dots': DotsProgressIndicator, 281 'dots': DotsProgressIndicator,
236 'color': ColorProgressIndicator, 282 'color': ColorProgressIndicator,
237 'mono': MonochromeProgressIndicator 283 'mono': MonochromeProgressIndicator
238 } 284 }
OLDNEW
« no previous file with comments | « tools/testrunner/local/junit_output.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698