Home | History | Annotate | Download | only in python2.7
      1 # Module doctest.
      2 # Released to the public domain 16-Jan-2001, by Tim Peters (tim (at] python.org).
      3 # Major enhancements and refactoring by:
      4 #     Jim Fulton
      5 #     Edward Loper
      6 
      7 # Provided as-is; use at your own risk; no warranty; no promises; enjoy!
      8 
      9 r"""Module doctest -- a framework for running examples in docstrings.
     10 
     11 In simplest use, end each module M to be tested with:
     12 
     13 def _test():
     14     import doctest
     15     doctest.testmod()
     16 
     17 if __name__ == "__main__":
     18     _test()
     19 
     20 Then running the module as a script will cause the examples in the
     21 docstrings to get executed and verified:
     22 
     23 python M.py
     24 
     25 This won't display anything unless an example fails, in which case the
     26 failing example(s) and the cause(s) of the failure(s) are printed to stdout
     27 (why not stderr? because stderr is a lame hack <0.2 wink>), and the final
     28 line of output is "Test failed.".
     29 
     30 Run it with the -v switch instead:
     31 
     32 python M.py -v
     33 
     34 and a detailed report of all examples tried is printed to stdout, along
     35 with assorted summaries at the end.
     36 
     37 You can force verbose mode by passing "verbose=True" to testmod, or prohibit
     38 it by passing "verbose=False".  In either of those cases, sys.argv is not
     39 examined by testmod.
     40 
     41 There are a variety of other ways to run doctests, including integration
     42 with the unittest framework, and support for running non-Python text
     43 files containing doctests.  There are also many ways to override parts
     44 of doctest's default behaviors.  See the Library Reference Manual for
     45 details.
     46 """
     47 
     48 __docformat__ = 'reStructuredText en'
     49 
     50 __all__ = [
     51     # 0, Option Flags
     52     'register_optionflag',
     53     'DONT_ACCEPT_TRUE_FOR_1',
     54     'DONT_ACCEPT_BLANKLINE',
     55     'NORMALIZE_WHITESPACE',
     56     'ELLIPSIS',
     57     'SKIP',
     58     'IGNORE_EXCEPTION_DETAIL',
     59     'COMPARISON_FLAGS',
     60     'REPORT_UDIFF',
     61     'REPORT_CDIFF',
     62     'REPORT_NDIFF',
     63     'REPORT_ONLY_FIRST_FAILURE',
     64     'REPORTING_FLAGS',
     65     # 1. Utility Functions
     66     # 2. Example & DocTest
     67     'Example',
     68     'DocTest',
     69     # 3. Doctest Parser
     70     'DocTestParser',
     71     # 4. Doctest Finder
     72     'DocTestFinder',
     73     # 5. Doctest Runner
     74     'DocTestRunner',
     75     'OutputChecker',
     76     'DocTestFailure',
     77     'UnexpectedException',
     78     'DebugRunner',
     79     # 6. Test Functions
     80     'testmod',
     81     'testfile',
     82     'run_docstring_examples',
     83     # 7. Tester
     84     'Tester',
     85     # 8. Unittest Support
     86     'DocTestSuite',
     87     'DocFileSuite',
     88     'set_unittest_reportflags',
     89     # 9. Debugging Support
     90     'script_from_examples',
     91     'testsource',
     92     'debug_src',
     93     'debug',
     94 ]
     95 
     96 import __future__
     97 
     98 import sys, traceback, inspect, linecache, os, re
     99 import unittest, difflib, pdb, tempfile
    100 import warnings
    101 from StringIO import StringIO
    102 from collections import namedtuple
    103 
    104 TestResults = namedtuple('TestResults', 'failed attempted')
    105 
    106 # There are 4 basic classes:
    107 #  - Example: a <source, want> pair, plus an intra-docstring line number.
    108 #  - DocTest: a collection of examples, parsed from a docstring, plus
    109 #    info about where the docstring came from (name, filename, lineno).
    110 #  - DocTestFinder: extracts DocTests from a given object's docstring and
    111 #    its contained objects' docstrings.
    112 #  - DocTestRunner: runs DocTest cases, and accumulates statistics.
    113 #
    114 # So the basic picture is:
    115 #
    116 #                             list of:
    117 # +------+                   +---------+                   +-------+
    118 # |object| --DocTestFinder-> | DocTest | --DocTestRunner-> |results|
    119 # +------+                   +---------+                   +-------+
    120 #                            | Example |
    121 #                            |   ...   |
    122 #                            | Example |
    123 #                            +---------+
    124 
    125 # Option constants.
    126 
    127 OPTIONFLAGS_BY_NAME = {}
    128 def register_optionflag(name):
    129     # Create a new flag unless `name` is already known.
    130     return OPTIONFLAGS_BY_NAME.setdefault(name, 1 << len(OPTIONFLAGS_BY_NAME))
    131 
    132 DONT_ACCEPT_TRUE_FOR_1 = register_optionflag('DONT_ACCEPT_TRUE_FOR_1')
    133 DONT_ACCEPT_BLANKLINE = register_optionflag('DONT_ACCEPT_BLANKLINE')
    134 NORMALIZE_WHITESPACE = register_optionflag('NORMALIZE_WHITESPACE')
    135 ELLIPSIS = register_optionflag('ELLIPSIS')
    136 SKIP = register_optionflag('SKIP')
    137 IGNORE_EXCEPTION_DETAIL = register_optionflag('IGNORE_EXCEPTION_DETAIL')
    138 
    139 COMPARISON_FLAGS = (DONT_ACCEPT_TRUE_FOR_1 |
    140                     DONT_ACCEPT_BLANKLINE |
    141                     NORMALIZE_WHITESPACE |
    142                     ELLIPSIS |
    143                     SKIP |
    144                     IGNORE_EXCEPTION_DETAIL)
    145 
    146 REPORT_UDIFF = register_optionflag('REPORT_UDIFF')
    147 REPORT_CDIFF = register_optionflag('REPORT_CDIFF')
    148 REPORT_NDIFF = register_optionflag('REPORT_NDIFF')
    149 REPORT_ONLY_FIRST_FAILURE = register_optionflag('REPORT_ONLY_FIRST_FAILURE')
    150 
    151 REPORTING_FLAGS = (REPORT_UDIFF |
    152                    REPORT_CDIFF |
    153                    REPORT_NDIFF |
    154                    REPORT_ONLY_FIRST_FAILURE)
    155 
    156 # Special string markers for use in `want` strings:
    157 BLANKLINE_MARKER = '<BLANKLINE>'
    158 ELLIPSIS_MARKER = '...'
    159 
    160 ######################################################################
    161 ## Table of Contents
    162 ######################################################################
    163 #  1. Utility Functions
    164 #  2. Example & DocTest -- store test cases
    165 #  3. DocTest Parser -- extracts examples from strings
    166 #  4. DocTest Finder -- extracts test cases from objects
    167 #  5. DocTest Runner -- runs test cases
    168 #  6. Test Functions -- convenient wrappers for testing
    169 #  7. Tester Class -- for backwards compatibility
    170 #  8. Unittest Support
    171 #  9. Debugging Support
    172 # 10. Example Usage
    173 
    174 ######################################################################
    175 ## 1. Utility Functions
    176 ######################################################################
    177 
    178 def _extract_future_flags(globs):
    179     """
    180     Return the compiler-flags associated with the future features that
    181     have been imported into the given namespace (globs).
    182     """
    183     flags = 0
    184     for fname in __future__.all_feature_names:
    185         feature = globs.get(fname, None)
    186         if feature is getattr(__future__, fname):
    187             flags |= feature.compiler_flag
    188     return flags
    189 
    190 def _normalize_module(module, depth=2):
    191     """
    192     Return the module specified by `module`.  In particular:
    193       - If `module` is a module, then return module.
    194       - If `module` is a string, then import and return the
    195         module with that name.
    196       - If `module` is None, then return the calling module.
    197         The calling module is assumed to be the module of
    198         the stack frame at the given depth in the call stack.
    199     """
    200     if inspect.ismodule(module):
    201         return module
    202     elif isinstance(module, (str, unicode)):
    203         return __import__(module, globals(), locals(), ["*"])
    204     elif module is None:
    205         return sys.modules[sys._getframe(depth).f_globals['__name__']]
    206     else:
    207         raise TypeError("Expected a module, string, or None")
    208 
    209 def _load_testfile(filename, package, module_relative):
    210     if module_relative:
    211         package = _normalize_module(package, 3)
    212         filename = _module_relative_path(package, filename)
    213         if hasattr(package, '__loader__'):
    214             if hasattr(package.__loader__, 'get_data'):
    215                 file_contents = package.__loader__.get_data(filename)
    216                 # get_data() opens files as 'rb', so one must do the equivalent
    217                 # conversion as universal newlines would do.
    218                 return file_contents.replace(os.linesep, '\n'), filename
    219     with open(filename) as f:
    220         return f.read(), filename
    221 
    222 # Use sys.stdout encoding for ouput.
    223 _encoding = getattr(sys.__stdout__, 'encoding', None) or 'utf-8'
    224 
    225 def _indent(s, indent=4):
    226     """
    227     Add the given number of space characters to the beginning of
    228     every non-blank line in `s`, and return the result.
    229     If the string `s` is Unicode, it is encoded using the stdout
    230     encoding and the `backslashreplace` error handler.
    231     """
    232     if isinstance(s, unicode):
    233         s = s.encode(_encoding, 'backslashreplace')
    234     # This regexp matches the start of non-blank lines:
    235     return re.sub('(?m)^(?!$)', indent*' ', s)
    236 
    237 def _exception_traceback(exc_info):
    238     """
    239     Return a string containing a traceback message for the given
    240     exc_info tuple (as returned by sys.exc_info()).
    241     """
    242     # Get a traceback message.
    243     excout = StringIO()
    244     exc_type, exc_val, exc_tb = exc_info
    245     traceback.print_exception(exc_type, exc_val, exc_tb, file=excout)
    246     return excout.getvalue()
    247 
    248 # Override some StringIO methods.
    249 class _SpoofOut(StringIO):
    250     def getvalue(self):
    251         result = StringIO.getvalue(self)
    252         # If anything at all was written, make sure there's a trailing
    253         # newline.  There's no way for the expected output to indicate
    254         # that a trailing newline is missing.
    255         if result and not result.endswith("\n"):
    256             result += "\n"
    257         # Prevent softspace from screwing up the next test case, in
    258         # case they used print with a trailing comma in an example.
    259         if hasattr(self, "softspace"):
    260             del self.softspace
    261         return result
    262 
    263     def truncate(self,   size=None):
    264         StringIO.truncate(self, size)
    265         if hasattr(self, "softspace"):
    266             del self.softspace
    267         if not self.buf:
    268             # Reset it to an empty string, to make sure it's not unicode.
    269             self.buf = ''
    270 
    271 # Worst-case linear-time ellipsis matching.
    272 def _ellipsis_match(want, got):
    273     """
    274     Essentially the only subtle case:
    275     >>> _ellipsis_match('aa...aa', 'aaa')
    276     False
    277     """
    278     if ELLIPSIS_MARKER not in want:
    279         return want == got
    280 
    281     # Find "the real" strings.
    282     ws = want.split(ELLIPSIS_MARKER)
    283     assert len(ws) >= 2
    284 
    285     # Deal with exact matches possibly needed at one or both ends.
    286     startpos, endpos = 0, len(got)
    287     w = ws[0]
    288     if w:   # starts with exact match
    289         if got.startswith(w):
    290             startpos = len(w)
    291             del ws[0]
    292         else:
    293             return False
    294     w = ws[-1]
    295     if w:   # ends with exact match
    296         if got.endswith(w):
    297             endpos -= len(w)
    298             del ws[-1]
    299         else:
    300             return False
    301 
    302     if startpos > endpos:
    303         # Exact end matches required more characters than we have, as in
    304         # _ellipsis_match('aa...aa', 'aaa')
    305         return False
    306 
    307     # For the rest, we only need to find the leftmost non-overlapping
    308     # match for each piece.  If there's no overall match that way alone,
    309     # there's no overall match period.
    310     for w in ws:
    311         # w may be '' at times, if there are consecutive ellipses, or
    312         # due to an ellipsis at the start or end of `want`.  That's OK.
    313         # Search for an empty string succeeds, and doesn't change startpos.
    314         startpos = got.find(w, startpos, endpos)
    315         if startpos < 0:
    316             return False
    317         startpos += len(w)
    318 
    319     return True
    320 
    321 def _comment_line(line):
    322     "Return a commented form of the given line"
    323     line = line.rstrip()
    324     if line:
    325         return '# '+line
    326     else:
    327         return '#'
    328 
    329 class _OutputRedirectingPdb(pdb.Pdb):
    330     """
    331     A specialized version of the python debugger that redirects stdout
    332     to a given stream when interacting with the user.  Stdout is *not*
    333     redirected when traced code is executed.
    334     """
    335     def __init__(self, out):
    336         self.__out = out
    337         self.__debugger_used = False
    338         pdb.Pdb.__init__(self, stdout=out)
    339         # still use input() to get user input
    340         self.use_rawinput = 1
    341 
    342     def set_trace(self, frame=None):
    343         self.__debugger_used = True
    344         if frame is None:
    345             frame = sys._getframe().f_back
    346         pdb.Pdb.set_trace(self, frame)
    347 
    348     def set_continue(self):
    349         # Calling set_continue unconditionally would break unit test
    350         # coverage reporting, as Bdb.set_continue calls sys.settrace(None).
    351         if self.__debugger_used:
    352             pdb.Pdb.set_continue(self)
    353 
    354     def trace_dispatch(self, *args):
    355         # Redirect stdout to the given stream.
    356         save_stdout = sys.stdout
    357         sys.stdout = self.__out
    358         # Call Pdb's trace dispatch method.
    359         try:
    360             return pdb.Pdb.trace_dispatch(self, *args)
    361         finally:
    362             sys.stdout = save_stdout
    363 
    364 # [XX] Normalize with respect to os.path.pardir?
    365 def _module_relative_path(module, path):
    366     if not inspect.ismodule(module):
    367         raise TypeError, 'Expected a module: %r' % module
    368     if path.startswith('/'):
    369         raise ValueError, 'Module-relative files may not have absolute paths'
    370 
    371     # Find the base directory for the path.
    372     if hasattr(module, '__file__'):
    373         # A normal module/package
    374         basedir = os.path.split(module.__file__)[0]
    375     elif module.__name__ == '__main__':
    376         # An interactive session.
    377         if len(sys.argv)>0 and sys.argv[0] != '':
    378             basedir = os.path.split(sys.argv[0])[0]
    379         else:
    380             basedir = os.curdir
    381     else:
    382         # A module w/o __file__ (this includes builtins)
    383         raise ValueError("Can't resolve paths relative to the module " +
    384                          module + " (it has no __file__)")
    385 
    386     # Combine the base directory and the path.
    387     return os.path.join(basedir, *(path.split('/')))
    388 
    389 ######################################################################
    390 ## 2. Example & DocTest
    391 ######################################################################
    392 ## - An "example" is a <source, want> pair, where "source" is a
    393 ##   fragment of source code, and "want" is the expected output for
    394 ##   "source."  The Example class also includes information about
    395 ##   where the example was extracted from.
    396 ##
    397 ## - A "doctest" is a collection of examples, typically extracted from
    398 ##   a string (such as an object's docstring).  The DocTest class also
    399 ##   includes information about where the string was extracted from.
    400 
    401 class Example:
    402     """
    403     A single doctest example, consisting of source code and expected
    404     output.  `Example` defines the following attributes:
    405 
    406       - source: A single Python statement, always ending with a newline.
    407         The constructor adds a newline if needed.
    408 
    409       - want: The expected output from running the source code (either
    410         from stdout, or a traceback in case of exception).  `want` ends
    411         with a newline unless it's empty, in which case it's an empty
    412         string.  The constructor adds a newline if needed.
    413 
    414       - exc_msg: The exception message generated by the example, if
    415         the example is expected to generate an exception; or `None` if
    416         it is not expected to generate an exception.  This exception
    417         message is compared against the return value of
    418         `traceback.format_exception_only()`.  `exc_msg` ends with a
    419         newline unless it's `None`.  The constructor adds a newline
    420         if needed.
    421 
    422       - lineno: The line number within the DocTest string containing
    423         this Example where the Example begins.  This line number is
    424         zero-based, with respect to the beginning of the DocTest.
    425 
    426       - indent: The example's indentation in the DocTest string.
    427         I.e., the number of space characters that preceed the
    428         example's first prompt.
    429 
    430       - options: A dictionary mapping from option flags to True or
    431         False, which is used to override default options for this
    432         example.  Any option flags not contained in this dictionary
    433         are left at their default value (as specified by the
    434         DocTestRunner's optionflags).  By default, no options are set.
    435     """
    436     def __init__(self, source, want, exc_msg=None, lineno=0, indent=0,
    437                  options=None):
    438         # Normalize inputs.
    439         if not source.endswith('\n'):
    440             source += '\n'
    441         if want and not want.endswith('\n'):
    442             want += '\n'
    443         if exc_msg is not None and not exc_msg.endswith('\n'):
    444             exc_msg += '\n'
    445         # Store properties.
    446         self.source = source
    447         self.want = want
    448         self.lineno = lineno
    449         self.indent = indent
    450         if options is None: options = {}
    451         self.options = options
    452         self.exc_msg = exc_msg
    453 
    454     def __eq__(self, other):
    455         if type(self) is not type(other):
    456             return NotImplemented
    457 
    458         return self.source == other.source and \
    459                self.want == other.want and \
    460                self.lineno == other.lineno and \
    461                self.indent == other.indent and \
    462                self.options == other.options and \
    463                self.exc_msg == other.exc_msg
    464 
    465     def __ne__(self, other):
    466         return not self == other
    467 
    468     def __hash__(self):
    469         return hash((self.source, self.want, self.lineno, self.indent,
    470                      self.exc_msg))
    471 
    472 
    473 class DocTest:
    474     """
    475     A collection of doctest examples that should be run in a single
    476     namespace.  Each `DocTest` defines the following attributes:
    477 
    478       - examples: the list of examples.
    479 
    480       - globs: The namespace (aka globals) that the examples should
    481         be run in.
    482 
    483       - name: A name identifying the DocTest (typically, the name of
    484         the object whose docstring this DocTest was extracted from).
    485 
    486       - filename: The name of the file that this DocTest was extracted
    487         from, or `None` if the filename is unknown.
    488 
    489       - lineno: The line number within filename where this DocTest
    490         begins, or `None` if the line number is unavailable.  This
    491         line number is zero-based, with respect to the beginning of
    492         the file.
    493 
    494       - docstring: The string that the examples were extracted from,
    495         or `None` if the string is unavailable.
    496     """
    497     def __init__(self, examples, globs, name, filename, lineno, docstring):
    498         """
    499         Create a new DocTest containing the given examples.  The
    500         DocTest's globals are initialized with a copy of `globs`.
    501         """
    502         assert not isinstance(examples, basestring), \
    503                "DocTest no longer accepts str; use DocTestParser instead"
    504         self.examples = examples
    505         self.docstring = docstring
    506         self.globs = globs.copy()
    507         self.name = name
    508         self.filename = filename
    509         self.lineno = lineno
    510 
    511     def __repr__(self):
    512         if len(self.examples) == 0:
    513             examples = 'no examples'
    514         elif len(self.examples) == 1:
    515             examples = '1 example'
    516         else:
    517             examples = '%d examples' % len(self.examples)
    518         return ('<DocTest %s from %s:%s (%s)>' %
    519                 (self.name, self.filename, self.lineno, examples))
    520 
    521     def __eq__(self, other):
    522         if type(self) is not type(other):
    523             return NotImplemented
    524 
    525         return self.examples == other.examples and \
    526                self.docstring == other.docstring and \
    527                self.globs == other.globs and \
    528                self.name == other.name and \
    529                self.filename == other.filename and \
    530                self.lineno == other.lineno
    531 
    532     def __ne__(self, other):
    533         return not self == other
    534 
    535     def __hash__(self):
    536         return hash((self.docstring, self.name, self.filename, self.lineno))
    537 
    538     # This lets us sort tests by name:
    539     def __cmp__(self, other):
    540         if not isinstance(other, DocTest):
    541             return -1
    542         return cmp((self.name, self.filename, self.lineno, id(self)),
    543                    (other.name, other.filename, other.lineno, id(other)))
    544 
    545 ######################################################################
    546 ## 3. DocTestParser
    547 ######################################################################
    548 
    549 class DocTestParser:
    550     """
    551     A class used to parse strings containing doctest examples.
    552     """
    553     # This regular expression is used to find doctest examples in a
    554     # string.  It defines three groups: `source` is the source code
    555     # (including leading indentation and prompts); `indent` is the
    556     # indentation of the first (PS1) line of the source code; and
    557     # `want` is the expected output (including leading indentation).
    558     _EXAMPLE_RE = re.compile(r'''
    559         # Source consists of a PS1 line followed by zero or more PS2 lines.
    560         (?P<source>
    561             (?:^(?P<indent> [ ]*) >>>    .*)    # PS1 line
    562             (?:\n           [ ]*  \.\.\. .*)*)  # PS2 lines
    563         \n?
    564         # Want consists of any non-blank lines that do not start with PS1.
    565         (?P<want> (?:(?![ ]*$)    # Not a blank line
    566                      (?![ ]*>>>)  # Not a line starting with PS1
    567                      .*$\n?       # But any other line
    568                   )*)
    569         ''', re.MULTILINE | re.VERBOSE)
    570 
    571     # A regular expression for handling `want` strings that contain
    572     # expected exceptions.  It divides `want` into three pieces:
    573     #    - the traceback header line (`hdr`)
    574     #    - the traceback stack (`stack`)
    575     #    - the exception message (`msg`), as generated by
    576     #      traceback.format_exception_only()
    577     # `msg` may have multiple lines.  We assume/require that the
    578     # exception message is the first non-indented line starting with a word
    579     # character following the traceback header line.
    580     _EXCEPTION_RE = re.compile(r"""
    581         # Grab the traceback header.  Different versions of Python have
    582         # said different things on the first traceback line.
    583         ^(?P<hdr> Traceback\ \(
    584             (?: most\ recent\ call\ last
    585             |   innermost\ last
    586             ) \) :
    587         )
    588         \s* $                # toss trailing whitespace on the header.
    589         (?P<stack> .*?)      # don't blink: absorb stuff until...
    590         ^ (?P<msg> \w+ .*)   #     a line *starts* with alphanum.
    591         """, re.VERBOSE | re.MULTILINE | re.DOTALL)
    592 
    593     # A callable returning a true value iff its argument is a blank line
    594     # or contains a single comment.
    595     _IS_BLANK_OR_COMMENT = re.compile(r'^[ ]*(#.*)?$').match
    596 
    597     def parse(self, string, name='<string>'):
    598         """
    599         Divide the given string into examples and intervening text,
    600         and return them as a list of alternating Examples and strings.
    601         Line numbers for the Examples are 0-based.  The optional
    602         argument `name` is a name identifying this string, and is only
    603         used for error messages.
    604         """
    605         string = string.expandtabs()
    606         # If all lines begin with the same indentation, then strip it.
    607         min_indent = self._min_indent(string)
    608         if min_indent > 0:
    609             string = '\n'.join([l[min_indent:] for l in string.split('\n')])
    610 
    611         output = []
    612         charno, lineno = 0, 0
    613         # Find all doctest examples in the string:
    614         for m in self._EXAMPLE_RE.finditer(string):
    615             # Add the pre-example text to `output`.
    616             output.append(string[charno:m.start()])
    617             # Update lineno (lines before this example)
    618             lineno += string.count('\n', charno, m.start())
    619             # Extract info from the regexp match.
    620             (source, options, want, exc_msg) = \
    621                      self._parse_example(m, name, lineno)
    622             # Create an Example, and add it to the list.
    623             if not self._IS_BLANK_OR_COMMENT(source):
    624                 output.append( Example(source, want, exc_msg,
    625                                     lineno=lineno,
    626                                     indent=min_indent+len(m.group('indent')),
    627                                     options=options) )
    628             # Update lineno (lines inside this example)
    629             lineno += string.count('\n', m.start(), m.end())
    630             # Update charno.
    631             charno = m.end()
    632         # Add any remaining post-example text to `output`.
    633         output.append(string[charno:])
    634         return output
    635 
    636     def get_doctest(self, string, globs, name, filename, lineno):
    637         """
    638         Extract all doctest examples from the given string, and
    639         collect them into a `DocTest` object.
    640 
    641         `globs`, `name`, `filename`, and `lineno` are attributes for
    642         the new `DocTest` object.  See the documentation for `DocTest`
    643         for more information.
    644         """
    645         return DocTest(self.get_examples(string, name), globs,
    646                        name, filename, lineno, string)
    647 
    648     def get_examples(self, string, name='<string>'):
    649         """
    650         Extract all doctest examples from the given string, and return
    651         them as a list of `Example` objects.  Line numbers are
    652         0-based, because it's most common in doctests that nothing
    653         interesting appears on the same line as opening triple-quote,
    654         and so the first interesting line is called \"line 1\" then.
    655 
    656         The optional argument `name` is a name identifying this
    657         string, and is only used for error messages.
    658         """
    659         return [x for x in self.parse(string, name)
    660                 if isinstance(x, Example)]
    661 
    662     def _parse_example(self, m, name, lineno):
    663         """
    664         Given a regular expression match from `_EXAMPLE_RE` (`m`),
    665         return a pair `(source, want)`, where `source` is the matched
    666         example's source code (with prompts and indentation stripped);
    667         and `want` is the example's expected output (with indentation
    668         stripped).
    669 
    670         `name` is the string's name, and `lineno` is the line number
    671         where the example starts; both are used for error messages.
    672         """
    673         # Get the example's indentation level.
    674         indent = len(m.group('indent'))
    675 
    676         # Divide source into lines; check that they're properly
    677         # indented; and then strip their indentation & prompts.
    678         source_lines = m.group('source').split('\n')
    679         self._check_prompt_blank(source_lines, indent, name, lineno)
    680         self._check_prefix(source_lines[1:], ' '*indent + '.', name, lineno)
    681         source = '\n'.join([sl[indent+4:] for sl in source_lines])
    682 
    683         # Divide want into lines; check that it's properly indented; and
    684         # then strip the indentation.  Spaces before the last newline should
    685         # be preserved, so plain rstrip() isn't good enough.
    686         want = m.group('want')
    687         want_lines = want.split('\n')
    688         if len(want_lines) > 1 and re.match(r' *$', want_lines[-1]):
    689             del want_lines[-1]  # forget final newline & spaces after it
    690         self._check_prefix(want_lines, ' '*indent, name,
    691                            lineno + len(source_lines))
    692         want = '\n'.join([wl[indent:] for wl in want_lines])
    693 
    694         # If `want` contains a traceback message, then extract it.
    695         m = self._EXCEPTION_RE.match(want)
    696         if m:
    697             exc_msg = m.group('msg')
    698         else:
    699             exc_msg = None
    700 
    701         # Extract options from the source.
    702         options = self._find_options(source, name, lineno)
    703 
    704         return source, options, want, exc_msg
    705 
    706     # This regular expression looks for option directives in the
    707     # source code of an example.  Option directives are comments
    708     # starting with "doctest:".  Warning: this may give false
    709     # positives for string-literals that contain the string
    710     # "#doctest:".  Eliminating these false positives would require
    711     # actually parsing the string; but we limit them by ignoring any
    712     # line containing "#doctest:" that is *followed* by a quote mark.
    713     _OPTION_DIRECTIVE_RE = re.compile(r'#\s*doctest:\s*([^\n\'"]*)$',
    714                                       re.MULTILINE)
    715 
    716     def _find_options(self, source, name, lineno):
    717         """
    718         Return a dictionary containing option overrides extracted from
    719         option directives in the given source string.
    720 
    721         `name` is the string's name, and `lineno` is the line number
    722         where the example starts; both are used for error messages.
    723         """
    724         options = {}
    725         # (note: with the current regexp, this will match at most once:)
    726         for m in self._OPTION_DIRECTIVE_RE.finditer(source):
    727             option_strings = m.group(1).replace(',', ' ').split()
    728             for option in option_strings:
    729                 if (option[0] not in '+-' or
    730                     option[1:] not in OPTIONFLAGS_BY_NAME):
    731                     raise ValueError('line %r of the doctest for %s '
    732                                      'has an invalid option: %r' %
    733                                      (lineno+1, name, option))
    734                 flag = OPTIONFLAGS_BY_NAME[option[1:]]
    735                 options[flag] = (option[0] == '+')
    736         if options and self._IS_BLANK_OR_COMMENT(source):
    737             raise ValueError('line %r of the doctest for %s has an option '
    738                              'directive on a line with no example: %r' %
    739                              (lineno, name, source))
    740         return options
    741 
    742     # This regular expression finds the indentation of every non-blank
    743     # line in a string.
    744     _INDENT_RE = re.compile('^([ ]*)(?=\S)', re.MULTILINE)
    745 
    746     def _min_indent(self, s):
    747         "Return the minimum indentation of any non-blank line in `s`"
    748         indents = [len(indent) for indent in self._INDENT_RE.findall(s)]
    749         if len(indents) > 0:
    750             return min(indents)
    751         else:
    752             return 0
    753 
    754     def _check_prompt_blank(self, lines, indent, name, lineno):
    755         """
    756         Given the lines of a source string (including prompts and
    757         leading indentation), check to make sure that every prompt is
    758         followed by a space character.  If any line is not followed by
    759         a space character, then raise ValueError.
    760         """
    761         for i, line in enumerate(lines):
    762             if len(line) >= indent+4 and line[indent+3] != ' ':
    763                 raise ValueError('line %r of the docstring for %s '
    764                                  'lacks blank after %s: %r' %
    765                                  (lineno+i+1, name,
    766                                   line[indent:indent+3], line))
    767 
    768     def _check_prefix(self, lines, prefix, name, lineno):
    769         """
    770         Check that every line in the given list starts with the given
    771         prefix; if any line does not, then raise a ValueError.
    772         """
    773         for i, line in enumerate(lines):
    774             if line and not line.startswith(prefix):
    775                 raise ValueError('line %r of the docstring for %s has '
    776                                  'inconsistent leading whitespace: %r' %
    777                                  (lineno+i+1, name, line))
    778 
    779 
    780 ######################################################################
    781 ## 4. DocTest Finder
    782 ######################################################################
    783 
    784 class DocTestFinder:
    785     """
    786     A class used to extract the DocTests that are relevant to a given
    787     object, from its docstring and the docstrings of its contained
    788     objects.  Doctests can currently be extracted from the following
    789     object types: modules, functions, classes, methods, staticmethods,
    790     classmethods, and properties.
    791     """
    792 
    793     def __init__(self, verbose=False, parser=DocTestParser(),
    794                  recurse=True, exclude_empty=True):
    795         """
    796         Create a new doctest finder.
    797 
    798         The optional argument `parser` specifies a class or
    799         function that should be used to create new DocTest objects (or
    800         objects that implement the same interface as DocTest).  The
    801         signature for this factory function should match the signature
    802         of the DocTest constructor.
    803 
    804         If the optional argument `recurse` is false, then `find` will
    805         only examine the given object, and not any contained objects.
    806 
    807         If the optional argument `exclude_empty` is false, then `find`
    808         will include tests for objects with empty docstrings.
    809         """
    810         self._parser = parser
    811         self._verbose = verbose
    812         self._recurse = recurse
    813         self._exclude_empty = exclude_empty
    814 
    815     def find(self, obj, name=None, module=None, globs=None, extraglobs=None):
    816         """
    817         Return a list of the DocTests that are defined by the given
    818         object's docstring, or by any of its contained objects'
    819         docstrings.
    820 
    821         The optional parameter `module` is the module that contains
    822         the given object.  If the module is not specified or is None, then
    823         the test finder will attempt to automatically determine the
    824         correct module.  The object's module is used:
    825 
    826             - As a default namespace, if `globs` is not specified.
    827             - To prevent the DocTestFinder from extracting DocTests
    828               from objects that are imported from other modules.
    829             - To find the name of the file containing the object.
    830             - To help find the line number of the object within its
    831               file.
    832 
    833         Contained objects whose module does not match `module` are ignored.
    834 
    835         If `module` is False, no attempt to find the module will be made.
    836         This is obscure, of use mostly in tests:  if `module` is False, or
    837         is None but cannot be found automatically, then all objects are
    838         considered to belong to the (non-existent) module, so all contained
    839         objects will (recursively) be searched for doctests.
    840 
    841         The globals for each DocTest is formed by combining `globs`
    842         and `extraglobs` (bindings in `extraglobs` override bindings
    843         in `globs`).  A new copy of the globals dictionary is created
    844         for each DocTest.  If `globs` is not specified, then it
    845         defaults to the module's `__dict__`, if specified, or {}
    846         otherwise.  If `extraglobs` is not specified, then it defaults
    847         to {}.
    848 
    849         """
    850         # If name was not specified, then extract it from the object.
    851         if name is None:
    852             name = getattr(obj, '__name__', None)
    853             if name is None:
    854                 raise ValueError("DocTestFinder.find: name must be given "
    855                         "when obj.__name__ doesn't exist: %r" %
    856                                  (type(obj),))
    857 
    858         # Find the module that contains the given object (if obj is
    859         # a module, then module=obj.).  Note: this may fail, in which
    860         # case module will be None.
    861         if module is False:
    862             module = None
    863         elif module is None:
    864             module = inspect.getmodule(obj)
    865 
    866         # Read the module's source code.  This is used by
    867         # DocTestFinder._find_lineno to find the line number for a
    868         # given object's docstring.
    869         try:
    870             file = inspect.getsourcefile(obj) or inspect.getfile(obj)
    871             if module is not None:
    872                 # Supply the module globals in case the module was
    873                 # originally loaded via a PEP 302 loader and
    874                 # file is not a valid filesystem path
    875                 source_lines = linecache.getlines(file, module.__dict__)
    876             else:
    877                 # No access to a loader, so assume it's a normal
    878                 # filesystem path
    879                 source_lines = linecache.getlines(file)
    880             if not source_lines:
    881                 source_lines = None
    882         except TypeError:
    883             source_lines = None
    884 
    885         # Initialize globals, and merge in extraglobs.
    886         if globs is None:
    887             if module is None:
    888                 globs = {}
    889             else:
    890                 globs = module.__dict__.copy()
    891         else:
    892             globs = globs.copy()
    893         if extraglobs is not None:
    894             globs.update(extraglobs)
    895         if '__name__' not in globs:
    896             globs['__name__'] = '__main__'  # provide a default module name
    897 
    898         # Recursively expore `obj`, extracting DocTests.
    899         tests = []
    900         self._find(tests, obj, name, module, source_lines, globs, {})
    901         # Sort the tests by alpha order of names, for consistency in
    902         # verbose-mode output.  This was a feature of doctest in Pythons
    903         # <= 2.3 that got lost by accident in 2.4.  It was repaired in
    904         # 2.4.4 and 2.5.
    905         tests.sort()
    906         return tests
    907 
    908     def _from_module(self, module, object):
    909         """
    910         Return true if the given object is defined in the given
    911         module.
    912         """
    913         if module is None:
    914             return True
    915         elif inspect.getmodule(object) is not None:
    916             return module is inspect.getmodule(object)
    917         elif inspect.isfunction(object):
    918             return module.__dict__ is object.func_globals
    919         elif inspect.isclass(object):
    920             return module.__name__ == object.__module__
    921         elif hasattr(object, '__module__'):
    922             return module.__name__ == object.__module__
    923         elif isinstance(object, property):
    924             return True # [XX] no way not be sure.
    925         else:
    926             raise ValueError("object must be a class or function")
    927 
    928     def _find(self, tests, obj, name, module, source_lines, globs, seen):
    929         """
    930         Find tests for the given object and any contained objects, and
    931         add them to `tests`.
    932         """
    933         if self._verbose:
    934             print 'Finding tests in %s' % name
    935 
    936         # If we've already processed this object, then ignore it.
    937         if id(obj) in seen:
    938             return
    939         seen[id(obj)] = 1
    940 
    941         # Find a test for this object, and add it to the list of tests.
    942         test = self._get_test(obj, name, module, globs, source_lines)
    943         if test is not None:
    944             tests.append(test)
    945 
    946         # Look for tests in a module's contained objects.
    947         if inspect.ismodule(obj) and self._recurse:
    948             for valname, val in obj.__dict__.items():
    949                 valname = '%s.%s' % (name, valname)
    950                 # Recurse to functions & classes.
    951                 if ((inspect.isfunction(val) or inspect.isclass(val)) and
    952                     self._from_module(module, val)):
    953                     self._find(tests, val, valname, module, source_lines,
    954                                globs, seen)
    955 
    956         # Look for tests in a module's __test__ dictionary.
    957         if inspect.ismodule(obj) and self._recurse:
    958             for valname, val in getattr(obj, '__test__', {}).items():
    959                 if not isinstance(valname, basestring):
    960                     raise ValueError("DocTestFinder.find: __test__ keys "
    961                                      "must be strings: %r" %
    962                                      (type(valname),))
    963                 if not (inspect.isfunction(val) or inspect.isclass(val) or
    964                         inspect.ismethod(val) or inspect.ismodule(val) or
    965                         isinstance(val, basestring)):
    966                     raise ValueError("DocTestFinder.find: __test__ values "
    967                                      "must be strings, functions, methods, "
    968                                      "classes, or modules: %r" %
    969                                      (type(val),))
    970                 valname = '%s.__test__.%s' % (name, valname)
    971                 self._find(tests, val, valname, module, source_lines,
    972                            globs, seen)
    973 
    974         # Look for tests in a class's contained objects.
    975         if inspect.isclass(obj) and self._recurse:
    976             for valname, val in obj.__dict__.items():
    977                 # Special handling for staticmethod/classmethod.
    978                 if isinstance(val, staticmethod):
    979                     val = getattr(obj, valname)
    980                 if isinstance(val, classmethod):
    981                     val = getattr(obj, valname).im_func
    982 
    983                 # Recurse to methods, properties, and nested classes.
    984                 if ((inspect.isfunction(val) or inspect.isclass(val) or
    985                       isinstance(val, property)) and
    986                       self._from_module(module, val)):
    987                     valname = '%s.%s' % (name, valname)
    988                     self._find(tests, val, valname, module, source_lines,
    989                                globs, seen)
    990 
    991     def _get_test(self, obj, name, module, globs, source_lines):
    992         """
    993         Return a DocTest for the given object, if it defines a docstring;
    994         otherwise, return None.
    995         """
    996         # Extract the object's docstring.  If it doesn't have one,
    997         # then return None (no test for this object).
    998         if isinstance(obj, basestring):
    999             docstring = obj
   1000         else:
   1001             try:
   1002                 if obj.__doc__ is None:
   1003                     docstring = ''
   1004                 else:
   1005                     docstring = obj.__doc__
   1006                     if not isinstance(docstring, basestring):
   1007                         docstring = str(docstring)
   1008             except (TypeError, AttributeError):
   1009                 docstring = ''
   1010 
   1011         # Find the docstring's location in the file.
   1012         lineno = self._find_lineno(obj, source_lines)
   1013 
   1014         # Don't bother if the docstring is empty.
   1015         if self._exclude_empty and not docstring:
   1016             return None
   1017 
   1018         # Return a DocTest for this object.
   1019         if module is None:
   1020             filename = None
   1021         else:
   1022             filename = getattr(module, '__file__', module.__name__)
   1023             if filename[-4:] in (".pyc", ".pyo"):
   1024                 filename = filename[:-1]
   1025         return self._parser.get_doctest(docstring, globs, name,
   1026                                         filename, lineno)
   1027 
   1028     def _find_lineno(self, obj, source_lines):
   1029         """
   1030         Return a line number of the given object's docstring.  Note:
   1031         this method assumes that the object has a docstring.
   1032         """
   1033         lineno = None
   1034 
   1035         # Find the line number for modules.
   1036         if inspect.ismodule(obj):
   1037             lineno = 0
   1038 
   1039         # Find the line number for classes.
   1040         # Note: this could be fooled if a class is defined multiple
   1041         # times in a single file.
   1042         if inspect.isclass(obj):
   1043             if source_lines is None:
   1044                 return None
   1045             pat = re.compile(r'^\s*class\s*%s\b' %
   1046                              getattr(obj, '__name__', '-'))
   1047             for i, line in enumerate(source_lines):
   1048                 if pat.match(line):
   1049                     lineno = i
   1050                     break
   1051 
   1052         # Find the line number for functions & methods.
   1053         if inspect.ismethod(obj): obj = obj.im_func
   1054         if inspect.isfunction(obj): obj = obj.func_code
   1055         if inspect.istraceback(obj): obj = obj.tb_frame
   1056         if inspect.isframe(obj): obj = obj.f_code
   1057         if inspect.iscode(obj):
   1058             lineno = getattr(obj, 'co_firstlineno', None)-1
   1059 
   1060         # Find the line number where the docstring starts.  Assume
   1061         # that it's the first line that begins with a quote mark.
   1062         # Note: this could be fooled by a multiline function
   1063         # signature, where a continuation line begins with a quote
   1064         # mark.
   1065         if lineno is not None:
   1066             if source_lines is None:
   1067                 return lineno+1
   1068             pat = re.compile('(^|.*:)\s*\w*("|\')')
   1069             for lineno in range(lineno, len(source_lines)):
   1070                 if pat.match(source_lines[lineno]):
   1071                     return lineno
   1072 
   1073         # We couldn't find the line number.
   1074         return None
   1075 
   1076 ######################################################################
   1077 ## 5. DocTest Runner
   1078 ######################################################################
   1079 
   1080 class DocTestRunner:
   1081     """
   1082     A class used to run DocTest test cases, and accumulate statistics.
   1083     The `run` method is used to process a single DocTest case.  It
   1084     returns a tuple `(f, t)`, where `t` is the number of test cases
   1085     tried, and `f` is the number of test cases that failed.
   1086 
   1087         >>> tests = DocTestFinder().find(_TestClass)
   1088         >>> runner = DocTestRunner(verbose=False)
   1089         >>> tests.sort(key = lambda test: test.name)
   1090         >>> for test in tests:
   1091         ...     print test.name, '->', runner.run(test)
   1092         _TestClass -> TestResults(failed=0, attempted=2)
   1093         _TestClass.__init__ -> TestResults(failed=0, attempted=2)
   1094         _TestClass.get -> TestResults(failed=0, attempted=2)
   1095         _TestClass.square -> TestResults(failed=0, attempted=1)
   1096 
   1097     The `summarize` method prints a summary of all the test cases that
   1098     have been run by the runner, and returns an aggregated `(f, t)`
   1099     tuple:
   1100 
   1101         >>> runner.summarize(verbose=1)
   1102         4 items passed all tests:
   1103            2 tests in _TestClass
   1104            2 tests in _TestClass.__init__
   1105            2 tests in _TestClass.get
   1106            1 tests in _TestClass.square
   1107         7 tests in 4 items.
   1108         7 passed and 0 failed.
   1109         Test passed.
   1110         TestResults(failed=0, attempted=7)
   1111 
   1112     The aggregated number of tried examples and failed examples is
   1113     also available via the `tries` and `failures` attributes:
   1114 
   1115         >>> runner.tries
   1116         7
   1117         >>> runner.failures
   1118         0
   1119 
   1120     The comparison between expected outputs and actual outputs is done
   1121     by an `OutputChecker`.  This comparison may be customized with a
   1122     number of option flags; see the documentation for `testmod` for
   1123     more information.  If the option flags are insufficient, then the
   1124     comparison may also be customized by passing a subclass of
   1125     `OutputChecker` to the constructor.
   1126 
   1127     The test runner's display output can be controlled in two ways.
   1128     First, an output function (`out) can be passed to
   1129     `TestRunner.run`; this function will be called with strings that
   1130     should be displayed.  It defaults to `sys.stdout.write`.  If
   1131     capturing the output is not sufficient, then the display output
   1132     can be also customized by subclassing DocTestRunner, and
   1133     overriding the methods `report_start`, `report_success`,
   1134     `report_unexpected_exception`, and `report_failure`.
   1135     """
   1136     # This divider string is used to separate failure messages, and to
   1137     # separate sections of the summary.
   1138     DIVIDER = "*" * 70
   1139 
   1140     def __init__(self, checker=None, verbose=None, optionflags=0):
   1141         """
   1142         Create a new test runner.
   1143 
   1144         Optional keyword arg `checker` is the `OutputChecker` that
   1145         should be used to compare the expected outputs and actual
   1146         outputs of doctest examples.
   1147 
   1148         Optional keyword arg 'verbose' prints lots of stuff if true,
   1149         only failures if false; by default, it's true iff '-v' is in
   1150         sys.argv.
   1151 
   1152         Optional argument `optionflags` can be used to control how the
   1153         test runner compares expected output to actual output, and how
   1154         it displays failures.  See the documentation for `testmod` for
   1155         more information.
   1156         """
   1157         self._checker = checker or OutputChecker()
   1158         if verbose is None:
   1159             verbose = '-v' in sys.argv
   1160         self._verbose = verbose
   1161         self.optionflags = optionflags
   1162         self.original_optionflags = optionflags
   1163 
   1164         # Keep track of the examples we've run.
   1165         self.tries = 0
   1166         self.failures = 0
   1167         self._name2ft = {}
   1168 
   1169         # Create a fake output target for capturing doctest output.
   1170         self._fakeout = _SpoofOut()
   1171 
   1172     #/////////////////////////////////////////////////////////////////
   1173     # Reporting methods
   1174     #/////////////////////////////////////////////////////////////////
   1175 
   1176     def report_start(self, out, test, example):
   1177         """
   1178         Report that the test runner is about to process the given
   1179         example.  (Only displays a message if verbose=True)
   1180         """
   1181         if self._verbose:
   1182             if example.want:
   1183                 out('Trying:\n' + _indent(example.source) +
   1184                     'Expecting:\n' + _indent(example.want))
   1185             else:
   1186                 out('Trying:\n' + _indent(example.source) +
   1187                     'Expecting nothing\n')
   1188 
   1189     def report_success(self, out, test, example, got):
   1190         """
   1191         Report that the given example ran successfully.  (Only
   1192         displays a message if verbose=True)
   1193         """
   1194         if self._verbose:
   1195             out("ok\n")
   1196 
   1197     def report_failure(self, out, test, example, got):
   1198         """
   1199         Report that the given example failed.
   1200         """
   1201         out(self._failure_header(test, example) +
   1202             self._checker.output_difference(example, got, self.optionflags))
   1203 
   1204     def report_unexpected_exception(self, out, test, example, exc_info):
   1205         """
   1206         Report that the given example raised an unexpected exception.
   1207         """
   1208         out(self._failure_header(test, example) +
   1209             'Exception raised:\n' + _indent(_exception_traceback(exc_info)))
   1210 
   1211     def _failure_header(self, test, example):
   1212         out = [self.DIVIDER]
   1213         if test.filename:
   1214             if test.lineno is not None and example.lineno is not None:
   1215                 lineno = test.lineno + example.lineno + 1
   1216             else:
   1217                 lineno = '?'
   1218             out.append('File "%s", line %s, in %s' %
   1219                        (test.filename, lineno, test.name))
   1220         else:
   1221             out.append('Line %s, in %s' % (example.lineno+1, test.name))
   1222         out.append('Failed example:')
   1223         source = example.source
   1224         out.append(_indent(source))
   1225         return '\n'.join(out)
   1226 
   1227     #/////////////////////////////////////////////////////////////////
   1228     # DocTest Running
   1229     #/////////////////////////////////////////////////////////////////
   1230 
   1231     def __run(self, test, compileflags, out):
   1232         """
   1233         Run the examples in `test`.  Write the outcome of each example
   1234         with one of the `DocTestRunner.report_*` methods, using the
   1235         writer function `out`.  `compileflags` is the set of compiler
   1236         flags that should be used to execute examples.  Return a tuple
   1237         `(f, t)`, where `t` is the number of examples tried, and `f`
   1238         is the number of examples that failed.  The examples are run
   1239         in the namespace `test.globs`.
   1240         """
   1241         # Keep track of the number of failures and tries.
   1242         failures = tries = 0
   1243 
   1244         # Save the option flags (since option directives can be used
   1245         # to modify them).
   1246         original_optionflags = self.optionflags
   1247 
   1248         SUCCESS, FAILURE, BOOM = range(3) # `outcome` state
   1249 
   1250         check = self._checker.check_output
   1251 
   1252         # Process each example.
   1253         for examplenum, example in enumerate(test.examples):
   1254 
   1255             # If REPORT_ONLY_FIRST_FAILURE is set, then suppress
   1256             # reporting after the first failure.
   1257             quiet = (self.optionflags & REPORT_ONLY_FIRST_FAILURE and
   1258                      failures > 0)
   1259 
   1260             # Merge in the example's options.
   1261             self.optionflags = original_optionflags
   1262             if example.options:
   1263                 for (optionflag, val) in example.options.items():
   1264                     if val:
   1265                         self.optionflags |= optionflag
   1266                     else:
   1267                         self.optionflags &= ~optionflag
   1268 
   1269             # If 'SKIP' is set, then skip this example.
   1270             if self.optionflags & SKIP:
   1271                 continue
   1272 
   1273             # Record that we started this example.
   1274             tries += 1
   1275             if not quiet:
   1276                 self.report_start(out, test, example)
   1277 
   1278             # Use a special filename for compile(), so we can retrieve
   1279             # the source code during interactive debugging (see
   1280             # __patched_linecache_getlines).
   1281             filename = '<doctest %s[%d]>' % (test.name, examplenum)
   1282 
   1283             # Run the example in the given context (globs), and record
   1284             # any exception that gets raised.  (But don't intercept
   1285             # keyboard interrupts.)
   1286             try:
   1287                 # Don't blink!  This is where the user's code gets run.
   1288                 exec compile(example.source, filename, "single",
   1289                              compileflags, 1) in test.globs
   1290                 self.debugger.set_continue() # ==== Example Finished ====
   1291                 exception = None
   1292             except KeyboardInterrupt:
   1293                 raise
   1294             except:
   1295                 exception = sys.exc_info()
   1296                 self.debugger.set_continue() # ==== Example Finished ====
   1297 
   1298             got = self._fakeout.getvalue()  # the actual output
   1299             self._fakeout.truncate(0)
   1300             outcome = FAILURE   # guilty until proved innocent or insane
   1301 
   1302             # If the example executed without raising any exceptions,
   1303             # verify its output.
   1304             if exception is None:
   1305                 if check(example.want, got, self.optionflags):
   1306                     outcome = SUCCESS
   1307 
   1308             # The example raised an exception:  check if it was expected.
   1309             else:
   1310                 exc_info = sys.exc_info()
   1311                 exc_msg = traceback.format_exception_only(*exc_info[:2])[-1]
   1312                 if not quiet:
   1313                     got += _exception_traceback(exc_info)
   1314 
   1315                 # If `example.exc_msg` is None, then we weren't expecting
   1316                 # an exception.
   1317                 if example.exc_msg is None:
   1318                     outcome = BOOM
   1319 
   1320                 # We expected an exception:  see whether it matches.
   1321                 elif check(example.exc_msg, exc_msg, self.optionflags):
   1322                     outcome = SUCCESS
   1323 
   1324                 # Another chance if they didn't care about the detail.
   1325                 elif self.optionflags & IGNORE_EXCEPTION_DETAIL:
   1326                     m1 = re.match(r'(?:[^:]*\.)?([^:]*:)', example.exc_msg)
   1327                     m2 = re.match(r'(?:[^:]*\.)?([^:]*:)', exc_msg)
   1328                     if m1 and m2 and check(m1.group(1), m2.group(1),
   1329                                            self.optionflags):
   1330                         outcome = SUCCESS
   1331 
   1332             # Report the outcome.
   1333             if outcome is SUCCESS:
   1334                 if not quiet:
   1335                     self.report_success(out, test, example, got)
   1336             elif outcome is FAILURE:
   1337                 if not quiet:
   1338                     self.report_failure(out, test, example, got)
   1339                 failures += 1
   1340             elif outcome is BOOM:
   1341                 if not quiet:
   1342                     self.report_unexpected_exception(out, test, example,
   1343                                                      exc_info)
   1344                 failures += 1
   1345             else:
   1346                 assert False, ("unknown outcome", outcome)
   1347 
   1348         # Restore the option flags (in case they were modified)
   1349         self.optionflags = original_optionflags
   1350 
   1351         # Record and return the number of failures and tries.
   1352         self.__record_outcome(test, failures, tries)
   1353         return TestResults(failures, tries)
   1354 
   1355     def __record_outcome(self, test, f, t):
   1356         """
   1357         Record the fact that the given DocTest (`test`) generated `f`
   1358         failures out of `t` tried examples.
   1359         """
   1360         f2, t2 = self._name2ft.get(test.name, (0,0))
   1361         self._name2ft[test.name] = (f+f2, t+t2)
   1362         self.failures += f
   1363         self.tries += t
   1364 
   1365     __LINECACHE_FILENAME_RE = re.compile(r'<doctest '
   1366                                          r'(?P<name>.+)'
   1367                                          r'\[(?P<examplenum>\d+)\]>$')
   1368     def __patched_linecache_getlines(self, filename, module_globals=None):
   1369         m = self.__LINECACHE_FILENAME_RE.match(filename)
   1370         if m and m.group('name') == self.test.name:
   1371             example = self.test.examples[int(m.group('examplenum'))]
   1372             source = example.source
   1373             if isinstance(source, unicode):
   1374                 source = source.encode('ascii', 'backslashreplace')
   1375             return source.splitlines(True)
   1376         else:
   1377             return self.save_linecache_getlines(filename, module_globals)
   1378 
   1379     def run(self, test, compileflags=None, out=None, clear_globs=True):
   1380         """
   1381         Run the examples in `test`, and display the results using the
   1382         writer function `out`.
   1383 
   1384         The examples are run in the namespace `test.globs`.  If
   1385         `clear_globs` is true (the default), then this namespace will
   1386         be cleared after the test runs, to help with garbage
   1387         collection.  If you would like to examine the namespace after
   1388         the test completes, then use `clear_globs=False`.
   1389 
   1390         `compileflags` gives the set of flags that should be used by
   1391         the Python compiler when running the examples.  If not
   1392         specified, then it will default to the set of future-import
   1393         flags that apply to `globs`.
   1394 
   1395         The output of each example is checked using
   1396         `DocTestRunner.check_output`, and the results are formatted by
   1397         the `DocTestRunner.report_*` methods.
   1398         """
   1399         self.test = test
   1400 
   1401         if compileflags is None:
   1402             compileflags = _extract_future_flags(test.globs)
   1403 
   1404         save_stdout = sys.stdout
   1405         if out is None:
   1406             out = save_stdout.write
   1407         sys.stdout = self._fakeout
   1408 
   1409         # Patch pdb.set_trace to restore sys.stdout during interactive
   1410         # debugging (so it's not still redirected to self._fakeout).
   1411         # Note that the interactive output will go to *our*
   1412         # save_stdout, even if that's not the real sys.stdout; this
   1413         # allows us to write test cases for the set_trace behavior.
   1414         save_set_trace = pdb.set_trace
   1415         self.debugger = _OutputRedirectingPdb(save_stdout)
   1416         self.debugger.reset()
   1417         pdb.set_trace = self.debugger.set_trace
   1418 
   1419         # Patch linecache.getlines, so we can see the example's source
   1420         # when we're inside the debugger.
   1421         self.save_linecache_getlines = linecache.getlines
   1422         linecache.getlines = self.__patched_linecache_getlines
   1423 
   1424         # Make sure sys.displayhook just prints the value to stdout
   1425         save_displayhook = sys.displayhook
   1426         sys.displayhook = sys.__displayhook__
   1427 
   1428         try:
   1429             return self.__run(test, compileflags, out)
   1430         finally:
   1431             sys.stdout = save_stdout
   1432             pdb.set_trace = save_set_trace
   1433             linecache.getlines = self.save_linecache_getlines
   1434             sys.displayhook = save_displayhook
   1435             if clear_globs:
   1436                 test.globs.clear()
   1437 
   1438     #/////////////////////////////////////////////////////////////////
   1439     # Summarization
   1440     #/////////////////////////////////////////////////////////////////
   1441     def summarize(self, verbose=None):
   1442         """
   1443         Print a summary of all the test cases that have been run by
   1444         this DocTestRunner, and return a tuple `(f, t)`, where `f` is
   1445         the total number of failed examples, and `t` is the total
   1446         number of tried examples.
   1447 
   1448         The optional `verbose` argument controls how detailed the
   1449         summary is.  If the verbosity is not specified, then the
   1450         DocTestRunner's verbosity is used.
   1451         """
   1452         if verbose is None:
   1453             verbose = self._verbose
   1454         notests = []
   1455         passed = []
   1456         failed = []
   1457         totalt = totalf = 0
   1458         for x in self._name2ft.items():
   1459             name, (f, t) = x
   1460             assert f <= t
   1461             totalt += t
   1462             totalf += f
   1463             if t == 0:
   1464                 notests.append(name)
   1465             elif f == 0:
   1466                 passed.append( (name, t) )
   1467             else:
   1468                 failed.append(x)
   1469         if verbose:
   1470             if notests:
   1471                 print len(notests), "items had no tests:"
   1472                 notests.sort()
   1473                 for thing in notests:
   1474                     print "   ", thing
   1475             if passed:
   1476                 print len(passed), "items passed all tests:"
   1477                 passed.sort()
   1478                 for thing, count in passed:
   1479                     print " %3d tests in %s" % (count, thing)
   1480         if failed:
   1481             print self.DIVIDER
   1482             print len(failed), "items had failures:"
   1483             failed.sort()
   1484             for thing, (f, t) in failed:
   1485                 print " %3d of %3d in %s" % (f, t, thing)
   1486         if verbose:
   1487             print totalt, "tests in", len(self._name2ft), "items."
   1488             print totalt - totalf, "passed and", totalf, "failed."
   1489         if totalf:
   1490             print "***Test Failed***", totalf, "failures."
   1491         elif verbose:
   1492             print "Test passed."
   1493         return TestResults(totalf, totalt)
   1494 
   1495     #/////////////////////////////////////////////////////////////////
   1496     # Backward compatibility cruft to maintain doctest.master.
   1497     #/////////////////////////////////////////////////////////////////
   1498     def merge(self, other):
   1499         d = self._name2ft
   1500         for name, (f, t) in other._name2ft.items():
   1501             if name in d:
   1502                 # Don't print here by default, since doing
   1503                 #     so breaks some of the buildbots
   1504                 #print "*** DocTestRunner.merge: '" + name + "' in both" \
   1505                 #    " testers; summing outcomes."
   1506                 f2, t2 = d[name]
   1507                 f = f + f2
   1508                 t = t + t2
   1509             d[name] = f, t
   1510 
   1511 class OutputChecker:
   1512     """
   1513     A class used to check the whether the actual output from a doctest
   1514     example matches the expected output.  `OutputChecker` defines two
   1515     methods: `check_output`, which compares a given pair of outputs,
   1516     and returns true if they match; and `output_difference`, which
   1517     returns a string describing the differences between two outputs.
   1518     """
   1519     def check_output(self, want, got, optionflags):
   1520         """
   1521         Return True iff the actual output from an example (`got`)
   1522         matches the expected output (`want`).  These strings are
   1523         always considered to match if they are identical; but
   1524         depending on what option flags the test runner is using,
   1525         several non-exact match types are also possible.  See the
   1526         documentation for `TestRunner` for more information about
   1527         option flags.
   1528         """
   1529         # Handle the common case first, for efficiency:
   1530         # if they're string-identical, always return true.
   1531         if got == want:
   1532             return True
   1533 
   1534         # The values True and False replaced 1 and 0 as the return
   1535         # value for boolean comparisons in Python 2.3.
   1536         if not (optionflags & DONT_ACCEPT_TRUE_FOR_1):
   1537             if (got,want) == ("True\n", "1\n"):
   1538                 return True
   1539             if (got,want) == ("False\n", "0\n"):
   1540                 return True
   1541 
   1542         # <BLANKLINE> can be used as a special sequence to signify a
   1543         # blank line, unless the DONT_ACCEPT_BLANKLINE flag is used.
   1544         if not (optionflags & DONT_ACCEPT_BLANKLINE):
   1545             # Replace <BLANKLINE> in want with a blank line.
   1546             want = re.sub('(?m)^%s\s*?$' % re.escape(BLANKLINE_MARKER),
   1547                           '', want)
   1548             # If a line in got contains only spaces, then remove the
   1549             # spaces.
   1550             got = re.sub('(?m)^\s*?$', '', got)
   1551             if got == want:
   1552                 return True
   1553 
   1554         # This flag causes doctest to ignore any differences in the
   1555         # contents of whitespace strings.  Note that this can be used
   1556         # in conjunction with the ELLIPSIS flag.
   1557         if optionflags & NORMALIZE_WHITESPACE:
   1558             got = ' '.join(got.split())
   1559             want = ' '.join(want.split())
   1560             if got == want:
   1561                 return True
   1562 
   1563         # The ELLIPSIS flag says to let the sequence "..." in `want`
   1564         # match any substring in `got`.
   1565         if optionflags & ELLIPSIS:
   1566             if _ellipsis_match(want, got):
   1567                 return True
   1568 
   1569         # We didn't find any match; return false.
   1570         return False
   1571 
   1572     # Should we do a fancy diff?
   1573     def _do_a_fancy_diff(self, want, got, optionflags):
   1574         # Not unless they asked for a fancy diff.
   1575         if not optionflags & (REPORT_UDIFF |
   1576                               REPORT_CDIFF |
   1577                               REPORT_NDIFF):
   1578             return False
   1579 
   1580         # If expected output uses ellipsis, a meaningful fancy diff is
   1581         # too hard ... or maybe not.  In two real-life failures Tim saw,
   1582         # a diff was a major help anyway, so this is commented out.
   1583         # [todo] _ellipsis_match() knows which pieces do and don't match,
   1584         # and could be the basis for a kick-ass diff in this case.
   1585         ##if optionflags & ELLIPSIS and ELLIPSIS_MARKER in want:
   1586         ##    return False
   1587 
   1588         # ndiff does intraline difference marking, so can be useful even
   1589         # for 1-line differences.
   1590         if optionflags & REPORT_NDIFF:
   1591             return True
   1592 
   1593         # The other diff types need at least a few lines to be helpful.
   1594         return want.count('\n') > 2 and got.count('\n') > 2
   1595 
   1596     def output_difference(self, example, got, optionflags):
   1597         """
   1598         Return a string describing the differences between the
   1599         expected output for a given example (`example`) and the actual
   1600         output (`got`).  `optionflags` is the set of option flags used
   1601         to compare `want` and `got`.
   1602         """
   1603         want = example.want
   1604         # If <BLANKLINE>s are being used, then replace blank lines
   1605         # with <BLANKLINE> in the actual output string.
   1606         if not (optionflags & DONT_ACCEPT_BLANKLINE):
   1607             got = re.sub('(?m)^[ ]*(?=\n)', BLANKLINE_MARKER, got)
   1608 
   1609         # Check if we should use diff.
   1610         if self._do_a_fancy_diff(want, got, optionflags):
   1611             # Split want & got into lines.
   1612             want_lines = want.splitlines(True)  # True == keep line ends
   1613             got_lines = got.splitlines(True)
   1614             # Use difflib to find their differences.
   1615             if optionflags & REPORT_UDIFF:
   1616                 diff = difflib.unified_diff(want_lines, got_lines, n=2)
   1617                 diff = list(diff)[2:] # strip the diff header
   1618                 kind = 'unified diff with -expected +actual'
   1619             elif optionflags & REPORT_CDIFF:
   1620                 diff = difflib.context_diff(want_lines, got_lines, n=2)
   1621                 diff = list(diff)[2:] # strip the diff header
   1622                 kind = 'context diff with expected followed by actual'
   1623             elif optionflags & REPORT_NDIFF:
   1624                 engine = difflib.Differ(charjunk=difflib.IS_CHARACTER_JUNK)
   1625                 diff = list(engine.compare(want_lines, got_lines))
   1626                 kind = 'ndiff with -expected +actual'
   1627             else:
   1628                 assert 0, 'Bad diff option'
   1629             # Remove trailing whitespace on diff output.
   1630             diff = [line.rstrip() + '\n' for line in diff]
   1631             return 'Differences (%s):\n' % kind + _indent(''.join(diff))
   1632 
   1633         # If we're not using diff, then simply list the expected
   1634         # output followed by the actual output.
   1635         if want and got:
   1636             return 'Expected:\n%sGot:\n%s' % (_indent(want), _indent(got))
   1637         elif want:
   1638             return 'Expected:\n%sGot nothing\n' % _indent(want)
   1639         elif got:
   1640             return 'Expected nothing\nGot:\n%s' % _indent(got)
   1641         else:
   1642             return 'Expected nothing\nGot nothing\n'
   1643 
   1644 class DocTestFailure(Exception):
   1645     """A DocTest example has failed in debugging mode.
   1646 
   1647     The exception instance has variables:
   1648 
   1649     - test: the DocTest object being run
   1650 
   1651     - example: the Example object that failed
   1652 
   1653     - got: the actual output
   1654     """
   1655     def __init__(self, test, example, got):
   1656         self.test = test
   1657         self.example = example
   1658         self.got = got
   1659 
   1660     def __str__(self):
   1661         return str(self.test)
   1662 
   1663 class UnexpectedException(Exception):
   1664     """A DocTest example has encountered an unexpected exception
   1665 
   1666     The exception instance has variables:
   1667 
   1668     - test: the DocTest object being run
   1669 
   1670     - example: the Example object that failed
   1671 
   1672     - exc_info: the exception info
   1673     """
   1674     def __init__(self, test, example, exc_info):
   1675         self.test = test
   1676         self.example = example
   1677         self.exc_info = exc_info
   1678 
   1679     def __str__(self):
   1680         return str(self.test)
   1681 
   1682 class DebugRunner(DocTestRunner):
   1683     r"""Run doc tests but raise an exception as soon as there is a failure.
   1684 
   1685        If an unexpected exception occurs, an UnexpectedException is raised.
   1686        It contains the test, the example, and the original exception:
   1687 
   1688          >>> runner = DebugRunner(verbose=False)
   1689          >>> test = DocTestParser().get_doctest('>>> raise KeyError\n42',
   1690          ...                                    {}, 'foo', 'foo.py', 0)
   1691          >>> try:
   1692          ...     runner.run(test)
   1693          ... except UnexpectedException, failure:
   1694          ...     pass
   1695 
   1696          >>> failure.test is test
   1697          True
   1698 
   1699          >>> failure.example.want
   1700          '42\n'
   1701 
   1702          >>> exc_info = failure.exc_info
   1703          >>> raise exc_info[0], exc_info[1], exc_info[2]
   1704          Traceback (most recent call last):
   1705          ...
   1706          KeyError
   1707 
   1708        We wrap the original exception to give the calling application
   1709        access to the test and example information.
   1710 
   1711        If the output doesn't match, then a DocTestFailure is raised:
   1712 
   1713          >>> test = DocTestParser().get_doctest('''
   1714          ...      >>> x = 1
   1715          ...      >>> x
   1716          ...      2
   1717          ...      ''', {}, 'foo', 'foo.py', 0)
   1718 
   1719          >>> try:
   1720          ...    runner.run(test)
   1721          ... except DocTestFailure, failure:
   1722          ...    pass
   1723 
   1724        DocTestFailure objects provide access to the test:
   1725 
   1726          >>> failure.test is test
   1727          True
   1728 
   1729        As well as to the example:
   1730 
   1731          >>> failure.example.want
   1732          '2\n'
   1733 
   1734        and the actual output:
   1735 
   1736          >>> failure.got
   1737          '1\n'
   1738 
   1739        If a failure or error occurs, the globals are left intact:
   1740 
   1741          >>> del test.globs['__builtins__']
   1742          >>> test.globs
   1743          {'x': 1}
   1744 
   1745          >>> test = DocTestParser().get_doctest('''
   1746          ...      >>> x = 2
   1747          ...      >>> raise KeyError
   1748          ...      ''', {}, 'foo', 'foo.py', 0)
   1749 
   1750          >>> runner.run(test)
   1751          Traceback (most recent call last):
   1752          ...
   1753          UnexpectedException: <DocTest foo from foo.py:0 (2 examples)>
   1754 
   1755          >>> del test.globs['__builtins__']
   1756          >>> test.globs
   1757          {'x': 2}
   1758 
   1759        But the globals are cleared if there is no error:
   1760 
   1761          >>> test = DocTestParser().get_doctest('''
   1762          ...      >>> x = 2
   1763          ...      ''', {}, 'foo', 'foo.py', 0)
   1764 
   1765          >>> runner.run(test)
   1766          TestResults(failed=0, attempted=1)
   1767 
   1768          >>> test.globs
   1769          {}
   1770 
   1771        """
   1772 
   1773     def run(self, test, compileflags=None, out=None, clear_globs=True):
   1774         r = DocTestRunner.run(self, test, compileflags, out, False)
   1775         if clear_globs:
   1776             test.globs.clear()
   1777         return r
   1778 
   1779     def report_unexpected_exception(self, out, test, example, exc_info):
   1780         raise UnexpectedException(test, example, exc_info)
   1781 
   1782     def report_failure(self, out, test, example, got):
   1783         raise DocTestFailure(test, example, got)
   1784 
   1785 ######################################################################
   1786 ## 6. Test Functions
   1787 ######################################################################
   1788 # These should be backwards compatible.
   1789 
   1790 # For backward compatibility, a global instance of a DocTestRunner
   1791 # class, updated by testmod.
   1792 master = None
   1793 
   1794 def testmod(m=None, name=None, globs=None, verbose=None,
   1795             report=True, optionflags=0, extraglobs=None,
   1796             raise_on_error=False, exclude_empty=False):
   1797     """m=None, name=None, globs=None, verbose=None, report=True,
   1798        optionflags=0, extraglobs=None, raise_on_error=False,
   1799        exclude_empty=False
   1800 
   1801     Test examples in docstrings in functions and classes reachable
   1802     from module m (or the current module if m is not supplied), starting
   1803     with m.__doc__.
   1804 
   1805     Also test examples reachable from dict m.__test__ if it exists and is
   1806     not None.  m.__test__ maps names to functions, classes and strings;
   1807     function and class docstrings are tested even if the name is private;
   1808     strings are tested directly, as if they were docstrings.
   1809 
   1810     Return (#failures, #tests).
   1811 
   1812     See help(doctest) for an overview.
   1813 
   1814     Optional keyword arg "name" gives the name of the module; by default
   1815     use m.__name__.
   1816 
   1817     Optional keyword arg "globs" gives a dict to be used as the globals
   1818     when executing examples; by default, use m.__dict__.  A copy of this
   1819     dict is actually used for each docstring, so that each docstring's
   1820     examples start with a clean slate.
   1821 
   1822     Optional keyword arg "extraglobs" gives a dictionary that should be
   1823     merged into the globals that are used to execute examples.  By
   1824     default, no extra globals are used.  This is new in 2.4.
   1825 
   1826     Optional keyword arg "verbose" prints lots of stuff if true, prints
   1827     only failures if false; by default, it's true iff "-v" is in sys.argv.
   1828 
   1829     Optional keyword arg "report" prints a summary at the end when true,
   1830     else prints nothing at the end.  In verbose mode, the summary is
   1831     detailed, else very brief (in fact, empty if all tests passed).
   1832 
   1833     Optional keyword arg "optionflags" or's together module constants,
   1834     and defaults to 0.  This is new in 2.3.  Possible values (see the
   1835     docs for details):
   1836 
   1837         DONT_ACCEPT_TRUE_FOR_1
   1838         DONT_ACCEPT_BLANKLINE
   1839         NORMALIZE_WHITESPACE
   1840         ELLIPSIS
   1841         SKIP
   1842         IGNORE_EXCEPTION_DETAIL
   1843         REPORT_UDIFF
   1844         REPORT_CDIFF
   1845         REPORT_NDIFF
   1846         REPORT_ONLY_FIRST_FAILURE
   1847 
   1848     Optional keyword arg "raise_on_error" raises an exception on the
   1849     first unexpected exception or failure. This allows failures to be
   1850     post-mortem debugged.
   1851 
   1852     Advanced tomfoolery:  testmod runs methods of a local instance of
   1853     class doctest.Tester, then merges the results into (or creates)
   1854     global Tester instance doctest.master.  Methods of doctest.master
   1855     can be called directly too, if you want to do something unusual.
   1856     Passing report=0 to testmod is especially useful then, to delay
   1857     displaying a summary.  Invoke doctest.master.summarize(verbose)
   1858     when you're done fiddling.
   1859     """
   1860     global master
   1861 
   1862     # If no module was given, then use __main__.
   1863     if m is None:
   1864         # DWA - m will still be None if this wasn't invoked from the command
   1865         # line, in which case the following TypeError is about as good an error
   1866         # as we should expect
   1867         m = sys.modules.get('__main__')
   1868 
   1869     # Check that we were actually given a module.
   1870     if not inspect.ismodule(m):
   1871         raise TypeError("testmod: module required; %r" % (m,))
   1872 
   1873     # If no name was given, then use the module's name.
   1874     if name is None:
   1875         name = m.__name__
   1876 
   1877     # Find, parse, and run all tests in the given module.
   1878     finder = DocTestFinder(exclude_empty=exclude_empty)
   1879 
   1880     if raise_on_error:
   1881         runner = DebugRunner(verbose=verbose, optionflags=optionflags)
   1882     else:
   1883         runner = DocTestRunner(verbose=verbose, optionflags=optionflags)
   1884 
   1885     for test in finder.find(m, name, globs=globs, extraglobs=extraglobs):
   1886         runner.run(test)
   1887 
   1888     if report:
   1889         runner.summarize()
   1890 
   1891     if master is None:
   1892         master = runner
   1893     else:
   1894         master.merge(runner)
   1895 
   1896     return TestResults(runner.failures, runner.tries)
   1897 
   1898 def testfile(filename, module_relative=True, name=None, package=None,
   1899              globs=None, verbose=None, report=True, optionflags=0,
   1900              extraglobs=None, raise_on_error=False, parser=DocTestParser(),
   1901              encoding=None):
   1902     """
   1903     Test examples in the given file.  Return (#failures, #tests).
   1904 
   1905     Optional keyword arg "module_relative" specifies how filenames
   1906     should be interpreted:
   1907 
   1908       - If "module_relative" is True (the default), then "filename"
   1909          specifies a module-relative path.  By default, this path is
   1910          relative to the calling module's directory; but if the
   1911          "package" argument is specified, then it is relative to that
   1912          package.  To ensure os-independence, "filename" should use
   1913          "/" characters to separate path segments, and should not
   1914          be an absolute path (i.e., it may not begin with "/").
   1915 
   1916       - If "module_relative" is False, then "filename" specifies an
   1917         os-specific path.  The path may be absolute or relative (to
   1918         the current working directory).
   1919 
   1920     Optional keyword arg "name" gives the name of the test; by default
   1921     use the file's basename.
   1922 
   1923     Optional keyword argument "package" is a Python package or the
   1924     name of a Python package whose directory should be used as the
   1925     base directory for a module relative filename.  If no package is
   1926     specified, then the calling module's directory is used as the base
   1927     directory for module relative filenames.  It is an error to
   1928     specify "package" if "module_relative" is False.
   1929 
   1930     Optional keyword arg "globs" gives a dict to be used as the globals
   1931     when executing examples; by default, use {}.  A copy of this dict
   1932     is actually used for each docstring, so that each docstring's
   1933     examples start with a clean slate.
   1934 
   1935     Optional keyword arg "extraglobs" gives a dictionary that should be
   1936     merged into the globals that are used to execute examples.  By
   1937     default, no extra globals are used.
   1938 
   1939     Optional keyword arg "verbose" prints lots of stuff if true, prints
   1940     only failures if false; by default, it's true iff "-v" is in sys.argv.
   1941 
   1942     Optional keyword arg "report" prints a summary at the end when true,
   1943     else prints nothing at the end.  In verbose mode, the summary is
   1944     detailed, else very brief (in fact, empty if all tests passed).
   1945 
   1946     Optional keyword arg "optionflags" or's together module constants,
   1947     and defaults to 0.  Possible values (see the docs for details):
   1948 
   1949         DONT_ACCEPT_TRUE_FOR_1
   1950         DONT_ACCEPT_BLANKLINE
   1951         NORMALIZE_WHITESPACE
   1952         ELLIPSIS
   1953         SKIP
   1954         IGNORE_EXCEPTION_DETAIL
   1955         REPORT_UDIFF
   1956         REPORT_CDIFF
   1957         REPORT_NDIFF
   1958         REPORT_ONLY_FIRST_FAILURE
   1959 
   1960     Optional keyword arg "raise_on_error" raises an exception on the
   1961     first unexpected exception or failure. This allows failures to be
   1962     post-mortem debugged.
   1963 
   1964     Optional keyword arg "parser" specifies a DocTestParser (or
   1965     subclass) that should be used to extract tests from the files.
   1966 
   1967     Optional keyword arg "encoding" specifies an encoding that should
   1968     be used to convert the file to unicode.
   1969 
   1970     Advanced tomfoolery:  testmod runs methods of a local instance of
   1971     class doctest.Tester, then merges the results into (or creates)
   1972     global Tester instance doctest.master.  Methods of doctest.master
   1973     can be called directly too, if you want to do something unusual.
   1974     Passing report=0 to testmod is especially useful then, to delay
   1975     displaying a summary.  Invoke doctest.master.summarize(verbose)
   1976     when you're done fiddling.
   1977     """
   1978     global master
   1979 
   1980     if package and not module_relative:
   1981         raise ValueError("Package may only be specified for module-"
   1982                          "relative paths.")
   1983 
   1984     # Relativize the path
   1985     text, filename = _load_testfile(filename, package, module_relative)
   1986 
   1987     # If no name was given, then use the file's name.
   1988     if name is None:
   1989         name = os.path.basename(filename)
   1990 
   1991     # Assemble the globals.
   1992     if globs is None:
   1993         globs = {}
   1994     else:
   1995         globs = globs.copy()
   1996     if extraglobs is not None:
   1997         globs.update(extraglobs)
   1998     if '__name__' not in globs:
   1999         globs['__name__'] = '__main__'
   2000 
   2001     if raise_on_error:
   2002         runner = DebugRunner(verbose=verbose, optionflags=optionflags)
   2003     else:
   2004         runner = DocTestRunner(verbose=verbose, optionflags=optionflags)
   2005 
   2006     if encoding is not None:
   2007         text = text.decode(encoding)
   2008 
   2009     # Read the file, convert it to a test, and run it.
   2010     test = parser.get_doctest(text, globs, name, filename, 0)
   2011     runner.run(test)
   2012 
   2013     if report:
   2014         runner.summarize()
   2015 
   2016     if master is None:
   2017         master = runner
   2018     else:
   2019         master.merge(runner)
   2020 
   2021     return TestResults(runner.failures, runner.tries)
   2022 
   2023 def run_docstring_examples(f, globs, verbose=False, name="NoName",
   2024                            compileflags=None, optionflags=0):
   2025     """
   2026     Test examples in the given object's docstring (`f`), using `globs`
   2027     as globals.  Optional argument `name` is used in failure messages.
   2028     If the optional argument `verbose` is true, then generate output
   2029     even if there are no failures.
   2030 
   2031     `compileflags` gives the set of flags that should be used by the
   2032     Python compiler when running the examples.  If not specified, then
   2033     it will default to the set of future-import flags that apply to
   2034     `globs`.
   2035 
   2036     Optional keyword arg `optionflags` specifies options for the
   2037     testing and output.  See the documentation for `testmod` for more
   2038     information.
   2039     """
   2040     # Find, parse, and run all tests in the given module.
   2041     finder = DocTestFinder(verbose=verbose, recurse=False)
   2042     runner = DocTestRunner(verbose=verbose, optionflags=optionflags)
   2043     for test in finder.find(f, name, globs=globs):
   2044         runner.run(test, compileflags=compileflags)
   2045 
   2046 ######################################################################
   2047 ## 7. Tester
   2048 ######################################################################
   2049 # This is provided only for backwards compatibility.  It's not
   2050 # actually used in any way.
   2051 
   2052 class Tester:
   2053     def __init__(self, mod=None, globs=None, verbose=None, optionflags=0):
   2054 
   2055         warnings.warn("class Tester is deprecated; "
   2056                       "use class doctest.DocTestRunner instead",
   2057                       DeprecationWarning, stacklevel=2)
   2058         if mod is None and globs is None:
   2059             raise TypeError("Tester.__init__: must specify mod or globs")
   2060         if mod is not None and not inspect.ismodule(mod):
   2061             raise TypeError("Tester.__init__: mod must be a module; %r" %
   2062                             (mod,))
   2063         if globs is None:
   2064             globs = mod.__dict__
   2065         self.globs = globs
   2066 
   2067         self.verbose = verbose
   2068         self.optionflags = optionflags
   2069         self.testfinder = DocTestFinder()
   2070         self.testrunner = DocTestRunner(verbose=verbose,
   2071                                         optionflags=optionflags)
   2072 
   2073     def runstring(self, s, name):
   2074         test = DocTestParser().get_doctest(s, self.globs, name, None, None)
   2075         if self.verbose:
   2076             print "Running string", name
   2077         (f,t) = self.testrunner.run(test)
   2078         if self.verbose:
   2079             print f, "of", t, "examples failed in string", name
   2080         return TestResults(f,t)
   2081 
   2082     def rundoc(self, object, name=None, module=None):
   2083         f = t = 0
   2084         tests = self.testfinder.find(object, name, module=module,
   2085                                      globs=self.globs)
   2086         for test in tests:
   2087             (f2, t2) = self.testrunner.run(test)
   2088             (f,t) = (f+f2, t+t2)
   2089         return TestResults(f,t)
   2090 
   2091     def rundict(self, d, name, module=None):
   2092         import types
   2093         m = types.ModuleType(name)
   2094         m.__dict__.update(d)
   2095         if module is None:
   2096             module = False
   2097         return self.rundoc(m, name, module)
   2098 
   2099     def run__test__(self, d, name):
   2100         import types
   2101         m = types.ModuleType(name)
   2102         m.__test__ = d
   2103         return self.rundoc(m, name)
   2104 
   2105     def summarize(self, verbose=None):
   2106         return self.testrunner.summarize(verbose)
   2107 
   2108     def merge(self, other):
   2109         self.testrunner.merge(other.testrunner)
   2110 
   2111 ######################################################################
   2112 ## 8. Unittest Support
   2113 ######################################################################
   2114 
   2115 _unittest_reportflags = 0
   2116 
   2117 def set_unittest_reportflags(flags):
   2118     """Sets the unittest option flags.
   2119 
   2120     The old flag is returned so that a runner could restore the old
   2121     value if it wished to:
   2122 
   2123       >>> import doctest
   2124       >>> old = doctest._unittest_reportflags
   2125       >>> doctest.set_unittest_reportflags(REPORT_NDIFF |
   2126       ...                          REPORT_ONLY_FIRST_FAILURE) == old
   2127       True
   2128 
   2129       >>> doctest._unittest_reportflags == (REPORT_NDIFF |
   2130       ...                                   REPORT_ONLY_FIRST_FAILURE)
   2131       True
   2132 
   2133     Only reporting flags can be set:
   2134 
   2135       >>> doctest.set_unittest_reportflags(ELLIPSIS)
   2136       Traceback (most recent call last):
   2137       ...
   2138       ValueError: ('Only reporting flags allowed', 8)
   2139 
   2140       >>> doctest.set_unittest_reportflags(old) == (REPORT_NDIFF |
   2141       ...                                   REPORT_ONLY_FIRST_FAILURE)
   2142       True
   2143     """
   2144     global _unittest_reportflags
   2145 
   2146     if (flags & REPORTING_FLAGS) != flags:
   2147         raise ValueError("Only reporting flags allowed", flags)
   2148     old = _unittest_reportflags
   2149     _unittest_reportflags = flags
   2150     return old
   2151 
   2152 
   2153 class DocTestCase(unittest.TestCase):
   2154 
   2155     def __init__(self, test, optionflags=0, setUp=None, tearDown=None,
   2156                  checker=None):
   2157 
   2158         unittest.TestCase.__init__(self)
   2159         self._dt_optionflags = optionflags
   2160         self._dt_checker = checker
   2161         self._dt_test = test
   2162         self._dt_setUp = setUp
   2163         self._dt_tearDown = tearDown
   2164 
   2165     def setUp(self):
   2166         test = self._dt_test
   2167 
   2168         if self._dt_setUp is not None:
   2169             self._dt_setUp(test)
   2170 
   2171     def tearDown(self):
   2172         test = self._dt_test
   2173 
   2174         if self._dt_tearDown is not None:
   2175             self._dt_tearDown(test)
   2176 
   2177         test.globs.clear()
   2178 
   2179     def runTest(self):
   2180         test = self._dt_test
   2181         old = sys.stdout
   2182         new = StringIO()
   2183         optionflags = self._dt_optionflags
   2184 
   2185         if not (optionflags & REPORTING_FLAGS):
   2186             # The option flags don't include any reporting flags,
   2187             # so add the default reporting flags
   2188             optionflags |= _unittest_reportflags
   2189 
   2190         runner = DocTestRunner(optionflags=optionflags,
   2191                                checker=self._dt_checker, verbose=False)
   2192 
   2193         try:
   2194             runner.DIVIDER = "-"*70
   2195             failures, tries = runner.run(
   2196                 test, out=new.write, clear_globs=False)
   2197         finally:
   2198             sys.stdout = old
   2199 
   2200         if failures:
   2201             raise self.failureException(self.format_failure(new.getvalue()))
   2202 
   2203     def format_failure(self, err):
   2204         test = self._dt_test
   2205         if test.lineno is None:
   2206             lineno = 'unknown line number'
   2207         else:
   2208             lineno = '%s' % test.lineno
   2209         lname = '.'.join(test.name.split('.')[-1:])
   2210         return ('Failed doctest test for %s\n'
   2211                 '  File "%s", line %s, in %s\n\n%s'
   2212                 % (test.name, test.filename, lineno, lname, err)
   2213                 )
   2214 
   2215     def debug(self):
   2216         r"""Run the test case without results and without catching exceptions
   2217 
   2218            The unit test framework includes a debug method on test cases
   2219            and test suites to support post-mortem debugging.  The test code
   2220            is run in such a way that errors are not caught.  This way a
   2221            caller can catch the errors and initiate post-mortem debugging.
   2222 
   2223            The DocTestCase provides a debug method that raises
   2224            UnexpectedException errors if there is an unexpected
   2225            exception:
   2226 
   2227              >>> test = DocTestParser().get_doctest('>>> raise KeyError\n42',
   2228              ...                {}, 'foo', 'foo.py', 0)
   2229              >>> case = DocTestCase(test)
   2230              >>> try:
   2231              ...     case.debug()
   2232              ... except UnexpectedException, failure:
   2233              ...     pass
   2234 
   2235            The UnexpectedException contains the test, the example, and
   2236            the original exception:
   2237 
   2238              >>> failure.test is test
   2239              True
   2240 
   2241              >>> failure.example.want
   2242              '42\n'
   2243 
   2244              >>> exc_info = failure.exc_info
   2245              >>> raise exc_info[0], exc_info[1], exc_info[2]
   2246              Traceback (most recent call last):
   2247              ...
   2248              KeyError
   2249 
   2250            If the output doesn't match, then a DocTestFailure is raised:
   2251 
   2252              >>> test = DocTestParser().get_doctest('''
   2253              ...      >>> x = 1
   2254              ...      >>> x
   2255              ...      2
   2256              ...      ''', {}, 'foo', 'foo.py', 0)
   2257              >>> case = DocTestCase(test)
   2258 
   2259              >>> try:
   2260              ...    case.debug()
   2261              ... except DocTestFailure, failure:
   2262              ...    pass
   2263 
   2264            DocTestFailure objects provide access to the test:
   2265 
   2266              >>> failure.test is test
   2267              True
   2268 
   2269            As well as to the example:
   2270 
   2271              >>> failure.example.want
   2272              '2\n'
   2273 
   2274            and the actual output:
   2275 
   2276              >>> failure.got
   2277              '1\n'
   2278 
   2279            """
   2280 
   2281         self.setUp()
   2282         runner = DebugRunner(optionflags=self._dt_optionflags,
   2283                              checker=self._dt_checker, verbose=False)
   2284         runner.run(self._dt_test, clear_globs=False)
   2285         self.tearDown()
   2286 
   2287     def id(self):
   2288         return self._dt_test.name
   2289 
   2290     def __eq__(self, other):
   2291         if type(self) is not type(other):
   2292             return NotImplemented
   2293 
   2294         return self._dt_test == other._dt_test and \
   2295                self._dt_optionflags == other._dt_optionflags and \
   2296                self._dt_setUp == other._dt_setUp and \
   2297                self._dt_tearDown == other._dt_tearDown and \
   2298                self._dt_checker == other._dt_checker
   2299 
   2300     def __ne__(self, other):
   2301         return not self == other
   2302 
   2303     def __hash__(self):
   2304         return hash((self._dt_optionflags, self._dt_setUp, self._dt_tearDown,
   2305                      self._dt_checker))
   2306 
   2307     def __repr__(self):
   2308         name = self._dt_test.name.split('.')
   2309         return "%s (%s)" % (name[-1], '.'.join(name[:-1]))
   2310 
   2311     __str__ = __repr__
   2312 
   2313     def shortDescription(self):
   2314         return "Doctest: " + self._dt_test.name
   2315 
   2316 class SkipDocTestCase(DocTestCase):
   2317     def __init__(self, module):
   2318         self.module = module
   2319         DocTestCase.__init__(self, None)
   2320 
   2321     def setUp(self):
   2322         self.skipTest("DocTestSuite will not work with -O2 and above")
   2323 
   2324     def test_skip(self):
   2325         pass
   2326 
   2327     def shortDescription(self):
   2328         return "Skipping tests from %s" % self.module.__name__
   2329 
   2330     __str__ = shortDescription
   2331 
   2332 
   2333 def DocTestSuite(module=None, globs=None, extraglobs=None, test_finder=None,
   2334                  **options):
   2335     """
   2336     Convert doctest tests for a module to a unittest test suite.
   2337 
   2338     This converts each documentation string in a module that
   2339     contains doctest tests to a unittest test case.  If any of the
   2340     tests in a doc string fail, then the test case fails.  An exception
   2341     is raised showing the name of the file containing the test and a
   2342     (sometimes approximate) line number.
   2343 
   2344     The `module` argument provides the module to be tested.  The argument
   2345     can be either a module or a module name.
   2346 
   2347     If no argument is given, the calling module is used.
   2348 
   2349     A number of options may be provided as keyword arguments:
   2350 
   2351     setUp
   2352       A set-up function.  This is called before running the
   2353       tests in each file. The setUp function will be passed a DocTest
   2354       object.  The setUp function can access the test globals as the
   2355       globs attribute of the test passed.
   2356 
   2357     tearDown
   2358       A tear-down function.  This is called after running the
   2359       tests in each file.  The tearDown function will be passed a DocTest
   2360       object.  The tearDown function can access the test globals as the
   2361       globs attribute of the test passed.
   2362 
   2363     globs
   2364       A dictionary containing initial global variables for the tests.
   2365 
   2366     optionflags
   2367        A set of doctest option flags expressed as an integer.
   2368     """
   2369 
   2370     if test_finder is None:
   2371         test_finder = DocTestFinder()
   2372 
   2373     module = _normalize_module(module)
   2374     tests = test_finder.find(module, globs=globs, extraglobs=extraglobs)
   2375 
   2376     if not tests and sys.flags.optimize >=2:
   2377         # Skip doctests when running with -O2
   2378         suite = unittest.TestSuite()
   2379         suite.addTest(SkipDocTestCase(module))
   2380         return suite
   2381     elif not tests:
   2382         # Why do we want to do this? Because it reveals a bug that might
   2383         # otherwise be hidden.
   2384         # It is probably a bug that this exception is not also raised if the
   2385         # number of doctest examples in tests is zero (i.e. if no doctest
   2386         # examples were found).  However, we should probably not be raising
   2387         # an exception at all here, though it is too late to make this change
   2388         # for a maintenance release.  See also issue #14649.
   2389         raise ValueError(module, "has no docstrings")
   2390 
   2391     tests.sort()
   2392     suite = unittest.TestSuite()
   2393 
   2394     for test in tests:
   2395         if len(test.examples) == 0:
   2396             continue
   2397         if not test.filename:
   2398             filename = module.__file__
   2399             if filename[-4:] in (".pyc", ".pyo"):
   2400                 filename = filename[:-1]
   2401             test.filename = filename
   2402         suite.addTest(DocTestCase(test, **options))
   2403 
   2404     return suite
   2405 
   2406 class DocFileCase(DocTestCase):
   2407 
   2408     def id(self):
   2409         return '_'.join(self._dt_test.name.split('.'))
   2410 
   2411     def __repr__(self):
   2412         return self._dt_test.filename
   2413     __str__ = __repr__
   2414 
   2415     def format_failure(self, err):
   2416         return ('Failed doctest test for %s\n  File "%s", line 0\n\n%s'
   2417                 % (self._dt_test.name, self._dt_test.filename, err)
   2418                 )
   2419 
   2420 def DocFileTest(path, module_relative=True, package=None,
   2421                 globs=None, parser=DocTestParser(),
   2422                 encoding=None, **options):
   2423     if globs is None:
   2424         globs = {}
   2425     else:
   2426         globs = globs.copy()
   2427 
   2428     if package and not module_relative:
   2429         raise ValueError("Package may only be specified for module-"
   2430                          "relative paths.")
   2431 
   2432     # Relativize the path.
   2433     doc, path = _load_testfile(path, package, module_relative)
   2434 
   2435     if "__file__" not in globs:
   2436         globs["__file__"] = path
   2437 
   2438     # Find the file and read it.
   2439     name = os.path.basename(path)
   2440 
   2441     # If an encoding is specified, use it to convert the file to unicode
   2442     if encoding is not None:
   2443         doc = doc.decode(encoding)
   2444 
   2445     # Convert it to a test, and wrap it in a DocFileCase.
   2446     test = parser.get_doctest(doc, globs, name, path, 0)
   2447     return DocFileCase(test, **options)
   2448 
   2449 def DocFileSuite(*paths, **kw):
   2450     """A unittest suite for one or more doctest files.
   2451 
   2452     The path to each doctest file is given as a string; the
   2453     interpretation of that string depends on the keyword argument
   2454     "module_relative".
   2455 
   2456     A number of options may be provided as keyword arguments:
   2457 
   2458     module_relative
   2459       If "module_relative" is True, then the given file paths are
   2460       interpreted as os-independent module-relative paths.  By
   2461       default, these paths are relative to the calling module's
   2462       directory; but if the "package" argument is specified, then
   2463       they are relative to that package.  To ensure os-independence,
   2464       "filename" should use "/" characters to separate path
   2465       segments, and may not be an absolute path (i.e., it may not
   2466       begin with "/").
   2467 
   2468       If "module_relative" is False, then the given file paths are
   2469       interpreted as os-specific paths.  These paths may be absolute
   2470       or relative (to the current working directory).
   2471 
   2472     package
   2473       A Python package or the name of a Python package whose directory
   2474       should be used as the base directory for module relative paths.
   2475       If "package" is not specified, then the calling module's
   2476       directory is used as the base directory for module relative
   2477       filenames.  It is an error to specify "package" if
   2478       "module_relative" is False.
   2479 
   2480     setUp
   2481       A set-up function.  This is called before running the
   2482       tests in each file. The setUp function will be passed a DocTest
   2483       object.  The setUp function can access the test globals as the
   2484       globs attribute of the test passed.
   2485 
   2486     tearDown
   2487       A tear-down function.  This is called after running the
   2488       tests in each file.  The tearDown function will be passed a DocTest
   2489       object.  The tearDown function can access the test globals as the
   2490       globs attribute of the test passed.
   2491 
   2492     globs
   2493       A dictionary containing initial global variables for the tests.
   2494 
   2495     optionflags
   2496       A set of doctest option flags expressed as an integer.
   2497 
   2498     parser
   2499       A DocTestParser (or subclass) that should be used to extract
   2500       tests from the files.
   2501 
   2502     encoding
   2503       An encoding that will be used to convert the files to unicode.
   2504     """
   2505     suite = unittest.TestSuite()
   2506 
   2507     # We do this here so that _normalize_module is called at the right
   2508     # level.  If it were called in DocFileTest, then this function
   2509     # would be the caller and we might guess the package incorrectly.
   2510     if kw.get('module_relative', True):
   2511         kw['package'] = _normalize_module(kw.get('package'))
   2512 
   2513     for path in paths:
   2514         suite.addTest(DocFileTest(path, **kw))
   2515 
   2516     return suite
   2517 
   2518 ######################################################################
   2519 ## 9. Debugging Support
   2520 ######################################################################
   2521 
   2522 def script_from_examples(s):
   2523     r"""Extract script from text with examples.
   2524 
   2525        Converts text with examples to a Python script.  Example input is
   2526        converted to regular code.  Example output and all other words
   2527        are converted to comments:
   2528 
   2529        >>> text = '''
   2530        ...       Here are examples of simple math.
   2531        ...
   2532        ...           Python has super accurate integer addition
   2533        ...
   2534        ...           >>> 2 + 2
   2535        ...           5
   2536        ...
   2537        ...           And very friendly error messages:
   2538        ...
   2539        ...           >>> 1/0
   2540        ...           To Infinity
   2541        ...           And
   2542        ...           Beyond
   2543        ...
   2544        ...           You can use logic if you want:
   2545        ...
   2546        ...           >>> if 0:
   2547        ...           ...    blah
   2548        ...           ...    blah
   2549        ...           ...
   2550        ...
   2551        ...           Ho hum
   2552        ...           '''
   2553 
   2554        >>> print script_from_examples(text)
   2555        # Here are examples of simple math.
   2556        #
   2557        #     Python has super accurate integer addition
   2558        #
   2559        2 + 2
   2560        # Expected:
   2561        ## 5
   2562        #
   2563        #     And very friendly error messages:
   2564        #
   2565        1/0
   2566        # Expected:
   2567        ## To Infinity
   2568        ## And
   2569        ## Beyond
   2570        #
   2571        #     You can use logic if you want:
   2572        #
   2573        if 0:
   2574           blah
   2575           blah
   2576        #
   2577        #     Ho hum
   2578        <BLANKLINE>
   2579        """
   2580     output = []
   2581     for piece in DocTestParser().parse(s):
   2582         if isinstance(piece, Example):
   2583             # Add the example's source code (strip trailing NL)
   2584             output.append(piece.source[:-1])
   2585             # Add the expected output:
   2586             want = piece.want
   2587             if want:
   2588                 output.append('# Expected:')
   2589                 output += ['## '+l for l in want.split('\n')[:-1]]
   2590         else:
   2591             # Add non-example text.
   2592             output += [_comment_line(l)
   2593                        for l in piece.split('\n')[:-1]]
   2594 
   2595     # Trim junk on both ends.
   2596     while output and output[-1] == '#':
   2597         output.pop()
   2598     while output and output[0] == '#':
   2599         output.pop(0)
   2600     # Combine the output, and return it.
   2601     # Add a courtesy newline to prevent exec from choking (see bug #1172785)
   2602     return '\n'.join(output) + '\n'
   2603 
   2604 def testsource(module, name):
   2605     """Extract the test sources from a doctest docstring as a script.
   2606 
   2607     Provide the module (or dotted name of the module) containing the
   2608     test to be debugged and the name (within the module) of the object
   2609     with the doc string with tests to be debugged.
   2610     """
   2611     module = _normalize_module(module)
   2612     tests = DocTestFinder().find(module)
   2613     test = [t for t in tests if t.name == name]
   2614     if not test:
   2615         raise ValueError(name, "not found in tests")
   2616     test = test[0]
   2617     testsrc = script_from_examples(test.docstring)
   2618     return testsrc
   2619 
   2620 def debug_src(src, pm=False, globs=None):
   2621     """Debug a single doctest docstring, in argument `src`'"""
   2622     testsrc = script_from_examples(src)
   2623     debug_script(testsrc, pm, globs)
   2624 
   2625 def debug_script(src, pm=False, globs=None):
   2626     "Debug a test script.  `src` is the script, as a string."
   2627     import pdb
   2628 
   2629     # Note that tempfile.NameTemporaryFile() cannot be used.  As the
   2630     # docs say, a file so created cannot be opened by name a second time
   2631     # on modern Windows boxes, and execfile() needs to open it.
   2632     srcfilename = tempfile.mktemp(".py", "doctestdebug")
   2633     f = open(srcfilename, 'w')
   2634     f.write(src)
   2635     f.close()
   2636 
   2637     try:
   2638         if globs:
   2639             globs = globs.copy()
   2640         else:
   2641             globs = {}
   2642 
   2643         if pm:
   2644             try:
   2645                 execfile(srcfilename, globs, globs)
   2646             except:
   2647                 print sys.exc_info()[1]
   2648                 pdb.post_mortem(sys.exc_info()[2])
   2649         else:
   2650             # Note that %r is vital here.  '%s' instead can, e.g., cause
   2651             # backslashes to get treated as metacharacters on Windows.
   2652             pdb.run("execfile(%r)" % srcfilename, globs, globs)
   2653 
   2654     finally:
   2655         os.remove(srcfilename)
   2656 
   2657 def debug(module, name, pm=False):
   2658     """Debug a single doctest docstring.
   2659 
   2660     Provide the module (or dotted name of the module) containing the
   2661     test to be debugged and the name (within the module) of the object
   2662     with the docstring with tests to be debugged.
   2663     """
   2664     module = _normalize_module(module)
   2665     testsrc = testsource(module, name)
   2666     debug_script(testsrc, pm, module.__dict__)
   2667 
   2668 ######################################################################
   2669 ## 10. Example Usage
   2670 ######################################################################
   2671 class _TestClass:
   2672     """
   2673     A pointless class, for sanity-checking of docstring testing.
   2674 
   2675     Methods:
   2676         square()
   2677         get()
   2678 
   2679     >>> _TestClass(13).get() + _TestClass(-12).get()
   2680     1
   2681     >>> hex(_TestClass(13).square().get())
   2682     '0xa9'
   2683     """
   2684 
   2685     def __init__(self, val):
   2686         """val -> _TestClass object with associated value val.
   2687 
   2688         >>> t = _TestClass(123)
   2689         >>> print t.get()
   2690         123
   2691         """
   2692 
   2693         self.val = val
   2694 
   2695     def square(self):
   2696         """square() -> square TestClass's associated value
   2697 
   2698         >>> _TestClass(13).square().get()
   2699         169
   2700         """
   2701 
   2702         self.val = self.val ** 2
   2703         return self
   2704 
   2705     def get(self):
   2706         """get() -> return TestClass's associated value.
   2707 
   2708         >>> x = _TestClass(-42)
   2709         >>> print x.get()
   2710         -42
   2711         """
   2712 
   2713         return self.val
   2714 
   2715 __test__ = {"_TestClass": _TestClass,
   2716             "string": r"""
   2717                       Example of a string object, searched as-is.
   2718                       >>> x = 1; y = 2
   2719                       >>> x + y, x * y
   2720                       (3, 2)
   2721                       """,
   2722 
   2723             "bool-int equivalence": r"""
   2724                                     In 2.2, boolean expressions displayed
   2725                                     0 or 1.  By default, we still accept
   2726                                     them.  This can be disabled by passing
   2727                                     DONT_ACCEPT_TRUE_FOR_1 to the new
   2728                                     optionflags argument.
   2729                                     >>> 4 == 4
   2730                                     1
   2731                                     >>> 4 == 4
   2732                                     True
   2733                                     >>> 4 > 4
   2734                                     0
   2735                                     >>> 4 > 4
   2736                                     False
   2737                                     """,
   2738 
   2739             "blank lines": r"""
   2740                 Blank lines can be marked with <BLANKLINE>:
   2741                     >>> print 'foo\n\nbar\n'
   2742                     foo
   2743                     <BLANKLINE>
   2744                     bar
   2745                     <BLANKLINE>
   2746             """,
   2747 
   2748             "ellipsis": r"""
   2749                 If the ellipsis flag is used, then '...' can be used to
   2750                 elide substrings in the desired output:
   2751                     >>> print range(1000) #doctest: +ELLIPSIS
   2752                     [0, 1, 2, ..., 999]
   2753             """,
   2754 
   2755             "whitespace normalization": r"""
   2756                 If the whitespace normalization flag is used, then
   2757                 differences in whitespace are ignored.
   2758                     >>> print range(30) #doctest: +NORMALIZE_WHITESPACE
   2759                     [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
   2760                      15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
   2761                      27, 28, 29]
   2762             """,
   2763            }
   2764 
   2765 
   2766 def _test():
   2767     testfiles = [arg for arg in sys.argv[1:] if arg and arg[0] != '-']
   2768     if not testfiles:
   2769         name = os.path.basename(sys.argv[0])
   2770         if '__loader__' in globals():          # python -m
   2771             name, _ = os.path.splitext(name)
   2772         print("usage: {0} [-v] file ...".format(name))
   2773         return 2
   2774     for filename in testfiles:
   2775         if filename.endswith(".py"):
   2776             # It is a module -- insert its dir into sys.path and try to
   2777             # import it. If it is part of a package, that possibly
   2778             # won't work because of package imports.
   2779             dirname, filename = os.path.split(filename)
   2780             sys.path.insert(0, dirname)
   2781             m = __import__(filename[:-3])
   2782             del sys.path[0]
   2783             failures, _ = testmod(m)
   2784         else:
   2785             failures, _ = testfile(filename, module_relative=False)
   2786         if failures:
   2787             return 1
   2788     return 0
   2789 
   2790 
   2791 if __name__ == "__main__":
   2792     sys.exit(_test())
   2793