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