~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Lib/doctest.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

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