Revert change to django/test/_doctest.py

This commit is contained in:
Ray Ashman Jr 2013-11-02 20:11:21 -04:00 committed by Jason Myers
parent 5732bc52f1
commit 776ee92f00
1 changed files with 9 additions and 46 deletions

View File

@ -144,8 +144,6 @@ if sys.platform.startswith('java'):
# Option constants.
OPTIONFLAGS_BY_NAME = {}
def register_optionflag(name):
# Create a new flag unless `name` is already known.
return OPTIONFLAGS_BY_NAME.setdefault(name, 1 << len(OPTIONFLAGS_BY_NAME))
@ -196,7 +194,6 @@ ELLIPSIS_MARKER = '...'
## 1. Utility Functions
######################################################################
def _extract_future_flags(globs):
"""
Return the compiler-flags associated with the future features that
@ -209,7 +206,6 @@ def _extract_future_flags(globs):
flags |= feature.compiler_flag
return flags
def _normalize_module(module, depth=2):
"""
Return the module specified by `module`. In particular:
@ -229,7 +225,6 @@ def _normalize_module(module, depth=2):
else:
raise TypeError("Expected a module, string, or None")
def _load_testfile(filename, package, module_relative):
if module_relative:
package = _normalize_module(package, 3)
@ -243,7 +238,6 @@ def _load_testfile(filename, package, module_relative):
with open(filename) as fp:
return fp.read(), filename
def _indent(s, indent=4):
"""
Add the given number of space characters to the beginning every
@ -252,7 +246,6 @@ def _indent(s, indent=4):
# This regexp matches the start of non-blank lines:
return re.sub('(?m)^(?!$)', indent*' ', s)
def _exception_traceback(exc_info):
"""
Return a string containing a traceback message for the given
@ -264,7 +257,6 @@ def _exception_traceback(exc_info):
traceback.print_exception(exc_type, exc_val, exc_tb, file=excout)
return excout.getvalue()
# Override some StringIO methods.
class _SpoofOut(StringIO):
def getvalue(self):
@ -285,7 +277,6 @@ class _SpoofOut(StringIO):
if hasattr(self, "softspace"):
del self.softspace
# Worst-case linear-time ellipsis matching.
def _ellipsis_match(want, got):
"""
@ -336,7 +327,6 @@ def _ellipsis_match(want, got):
return True
def _comment_line(line):
"Return a commented form of the given line"
line = line.rstrip()
@ -345,7 +335,6 @@ def _comment_line(line):
else:
return '#'
class _OutputRedirectingPdb(pdb.Pdb):
"""
A specialized version of the python debugger that redirects stdout
@ -379,7 +368,6 @@ class _OutputRedirectingPdb(pdb.Pdb):
finally:
sys.stdout = save_stdout
# [XX] Normalize with respect to os.path.pardir?
def _module_relative_path(module, path):
if not inspect.ismodule(module):
@ -417,7 +405,6 @@ def _module_relative_path(module, path):
## a string (such as an object's docstring). The DocTest class also
## includes information about where the string was extracted from.
class Example:
"""
A single doctest example, consisting of source code and expected
@ -471,7 +458,6 @@ class Example:
self.options = options
self.exc_msg = exc_msg
class DocTest:
"""
A collection of doctest examples that should be run in a single
@ -520,10 +506,10 @@ class DocTest:
return ('<DocTest %s from %s:%s (%s)>' %
(self.name, self.filename, self.lineno, examples))
# This lets us sort tests by name:
def _cmpkey(self):
return (self.name, self.filename, self.lineno, id(self))
def __cmp__(self, other):
if not isinstance(other, DocTest):
return -1
@ -912,7 +898,7 @@ class DocTestFinder:
elif hasattr(object, '__module__'):
return module.__name__ == object.__module__
elif isinstance(object, property):
return True # [XX] no way not be sure.
return True # [XX] no way not be sure.
else:
raise ValueError("object must be a class or function")
@ -1068,7 +1054,6 @@ class DocTestFinder:
## 5. DocTest Runner
######################################################################
class DocTestRunner:
"""
A class used to run DocTest test cases, and accumulate statistics.
@ -1236,7 +1221,7 @@ class DocTestRunner:
# to modify them).
original_optionflags = self.optionflags
SUCCESS, FAILURE, BOOM = range(3) # `outcome` state
SUCCESS, FAILURE, BOOM = range(3) # `outcome` state
check = self._checker.check_output
@ -1289,7 +1274,7 @@ class DocTestRunner:
# Strip b"" and u"" prefixes from the repr and expected output
# TODO: better way of stripping the prefixes?
expected = example.want
expected = expected.strip() # be wary of newlines
expected = expected.strip() # be wary of newlines
s = s.replace("u", "")
s = s.replace("b", "")
expected = expected.replace("u", "")
@ -1303,7 +1288,7 @@ class DocTestRunner:
lines.append(s)
# let them match
if s == expected: # be wary of false positives here
if s == expected: # be wary of false positives here
# they should be the same, print expected value
sys.stdout.write("%s\n" % example.want.strip())
@ -1329,13 +1314,13 @@ class DocTestRunner:
# Don't blink! This is where the user's code gets run.
six.exec_(compile(example.source, filename, "single",
compileflags, 1), test.globs)
self.debugger.set_continue() # ==== Example Finished ====
self.debugger.set_continue() # ==== Example Finished ====
exception = None
except KeyboardInterrupt:
raise
except:
exception = sys.exc_info()
self.debugger.set_continue() # ==== Example Finished ====
self.debugger.set_continue() # ==== Example Finished ====
finally:
# restore the original displayhook
sys.displayhook = original_displayhook
@ -1423,7 +1408,6 @@ class DocTestRunner:
__LINECACHE_FILENAME_RE = re.compile(r'<doctest '
r'(?P<name>[\w\.]+)'
r'\[(?P<examplenum>\d+)\]>$')
def __patched_linecache_getlines(self, filename, module_globals=None):
m = self.__LINECACHE_FILENAME_RE.match(filename)
if m and m.group('name') == self.test.name:
@ -1557,7 +1541,6 @@ class DocTestRunner:
t = t + t2
d[name] = f, t
class OutputChecker:
"""
A class used to check the whether the actual output from a doctest
@ -1664,11 +1647,11 @@ class OutputChecker:
# Use difflib to find their differences.
if optionflags & REPORT_UDIFF:
diff = difflib.unified_diff(want_lines, got_lines, n=2)
diff = list(diff)[2:] # strip the diff header
diff = list(diff)[2:] # strip the diff header
kind = 'unified diff with -expected +actual'
elif optionflags & REPORT_CDIFF:
diff = difflib.context_diff(want_lines, got_lines, n=2)
diff = list(diff)[2:] # strip the diff header
diff = list(diff)[2:] # strip the diff header
kind = 'context diff with expected followed by actual'
elif optionflags & REPORT_NDIFF:
engine = difflib.Differ(charjunk=difflib.IS_CHARACTER_JUNK)
@ -1691,7 +1674,6 @@ class OutputChecker:
else:
return 'Expected nothing\nGot nothing\n'
class DocTestFailure(Exception):
"""A DocTest example has failed in debugging mode.
@ -1711,7 +1693,6 @@ class DocTestFailure(Exception):
def __str__(self):
return str(self.test)
class UnexpectedException(Exception):
"""A DocTest example has encountered an unexpected exception
@ -1731,7 +1712,6 @@ class UnexpectedException(Exception):
def __str__(self):
return str(self.test)
class DebugRunner(DocTestRunner):
r"""Run doc tests but raise an exception as soon as there is a failure.
@ -1844,7 +1824,6 @@ class DebugRunner(DocTestRunner):
# class, updated by testmod.
master = None
def testmod(m=None, name=None, globs=None, verbose=None,
report=True, optionflags=0, extraglobs=None,
raise_on_error=False, exclude_empty=False):
@ -1949,7 +1928,6 @@ def testmod(m=None, name=None, globs=None, verbose=None,
return runner.failures, runner.tries
def testfile(filename, module_relative=True, name=None, package=None,
globs=None, verbose=None, report=True, optionflags=0,
extraglobs=None, raise_on_error=False, parser=DocTestParser(),
@ -2073,7 +2051,6 @@ def testfile(filename, module_relative=True, name=None, package=None,
return runner.failures, runner.tries
def run_docstring_examples(f, globs, verbose=False, name="NoName",
compileflags=None, optionflags=0):
"""
@ -2103,7 +2080,6 @@ def run_docstring_examples(f, globs, verbose=False, name="NoName",
# This is provided only for backwards compatibility. It's not
# actually used in any way.
class Tester:
def __init__(self, mod=None, globs=None, verbose=None, optionflags=0):
@ -2169,7 +2145,6 @@ class Tester:
_unittest_reportflags = 0
def set_unittest_reportflags(flags):
"""Sets the unittest option flags.
@ -2353,7 +2328,6 @@ class DocTestCase(unittest.TestCase):
def shortDescription(self):
return "Doctest: " + self._dt_test.name
def DocTestSuite(module=None, globs=None, extraglobs=None, test_finder=None,
test_class=DocTestCase, **options):
"""
@ -2417,7 +2391,6 @@ def DocTestSuite(module=None, globs=None, extraglobs=None, test_finder=None,
return suite
class DocFileCase(DocTestCase):
def id(self):
@ -2432,7 +2405,6 @@ class DocFileCase(DocTestCase):
% (self._dt_test.name, self._dt_test.filename, err)
)
def DocFileTest(path, module_relative=True, package=None,
globs=None, parser=DocTestParser(),
encoding=None, **options):
@ -2462,7 +2434,6 @@ def DocFileTest(path, module_relative=True, package=None,
test = parser.get_doctest(doc, globs, name, path, 0)
return DocFileCase(test, **options)
def DocFileSuite(*paths, **kw):
"""A unittest suite for one or more doctest files.
@ -2536,7 +2507,6 @@ def DocFileSuite(*paths, **kw):
## 9. Debugging Support
######################################################################
def script_from_examples(s):
r"""Extract script from text with examples.
@ -2617,7 +2587,6 @@ def script_from_examples(s):
# Combine the output, and return it.
return '\n'.join(output)
def testsource(module, name):
"""Extract the test sources from a doctest docstring as a script.
@ -2634,13 +2603,11 @@ def testsource(module, name):
testsrc = script_from_examples(test.docstring)
return testsrc
def debug_src(src, pm=False, globs=None):
"""Debug a single doctest docstring, in argument `src`'"""
testsrc = script_from_examples(src)
debug_script(testsrc, pm, globs)
def debug_script(src, pm=False, globs=None):
"Debug a test script. `src` is the script, as a string."
import pdb
@ -2672,7 +2639,6 @@ def debug_script(src, pm=False, globs=None):
finally:
os.remove(srcfilename)
def debug(module, name, pm=False):
"""Debug a single doctest docstring.
@ -2687,8 +2653,6 @@ def debug(module, name, pm=False):
######################################################################
## 10. Example Usage
######################################################################
class _TestClass:
"""
A pointless class, for sanity-checking of docstring testing.
@ -2783,7 +2747,6 @@ __test__ = {"_TestClass": _TestClass,
""",
}
def _test():
r = unittest.TextTestRunner()
r.run(DocTestSuite())