Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 48 additions & 9 deletions HTMLTestRunner.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@
# TODO: simplify javascript using ,ore than 1 class in the class attribute?

import datetime
import StringIO
from io import StringIO
import sys
import time
import unittest
Expand Down Expand Up @@ -527,7 +527,7 @@ class _TestResult(TestResult):

def __init__(self, verbosity=1):
TestResult.__init__(self)
self.outputBuffer = StringIO.StringIO()
self.outputBuffer = StringIO()
self.stdout0 = None
self.stderr0 = None
self.success_count = 0
Expand Down Expand Up @@ -575,6 +575,13 @@ def stopTest(self, test):
# We must disconnect stdout in stopTest(), which is guaranteed to be called.
self.complete_output()

def addSubTest(self, test, subtest, err):
if err is not None:
self.addFailure(subtest, err)
else:
self.addSuccess(subtest)
super(_TestResult, self).addSubTest(test, subtest, err)


def addSuccess(self, test):
self.success_count += 1
Expand Down Expand Up @@ -639,7 +646,7 @@ def run(self, test):
test(result)
self.stopTime = datetime.datetime.now()
self.generateReport(test, result)
print >>sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)
print('\nTime Elapsed: %s' % (self.stopTime-self.startTime), file = sys.stderr)
return result


Expand All @@ -650,7 +657,7 @@ def sortResult(self, result_list):
classes = []
for n,t,o,e in result_list:
cls = t.__class__
if not rmap.has_key(cls):
if cls not in rmap:
rmap[cls] = []
classes.append(cls)
rmap[cls].append((n,t,o,e))
Expand Down Expand Up @@ -695,7 +702,7 @@ def generateReport(self, test, result):
report = report,
ending = ending,
)
self.stream.write(output.encode('utf8'))
self.stream.write(output)


def _generate_stylesheet(self):
Expand Down Expand Up @@ -733,7 +740,7 @@ def _generate_report(self, result):
if cls.__module__ == "__main__":
name = cls.__name__
else:
name = "%s.%s" % (cls.__module__, cls.__name__)
name = "%s.%s.%s" % (desc, cls.__module__, cls.__name__)
doc = cls.__doc__ and cls.__doc__.split("\n")[0] or ""
desc = doc and '%s: %s' % (name, doc) or name

Expand All @@ -760,6 +767,38 @@ def _generate_report(self, result):
)
return report

def strip_file_path(self, e: str):
n = len(e)

i = 0
se = ''

found_dq = False

while i < n:
if e[i] != '"':
se = se + e[i]
i += 1
else:
se = se + e[i]
if not found_dq:
found_dq = True
j = i + 1
while j < n:
if e[j] != '"':
j += 1
else:
# Backtrack to start of file name:
while j > i:
if e[j] != '\\':
j -= 1
else:
i = j
break
break
i += 1

return se

def _generate_report_test(self, rows, cid, tid, n, t, o, e):
# e.g. 'pt1.1', 'ft1.1', etc
Expand All @@ -774,15 +813,15 @@ def _generate_report_test(self, rows, cid, tid, n, t, o, e):
if isinstance(o,str):
# TODO: some problem with 'string_escape': it escape \n and mess up formating
# uo = unicode(o.encode('string_escape'))
uo = o.decode('latin-1')
uo = o
else:
uo = o
if isinstance(e,str):
# TODO: some problem with 'string_escape': it escape \n and mess up formating
# ue = unicode(e.encode('string_escape'))
ue = e.decode('latin-1')
ue = self.strip_file_path(e)
else:
ue = e
ue = self.strip_file_path(e)

script = self.REPORT_TEST_OUTPUT_TMPL % dict(
id = tid,
Expand Down