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