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