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