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