Teach subunit2html to use v2 when it is available.

This changes the API of the result object to be more standard with
Python2.7+ APIs.

Change-Id: I1dd3da2280d687a591efd069ef43b1f2bc40e9f1
Reviewed-on: https://review.openstack.org/23670
Reviewed-by: Clark Boylan <clark.boylan@gmail.com>
Approved: Monty Taylor <mordred@inaugust.com>
Reviewed-by: Monty Taylor <mordred@inaugust.com>
Tested-by: Jenkins
This commit is contained in:
Robert Collins 2013-03-06 21:04:15 +13:00 committed by Jenkins
parent 8de13371f7
commit cb38ca1361

View File

@ -40,12 +40,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
""" """
import datetime import datetime
import subunit
import sys import sys
import traceback import traceback
import unittest import unittest
from xml.sax import saxutils from xml.sax import saxutils
import subunit
import testtools
__version__ = '0.1' __version__ = '0.1'
@ -491,7 +492,8 @@ class HtmlOutput(unittest.TestResult):
exctype, value, tb = err exctype, value, tb = err
return ''.join(traceback.format_exception(exctype, value, tb)) return ''.join(traceback.format_exception(exctype, value, tb))
def report(self): def stopTestRun(self):
super(HtmlOutput, self).stopTestRun()
self.stopTime = datetime.datetime.now() self.stopTime = datetime.datetime.now()
report_attrs = self._getReportAttributes() report_attrs = self._getReportAttributes()
generator = 'subunit2html %s' % __version__ generator = 'subunit2html %s' % __version__
@ -683,6 +685,9 @@ class HtmlOutput(unittest.TestResult):
def _generate_ending(self): def _generate_ending(self):
return TemplateData.ENDING_TMPL return TemplateData.ENDING_TMPL
def startTestRun(self):
super(HtmlOutput, self).startTestRun()
def main(): def main():
if len(sys.argv) < 2: if len(sys.argv) < 2:
@ -694,11 +699,20 @@ def main():
else: else:
html_file = 'results.html' html_file = 'results.html'
stream = open(subunit_file, 'rb')
suite = subunit.ProtocolTestCase(stream)
result = HtmlOutput(html_file) result = HtmlOutput(html_file)
stream = open(subunit_file, 'rb')
try:
# Use subunit v2 if the library supports it.
# NB: This trivial config will not passthrough non-test output
# - a difference to subunit v1's default.
suite = subunit.ByteStreamToStreamResult(
stream, non_subunit_input='stdout')
result = testtools.StreamToExtendedDecorator(result)
except AttributeError:
suite = subunit.ProtocolTestCase(stream)
result.startTestRun()
suite.run(result) suite.run(result)
result.report() result.stopTestRun()
if __name__ == '__main__': if __name__ == '__main__':