~ubuntu-branches/debian/stretch/electrum/stretch

« back to all changes in this revision

Viewing changes to gui/kivy/tools/.buildozer/android/platform/python-for-android/dist/kivy/python-install/lib/python2.7/doctest.py

  • Committer: Package Import Robot
  • Author(s): Tristan Seligmann
  • Date: 2016-04-04 03:02:39 UTC
  • mfrom: (1.1.10)
  • Revision ID: package-import@ubuntu.com-20160404030239-0szgkio8yryjv7c9
Tags: 2.6.3-1
* New upstream release.
  - Drop backported install-wizard-connect.patch.
* Add Suggests: python-zbar and update the installation hint to suggest
  apt-get instead of pip (closes: #819517).
* Bump Standards-Version to 3.9.7 (no changes).
* Update Vcs-* links.

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