(original) (raw)
import sys import doctest import linecache import __builtin__ def greet(): """ The standard greeting, in unicode. >>> greet() u'Hello, world!' """ return u'Hello, world!' orig_displayhook = sys.displayhook def py3_displayhook(value): if not isinstance(value, unicode): return orig_displayhook(value) __builtin__._ = value s = repr(value) if s.startswith(("u'", 'u"')): s = s[1:] print >> sys.stdout, s class Runner(doctest.DocTestRunner): converted_files = {} def __init__(self, checker=None, verbose=None, optionflags=0): doctest.DocTestRunner.__init__(self, checker, False, optionflags) def run(self, test, compileflags=None, out=None, clear_globs=True): fn = test.filename if fn not in self.converted_files: self.converted_files[fn] = linecache.getlines(fn) sys.displayhook = py3_displayhook try: return doctest.DocTestRunner.run(self, test, compileflags, out, clear_globs) finally: sys.displayhook = orig_displayhook def report_failure(self, out, test, example, got): lines = [" " * example.indent + line for line in got.splitlines(True)] pos = test.lineno + example.lineno + 1 self.converted_files[test.filename][pos:pos+len(lines)] = lines def _test(): import __main__ finder = doctest.DocTestFinder() runner = Runner() for test in finder.find(__main__): runner.run(test) print "".join(runner.converted_files[__main__.__file__]) if __name__ == "__main__": _test()