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