PyXR

c:\python24\lib \ doctest.py



0001 # Module doctest.
0002 # Released to the public domain 16-Jan-2001, by Tim Peters (tim@python.org).
0003 # Major enhancements and refactoring by:
0004 #     Jim Fulton
0005 #     Edward Loper
0006 
0007 # Provided as-is; use at your own risk; no warranty; no promises; enjoy!
0008 
0009 r"""Module doctest -- a framework for running examples in docstrings.
0010 
0011 In simplest use, end each module M to be tested with:
0012 
0013 def _test():
0014     import doctest
0015     doctest.testmod()
0016 
0017 if __name__ == "__main__":
0018     _test()
0019 
0020 Then running the module as a script will cause the examples in the
0021 docstrings to get executed and verified:
0022 
0023 python M.py
0024 
0025 This won't display anything unless an example fails, in which case the
0026 failing example(s) and the cause(s) of the failure(s) are printed to stdout
0027 (why not stderr? because stderr is a lame hack <0.2 wink>), and the final
0028 line of output is "Test failed.".
0029 
0030 Run it with the -v switch instead:
0031 
0032 python M.py -v
0033 
0034 and a detailed report of all examples tried is printed to stdout, along
0035 with assorted summaries at the end.
0036 
0037 You can force verbose mode by passing "verbose=True" to testmod, or prohibit
0038 it by passing "verbose=False".  In either of those cases, sys.argv is not
0039 examined by testmod.
0040 
0041 There are a variety of other ways to run doctests, including integration
0042 with the unittest framework, and support for running non-Python text
0043 files containing doctests.  There are also many ways to override parts
0044 of doctest's default behaviors.  See the Library Reference Manual for
0045 details.
0046 """
0047 
0048 __docformat__ = 'reStructuredText en'
0049 
0050 __all__ = [
0051     # 0, Option Flags
0052     'register_optionflag',
0053     'DONT_ACCEPT_TRUE_FOR_1',
0054     'DONT_ACCEPT_BLANKLINE',
0055     'NORMALIZE_WHITESPACE',
0056     'ELLIPSIS',
0057     'IGNORE_EXCEPTION_DETAIL',
0058     'COMPARISON_FLAGS',
0059     'REPORT_UDIFF',
0060     'REPORT_CDIFF',
0061     'REPORT_NDIFF',
0062     'REPORT_ONLY_FIRST_FAILURE',
0063     'REPORTING_FLAGS',
0064     # 1. Utility Functions
0065     'is_private',
0066     # 2. Example & DocTest
0067     'Example',
0068     'DocTest',
0069     # 3. Doctest Parser
0070     'DocTestParser',
0071     # 4. Doctest Finder
0072     'DocTestFinder',
0073     # 5. Doctest Runner
0074     'DocTestRunner',
0075     'OutputChecker',
0076     'DocTestFailure',
0077     'UnexpectedException',
0078     'DebugRunner',
0079     # 6. Test Functions
0080     'testmod',
0081     'testfile',
0082     'run_docstring_examples',
0083     # 7. Tester
0084     'Tester',
0085     # 8. Unittest Support
0086     'DocTestSuite',
0087     'DocFileSuite',
0088     'set_unittest_reportflags',
0089     # 9. Debugging Support
0090     'script_from_examples',
0091     'testsource',
0092     'debug_src',
0093     'debug',
0094 ]
0095 
0096 import __future__
0097 
0098 import sys, traceback, inspect, linecache, os, re, types
0099 import unittest, difflib, pdb, tempfile
0100 import warnings
0101 from StringIO import StringIO
0102 
0103 # Don't whine about the deprecated is_private function in this
0104 # module's tests.
0105 warnings.filterwarnings("ignore", "is_private", DeprecationWarning,
0106                         __name__, 0)
0107 
0108 real_pdb_set_trace = pdb.set_trace
0109 
0110 # There are 4 basic classes:
0111 #  - Example: a <source, want> pair, plus an intra-docstring line number.
0112 #  - DocTest: a collection of examples, parsed from a docstring, plus
0113 #    info about where the docstring came from (name, filename, lineno).
0114 #  - DocTestFinder: extracts DocTests from a given object's docstring and
0115 #    its contained objects' docstrings.
0116 #  - DocTestRunner: runs DocTest cases, and accumulates statistics.
0117 #
0118 # So the basic picture is:
0119 #
0120 #                             list of:
0121 # +------+                   +---------+                   +-------+
0122 # |object| --DocTestFinder-> | DocTest | --DocTestRunner-> |results|
0123 # +------+                   +---------+                   +-------+
0124 #                            | Example |
0125 #                            |   ...   |
0126 #                            | Example |
0127 #                            +---------+
0128 
0129 # Option constants.
0130 
0131 OPTIONFLAGS_BY_NAME = {}
0132 def register_optionflag(name):
0133     flag = 1 << len(OPTIONFLAGS_BY_NAME)
0134     OPTIONFLAGS_BY_NAME[name] = flag
0135     return flag
0136 
0137 DONT_ACCEPT_TRUE_FOR_1 = register_optionflag('DONT_ACCEPT_TRUE_FOR_1')
0138 DONT_ACCEPT_BLANKLINE = register_optionflag('DONT_ACCEPT_BLANKLINE')
0139 NORMALIZE_WHITESPACE = register_optionflag('NORMALIZE_WHITESPACE')
0140 ELLIPSIS = register_optionflag('ELLIPSIS')
0141 IGNORE_EXCEPTION_DETAIL = register_optionflag('IGNORE_EXCEPTION_DETAIL')
0142 
0143 COMPARISON_FLAGS = (DONT_ACCEPT_TRUE_FOR_1 |
0144                     DONT_ACCEPT_BLANKLINE |
0145                     NORMALIZE_WHITESPACE |
0146                     ELLIPSIS |
0147                     IGNORE_EXCEPTION_DETAIL)
0148 
0149 REPORT_UDIFF = register_optionflag('REPORT_UDIFF')
0150 REPORT_CDIFF = register_optionflag('REPORT_CDIFF')
0151 REPORT_NDIFF = register_optionflag('REPORT_NDIFF')
0152 REPORT_ONLY_FIRST_FAILURE = register_optionflag('REPORT_ONLY_FIRST_FAILURE')
0153 
0154 REPORTING_FLAGS = (REPORT_UDIFF |
0155                    REPORT_CDIFF |
0156                    REPORT_NDIFF |
0157                    REPORT_ONLY_FIRST_FAILURE)
0158 
0159 # Special string markers for use in `want` strings:
0160 BLANKLINE_MARKER = '<BLANKLINE>'
0161 ELLIPSIS_MARKER = '...'
0162 
0163 ######################################################################
0164 ## Table of Contents
0165 ######################################################################
0166 #  1. Utility Functions
0167 #  2. Example & DocTest -- store test cases
0168 #  3. DocTest Parser -- extracts examples from strings
0169 #  4. DocTest Finder -- extracts test cases from objects
0170 #  5. DocTest Runner -- runs test cases
0171 #  6. Test Functions -- convenient wrappers for testing
0172 #  7. Tester Class -- for backwards compatibility
0173 #  8. Unittest Support
0174 #  9. Debugging Support
0175 # 10. Example Usage
0176 
0177 ######################################################################
0178 ## 1. Utility Functions
0179 ######################################################################
0180 
0181 def is_private(prefix, base):
0182     """prefix, base -> true iff name prefix + "." + base is "private".
0183 
0184     Prefix may be an empty string, and base does not contain a period.
0185     Prefix is ignored (although functions you write conforming to this
0186     protocol may make use of it).
0187     Return true iff base begins with an (at least one) underscore, but
0188     does not both begin and end with (at least) two underscores.
0189 
0190     >>> is_private("a.b", "my_func")
0191     False
0192     >>> is_private("____", "_my_func")
0193     True
0194     >>> is_private("someclass", "__init__")
0195     False
0196     >>> is_private("sometypo", "__init_")
0197     True
0198     >>> is_private("x.y.z", "_")
0199     True
0200     >>> is_private("_x.y.z", "__")
0201     False
0202     >>> is_private("", "")  # senseless but consistent
0203     False
0204     """
0205     warnings.warn("is_private is deprecated; it wasn't useful; "
0206                   "examine DocTestFinder.find() lists instead",
0207                   DeprecationWarning, stacklevel=2)
0208     return base[:1] == "_" and not base[:2] == "__" == base[-2:]
0209 
0210 def _extract_future_flags(globs):
0211     """
0212     Return the compiler-flags associated with the future features that
0213     have been imported into the given namespace (globs).
0214     """
0215     flags = 0
0216     for fname in __future__.all_feature_names:
0217         feature = globs.get(fname, None)
0218         if feature is getattr(__future__, fname):
0219             flags |= feature.compiler_flag
0220     return flags
0221 
0222 def _normalize_module(module, depth=2):
0223     """
0224     Return the module specified by `module`.  In particular:
0225       - If `module` is a module, then return module.
0226       - If `module` is a string, then import and return the
0227         module with that name.
0228       - If `module` is None, then return the calling module.
0229         The calling module is assumed to be the module of
0230         the stack frame at the given depth in the call stack.
0231     """
0232     if inspect.ismodule(module):
0233         return module
0234     elif isinstance(module, (str, unicode)):
0235         return __import__(module, globals(), locals(), ["*"])
0236     elif module is None:
0237         return sys.modules[sys._getframe(depth).f_globals['__name__']]
0238     else:
0239         raise TypeError("Expected a module, string, or None")
0240 
0241 def _indent(s, indent=4):
0242     """
0243     Add the given number of space characters to the beginning every
0244     non-blank line in `s`, and return the result.
0245     """
0246     # This regexp matches the start of non-blank lines:
0247     return re.sub('(?m)^(?!$)', indent*' ', s)
0248 
0249 def _exception_traceback(exc_info):
0250     """
0251     Return a string containing a traceback message for the given
0252     exc_info tuple (as returned by sys.exc_info()).
0253     """
0254     # Get a traceback message.
0255     excout = StringIO()
0256     exc_type, exc_val, exc_tb = exc_info
0257     traceback.print_exception(exc_type, exc_val, exc_tb, file=excout)
0258     return excout.getvalue()
0259 
0260 # Override some StringIO methods.
0261 class _SpoofOut(StringIO):
0262     def getvalue(self):
0263         result = StringIO.getvalue(self)
0264         # If anything at all was written, make sure there's a trailing
0265         # newline.  There's no way for the expected output to indicate
0266         # that a trailing newline is missing.
0267         if result and not result.endswith("\n"):
0268             result += "\n"
0269         # Prevent softspace from screwing up the next test case, in
0270         # case they used print with a trailing comma in an example.
0271         if hasattr(self, "softspace"):
0272             del self.softspace
0273         return result
0274 
0275     def truncate(self,   size=None):
0276         StringIO.truncate(self, size)
0277         if hasattr(self, "softspace"):
0278             del self.softspace
0279 
0280 # Worst-case linear-time ellipsis matching.
0281 def _ellipsis_match(want, got):
0282     """
0283     Essentially the only subtle case:
0284     >>> _ellipsis_match('aa...aa', 'aaa')
0285     False
0286     """
0287     if ELLIPSIS_MARKER not in want:
0288         return want == got
0289 
0290     # Find "the real" strings.
0291     ws = want.split(ELLIPSIS_MARKER)
0292     assert len(ws) >= 2
0293 
0294     # Deal with exact matches possibly needed at one or both ends.
0295     startpos, endpos = 0, len(got)
0296     w = ws[0]
0297     if w:   # starts with exact match
0298         if got.startswith(w):
0299             startpos = len(w)
0300             del ws[0]
0301         else:
0302             return False
0303     w = ws[-1]
0304     if w:   # ends with exact match
0305         if got.endswith(w):
0306             endpos -= len(w)
0307             del ws[-1]
0308         else:
0309             return False
0310 
0311     if startpos > endpos:
0312         # Exact end matches required more characters than we have, as in
0313         # _ellipsis_match('aa...aa', 'aaa')
0314         return False
0315 
0316     # For the rest, we only need to find the leftmost non-overlapping
0317     # match for each piece.  If there's no overall match that way alone,
0318     # there's no overall match period.
0319     for w in ws:
0320         # w may be '' at times, if there are consecutive ellipses, or
0321         # due to an ellipsis at the start or end of `want`.  That's OK.
0322         # Search for an empty string succeeds, and doesn't change startpos.
0323         startpos = got.find(w, startpos, endpos)
0324         if startpos < 0:
0325             return False
0326         startpos += len(w)
0327 
0328     return True
0329 
0330 def _comment_line(line):
0331     "Return a commented form of the given line"
0332     line = line.rstrip()
0333     if line:
0334         return '# '+line
0335     else:
0336         return '#'
0337 
0338 class _OutputRedirectingPdb(pdb.Pdb):
0339     """
0340     A specialized version of the python debugger that redirects stdout
0341     to a given stream when interacting with the user.  Stdout is *not*
0342     redirected when traced code is executed.
0343     """
0344     def __init__(self, out):
0345         self.__out = out
0346         pdb.Pdb.__init__(self)
0347 
0348     def trace_dispatch(self, *args):
0349         # Redirect stdout to the given stream.
0350         save_stdout = sys.stdout
0351         sys.stdout = self.__out
0352         # Call Pdb's trace dispatch method.
0353         pdb.Pdb.trace_dispatch(self, *args)
0354         # Restore stdout.
0355         sys.stdout = save_stdout
0356 
0357 # [XX] Normalize with respect to os.path.pardir?
0358 def _module_relative_path(module, path):
0359     if not inspect.ismodule(module):
0360         raise TypeError, 'Expected a module: %r' % module
0361     if path.startswith('/'):
0362         raise ValueError, 'Module-relative files may not have absolute paths'
0363 
0364     # Find the base directory for the path.
0365     if hasattr(module, '__file__'):
0366         # A normal module/package
0367         basedir = os.path.split(module.__file__)[0]
0368     elif module.__name__ == '__main__':
0369         # An interactive session.
0370         if len(sys.argv)>0 and sys.argv[0] != '':
0371             basedir = os.path.split(sys.argv[0])[0]
0372         else:
0373             basedir = os.curdir
0374     else:
0375         # A module w/o __file__ (this includes builtins)
0376         raise ValueError("Can't resolve paths relative to the module " +
0377                          module + " (it has no __file__)")
0378 
0379     # Combine the base directory and the path.
0380     return os.path.join(basedir, *(path.split('/')))
0381 
0382 ######################################################################
0383 ## 2. Example & DocTest
0384 ######################################################################
0385 ## - An "example" is a <source, want> pair, where "source" is a
0386 ##   fragment of source code, and "want" is the expected output for
0387 ##   "source."  The Example class also includes information about
0388 ##   where the example was extracted from.
0389 ##
0390 ## - A "doctest" is a collection of examples, typically extracted from
0391 ##   a string (such as an object's docstring).  The DocTest class also
0392 ##   includes information about where the string was extracted from.
0393 
0394 class Example:
0395     """
0396     A single doctest example, consisting of source code and expected
0397     output.  `Example` defines the following attributes:
0398 
0399       - source: A single Python statement, always ending with a newline.
0400         The constructor adds a newline if needed.
0401 
0402       - want: The expected output from running the source code (either
0403         from stdout, or a traceback in case of exception).  `want` ends
0404         with a newline unless it's empty, in which case it's an empty
0405         string.  The constructor adds a newline if needed.
0406 
0407       - exc_msg: The exception message generated by the example, if
0408         the example is expected to generate an exception; or `None` if
0409         it is not expected to generate an exception.  This exception
0410         message is compared against the return value of
0411         `traceback.format_exception_only()`.  `exc_msg` ends with a
0412         newline unless it's `None`.  The constructor adds a newline
0413         if needed.
0414 
0415       - lineno: The line number within the DocTest string containing
0416         this Example where the Example begins.  This line number is
0417         zero-based, with respect to the beginning of the DocTest.
0418 
0419       - indent: The example's indentation in the DocTest string.
0420         I.e., the number of space characters that preceed the
0421         example's first prompt.
0422 
0423       - options: A dictionary mapping from option flags to True or
0424         False, which is used to override default options for this
0425         example.  Any option flags not contained in this dictionary
0426         are left at their default value (as specified by the
0427         DocTestRunner's optionflags).  By default, no options are set.
0428     """
0429     def __init__(self, source, want, exc_msg=None, lineno=0, indent=0,
0430                  options=None):
0431         # Normalize inputs.
0432         if not source.endswith('\n'):
0433             source += '\n'
0434         if want and not want.endswith('\n'):
0435             want += '\n'
0436         if exc_msg is not None and not exc_msg.endswith('\n'):
0437             exc_msg += '\n'
0438         # Store properties.
0439         self.source = source
0440         self.want = want
0441         self.lineno = lineno
0442         self.indent = indent
0443         if options is None: options = {}
0444         self.options = options
0445         self.exc_msg = exc_msg
0446 
0447 class DocTest:
0448     """
0449     A collection of doctest examples that should be run in a single
0450     namespace.  Each `DocTest` defines the following attributes:
0451 
0452       - examples: the list of examples.
0453 
0454       - globs: The namespace (aka globals) that the examples should
0455         be run in.
0456 
0457       - name: A name identifying the DocTest (typically, the name of
0458         the object whose docstring this DocTest was extracted from).
0459 
0460       - filename: The name of the file that this DocTest was extracted
0461         from, or `None` if the filename is unknown.
0462 
0463       - lineno: The line number within filename where this DocTest
0464         begins, or `None` if the line number is unavailable.  This
0465         line number is zero-based, with respect to the beginning of
0466         the file.
0467 
0468       - docstring: The string that the examples were extracted from,
0469         or `None` if the string is unavailable.
0470     """
0471     def __init__(self, examples, globs, name, filename, lineno, docstring):
0472         """
0473         Create a new DocTest containing the given examples.  The
0474         DocTest's globals are initialized with a copy of `globs`.
0475         """
0476         assert not isinstance(examples, basestring), \
0477                "DocTest no longer accepts str; use DocTestParser instead"
0478         self.examples = examples
0479         self.docstring = docstring
0480         self.globs = globs.copy()
0481         self.name = name
0482         self.filename = filename
0483         self.lineno = lineno
0484 
0485     def __repr__(self):
0486         if len(self.examples) == 0:
0487             examples = 'no examples'
0488         elif len(self.examples) == 1:
0489             examples = '1 example'
0490         else:
0491             examples = '%d examples' % len(self.examples)
0492         return ('<DocTest %s from %s:%s (%s)>' %
0493                 (self.name, self.filename, self.lineno, examples))
0494 
0495 
0496     # This lets us sort tests by name:
0497     def __cmp__(self, other):
0498         if not isinstance(other, DocTest):
0499             return -1
0500         return cmp((self.name, self.filename, self.lineno, id(self)),
0501                    (other.name, other.filename, other.lineno, id(other)))
0502 
0503 ######################################################################
0504 ## 3. DocTestParser
0505 ######################################################################
0506 
0507 class DocTestParser:
0508     """
0509     A class used to parse strings containing doctest examples.
0510     """
0511     # This regular expression is used to find doctest examples in a
0512     # string.  It defines three groups: `source` is the source code
0513     # (including leading indentation and prompts); `indent` is the
0514     # indentation of the first (PS1) line of the source code; and
0515     # `want` is the expected output (including leading indentation).
0516     _EXAMPLE_RE = re.compile(r'''
0517         # Source consists of a PS1 line followed by zero or more PS2 lines.
0518         (?P<source>
0519             (?:^(?P<indent> [ ]*) >>>    .*)    # PS1 line
0520             (?:\n           [ ]*  \.\.\. .*)*)  # PS2 lines
0521         \n?
0522         # Want consists of any non-blank lines that do not start with PS1.
0523         (?P<want> (?:(?![ ]*$)    # Not a blank line
0524                      (?![ ]*>>>)  # Not a line starting with PS1
0525                      .*$\n?       # But any other line
0526                   )*)
0527         ''', re.MULTILINE | re.VERBOSE)
0528 
0529     # A regular expression for handling `want` strings that contain
0530     # expected exceptions.  It divides `want` into three pieces:
0531     #    - the traceback header line (`hdr`)
0532     #    - the traceback stack (`stack`)
0533     #    - the exception message (`msg`), as generated by
0534     #      traceback.format_exception_only()
0535     # `msg` may have multiple lines.  We assume/require that the
0536     # exception message is the first non-indented line starting with a word
0537     # character following the traceback header line.
0538     _EXCEPTION_RE = re.compile(r"""
0539         # Grab the traceback header.  Different versions of Python have
0540         # said different things on the first traceback line.
0541         ^(?P<hdr> Traceback\ \(
0542             (?: most\ recent\ call\ last
0543             |   innermost\ last
0544             ) \) :
0545         )
0546         \s* $                # toss trailing whitespace on the header.
0547         (?P<stack> .*?)      # don't blink: absorb stuff until...
0548         ^ (?P<msg> \w+ .*)   #     a line *starts* with alphanum.
0549         """, re.VERBOSE | re.MULTILINE | re.DOTALL)
0550 
0551     # A callable returning a true value iff its argument is a blank line
0552     # or contains a single comment.
0553     _IS_BLANK_OR_COMMENT = re.compile(r'^[ ]*(#.*)?$').match
0554 
0555     def parse(self, string, name='<string>'):
0556         """
0557         Divide the given string into examples and intervening text,
0558         and return them as a list of alternating Examples and strings.
0559         Line numbers for the Examples are 0-based.  The optional
0560         argument `name` is a name identifying this string, and is only
0561         used for error messages.
0562         """
0563         string = string.expandtabs()
0564         # If all lines begin with the same indentation, then strip it.
0565         min_indent = self._min_indent(string)
0566         if min_indent > 0:
0567             string = '\n'.join([l[min_indent:] for l in string.split('\n')])
0568 
0569         output = []
0570         charno, lineno = 0, 0
0571         # Find all doctest examples in the string:
0572         for m in self._EXAMPLE_RE.finditer(string):
0573             # Add the pre-example text to `output`.
0574             output.append(string[charno:m.start()])
0575             # Update lineno (lines before this example)
0576             lineno += string.count('\n', charno, m.start())
0577             # Extract info from the regexp match.
0578             (source, options, want, exc_msg) = \
0579                      self._parse_example(m, name, lineno)
0580             # Create an Example, and add it to the list.
0581             if not self._IS_BLANK_OR_COMMENT(source):
0582                 output.append( Example(source, want, exc_msg,
0583                                     lineno=lineno,
0584                                     indent=min_indent+len(m.group('indent')),
0585                                     options=options) )
0586             # Update lineno (lines inside this example)
0587             lineno += string.count('\n', m.start(), m.end())
0588             # Update charno.
0589             charno = m.end()
0590         # Add any remaining post-example text to `output`.
0591         output.append(string[charno:])
0592         return output
0593 
0594     def get_doctest(self, string, globs, name, filename, lineno):
0595         """
0596         Extract all doctest examples from the given string, and
0597         collect them into a `DocTest` object.
0598 
0599         `globs`, `name`, `filename`, and `lineno` are attributes for
0600         the new `DocTest` object.  See the documentation for `DocTest`
0601         for more information.
0602         """
0603         return DocTest(self.get_examples(string, name), globs,
0604                        name, filename, lineno, string)
0605 
0606     def get_examples(self, string, name='<string>'):
0607         """
0608         Extract all doctest examples from the given string, and return
0609         them as a list of `Example` objects.  Line numbers are
0610         0-based, because it's most common in doctests that nothing
0611         interesting appears on the same line as opening triple-quote,
0612         and so the first interesting line is called \"line 1\" then.
0613 
0614         The optional argument `name` is a name identifying this
0615         string, and is only used for error messages.
0616         """
0617         return [x for x in self.parse(string, name)
0618                 if isinstance(x, Example)]
0619 
0620     def _parse_example(self, m, name, lineno):
0621         """
0622         Given a regular expression match from `_EXAMPLE_RE` (`m`),
0623         return a pair `(source, want)`, where `source` is the matched
0624         example's source code (with prompts and indentation stripped);
0625         and `want` is the example's expected output (with indentation
0626         stripped).
0627 
0628         `name` is the string's name, and `lineno` is the line number
0629         where the example starts; both are used for error messages.
0630         """
0631         # Get the example's indentation level.
0632         indent = len(m.group('indent'))
0633 
0634         # Divide source into lines; check that they're properly
0635         # indented; and then strip their indentation & prompts.
0636         source_lines = m.group('source').split('\n')
0637         self._check_prompt_blank(source_lines, indent, name, lineno)
0638         self._check_prefix(source_lines[1:], ' '*indent + '.', name, lineno)
0639         source = '\n'.join([sl[indent+4:] for sl in source_lines])
0640 
0641         # Divide want into lines; check that it's properly indented; and
0642         # then strip the indentation.  Spaces before the last newline should
0643         # be preserved, so plain rstrip() isn't good enough.
0644         want = m.group('want')
0645         want_lines = want.split('\n')
0646         if len(want_lines) > 1 and re.match(r' *$', want_lines[-1]):
0647             del want_lines[-1]  # forget final newline & spaces after it
0648         self._check_prefix(want_lines, ' '*indent, name,
0649                            lineno + len(source_lines))
0650         want = '\n'.join([wl[indent:] for wl in want_lines])
0651 
0652         # If `want` contains a traceback message, then extract it.
0653         m = self._EXCEPTION_RE.match(want)
0654         if m:
0655             exc_msg = m.group('msg')
0656         else:
0657             exc_msg = None
0658 
0659         # Extract options from the source.
0660         options = self._find_options(source, name, lineno)
0661 
0662         return source, options, want, exc_msg
0663 
0664     # This regular expression looks for option directives in the
0665     # source code of an example.  Option directives are comments
0666     # starting with "doctest:".  Warning: this may give false
0667     # positives for string-literals that contain the string
0668     # "#doctest:".  Eliminating these false positives would require
0669     # actually parsing the string; but we limit them by ignoring any
0670     # line containing "#doctest:" that is *followed* by a quote mark.
0671     _OPTION_DIRECTIVE_RE = re.compile(r'#\s*doctest:\s*([^\n\'"]*)$',
0672                                       re.MULTILINE)
0673 
0674     def _find_options(self, source, name, lineno):
0675         """
0676         Return a dictionary containing option overrides extracted from
0677         option directives in the given source string.
0678 
0679         `name` is the string's name, and `lineno` is the line number
0680         where the example starts; both are used for error messages.
0681         """
0682         options = {}
0683         # (note: with the current regexp, this will match at most once:)
0684         for m in self._OPTION_DIRECTIVE_RE.finditer(source):
0685             option_strings = m.group(1).replace(',', ' ').split()
0686             for option in option_strings:
0687                 if (option[0] not in '+-' or
0688                     option[1:] not in OPTIONFLAGS_BY_NAME):
0689                     raise ValueError('line %r of the doctest for %s '
0690                                      'has an invalid option: %r' %
0691                                      (lineno+1, name, option))
0692                 flag = OPTIONFLAGS_BY_NAME[option[1:]]
0693                 options[flag] = (option[0] == '+')
0694         if options and self._IS_BLANK_OR_COMMENT(source):
0695             raise ValueError('line %r of the doctest for %s has an option '
0696                              'directive on a line with no example: %r' %
0697                              (lineno, name, source))
0698         return options
0699 
0700     # This regular expression finds the indentation of every non-blank
0701     # line in a string.
0702     _INDENT_RE = re.compile('^([ ]*)(?=\S)', re.MULTILINE)
0703 
0704     def _min_indent(self, s):
0705         "Return the minimum indentation of any non-blank line in `s`"
0706         indents = [len(indent) for indent in self._INDENT_RE.findall(s)]
0707         if len(indents) > 0:
0708             return min(indents)
0709         else:
0710             return 0
0711 
0712     def _check_prompt_blank(self, lines, indent, name, lineno):
0713         """
0714         Given the lines of a source string (including prompts and
0715         leading indentation), check to make sure that every prompt is
0716         followed by a space character.  If any line is not followed by
0717         a space character, then raise ValueError.
0718         """
0719         for i, line in enumerate(lines):
0720             if len(line) >= indent+4 and line[indent+3] != ' ':
0721                 raise ValueError('line %r of the docstring for %s '
0722                                  'lacks blank after %s: %r' %
0723                                  (lineno+i+1, name,
0724                                   line[indent:indent+3], line))
0725 
0726     def _check_prefix(self, lines, prefix, name, lineno):
0727         """
0728         Check that every line in the given list starts with the given
0729         prefix; if any line does not, then raise a ValueError.
0730         """
0731         for i, line in enumerate(lines):
0732             if line and not line.startswith(prefix):
0733                 raise ValueError('line %r of the docstring for %s has '
0734                                  'inconsistent leading whitespace: %r' %
0735                                  (lineno+i+1, name, line))
0736 
0737 
0738 ######################################################################
0739 ## 4. DocTest Finder
0740 ######################################################################
0741 
0742 class DocTestFinder:
0743     """
0744     A class used to extract the DocTests that are relevant to a given
0745     object, from its docstring and the docstrings of its contained
0746     objects.  Doctests can currently be extracted from the following
0747     object types: modules, functions, classes, methods, staticmethods,
0748     classmethods, and properties.
0749     """
0750 
0751     def __init__(self, verbose=False, parser=DocTestParser(),
0752                  recurse=True, _namefilter=None, exclude_empty=True):
0753         """
0754         Create a new doctest finder.
0755 
0756         The optional argument `parser` specifies a class or
0757         function that should be used to create new DocTest objects (or
0758         objects that implement the same interface as DocTest).  The
0759         signature for this factory function should match the signature
0760         of the DocTest constructor.
0761 
0762         If the optional argument `recurse` is false, then `find` will
0763         only examine the given object, and not any contained objects.
0764 
0765         If the optional argument `exclude_empty` is false, then `find`
0766         will include tests for objects with empty docstrings.
0767         """
0768         self._parser = parser
0769         self._verbose = verbose
0770         self._recurse = recurse
0771         self._exclude_empty = exclude_empty
0772         # _namefilter is undocumented, and exists only for temporary backward-
0773         # compatibility support of testmod's deprecated isprivate mess.
0774         self._namefilter = _namefilter
0775 
0776     def find(self, obj, name=None, module=None, globs=None,
0777              extraglobs=None):
0778         """
0779         Return a list of the DocTests that are defined by the given
0780         object's docstring, or by any of its contained objects'
0781         docstrings.
0782 
0783         The optional parameter `module` is the module that contains
0784         the given object.  If the module is not specified or is None, then
0785         the test finder will attempt to automatically determine the
0786         correct module.  The object's module is used:
0787 
0788             - As a default namespace, if `globs` is not specified.
0789             - To prevent the DocTestFinder from extracting DocTests
0790               from objects that are imported from other modules.
0791             - To find the name of the file containing the object.
0792             - To help find the line number of the object within its
0793               file.
0794 
0795         Contained objects whose module does not match `module` are ignored.
0796 
0797         If `module` is False, no attempt to find the module will be made.
0798         This is obscure, of use mostly in tests:  if `module` is False, or
0799         is None but cannot be found automatically, then all objects are
0800         considered to belong to the (non-existent) module, so all contained
0801         objects will (recursively) be searched for doctests.
0802 
0803         The globals for each DocTest is formed by combining `globs`
0804         and `extraglobs` (bindings in `extraglobs` override bindings
0805         in `globs`).  A new copy of the globals dictionary is created
0806         for each DocTest.  If `globs` is not specified, then it
0807         defaults to the module's `__dict__`, if specified, or {}
0808         otherwise.  If `extraglobs` is not specified, then it defaults
0809         to {}.
0810 
0811         """
0812         # If name was not specified, then extract it from the object.
0813         if name is None:
0814             name = getattr(obj, '__name__', None)
0815             if name is None:
0816                 raise ValueError("DocTestFinder.find: name must be given "
0817                         "when obj.__name__ doesn't exist: %r" %
0818                                  (type(obj),))
0819 
0820         # Find the module that contains the given object (if obj is
0821         # a module, then module=obj.).  Note: this may fail, in which
0822         # case module will be None.
0823         if module is False:
0824             module = None
0825         elif module is None:
0826             module = inspect.getmodule(obj)
0827 
0828         # Read the module's source code.  This is used by
0829         # DocTestFinder._find_lineno to find the line number for a
0830         # given object's docstring.
0831         try:
0832             file = inspect.getsourcefile(obj) or inspect.getfile(obj)
0833             source_lines = linecache.getlines(file)
0834             if not source_lines:
0835                 source_lines = None
0836         except TypeError:
0837             source_lines = None
0838 
0839         # Initialize globals, and merge in extraglobs.
0840         if globs is None:
0841             if module is None:
0842                 globs = {}
0843             else:
0844                 globs = module.__dict__.copy()
0845         else:
0846             globs = globs.copy()
0847         if extraglobs is not None:
0848             globs.update(extraglobs)
0849 
0850         # Recursively expore `obj`, extracting DocTests.
0851         tests = []
0852         self._find(tests, obj, name, module, source_lines, globs, {})
0853         return tests
0854 
0855     def _filter(self, obj, prefix, base):
0856         """
0857         Return true if the given object should not be examined.
0858         """
0859         return (self._namefilter is not None and
0860                 self._namefilter(prefix, base))
0861 
0862     def _from_module(self, module, object):
0863         """
0864         Return true if the given object is defined in the given
0865         module.
0866         """
0867         if module is None:
0868             return True
0869         elif inspect.isfunction(object):
0870             return module.__dict__ is object.func_globals
0871         elif inspect.isclass(object):
0872             return module.__name__ == object.__module__
0873         elif inspect.getmodule(object) is not None:
0874             return module is inspect.getmodule(object)
0875         elif hasattr(object, '__module__'):
0876             return module.__name__ == object.__module__
0877         elif isinstance(object, property):
0878             return True # [XX] no way not be sure.
0879         else:
0880             raise ValueError("object must be a class or function")
0881 
0882     def _find(self, tests, obj, name, module, source_lines, globs, seen):
0883         """
0884         Find tests for the given object and any contained objects, and
0885         add them to `tests`.
0886         """
0887         if self._verbose:
0888             print 'Finding tests in %s' % name
0889 
0890         # If we've already processed this object, then ignore it.
0891         if id(obj) in seen:
0892             return
0893         seen[id(obj)] = 1
0894 
0895         # Find a test for this object, and add it to the list of tests.
0896         test = self._get_test(obj, name, module, globs, source_lines)
0897         if test is not None:
0898             tests.append(test)
0899 
0900         # Look for tests in a module's contained objects.
0901         if inspect.ismodule(obj) and self._recurse:
0902             for valname, val in obj.__dict__.items():
0903                 # Check if this contained object should be ignored.
0904                 if self._filter(val, name, valname):
0905                     continue
0906                 valname = '%s.%s' % (name, valname)
0907                 # Recurse to functions & classes.
0908                 if ((inspect.isfunction(val) or inspect.isclass(val)) and
0909                     self._from_module(module, val)):
0910                     self._find(tests, val, valname, module, source_lines,
0911                                globs, seen)
0912 
0913         # Look for tests in a module's __test__ dictionary.
0914         if inspect.ismodule(obj) and self._recurse:
0915             for valname, val in getattr(obj, '__test__', {}).items():
0916                 if not isinstance(valname, basestring):
0917                     raise ValueError("DocTestFinder.find: __test__ keys "
0918                                      "must be strings: %r" %
0919                                      (type(valname),))
0920                 if not (inspect.isfunction(val) or inspect.isclass(val) or
0921                         inspect.ismethod(val) or inspect.ismodule(val) or
0922                         isinstance(val, basestring)):
0923                     raise ValueError("DocTestFinder.find: __test__ values "
0924                                      "must be strings, functions, methods, "
0925                                      "classes, or modules: %r" %
0926                                      (type(val),))
0927                 valname = '%s.__test__.%s' % (name, valname)
0928                 self._find(tests, val, valname, module, source_lines,
0929                            globs, seen)
0930 
0931         # Look for tests in a class's contained objects.
0932         if inspect.isclass(obj) and self._recurse:
0933             for valname, val in obj.__dict__.items():
0934                 # Check if this contained object should be ignored.
0935                 if self._filter(val, name, valname):
0936                     continue
0937                 # Special handling for staticmethod/classmethod.
0938                 if isinstance(val, staticmethod):
0939                     val = getattr(obj, valname)
0940                 if isinstance(val, classmethod):
0941                     val = getattr(obj, valname).im_func
0942 
0943                 # Recurse to methods, properties, and nested classes.
0944                 if ((inspect.isfunction(val) or inspect.isclass(val) or
0945                       isinstance(val, property)) and
0946                       self._from_module(module, val)):
0947                     valname = '%s.%s' % (name, valname)
0948                     self._find(tests, val, valname, module, source_lines,
0949                                globs, seen)
0950 
0951     def _get_test(self, obj, name, module, globs, source_lines):
0952         """
0953         Return a DocTest for the given object, if it defines a docstring;
0954         otherwise, return None.
0955         """
0956         # Extract the object's docstring.  If it doesn't have one,
0957         # then return None (no test for this object).
0958         if isinstance(obj, basestring):
0959             docstring = obj
0960         else:
0961             try:
0962                 if obj.__doc__ is None:
0963                     docstring = ''
0964                 else:
0965                     docstring = obj.__doc__
0966                     if not isinstance(docstring, basestring):
0967                         docstring = str(docstring)
0968             except (TypeError, AttributeError):
0969                 docstring = ''
0970 
0971         # Find the docstring's location in the file.
0972         lineno = self._find_lineno(obj, source_lines)
0973 
0974         # Don't bother if the docstring is empty.
0975         if self._exclude_empty and not docstring:
0976             return None
0977 
0978         # Return a DocTest for this object.
0979         if module is None:
0980             filename = None
0981         else:
0982             filename = getattr(module, '__file__', module.__name__)
0983             if filename[-4:] in (".pyc", ".pyo"):
0984                 filename = filename[:-1]
0985         return self._parser.get_doctest(docstring, globs, name,
0986                                         filename, lineno)
0987 
0988     def _find_lineno(self, obj, source_lines):
0989         """
0990         Return a line number of the given object's docstring.  Note:
0991         this method assumes that the object has a docstring.
0992         """
0993         lineno = None
0994 
0995         # Find the line number for modules.
0996         if inspect.ismodule(obj):
0997             lineno = 0
0998 
0999         # Find the line number for classes.
1000         # Note: this could be fooled if a class is defined multiple
1001         # times in a single file.
1002         if inspect.isclass(obj):
1003             if source_lines is None:
1004                 return None
1005             pat = re.compile(r'^\s*class\s*%s\b' %
1006                              getattr(obj, '__name__', '-'))
1007             for i, line in enumerate(source_lines):
1008                 if pat.match(line):
1009                     lineno = i
1010                     break
1011 
1012         # Find the line number for functions & methods.
1013         if inspect.ismethod(obj): obj = obj.im_func
1014         if inspect.isfunction(obj): obj = obj.func_code
1015         if inspect.istraceback(obj): obj = obj.tb_frame
1016         if inspect.isframe(obj): obj = obj.f_code
1017         if inspect.iscode(obj):
1018             lineno = getattr(obj, 'co_firstlineno', None)-1
1019 
1020         # Find the line number where the docstring starts.  Assume
1021         # that it's the first line that begins with a quote mark.
1022         # Note: this could be fooled by a multiline function
1023         # signature, where a continuation line begins with a quote
1024         # mark.
1025         if lineno is not None:
1026             if source_lines is None:
1027                 return lineno+1
1028             pat = re.compile('(^|.*:)\s*\w*("|\')')
1029             for lineno in range(lineno, len(source_lines)):
1030                 if pat.match(source_lines[lineno]):
1031                     return lineno
1032 
1033         # We couldn't find the line number.
1034         return None
1035 
1036 ######################################################################
1037 ## 5. DocTest Runner
1038 ######################################################################
1039 
1040 class DocTestRunner:
1041     """
1042     A class used to run DocTest test cases, and accumulate statistics.
1043     The `run` method is used to process a single DocTest case.  It
1044     returns a tuple `(f, t)`, where `t` is the number of test cases
1045     tried, and `f` is the number of test cases that failed.
1046 
1047         >>> tests = DocTestFinder().find(_TestClass)
1048         >>> runner = DocTestRunner(verbose=False)
1049         >>> for test in tests:
1050         ...     print runner.run(test)
1051         (0, 2)
1052         (0, 1)
1053         (0, 2)
1054         (0, 2)
1055 
1056     The `summarize` method prints a summary of all the test cases that
1057     have been run by the runner, and returns an aggregated `(f, t)`
1058     tuple:
1059 
1060         >>> runner.summarize(verbose=1)
1061         4 items passed all tests:
1062            2 tests in _TestClass
1063            2 tests in _TestClass.__init__
1064            2 tests in _TestClass.get
1065            1 tests in _TestClass.square
1066         7 tests in 4 items.
1067         7 passed and 0 failed.
1068         Test passed.
1069         (0, 7)
1070 
1071     The aggregated number of tried examples and failed examples is
1072     also available via the `tries` and `failures` attributes:
1073 
1074         >>> runner.tries
1075         7
1076         >>> runner.failures
1077         0
1078 
1079     The comparison between expected outputs and actual outputs is done
1080     by an `OutputChecker`.  This comparison may be customized with a
1081     number of option flags; see the documentation for `testmod` for
1082     more information.  If the option flags are insufficient, then the
1083     comparison may also be customized by passing a subclass of
1084     `OutputChecker` to the constructor.
1085 
1086     The test runner's display output can be controlled in two ways.
1087     First, an output function (`out) can be passed to
1088     `TestRunner.run`; this function will be called with strings that
1089     should be displayed.  It defaults to `sys.stdout.write`.  If
1090     capturing the output is not sufficient, then the display output
1091     can be also customized by subclassing DocTestRunner, and
1092     overriding the methods `report_start`, `report_success`,
1093     `report_unexpected_exception`, and `report_failure`.
1094     """
1095     # This divider string is used to separate failure messages, and to
1096     # separate sections of the summary.
1097     DIVIDER = "*" * 70
1098 
1099     def __init__(self, checker=None, verbose=None, optionflags=0):
1100         """
1101         Create a new test runner.
1102 
1103         Optional keyword arg `checker` is the `OutputChecker` that
1104         should be used to compare the expected outputs and actual
1105         outputs of doctest examples.
1106 
1107         Optional keyword arg 'verbose' prints lots of stuff if true,
1108         only failures if false; by default, it's true iff '-v' is in
1109         sys.argv.
1110 
1111         Optional argument `optionflags` can be used to control how the
1112         test runner compares expected output to actual output, and how
1113         it displays failures.  See the documentation for `testmod` for
1114         more information.
1115         """
1116         self._checker = checker or OutputChecker()
1117         if verbose is None:
1118             verbose = '-v' in sys.argv
1119         self._verbose = verbose
1120         self.optionflags = optionflags
1121         self.original_optionflags = optionflags
1122 
1123         # Keep track of the examples we've run.
1124         self.tries = 0
1125         self.failures = 0
1126         self._name2ft = {}
1127 
1128         # Create a fake output target for capturing doctest output.
1129         self._fakeout = _SpoofOut()
1130 
1131     #/////////////////////////////////////////////////////////////////
1132     # Reporting methods
1133     #/////////////////////////////////////////////////////////////////
1134 
1135     def report_start(self, out, test, example):
1136         """
1137         Report that the test runner is about to process the given
1138         example.  (Only displays a message if verbose=True)
1139         """
1140         if self._verbose:
1141             if example.want:
1142                 out('Trying:\n' + _indent(example.source) +
1143                     'Expecting:\n' + _indent(example.want))
1144             else:
1145                 out('Trying:\n' + _indent(example.source) +
1146                     'Expecting nothing\n')
1147 
1148     def report_success(self, out, test, example, got):
1149         """
1150         Report that the given example ran successfully.  (Only
1151         displays a message if verbose=True)
1152         """
1153         if self._verbose:
1154             out("ok\n")
1155 
1156     def report_failure(self, out, test, example, got):
1157         """
1158         Report that the given example failed.
1159         """
1160         out(self._failure_header(test, example) +
1161             self._checker.output_difference(example, got, self.optionflags))
1162 
1163     def report_unexpected_exception(self, out, test, example, exc_info):
1164         """
1165         Report that the given example raised an unexpected exception.
1166         """
1167         out(self._failure_header(test, example) +
1168             'Exception raised:\n' + _indent(_exception_traceback(exc_info)))
1169 
1170     def _failure_header(self, test, example):
1171         out = [self.DIVIDER]
1172         if test.filename:
1173             if test.lineno is not None and example.lineno is not None:
1174                 lineno = test.lineno + example.lineno + 1
1175             else:
1176                 lineno = '?'
1177             out.append('File "%s", line %s, in %s' %
1178                        (test.filename, lineno, test.name))
1179         else:
1180             out.append('Line %s, in %s' % (example.lineno+1, test.name))
1181         out.append('Failed example:')
1182         source = example.source
1183         out.append(_indent(source))
1184         return '\n'.join(out)
1185 
1186     #/////////////////////////////////////////////////////////////////
1187     # DocTest Running
1188     #/////////////////////////////////////////////////////////////////
1189 
1190     def __run(self, test, compileflags, out):
1191         """
1192         Run the examples in `test`.  Write the outcome of each example
1193         with one of the `DocTestRunner.report_*` methods, using the
1194         writer function `out`.  `compileflags` is the set of compiler
1195         flags that should be used to execute examples.  Return a tuple
1196         `(f, t)`, where `t` is the number of examples tried, and `f`
1197         is the number of examples that failed.  The examples are run
1198         in the namespace `test.globs`.
1199         """
1200         # Keep track of the number of failures and tries.
1201         failures = tries = 0
1202 
1203         # Save the option flags (since option directives can be used
1204         # to modify them).
1205         original_optionflags = self.optionflags
1206 
1207         SUCCESS, FAILURE, BOOM = range(3) # `outcome` state
1208 
1209         check = self._checker.check_output
1210 
1211         # Process each example.
1212         for examplenum, example in enumerate(test.examples):
1213 
1214             # If REPORT_ONLY_FIRST_FAILURE is set, then supress
1215             # reporting after the first failure.
1216             quiet = (self.optionflags & REPORT_ONLY_FIRST_FAILURE and
1217                      failures > 0)
1218 
1219             # Merge in the example's options.
1220             self.optionflags = original_optionflags
1221             if example.options:
1222                 for (optionflag, val) in example.options.items():
1223                     if val:
1224                         self.optionflags |= optionflag
1225                     else:
1226                         self.optionflags &= ~optionflag
1227 
1228             # Record that we started this example.
1229             tries += 1
1230             if not quiet:
1231                 self.report_start(out, test, example)
1232 
1233             # Use a special filename for compile(), so we can retrieve
1234             # the source code during interactive debugging (see
1235             # __patched_linecache_getlines).
1236             filename = '<doctest %s[%d]>' % (test.name, examplenum)
1237 
1238             # Run the example in the given context (globs), and record
1239             # any exception that gets raised.  (But don't intercept
1240             # keyboard interrupts.)
1241             try:
1242                 # Don't blink!  This is where the user's code gets run.
1243                 exec compile(example.source, filename, "single",
1244                              compileflags, 1) in test.globs
1245                 self.debugger.set_continue() # ==== Example Finished ====
1246                 exception = None
1247             except KeyboardInterrupt:
1248                 raise
1249             except:
1250                 exception = sys.exc_info()
1251                 self.debugger.set_continue() # ==== Example Finished ====
1252 
1253             got = self._fakeout.getvalue()  # the actual output
1254             self._fakeout.truncate(0)
1255             outcome = FAILURE   # guilty until proved innocent or insane
1256 
1257             # If the example executed without raising any exceptions,
1258             # verify its output.
1259             if exception is None:
1260                 if check(example.want, got, self.optionflags):
1261                     outcome = SUCCESS
1262 
1263             # The example raised an exception:  check if it was expected.
1264             else:
1265                 exc_info = sys.exc_info()
1266                 exc_msg = traceback.format_exception_only(*exc_info[:2])[-1]
1267                 if not quiet:
1268                     got += _exception_traceback(exc_info)
1269 
1270                 # If `example.exc_msg` is None, then we weren't expecting
1271                 # an exception.
1272                 if example.exc_msg is None:
1273                     outcome = BOOM
1274 
1275                 # We expected an exception:  see whether it matches.
1276                 elif check(example.exc_msg, exc_msg, self.optionflags):
1277                     outcome = SUCCESS
1278 
1279                 # Another chance if they didn't care about the detail.
1280                 elif self.optionflags & IGNORE_EXCEPTION_DETAIL:
1281                     m1 = re.match(r'[^:]*:', example.exc_msg)
1282                     m2 = re.match(r'[^:]*:', exc_msg)
1283                     if m1 and m2 and check(m1.group(0), m2.group(0),
1284                                            self.optionflags):
1285                         outcome = SUCCESS
1286 
1287             # Report the outcome.
1288             if outcome is SUCCESS:
1289                 if not quiet:
1290                     self.report_success(out, test, example, got)
1291             elif outcome is FAILURE:
1292                 if not quiet:
1293                     self.report_failure(out, test, example, got)
1294                 failures += 1
1295             elif outcome is BOOM:
1296                 if not quiet:
1297                     self.report_unexpected_exception(out, test, example,
1298                                                      exc_info)
1299                 failures += 1
1300             else:
1301                 assert False, ("unknown outcome", outcome)
1302 
1303         # Restore the option flags (in case they were modified)
1304         self.optionflags = original_optionflags
1305 
1306         # Record and return the number of failures and tries.
1307         self.__record_outcome(test, failures, tries)
1308         return failures, tries
1309 
1310     def __record_outcome(self, test, f, t):
1311         """
1312         Record the fact that the given DocTest (`test`) generated `f`
1313         failures out of `t` tried examples.
1314         """
1315         f2, t2 = self._name2ft.get(test.name, (0,0))
1316         self._name2ft[test.name] = (f+f2, t+t2)
1317         self.failures += f
1318         self.tries += t
1319 
1320     __LINECACHE_FILENAME_RE = re.compile(r'<doctest '
1321                                          r'(?P<name>[\w\.]+)'
1322                                          r'\[(?P<examplenum>\d+)\]>$')
1323     def __patched_linecache_getlines(self, filename):
1324         m = self.__LINECACHE_FILENAME_RE.match(filename)
1325         if m and m.group('name') == self.test.name:
1326             example = self.test.examples[int(m.group('examplenum'))]
1327             return example.source.splitlines(True)
1328         else:
1329             return self.save_linecache_getlines(filename)
1330 
1331     def run(self, test, compileflags=None, out=None, clear_globs=True):
1332         """
1333         Run the examples in `test`, and display the results using the
1334         writer function `out`.
1335 
1336         The examples are run in the namespace `test.globs`.  If
1337         `clear_globs` is true (the default), then this namespace will
1338         be cleared after the test runs, to help with garbage
1339         collection.  If you would like to examine the namespace after
1340         the test completes, then use `clear_globs=False`.
1341 
1342         `compileflags` gives the set of flags that should be used by
1343         the Python compiler when running the examples.  If not
1344         specified, then it will default to the set of future-import
1345         flags that apply to `globs`.
1346 
1347         The output of each example is checked using
1348         `DocTestRunner.check_output`, and the results are formatted by
1349         the `DocTestRunner.report_*` methods.
1350         """
1351         self.test = test
1352 
1353         if compileflags is None:
1354             compileflags = _extract_future_flags(test.globs)
1355 
1356         save_stdout = sys.stdout
1357         if out is None:
1358             out = save_stdout.write
1359         sys.stdout = self._fakeout
1360 
1361         # Patch pdb.set_trace to restore sys.stdout during interactive
1362         # debugging (so it's not still redirected to self._fakeout).
1363         # Note that the interactive output will go to *our*
1364         # save_stdout, even if that's not the real sys.stdout; this
1365         # allows us to write test cases for the set_trace behavior.
1366         save_set_trace = pdb.set_trace
1367         self.debugger = _OutputRedirectingPdb(save_stdout)
1368         self.debugger.reset()
1369         pdb.set_trace = self.debugger.set_trace
1370 
1371         # Patch linecache.getlines, so we can see the example's source
1372         # when we're inside the debugger.
1373         self.save_linecache_getlines = linecache.getlines
1374         linecache.getlines = self.__patched_linecache_getlines
1375 
1376         try:
1377             return self.__run(test, compileflags, out)
1378         finally:
1379             sys.stdout = save_stdout
1380             pdb.set_trace = save_set_trace
1381             linecache.getlines = self.save_linecache_getlines
1382             if clear_globs:
1383                 test.globs.clear()
1384 
1385     #/////////////////////////////////////////////////////////////////
1386     # Summarization
1387     #/////////////////////////////////////////////////////////////////
1388     def summarize(self, verbose=None):
1389         """
1390         Print a summary of all the test cases that have been run by
1391         this DocTestRunner, and return a tuple `(f, t)`, where `f` is
1392         the total number of failed examples, and `t` is the total
1393         number of tried examples.
1394 
1395         The optional `verbose` argument controls how detailed the
1396         summary is.  If the verbosity is not specified, then the
1397         DocTestRunner's verbosity is used.
1398         """
1399         if verbose is None:
1400             verbose = self._verbose
1401         notests = []
1402         passed = []
1403         failed = []
1404         totalt = totalf = 0
1405         for x in self._name2ft.items():
1406             name, (f, t) = x
1407             assert f <= t
1408             totalt += t
1409             totalf += f
1410             if t == 0:
1411                 notests.append(name)
1412             elif f == 0:
1413                 passed.append( (name, t) )
1414             else:
1415                 failed.append(x)
1416         if verbose:
1417             if notests:
1418                 print len(notests), "items had no tests:"
1419                 notests.sort()
1420                 for thing in notests:
1421                     print "   ", thing
1422             if passed:
1423                 print len(passed), "items passed all tests:"
1424                 passed.sort()
1425                 for thing, count in passed:
1426                     print " %3d tests in %s" % (count, thing)
1427         if failed:
1428             print self.DIVIDER
1429             print len(failed), "items had failures:"
1430             failed.sort()
1431             for thing, (f, t) in failed:
1432                 print " %3d of %3d in %s" % (f, t, thing)
1433         if verbose:
1434             print totalt, "tests in", len(self._name2ft), "items."
1435             print totalt - totalf, "passed and", totalf, "failed."
1436         if totalf:
1437             print "***Test Failed***", totalf, "failures."
1438         elif verbose:
1439             print "Test passed."
1440         return totalf, totalt
1441 
1442     #/////////////////////////////////////////////////////////////////
1443     # Backward compatibility cruft to maintain doctest.master.
1444     #/////////////////////////////////////////////////////////////////
1445     def merge(self, other):
1446         d = self._name2ft
1447         for name, (f, t) in other._name2ft.items():
1448             if name in d:
1449                 print "*** DocTestRunner.merge: '" + name + "' in both" \
1450                     " testers; summing outcomes."
1451                 f2, t2 = d[name]
1452                 f = f + f2
1453                 t = t + t2
1454             d[name] = f, t
1455 
1456 class OutputChecker:
1457     """
1458     A class used to check the whether the actual output from a doctest
1459     example matches the expected output.  `OutputChecker` defines two
1460     methods: `check_output`, which compares a given pair of outputs,
1461     and returns true if they match; and `output_difference`, which
1462     returns a string describing the differences between two outputs.
1463     """
1464     def check_output(self, want, got, optionflags):
1465         """
1466         Return True iff the actual output from an example (`got`)
1467         matches the expected output (`want`).  These strings are
1468         always considered to match if they are identical; but
1469         depending on what option flags the test runner is using,
1470         several non-exact match types are also possible.  See the
1471         documentation for `TestRunner` for more information about
1472         option flags.
1473         """
1474         # Handle the common case first, for efficiency:
1475         # if they're string-identical, always return true.
1476         if got == want:
1477             return True
1478 
1479         # The values True and False replaced 1 and 0 as the return
1480         # value for boolean comparisons in Python 2.3.
1481         if not (optionflags & DONT_ACCEPT_TRUE_FOR_1):
1482             if (got,want) == ("True\n", "1\n"):
1483                 return True
1484             if (got,want) == ("False\n", "0\n"):
1485                 return True
1486 
1487         # <BLANKLINE> can be used as a special sequence to signify a
1488         # blank line, unless the DONT_ACCEPT_BLANKLINE flag is used.
1489         if not (optionflags & DONT_ACCEPT_BLANKLINE):
1490             # Replace <BLANKLINE> in want with a blank line.
1491             want = re.sub('(?m)^%s\s*?$' % re.escape(BLANKLINE_MARKER),
1492                           '', want)
1493             # If a line in got contains only spaces, then remove the
1494             # spaces.
1495             got = re.sub('(?m)^\s*?$', '', got)
1496             if got == want:
1497                 return True
1498 
1499         # This flag causes doctest to ignore any differences in the
1500         # contents of whitespace strings.  Note that this can be used
1501         # in conjunction with the ELLIPSIS flag.
1502         if optionflags & NORMALIZE_WHITESPACE:
1503             got = ' '.join(got.split())
1504             want = ' '.join(want.split())
1505             if got == want:
1506                 return True
1507 
1508         # The ELLIPSIS flag says to let the sequence "..." in `want`
1509         # match any substring in `got`.
1510         if optionflags & ELLIPSIS:
1511             if _ellipsis_match(want, got):
1512                 return True
1513 
1514         # We didn't find any match; return false.
1515         return False
1516 
1517     # Should we do a fancy diff?
1518     def _do_a_fancy_diff(self, want, got, optionflags):
1519         # Not unless they asked for a fancy diff.
1520         if not optionflags & (REPORT_UDIFF |
1521                               REPORT_CDIFF |
1522                               REPORT_NDIFF):
1523             return False
1524 
1525         # If expected output uses ellipsis, a meaningful fancy diff is
1526         # too hard ... or maybe not.  In two real-life failures Tim saw,
1527         # a diff was a major help anyway, so this is commented out.
1528         # [todo] _ellipsis_match() knows which pieces do and don't match,
1529         # and could be the basis for a kick-ass diff in this case.
1530         ##if optionflags & ELLIPSIS and ELLIPSIS_MARKER in want:
1531         ##    return False
1532 
1533         # ndiff does intraline difference marking, so can be useful even
1534         # for 1-line differences.
1535         if optionflags & REPORT_NDIFF:
1536             return True
1537 
1538         # The other diff types need at least a few lines to be helpful.
1539         return want.count('\n') > 2 and got.count('\n') > 2
1540 
1541     def output_difference(self, example, got, optionflags):
1542         """
1543         Return a string describing the differences between the
1544         expected output for a given example (`example`) and the actual
1545         output (`got`).  `optionflags` is the set of option flags used
1546         to compare `want` and `got`.
1547         """
1548         want = example.want
1549         # If <BLANKLINE>s are being used, then replace blank lines
1550         # with <BLANKLINE> in the actual output string.
1551         if not (optionflags & DONT_ACCEPT_BLANKLINE):
1552             got = re.sub('(?m)^[ ]*(?=\n)', BLANKLINE_MARKER, got)
1553 
1554         # Check if we should use diff.
1555         if self._do_a_fancy_diff(want, got, optionflags):
1556             # Split want & got into lines.
1557             want_lines = want.splitlines(True)  # True == keep line ends
1558             got_lines = got.splitlines(True)
1559             # Use difflib to find their differences.
1560             if optionflags & REPORT_UDIFF:
1561                 diff = difflib.unified_diff(want_lines, got_lines, n=2)
1562                 diff = list(diff)[2:] # strip the diff header
1563                 kind = 'unified diff with -expected +actual'
1564             elif optionflags & REPORT_CDIFF:
1565                 diff = difflib.context_diff(want_lines, got_lines, n=2)
1566                 diff = list(diff)[2:] # strip the diff header
1567                 kind = 'context diff with expected followed by actual'
1568             elif optionflags & REPORT_NDIFF:
1569                 engine = difflib.Differ(charjunk=difflib.IS_CHARACTER_JUNK)
1570                 diff = list(engine.compare(want_lines, got_lines))
1571                 kind = 'ndiff with -expected +actual'
1572             else:
1573                 assert 0, 'Bad diff option'
1574             # Remove trailing whitespace on diff output.
1575             diff = [line.rstrip() + '\n' for line in diff]
1576             return 'Differences (%s):\n' % kind + _indent(''.join(diff))
1577 
1578         # If we're not using diff, then simply list the expected
1579         # output followed by the actual output.
1580         if want and got:
1581             return 'Expected:\n%sGot:\n%s' % (_indent(want), _indent(got))
1582         elif want:
1583             return 'Expected:\n%sGot nothing\n' % _indent(want)
1584         elif got:
1585             return 'Expected nothing\nGot:\n%s' % _indent(got)
1586         else:
1587             return 'Expected nothing\nGot nothing\n'
1588 
1589 class DocTestFailure(Exception):
1590     """A DocTest example has failed in debugging mode.
1591 
1592     The exception instance has variables:
1593 
1594     - test: the DocTest object being run
1595 
1596     - excample: the Example object that failed
1597 
1598     - got: the actual output
1599     """
1600     def __init__(self, test, example, got):
1601         self.test = test
1602         self.example = example
1603         self.got = got
1604 
1605     def __str__(self):
1606         return str(self.test)
1607 
1608 class UnexpectedException(Exception):
1609     """A DocTest example has encountered an unexpected exception
1610 
1611     The exception instance has variables:
1612 
1613     - test: the DocTest object being run
1614 
1615     - excample: the Example object that failed
1616 
1617     - exc_info: the exception info
1618     """
1619     def __init__(self, test, example, exc_info):
1620         self.test = test
1621         self.example = example
1622         self.exc_info = exc_info
1623 
1624     def __str__(self):
1625         return str(self.test)
1626 
1627 class DebugRunner(DocTestRunner):
1628     r"""Run doc tests but raise an exception as soon as there is a failure.
1629 
1630        If an unexpected exception occurs, an UnexpectedException is raised.
1631        It contains the test, the example, and the original exception:
1632 
1633          >>> runner = DebugRunner(verbose=False)
1634          >>> test = DocTestParser().get_doctest('>>> raise KeyError\n42',
1635          ...                                    {}, 'foo', 'foo.py', 0)
1636          >>> try:
1637          ...     runner.run(test)
1638          ... except UnexpectedException, failure:
1639          ...     pass
1640 
1641          >>> failure.test is test
1642          True
1643 
1644          >>> failure.example.want
1645          '42\n'
1646 
1647          >>> exc_info = failure.exc_info
1648          >>> raise exc_info[0], exc_info[1], exc_info[2]
1649          Traceback (most recent call last):
1650          ...
1651          KeyError
1652 
1653        We wrap the original exception to give the calling application
1654        access to the test and example information.
1655 
1656        If the output doesn't match, then a DocTestFailure is raised:
1657 
1658          >>> test = DocTestParser().get_doctest('''
1659          ...      >>> x = 1
1660          ...      >>> x
1661          ...      2
1662          ...      ''', {}, 'foo', 'foo.py', 0)
1663 
1664          >>> try:
1665          ...    runner.run(test)
1666          ... except DocTestFailure, failure:
1667          ...    pass
1668 
1669        DocTestFailure objects provide access to the test:
1670 
1671          >>> failure.test is test
1672          True
1673 
1674        As well as to the example:
1675 
1676          >>> failure.example.want
1677          '2\n'
1678 
1679        and the actual output:
1680 
1681          >>> failure.got
1682          '1\n'
1683 
1684        If a failure or error occurs, the globals are left intact:
1685 
1686          >>> del test.globs['__builtins__']
1687          >>> test.globs
1688          {'x': 1}
1689 
1690          >>> test = DocTestParser().get_doctest('''
1691          ...      >>> x = 2
1692          ...      >>> raise KeyError
1693          ...      ''', {}, 'foo', 'foo.py', 0)
1694 
1695          >>> runner.run(test)
1696          Traceback (most recent call last):
1697          ...
1698          UnexpectedException: <DocTest foo from foo.py:0 (2 examples)>
1699 
1700          >>> del test.globs['__builtins__']
1701          >>> test.globs
1702          {'x': 2}
1703 
1704        But the globals are cleared if there is no error:
1705 
1706          >>> test = DocTestParser().get_doctest('''
1707          ...      >>> x = 2
1708          ...      ''', {}, 'foo', 'foo.py', 0)
1709 
1710          >>> runner.run(test)
1711          (0, 1)
1712 
1713          >>> test.globs
1714          {}
1715 
1716        """
1717 
1718     def run(self, test, compileflags=None, out=None, clear_globs=True):
1719         r = DocTestRunner.run(self, test, compileflags, out, False)
1720         if clear_globs:
1721             test.globs.clear()
1722         return r
1723 
1724     def report_unexpected_exception(self, out, test, example, exc_info):
1725         raise UnexpectedException(test, example, exc_info)
1726 
1727     def report_failure(self, out, test, example, got):
1728         raise DocTestFailure(test, example, got)
1729 
1730 ######################################################################
1731 ## 6. Test Functions
1732 ######################################################################
1733 # These should be backwards compatible.
1734 
1735 # For backward compatibility, a global instance of a DocTestRunner
1736 # class, updated by testmod.
1737 master = None
1738 
1739 def testmod(m=None, name=None, globs=None, verbose=None, isprivate=None,
1740             report=True, optionflags=0, extraglobs=None,
1741             raise_on_error=False, exclude_empty=False):
1742     """m=None, name=None, globs=None, verbose=None, isprivate=None,
1743        report=True, optionflags=0, extraglobs=None, raise_on_error=False,
1744        exclude_empty=False
1745 
1746     Test examples in docstrings in functions and classes reachable
1747     from module m (or the current module if m is not supplied), starting
1748     with m.__doc__.  Unless isprivate is specified, private names
1749     are not skipped.
1750 
1751     Also test examples reachable from dict m.__test__ if it exists and is
1752     not None.  m.__test__ maps names to functions, classes and strings;
1753     function and class docstrings are tested even if the name is private;
1754     strings are tested directly, as if they were docstrings.
1755 
1756     Return (#failures, #tests).
1757 
1758     See doctest.__doc__ for an overview.
1759 
1760     Optional keyword arg "name" gives the name of the module; by default
1761     use m.__name__.
1762 
1763     Optional keyword arg "globs" gives a dict to be used as the globals
1764     when executing examples; by default, use m.__dict__.  A copy of this
1765     dict is actually used for each docstring, so that each docstring's
1766     examples start with a clean slate.
1767 
1768     Optional keyword arg "extraglobs" gives a dictionary that should be
1769     merged into the globals that are used to execute examples.  By
1770     default, no extra globals are used.  This is new in 2.4.
1771 
1772     Optional keyword arg "verbose" prints lots of stuff if true, prints
1773     only failures if false; by default, it's true iff "-v" is in sys.argv.
1774 
1775     Optional keyword arg "report" prints a summary at the end when true,
1776     else prints nothing at the end.  In verbose mode, the summary is
1777     detailed, else very brief (in fact, empty if all tests passed).
1778 
1779     Optional keyword arg "optionflags" or's together module constants,
1780     and defaults to 0.  This is new in 2.3.  Possible values (see the
1781     docs for details):
1782 
1783         DONT_ACCEPT_TRUE_FOR_1
1784         DONT_ACCEPT_BLANKLINE
1785         NORMALIZE_WHITESPACE
1786         ELLIPSIS
1787         IGNORE_EXCEPTION_DETAIL
1788         REPORT_UDIFF
1789         REPORT_CDIFF
1790         REPORT_NDIFF
1791         REPORT_ONLY_FIRST_FAILURE
1792 
1793     Optional keyword arg "raise_on_error" raises an exception on the
1794     first unexpected exception or failure. This allows failures to be
1795     post-mortem debugged.
1796 
1797     Deprecated in Python 2.4:
1798     Optional keyword arg "isprivate" specifies a function used to
1799     determine whether a name is private.  The default function is
1800     treat all functions as public.  Optionally, "isprivate" can be
1801     set to doctest.is_private to skip over functions marked as private
1802     using the underscore naming convention; see its docs for details.
1803 
1804     Advanced tomfoolery:  testmod runs methods of a local instance of
1805     class doctest.Tester, then merges the results into (or creates)
1806     global Tester instance doctest.master.  Methods of doctest.master
1807     can be called directly too, if you want to do something unusual.
1808     Passing report=0 to testmod is especially useful then, to delay
1809     displaying a summary.  Invoke doctest.master.summarize(verbose)
1810     when you're done fiddling.
1811     """
1812     global master
1813 
1814     if isprivate is not None:
1815         warnings.warn("the isprivate argument is deprecated; "
1816                       "examine DocTestFinder.find() lists instead",
1817                       DeprecationWarning)
1818 
1819     # If no module was given, then use __main__.
1820     if m is None:
1821         # DWA - m will still be None if this wasn't invoked from the command
1822         # line, in which case the following TypeError is about as good an error
1823         # as we should expect
1824         m = sys.modules.get('__main__')
1825 
1826     # Check that we were actually given a module.
1827     if not inspect.ismodule(m):
1828         raise TypeError("testmod: module required; %r" % (m,))
1829 
1830     # If no name was given, then use the module's name.
1831     if name is None:
1832         name = m.__name__
1833 
1834     # Find, parse, and run all tests in the given module.
1835     finder = DocTestFinder(_namefilter=isprivate, exclude_empty=exclude_empty)
1836 
1837     if raise_on_error:
1838         runner = DebugRunner(verbose=verbose, optionflags=optionflags)
1839     else:
1840         runner = DocTestRunner(verbose=verbose, optionflags=optionflags)
1841 
1842     for test in finder.find(m, name, globs=globs, extraglobs=extraglobs):
1843         runner.run(test)
1844 
1845     if report:
1846         runner.summarize()
1847 
1848     if master is None:
1849         master = runner
1850     else:
1851         master.merge(runner)
1852 
1853     return runner.failures, runner.tries
1854 
1855 def testfile(filename, module_relative=True, name=None, package=None,
1856              globs=None, verbose=None, report=True, optionflags=0,
1857              extraglobs=None, raise_on_error=False, parser=DocTestParser()):
1858     """
1859     Test examples in the given file.  Return (#failures, #tests).
1860 
1861     Optional keyword arg "module_relative" specifies how filenames
1862     should be interpreted:
1863 
1864       - If "module_relative" is True (the default), then "filename"
1865          specifies a module-relative path.  By default, this path is
1866          relative to the calling module's directory; but if the
1867          "package" argument is specified, then it is relative to that
1868          package.  To ensure os-independence, "filename" should use
1869          "/" characters to separate path segments, and should not
1870          be an absolute path (i.e., it may not begin with "/").
1871 
1872       - If "module_relative" is False, then "filename" specifies an
1873         os-specific path.  The path may be absolute or relative (to
1874         the current working directory).
1875 
1876     Optional keyword arg "name" gives the name of the test; by default
1877     use the file's basename.
1878 
1879     Optional keyword argument "package" is a Python package or the
1880     name of a Python package whose directory should be used as the
1881     base directory for a module relative filename.  If no package is
1882     specified, then the calling module's directory is used as the base
1883     directory for module relative filenames.  It is an error to
1884     specify "package" if "module_relative" is False.
1885 
1886     Optional keyword arg "globs" gives a dict to be used as the globals
1887     when executing examples; by default, use {}.  A copy of this dict
1888     is actually used for each docstring, so that each docstring's
1889     examples start with a clean slate.
1890 
1891     Optional keyword arg "extraglobs" gives a dictionary that should be
1892     merged into the globals that are used to execute examples.  By
1893     default, no extra globals are used.
1894 
1895     Optional keyword arg "verbose" prints lots of stuff if true, prints
1896     only failures if false; by default, it's true iff "-v" is in sys.argv.
1897 
1898     Optional keyword arg "report" prints a summary at the end when true,
1899     else prints nothing at the end.  In verbose mode, the summary is
1900     detailed, else very brief (in fact, empty if all tests passed).
1901 
1902     Optional keyword arg "optionflags" or's together module constants,
1903     and defaults to 0.  Possible values (see the docs for details):
1904 
1905         DONT_ACCEPT_TRUE_FOR_1
1906         DONT_ACCEPT_BLANKLINE
1907         NORMALIZE_WHITESPACE
1908         ELLIPSIS
1909         IGNORE_EXCEPTION_DETAIL
1910         REPORT_UDIFF
1911         REPORT_CDIFF
1912         REPORT_NDIFF
1913         REPORT_ONLY_FIRST_FAILURE
1914 
1915     Optional keyword arg "raise_on_error" raises an exception on the
1916     first unexpected exception or failure. This allows failures to be
1917     post-mortem debugged.
1918 
1919     Optional keyword arg "parser" specifies a DocTestParser (or
1920     subclass) that should be used to extract tests from the files.
1921 
1922     Advanced tomfoolery:  testmod runs methods of a local instance of
1923     class doctest.Tester, then merges the results into (or creates)
1924     global Tester instance doctest.master.  Methods of doctest.master
1925     can be called directly too, if you want to do something unusual.
1926     Passing report=0 to testmod is especially useful then, to delay
1927     displaying a summary.  Invoke doctest.master.summarize(verbose)
1928     when you're done fiddling.
1929     """
1930     global master
1931 
1932     if package and not module_relative:
1933         raise ValueError("Package may only be specified for module-"
1934                          "relative paths.")
1935 
1936     # Relativize the path
1937     if module_relative:
1938         package = _normalize_module(package)
1939         filename = _module_relative_path(package, filename)
1940 
1941     # If no name was given, then use the file's name.
1942     if name is None:
1943         name = os.path.basename(filename)
1944 
1945     # Assemble the globals.
1946     if globs is None:
1947         globs = {}
1948     else:
1949         globs = globs.copy()
1950     if extraglobs is not None:
1951         globs.update(extraglobs)
1952 
1953     if raise_on_error:
1954         runner = DebugRunner(verbose=verbose, optionflags=optionflags)
1955     else:
1956         runner = DocTestRunner(verbose=verbose, optionflags=optionflags)
1957 
1958     # Read the file, convert it to a test, and run it.
1959     s = open(filename).read()
1960     test = parser.get_doctest(s, globs, name, filename, 0)
1961     runner.run(test)
1962 
1963     if report:
1964         runner.summarize()
1965 
1966     if master is None:
1967         master = runner
1968     else:
1969         master.merge(runner)
1970 
1971     return runner.failures, runner.tries
1972 
1973 def run_docstring_examples(f, globs, verbose=False, name="NoName",
1974                            compileflags=None, optionflags=0):
1975     """
1976     Test examples in the given object's docstring (`f`), using `globs`
1977     as globals.  Optional argument `name` is used in failure messages.
1978     If the optional argument `verbose` is true, then generate output
1979     even if there are no failures.
1980 
1981     `compileflags` gives the set of flags that should be used by the
1982     Python compiler when running the examples.  If not specified, then
1983     it will default to the set of future-import flags that apply to
1984     `globs`.
1985 
1986     Optional keyword arg `optionflags` specifies options for the
1987     testing and output.  See the documentation for `testmod` for more
1988     information.
1989     """
1990     # Find, parse, and run all tests in the given module.
1991     finder = DocTestFinder(verbose=verbose, recurse=False)
1992     runner = DocTestRunner(verbose=verbose, optionflags=optionflags)
1993     for test in finder.find(f, name, globs=globs):
1994         runner.run(test, compileflags=compileflags)
1995 
1996 ######################################################################
1997 ## 7. Tester
1998 ######################################################################
1999 # This is provided only for backwards compatibility.  It's not
2000 # actually used in any way.
2001 
2002 class Tester:
2003     def __init__(self, mod=None, globs=None, verbose=None,
2004                  isprivate=None, optionflags=0):
2005 
2006         warnings.warn("class Tester is deprecated; "
2007                       "use class doctest.DocTestRunner instead",
2008                       DeprecationWarning, stacklevel=2)
2009         if mod is None and globs is None:
2010             raise TypeError("Tester.__init__: must specify mod or globs")
2011         if mod is not None and not inspect.ismodule(mod):
2012             raise TypeError("Tester.__init__: mod must be a module; %r" %
2013                             (mod,))
2014         if globs is None:
2015             globs = mod.__dict__
2016         self.globs = globs
2017 
2018         self.verbose = verbose
2019         self.isprivate = isprivate
2020         self.optionflags = optionflags
2021         self.testfinder = DocTestFinder(_namefilter=isprivate)
2022         self.testrunner = DocTestRunner(verbose=verbose,
2023                                         optionflags=optionflags)
2024 
2025     def runstring(self, s, name):
2026         test = DocTestParser().get_doctest(s, self.globs, name, None, None)
2027         if self.verbose:
2028             print "Running string", name
2029         (f,t) = self.testrunner.run(test)
2030         if self.verbose:
2031             print f, "of", t, "examples failed in string", name
2032         return (f,t)
2033 
2034     def rundoc(self, object, name=None, module=None):
2035         f = t = 0
2036         tests = self.testfinder.find(object, name, module=module,
2037                                      globs=self.globs)
2038         for test in tests:
2039             (f2, t2) = self.testrunner.run(test)
2040             (f,t) = (f+f2, t+t2)
2041         return (f,t)
2042 
2043     def rundict(self, d, name, module=None):
2044         import new
2045         m = new.module(name)
2046         m.__dict__.update(d)
2047         if module is None:
2048             module = False
2049         return self.rundoc(m, name, module)
2050 
2051     def run__test__(self, d, name):
2052         import new
2053         m = new.module(name)
2054         m.__test__ = d
2055         return self.rundoc(m, name)
2056 
2057     def summarize(self, verbose=None):
2058         return self.testrunner.summarize(verbose)
2059 
2060     def merge(self, other):
2061         self.testrunner.merge(other.testrunner)
2062 
2063 ######################################################################
2064 ## 8. Unittest Support
2065 ######################################################################
2066 
2067 _unittest_reportflags = 0
2068 
2069 def set_unittest_reportflags(flags):
2070     """Sets the unittest option flags.
2071 
2072     The old flag is returned so that a runner could restore the old
2073     value if it wished to:
2074 
2075       >>> old = _unittest_reportflags
2076       >>> set_unittest_reportflags(REPORT_NDIFF |
2077       ...                          REPORT_ONLY_FIRST_FAILURE) == old
2078       True
2079 
2080       >>> import doctest
2081       >>> doctest._unittest_reportflags == (REPORT_NDIFF |
2082       ...                                   REPORT_ONLY_FIRST_FAILURE)
2083       True
2084 
2085     Only reporting flags can be set:
2086 
2087       >>> set_unittest_reportflags(ELLIPSIS)
2088       Traceback (most recent call last):
2089       ...
2090       ValueError: ('Only reporting flags allowed', 8)
2091 
2092       >>> set_unittest_reportflags(old) == (REPORT_NDIFF |
2093       ...                                   REPORT_ONLY_FIRST_FAILURE)
2094       True
2095     """
2096     global _unittest_reportflags
2097 
2098     if (flags & REPORTING_FLAGS) != flags:
2099         raise ValueError("Only reporting flags allowed", flags)
2100     old = _unittest_reportflags
2101     _unittest_reportflags = flags
2102     return old
2103 
2104 
2105 class DocTestCase(unittest.TestCase):
2106 
2107     def __init__(self, test, optionflags=0, setUp=None, tearDown=None,
2108                  checker=None):
2109 
2110         unittest.TestCase.__init__(self)
2111         self._dt_optionflags = optionflags
2112         self._dt_checker = checker
2113         self._dt_test = test
2114         self._dt_setUp = setUp
2115         self._dt_tearDown = tearDown
2116 
2117     def setUp(self):
2118         test = self._dt_test
2119 
2120         if self._dt_setUp is not None:
2121             self._dt_setUp(test)
2122 
2123     def tearDown(self):
2124         test = self._dt_test
2125 
2126         if self._dt_tearDown is not None:
2127             self._dt_tearDown(test)
2128 
2129         test.globs.clear()
2130 
2131     def runTest(self):
2132         test = self._dt_test
2133         old = sys.stdout
2134         new = StringIO()
2135         optionflags = self._dt_optionflags
2136 
2137         if not (optionflags & REPORTING_FLAGS):
2138             # The option flags don't include any reporting flags,
2139             # so add the default reporting flags
2140             optionflags |= _unittest_reportflags
2141 
2142         runner = DocTestRunner(optionflags=optionflags,
2143                                checker=self._dt_checker, verbose=False)
2144 
2145         try:
2146             runner.DIVIDER = "-"*70
2147             failures, tries = runner.run(
2148                 test, out=new.write, clear_globs=False)
2149         finally:
2150             sys.stdout = old
2151 
2152         if failures:
2153             raise self.failureException(self.format_failure(new.getvalue()))
2154 
2155     def format_failure(self, err):
2156         test = self._dt_test
2157         if test.lineno is None:
2158             lineno = 'unknown line number'
2159         else:
2160             lineno = '%s' % test.lineno
2161         lname = '.'.join(test.name.split('.')[-1:])
2162         return ('Failed doctest test for %s\n'
2163                 '  File "%s", line %s, in %s\n\n%s'
2164                 % (test.name, test.filename, lineno, lname, err)
2165                 )
2166 
2167     def debug(self):
2168         r"""Run the test case without results and without catching exceptions
2169 
2170            The unit test framework includes a debug method on test cases
2171            and test suites to support post-mortem debugging.  The test code
2172            is run in such a way that errors are not caught.  This way a
2173            caller can catch the errors and initiate post-mortem debugging.
2174 
2175            The DocTestCase provides a debug method that raises
2176            UnexpectedException errors if there is an unexepcted
2177            exception:
2178 
2179              >>> test = DocTestParser().get_doctest('>>> raise KeyError\n42',
2180              ...                {}, 'foo', 'foo.py', 0)
2181              >>> case = DocTestCase(test)
2182              >>> try:
2183              ...     case.debug()
2184              ... except UnexpectedException, failure:
2185              ...     pass
2186 
2187            The UnexpectedException contains the test, the example, and
2188            the original exception:
2189 
2190              >>> failure.test is test
2191              True
2192 
2193              >>> failure.example.want
2194              '42\n'
2195 
2196              >>> exc_info = failure.exc_info
2197              >>> raise exc_info[0], exc_info[1], exc_info[2]
2198              Traceback (most recent call last):
2199              ...
2200              KeyError
2201 
2202            If the output doesn't match, then a DocTestFailure is raised:
2203 
2204              >>> test = DocTestParser().get_doctest('''
2205              ...      >>> x = 1
2206              ...      >>> x
2207              ...      2
2208              ...      ''', {}, 'foo', 'foo.py', 0)
2209              >>> case = DocTestCase(test)
2210 
2211              >>> try:
2212              ...    case.debug()
2213              ... except DocTestFailure, failure:
2214              ...    pass
2215 
2216            DocTestFailure objects provide access to the test:
2217 
2218              >>> failure.test is test
2219              True
2220 
2221            As well as to the example:
2222 
2223              >>> failure.example.want
2224              '2\n'
2225 
2226            and the actual output:
2227 
2228              >>> failure.got
2229              '1\n'
2230 
2231            """
2232 
2233         self.setUp()
2234         runner = DebugRunner(optionflags=self._dt_optionflags,
2235                              checker=self._dt_checker, verbose=False)
2236         runner.run(self._dt_test)
2237         self.tearDown()
2238 
2239     def id(self):
2240         return self._dt_test.name
2241 
2242     def __repr__(self):
2243         name = self._dt_test.name.split('.')
2244         return "%s (%s)" % (name[-1], '.'.join(name[:-1]))
2245 
2246     __str__ = __repr__
2247 
2248     def shortDescription(self):
2249         return "Doctest: " + self._dt_test.name
2250 
2251 def DocTestSuite(module=None, globs=None, extraglobs=None, test_finder=None,
2252                  **options):
2253     """
2254     Convert doctest tests for a module to a unittest test suite.
2255 
2256     This converts each documentation string in a module that
2257     contains doctest tests to a unittest test case.  If any of the
2258     tests in a doc string fail, then the test case fails.  An exception
2259     is raised showing the name of the file containing the test and a
2260     (sometimes approximate) line number.
2261 
2262     The `module` argument provides the module to be tested.  The argument
2263     can be either a module or a module name.
2264 
2265     If no argument is given, the calling module is used.
2266 
2267     A number of options may be provided as keyword arguments:
2268 
2269     setUp
2270       A set-up function.  This is called before running the
2271       tests in each file. The setUp function will be passed a DocTest
2272       object.  The setUp function can access the test globals as the
2273       globs attribute of the test passed.
2274 
2275     tearDown
2276       A tear-down function.  This is called after running the
2277       tests in each file.  The tearDown function will be passed a DocTest
2278       object.  The tearDown function can access the test globals as the
2279       globs attribute of the test passed.
2280 
2281     globs
2282       A dictionary containing initial global variables for the tests.
2283 
2284     optionflags
2285        A set of doctest option flags expressed as an integer.
2286     """
2287 
2288     if test_finder is None:
2289         test_finder = DocTestFinder()
2290 
2291     module = _normalize_module(module)
2292     tests = test_finder.find(module, globs=globs, extraglobs=extraglobs)
2293     if globs is None:
2294         globs = module.__dict__
2295     if not tests:
2296         # Why do we want to do this? Because it reveals a bug that might
2297         # otherwise be hidden.
2298         raise ValueError(module, "has no tests")
2299 
2300     tests.sort()
2301     suite = unittest.TestSuite()
2302     for test in tests:
2303         if len(test.examples) == 0:
2304             continue
2305         if not test.filename:
2306             filename = module.__file__
2307             if filename[-4:] in (".pyc", ".pyo"):
2308                 filename = filename[:-1]
2309             test.filename = filename
2310         suite.addTest(DocTestCase(test, **options))
2311 
2312     return suite
2313 
2314 class DocFileCase(DocTestCase):
2315 
2316     def id(self):
2317         return '_'.join(self._dt_test.name.split('.'))
2318 
2319     def __repr__(self):
2320         return self._dt_test.filename
2321     __str__ = __repr__
2322 
2323     def format_failure(self, err):
2324         return ('Failed doctest test for %s\n  File "%s", line 0\n\n%s'
2325                 % (self._dt_test.name, self._dt_test.filename, err)
2326                 )
2327 
2328 def DocFileTest(path, module_relative=True, package=None,
2329                 globs=None, parser=DocTestParser(), **options):
2330     if globs is None:
2331         globs = {}
2332 
2333     if package and not module_relative:
2334         raise ValueError("Package may only be specified for module-"
2335                          "relative paths.")
2336 
2337     # Relativize the path.
2338     if module_relative:
2339         package = _normalize_module(package)
2340         path = _module_relative_path(package, path)
2341 
2342     # Find the file and read it.
2343     name = os.path.basename(path)
2344     doc = open(path).read()
2345 
2346     # Convert it to a test, and wrap it in a DocFileCase.
2347     test = parser.get_doctest(doc, globs, name, path, 0)
2348     return DocFileCase(test, **options)
2349 
2350 def DocFileSuite(*paths, **kw):
2351     """A unittest suite for one or more doctest files.
2352 
2353     The path to each doctest file is given as a string; the
2354     interpretation of that string depends on the keyword argument
2355     "module_relative".
2356 
2357     A number of options may be provided as keyword arguments:
2358 
2359     module_relative
2360       If "module_relative" is True, then the given file paths are
2361       interpreted as os-independent module-relative paths.  By
2362       default, these paths are relative to the calling module's
2363       directory; but if the "package" argument is specified, then
2364       they are relative to that package.  To ensure os-independence,
2365       "filename" should use "/" characters to separate path
2366       segments, and may not be an absolute path (i.e., it may not
2367       begin with "/").
2368 
2369       If "module_relative" is False, then the given file paths are
2370       interpreted as os-specific paths.  These paths may be absolute
2371       or relative (to the current working directory).
2372 
2373     package
2374       A Python package or the name of a Python package whose directory
2375       should be used as the base directory for module relative paths.
2376       If "package" is not specified, then the calling module's
2377       directory is used as the base directory for module relative
2378       filenames.  It is an error to specify "package" if
2379       "module_relative" is False.
2380 
2381     setUp
2382       A set-up function.  This is called before running the
2383       tests in each file. The setUp function will be passed a DocTest
2384       object.  The setUp function can access the test globals as the
2385       globs attribute of the test passed.
2386 
2387     tearDown
2388       A tear-down function.  This is called after running the
2389       tests in each file.  The tearDown function will be passed a DocTest
2390       object.  The tearDown function can access the test globals as the
2391       globs attribute of the test passed.
2392 
2393     globs
2394       A dictionary containing initial global variables for the tests.
2395 
2396     optionflags
2397       A set of doctest option flags expressed as an integer.
2398 
2399     parser
2400       A DocTestParser (or subclass) that should be used to extract
2401       tests from the files.
2402     """
2403     suite = unittest.TestSuite()
2404 
2405     # We do this here so that _normalize_module is called at the right
2406     # level.  If it were called in DocFileTest, then this function
2407     # would be the caller and we might guess the package incorrectly.
2408     if kw.get('module_relative', True):
2409         kw['package'] = _normalize_module(kw.get('package'))
2410 
2411     for path in paths:
2412         suite.addTest(DocFileTest(path, **kw))
2413 
2414     return suite
2415 
2416 ######################################################################
2417 ## 9. Debugging Support
2418 ######################################################################
2419 
2420 def script_from_examples(s):
2421     r"""Extract script from text with examples.
2422 
2423        Converts text with examples to a Python script.  Example input is
2424        converted to regular code.  Example output and all other words
2425        are converted to comments:
2426 
2427        >>> text = '''
2428        ...       Here are examples of simple math.
2429        ...
2430        ...           Python has super accurate integer addition
2431        ...
2432        ...           >>> 2 + 2
2433        ...           5
2434        ...
2435        ...           And very friendly error messages:
2436        ...
2437        ...           >>> 1/0
2438        ...           To Infinity
2439        ...           And
2440        ...           Beyond
2441        ...
2442        ...           You can use logic if you want:
2443        ...
2444        ...           >>> if 0:
2445        ...           ...    blah
2446        ...           ...    blah
2447        ...           ...
2448        ...
2449        ...           Ho hum
2450        ...           '''
2451 
2452        >>> print script_from_examples(text)
2453        # Here are examples of simple math.
2454        #
2455        #     Python has super accurate integer addition
2456        #
2457        2 + 2
2458        # Expected:
2459        ## 5
2460        #
2461        #     And very friendly error messages:
2462        #
2463        1/0
2464        # Expected:
2465        ## To Infinity
2466        ## And
2467        ## Beyond
2468        #
2469        #     You can use logic if you want:
2470        #
2471        if 0:
2472           blah
2473           blah
2474        #
2475        #     Ho hum
2476        """
2477     output = []
2478     for piece in DocTestParser().parse(s):
2479         if isinstance(piece, Example):
2480             # Add the example's source code (strip trailing NL)
2481             output.append(piece.source[:-1])
2482             # Add the expected output:
2483             want = piece.want
2484             if want:
2485                 output.append('# Expected:')
2486                 output += ['## '+l for l in want.split('\n')[:-1]]
2487         else:
2488             # Add non-example text.
2489             output += [_comment_line(l)
2490                        for l in piece.split('\n')[:-1]]
2491 
2492     # Trim junk on both ends.
2493     while output and output[-1] == '#':
2494         output.pop()
2495     while output and output[0] == '#':
2496         output.pop(0)
2497     # Combine the output, and return it.
2498     return '\n'.join(output)
2499 
2500 def testsource(module, name):
2501     """Extract the test sources from a doctest docstring as a script.
2502 
2503     Provide the module (or dotted name of the module) containing the
2504     test to be debugged and the name (within the module) of the object
2505     with the doc string with tests to be debugged.
2506     """
2507     module = _normalize_module(module)
2508     tests = DocTestFinder().find(module)
2509     test = [t for t in tests if t.name == name]
2510     if not test:
2511         raise ValueError(name, "not found in tests")
2512     test = test[0]
2513     testsrc = script_from_examples(test.docstring)
2514     return testsrc
2515 
2516 def debug_src(src, pm=False, globs=None):
2517     """Debug a single doctest docstring, in argument `src`'"""
2518     testsrc = script_from_examples(src)
2519     debug_script(testsrc, pm, globs)
2520 
2521 def debug_script(src, pm=False, globs=None):
2522     "Debug a test script.  `src` is the script, as a string."
2523     import pdb
2524 
2525     # Note that tempfile.NameTemporaryFile() cannot be used.  As the
2526     # docs say, a file so created cannot be opened by name a second time
2527     # on modern Windows boxes, and execfile() needs to open it.
2528     srcfilename = tempfile.mktemp(".py", "doctestdebug")
2529     f = open(srcfilename, 'w')
2530     f.write(src)
2531     f.close()
2532 
2533     try:
2534         if globs:
2535             globs = globs.copy()
2536         else:
2537             globs = {}
2538 
2539         if pm:
2540             try:
2541                 execfile(srcfilename, globs, globs)
2542             except:
2543                 print sys.exc_info()[1]
2544                 pdb.post_mortem(sys.exc_info()[2])
2545         else:
2546             # Note that %r is vital here.  '%s' instead can, e.g., cause
2547             # backslashes to get treated as metacharacters on Windows.
2548             pdb.run("execfile(%r)" % srcfilename, globs, globs)
2549 
2550     finally:
2551         os.remove(srcfilename)
2552 
2553 def debug(module, name, pm=False):
2554     """Debug a single doctest docstring.
2555 
2556     Provide the module (or dotted name of the module) containing the
2557     test to be debugged and the name (within the module) of the object
2558     with the docstring with tests to be debugged.
2559     """
2560     module = _normalize_module(module)
2561     testsrc = testsource(module, name)
2562     debug_script(testsrc, pm, module.__dict__)
2563 
2564 ######################################################################
2565 ## 10. Example Usage
2566 ######################################################################
2567 class _TestClass:
2568     """
2569     A pointless class, for sanity-checking of docstring testing.
2570 
2571     Methods:
2572         square()
2573         get()
2574 
2575     >>> _TestClass(13).get() + _TestClass(-12).get()
2576     1
2577     >>> hex(_TestClass(13).square().get())
2578     '0xa9'
2579     """
2580 
2581     def __init__(self, val):
2582         """val -> _TestClass object with associated value val.
2583 
2584         >>> t = _TestClass(123)
2585         >>> print t.get()
2586         123
2587         """
2588 
2589         self.val = val
2590 
2591     def square(self):
2592         """square() -> square TestClass's associated value
2593 
2594         >>> _TestClass(13).square().get()
2595         169
2596         """
2597 
2598         self.val = self.val ** 2
2599         return self
2600 
2601     def get(self):
2602         """get() -> return TestClass's associated value.
2603 
2604         >>> x = _TestClass(-42)
2605         >>> print x.get()
2606         -42
2607         """
2608 
2609         return self.val
2610 
2611 __test__ = {"_TestClass": _TestClass,
2612             "string": r"""
2613                       Example of a string object, searched as-is.
2614                       >>> x = 1; y = 2
2615                       >>> x + y, x * y
2616                       (3, 2)
2617                       """,
2618 
2619             "bool-int equivalence": r"""
2620                                     In 2.2, boolean expressions displayed
2621                                     0 or 1.  By default, we still accept
2622                                     them.  This can be disabled by passing
2623                                     DONT_ACCEPT_TRUE_FOR_1 to the new
2624                                     optionflags argument.
2625                                     >>> 4 == 4
2626                                     1
2627                                     >>> 4 == 4
2628                                     True
2629                                     >>> 4 > 4
2630                                     0
2631                                     >>> 4 > 4
2632                                     False
2633                                     """,
2634 
2635             "blank lines": r"""
2636                 Blank lines can be marked with <BLANKLINE>:
2637                     >>> print 'foo\n\nbar\n'
2638                     foo
2639                     <BLANKLINE>
2640                     bar
2641                     <BLANKLINE>
2642             """,
2643 
2644             "ellipsis": r"""
2645                 If the ellipsis flag is used, then '...' can be used to
2646                 elide substrings in the desired output:
2647                     >>> print range(1000) #doctest: +ELLIPSIS
2648                     [0, 1, 2, ..., 999]
2649             """,
2650 
2651             "whitespace normalization": r"""
2652                 If the whitespace normalization flag is used, then
2653                 differences in whitespace are ignored.
2654                     >>> print range(30) #doctest: +NORMALIZE_WHITESPACE
2655                     [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
2656                      15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
2657                      27, 28, 29]
2658             """,
2659            }
2660 
2661 def _test():
2662     r = unittest.TextTestRunner()
2663     r.run(DocTestSuite())
2664 
2665 if __name__ == "__main__":
2666     _test()
2667 

Generated by PyXR 0.9.4
SourceForge.net Logo