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

Unified Diff: tools/telemetry/telemetry/unittest/output_formatter.py

Issue 382433002: [telemetry] OutputFormatter for unit tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move RestoreLoggingLevel to the right place.s Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/telemetry/unittest/output_formatter.py
diff --git a/tools/telemetry/telemetry/unittest/output_formatter.py b/tools/telemetry/telemetry/unittest/output_formatter.py
new file mode 100644
index 0000000000000000000000000000000000000000..c69faa343bb44ce7636a902fb8fc9cfe5f9f2c0d
--- /dev/null
+++ b/tools/telemetry/telemetry/unittest/output_formatter.py
@@ -0,0 +1,130 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import unittest
+
+from telemetry.core import util
+from telemetry.unittest import options_for_unittests
+
+
+class OutputFormatter(object):
+ def __init__(self, output_stream):
+ self._output_stream = output_stream
+
+ def StartTest(self, test):
+ pass
+
+ def StartTestSuite(self, suite):
+ pass
+
+ def StartTestRun(self):
+ pass
+
+ def StopTest(self, test):
+ pass
+
+ def StopTestSuite(self, suite):
+ pass
+
+ def StopTestRun(self, result):
+ pass
+
+ def Error(self, test, err):
+ pass
+
+ def Failure(self, test, err):
+ pass
+
+ def Success(self, test):
+ pass
+
+ def Skip(self, test, reason):
+ pass
+
+
+class TestSuite(unittest.TestSuite):
+ """TestSuite that can delegate start and stop calls to a TestResult object."""
+ def run(self, result): # pylint: disable=W0221
+ if hasattr(result, 'startTestSuite'):
+ result.startTestSuite(self)
+ result = super(TestSuite, self).run(result)
+ if hasattr(result, 'stopTestSuite'):
+ result.stopTestSuite(self)
+ return result
+
+
+class TestRunner(object):
+ def run(self, test, output_formatters, repeat_count, args):
+ util.AddDirToPythonPath(util.GetUnittestDataDir())
+ result = TestResult(output_formatters)
+ result.startTestRun()
+ try:
+ options_for_unittests.Push(args)
+ for _ in xrange(repeat_count):
+ test(result)
+ finally:
+ options_for_unittests.Pop()
+ result.stopTestRun()
+
+ return result
+
+
+class TestResult(unittest.TestResult):
+ def __init__(self, output_formatters):
+ super(TestResult, self).__init__()
+ self.successes = []
+ self._output_formatters = output_formatters
+
+ @property
+ def failures_and_errors(self):
+ return self.failures + self.errors
+
+ def startTest(self, test):
+ super(TestResult, self).startTest(test)
+ for output_formatter in self._output_formatters:
+ output_formatter.StartTest(test)
+
+ def startTestSuite(self, suite):
+ for output_formatter in self._output_formatters:
+ output_formatter.StartTestSuite(suite)
+
+ def startTestRun(self):
+ super(TestResult, self).startTestRun()
+ for output_formatter in self._output_formatters:
+ output_formatter.StartTestRun()
+
+ def stopTest(self, test):
+ super(TestResult, self).stopTest(test)
+ for output_formatter in self._output_formatters:
+ output_formatter.StopTest(test)
+
+ def stopTestSuite(self, suite):
+ for output_formatter in self._output_formatters:
+ output_formatter.StopTestSuite(suite)
+
+ def stopTestRun(self):
+ super(TestResult, self).stopTestRun()
+ for output_formatter in self._output_formatters:
+ output_formatter.StopTestRun(self)
+
+ def addError(self, test, err):
+ super(TestResult, self).addError(test, err)
+ for output_formatter in self._output_formatters:
+ output_formatter.Error(test, err)
+
+ def addFailure(self, test, err):
+ super(TestResult, self).addFailure(test, err)
+ for output_formatter in self._output_formatters:
+ output_formatter.Failure(test, err)
+
+ def addSuccess(self, test):
+ super(TestResult, self).addSuccess(test)
+ self.successes.append(test)
+ for output_formatter in self._output_formatters:
+ output_formatter.Success(test)
+
+ def addSkip(self, test, reason):
+ super(TestResult, self).addSkip(test, reason)
+ for output_formatter in self._output_formatters:
+ output_formatter.Skip(test, reason)

Powered by Google App Engine
This is Rietveld 408576698