Mercurial > lcfOS
view doc/unittesttable.py @ 328:0bb16d2a5699
Added cool sphinx plugin for creation of unittest result table
author | Windel Bouwman |
---|---|
date | Tue, 04 Feb 2014 09:01:11 +0100 |
parents | |
children |
line wrap: on
line source
from docutils import nodes from sphinx.util.compat import Directive import unittest class RecordingTestResult(unittest.TestResult): def __init__(self): super().__init__() self.successfull_tests = [] self.failed_tests = [] self.skipped_tests = [] def addSuccess(self, tst): super().addSuccess(tst) self.successfull_tests.append(tst) def addFailure(self, tst, err): super().addFailure(tst, err) self.failed_tests.append(tst) def addError(self, tst, err): super().addError(tst, err) self.failed_tests.append(tst) def addSkip(self, tst, reason): super().addSkip(tst, reason) self.skipped_tests.append(tst) def makeTable(rows): # Buildup table: table = nodes.table() group = nodes.tgroup() group += nodes.colspec('', colwidth=100) group += nodes.colspec('', colwidth=50) table += group tbody = nodes.tbody('') group += tbody for c1, c2 in rows: row = nodes.row('') row += nodes.entry('', nodes.paragraph('', c1)) row += nodes.entry('', nodes.paragraph('', c2)) tbody += row return table class TestResults(Directive): required_arguments = 1 optional_arguments = 0 option_spec = {} has_content = False node_class = None def run(self): # Run unit test: tl = unittest.TestLoader() result = RecordingTestResult() tests = tl.discover('../test') tests.run(result) para = nodes.paragraph() para += nodes.Text('Unit test results:') res = [] for s in result.successfull_tests: res.append((str(s), 'OK')) for s in result.skipped_tests: res.append((str(s), 'SKIP')) for s in result.failed_tests: res.append((str(s), 'FAIL')) table = makeTable(res) return [para, table] def setup(app): app.add_directive('testresults', TestResults)