Last active
September 29, 2015 02:50
-
-
Save jameswritescode/4d7515a87f8d2eff8061 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import unittest | |
import inspect | |
import nose | |
import sys | |
import traceback | |
class MyTest(unittest.TestCase): | |
def test_failing(self): | |
self.assertTrue(False) | |
def test_passing(self): | |
self.assertTrue(True) | |
class HtmlOutput(nose.plugins.Plugin): | |
"""Output test results as ugly, unstyled html. | |
""" | |
name = 'html-output' | |
score = 2 # run late | |
def __init__(self): | |
super(HtmlOutput, self).__init__() | |
self.html = [ '<html><head>', | |
'<title>Test output</title>', | |
'</head><body>' ] | |
def configure(self, options, conf): | |
super(HtmlOutput, self).configure(options, conf) | |
self.enabled = True | |
def addSuccess(self, test): | |
self.html.append('<span>ok</span>') | |
def addError(self, test, err): | |
err = self.formatErr(err) | |
self.html.append('<span>ERROR</span>') | |
self.html.append('<pre>%s</pre>' % err) | |
def addFailure(self, test, err): | |
err = self.formatErr(err) | |
self.html.append('<span>FAIL</span>') | |
self.html.append('<pre>%s</pre>' % err) | |
def finalize(self, result): | |
self.html.append('<div>') | |
self.html.append("Ran %d test%s" % | |
(result.testsRun, result.testsRun != 1 and "s" or "")) | |
self.html.append('</div>') | |
self.html.append('<div>') | |
if not result.wasSuccessful(): | |
self.html.extend(['<span>FAILED ( ', | |
'failures=%d ' % len(result.failures), | |
'errors=%d' % len(result.errors), | |
')</span>']) | |
else: | |
self.html.append('OK') | |
self.html.append('</div></body></html>') | |
# print >> sys.stderr, self.html | |
for l in self.html: | |
self.stream.writeln(l) | |
def formatErr(self, err): | |
exctype, value, tb = err | |
return ''.join(traceback.format_exception(exctype, value, tb)) | |
def setOutputStream(self, stream): | |
# grab for own use | |
self.stream = stream | |
# return dummy stream | |
class dummy: | |
def write(self, *arg): | |
pass | |
def writeln(self, *arg): | |
pass | |
d = dummy() | |
return d | |
def startContext(self, ctx): | |
try: | |
n = ctx.__name__ | |
except AttributeError: | |
n = str(ctx).replace('<', '').replace('>', '') | |
self.html.extend(['<fieldset>', '<legend>', n, '</legend>']) | |
try: | |
path = ctx.__file__.replace('.pyc', '.py') | |
self.html.extend(['<div>', path, '</div>']) | |
except AttributeError: | |
pass | |
def stopContext(self, ctx): | |
self.html.append('</fieldset>') | |
def startTest(self, test): | |
self.html.extend([ '<div><span>', | |
test.shortDescription() or str(test), | |
'</span>' ]) | |
def stopTest(self, test): | |
self.html.append('</div>') | |
suite = unittest.defaultTestLoader.loadTestsFromTestCase(MyTest) | |
nose.run(argv=['-s'], | |
suite=suite, | |
addplugins=[HtmlOutput()]) |
Author
jameswritescode
commented
Sep 29, 2015
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment