home *** CD-ROM | disk | FTP | other *** search
/ Freelog 116 / FreelogNo116-JuilletSeptembre2013.iso / GestionFichiers / metamorphose / metamorphose2_0.8.2_setup.exe / metamorphose2.exe / doctest.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2011-01-12  |  43KB  |  1,327 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. __docformat__ = 'reStructuredText en'
  5. __all__ = [
  6.     'register_optionflag',
  7.     'DONT_ACCEPT_TRUE_FOR_1',
  8.     'DONT_ACCEPT_BLANKLINE',
  9.     'NORMALIZE_WHITESPACE',
  10.     'ELLIPSIS',
  11.     'SKIP',
  12.     'IGNORE_EXCEPTION_DETAIL',
  13.     'COMPARISON_FLAGS',
  14.     'REPORT_UDIFF',
  15.     'REPORT_CDIFF',
  16.     'REPORT_NDIFF',
  17.     'REPORT_ONLY_FIRST_FAILURE',
  18.     'REPORTING_FLAGS',
  19.     'Example',
  20.     'DocTest',
  21.     'DocTestParser',
  22.     'DocTestFinder',
  23.     'DocTestRunner',
  24.     'OutputChecker',
  25.     'DocTestFailure',
  26.     'UnexpectedException',
  27.     'DebugRunner',
  28.     'testmod',
  29.     'testfile',
  30.     'run_docstring_examples',
  31.     'Tester',
  32.     'DocTestSuite',
  33.     'DocFileSuite',
  34.     'set_unittest_reportflags',
  35.     'script_from_examples',
  36.     'testsource',
  37.     'debug_src',
  38.     'debug']
  39. import __future__
  40. import sys
  41. import traceback
  42. import inspect
  43. import linecache
  44. import os
  45. import re
  46. import unittest
  47. import difflib
  48. import pdb
  49. import tempfile
  50. import warnings
  51. from StringIO import StringIO
  52. from collections import namedtuple
  53. TestResults = namedtuple('TestResults', 'failed attempted')
  54. OPTIONFLAGS_BY_NAME = { }
  55.  
  56. def register_optionflag(name):
  57.     return OPTIONFLAGS_BY_NAME.setdefault(name, 1 << len(OPTIONFLAGS_BY_NAME))
  58.  
  59. DONT_ACCEPT_TRUE_FOR_1 = register_optionflag('DONT_ACCEPT_TRUE_FOR_1')
  60. DONT_ACCEPT_BLANKLINE = register_optionflag('DONT_ACCEPT_BLANKLINE')
  61. NORMALIZE_WHITESPACE = register_optionflag('NORMALIZE_WHITESPACE')
  62. ELLIPSIS = register_optionflag('ELLIPSIS')
  63. SKIP = register_optionflag('SKIP')
  64. IGNORE_EXCEPTION_DETAIL = register_optionflag('IGNORE_EXCEPTION_DETAIL')
  65. COMPARISON_FLAGS = DONT_ACCEPT_TRUE_FOR_1 | DONT_ACCEPT_BLANKLINE | NORMALIZE_WHITESPACE | ELLIPSIS | SKIP | IGNORE_EXCEPTION_DETAIL
  66. REPORT_UDIFF = register_optionflag('REPORT_UDIFF')
  67. REPORT_CDIFF = register_optionflag('REPORT_CDIFF')
  68. REPORT_NDIFF = register_optionflag('REPORT_NDIFF')
  69. REPORT_ONLY_FIRST_FAILURE = register_optionflag('REPORT_ONLY_FIRST_FAILURE')
  70. REPORTING_FLAGS = REPORT_UDIFF | REPORT_CDIFF | REPORT_NDIFF | REPORT_ONLY_FIRST_FAILURE
  71. BLANKLINE_MARKER = '<BLANKLINE>'
  72. ELLIPSIS_MARKER = '...'
  73.  
  74. def _extract_future_flags(globs):
  75.     flags = 0
  76.     for fname in __future__.all_feature_names:
  77.         feature = globs.get(fname, None)
  78.         if feature is getattr(__future__, fname):
  79.             flags |= feature.compiler_flag
  80.             continue
  81.     
  82.     return flags
  83.  
  84.  
  85. def _normalize_module(module, depth = 2):
  86.     if inspect.ismodule(module):
  87.         return module
  88.     if isinstance(module, (str, unicode)):
  89.         return __import__(module, globals(), locals(), [
  90.             '*'])
  91.     if module is None:
  92.         return sys.modules[sys._getframe(depth).f_globals['__name__']]
  93.     raise TypeError('Expected a module, string, or None')
  94.  
  95.  
  96. def _load_testfile(filename, package, module_relative):
  97.     if module_relative:
  98.         package = _normalize_module(package, 3)
  99.         filename = _module_relative_path(package, filename)
  100.         if hasattr(package, '__loader__'):
  101.             if hasattr(package.__loader__, 'get_data'):
  102.                 file_contents = package.__loader__.get_data(filename)
  103.                 return (file_contents.replace(os.linesep, '\n'), filename)
  104.         
  105.     
  106.     return (open(filename).read(), filename)
  107.  
  108. if not getattr(sys.__stdout__, 'encoding', None):
  109.     pass
  110. _encoding = 'utf-8'
  111.  
  112. def _indent(s, indent = 4):
  113.     if isinstance(s, unicode):
  114.         s = s.encode(_encoding, 'backslashreplace')
  115.     
  116.     return re.sub('(?m)^(?!$)', indent * ' ', s)
  117.  
  118.  
  119. def _exception_traceback(exc_info):
  120.     excout = StringIO()
  121.     (exc_type, exc_val, exc_tb) = exc_info
  122.     traceback.print_exception(exc_type, exc_val, exc_tb, file = excout)
  123.     return excout.getvalue()
  124.  
  125.  
  126. class _SpoofOut(StringIO):
  127.     
  128.     def getvalue(self):
  129.         result = StringIO.getvalue(self)
  130.         if result and not result.endswith('\n'):
  131.             result += '\n'
  132.         
  133.         if hasattr(self, 'softspace'):
  134.             del self.softspace
  135.         
  136.         return result
  137.  
  138.     
  139.     def truncate(self, size = None):
  140.         StringIO.truncate(self, size)
  141.         if hasattr(self, 'softspace'):
  142.             del self.softspace
  143.         
  144.  
  145.  
  146.  
  147. def _ellipsis_match(want, got):
  148.     if ELLIPSIS_MARKER not in want:
  149.         return want == got
  150.     ws = want.split(ELLIPSIS_MARKER)
  151.     startpos = 0
  152.     endpos = len(got)
  153.     w = ws[0]
  154.     if w:
  155.         if got.startswith(w):
  156.             startpos = len(w)
  157.             del ws[0]
  158.         else:
  159.             return False
  160.     got.startswith(w)
  161.     w = ws[-1]
  162.     if w:
  163.         if got.endswith(w):
  164.             endpos -= len(w)
  165.             del ws[-1]
  166.         else:
  167.             return False
  168.     got.endswith(w)
  169.     if startpos > endpos:
  170.         return False
  171.     for w in ws:
  172.         startpos = got.find(w, startpos, endpos)
  173.         if startpos < 0:
  174.             return False
  175.         startpos += len(w)
  176.     
  177.     return True
  178.  
  179.  
  180. def _comment_line(line):
  181.     line = line.rstrip()
  182.     if line:
  183.         return '# ' + line
  184.     return '#'
  185.  
  186.  
  187. class _OutputRedirectingPdb(pdb.Pdb):
  188.     
  189.     def __init__(self, out):
  190.         self._OutputRedirectingPdb__out = out
  191.         self._OutputRedirectingPdb__debugger_used = False
  192.         pdb.Pdb.__init__(self, stdout = out)
  193.  
  194.     
  195.     def set_trace(self, frame = None):
  196.         self._OutputRedirectingPdb__debugger_used = True
  197.         if frame is None:
  198.             frame = sys._getframe().f_back
  199.         
  200.         pdb.Pdb.set_trace(self, frame)
  201.  
  202.     
  203.     def set_continue(self):
  204.         if self._OutputRedirectingPdb__debugger_used:
  205.             pdb.Pdb.set_continue(self)
  206.         
  207.  
  208.     
  209.     def trace_dispatch(self, *args):
  210.         save_stdout = sys.stdout
  211.         sys.stdout = self._OutputRedirectingPdb__out
  212.         
  213.         try:
  214.             return pdb.Pdb.trace_dispatch(self, *args)
  215.         finally:
  216.             sys.stdout = save_stdout
  217.  
  218.  
  219.  
  220.  
  221. def _module_relative_path(module, path):
  222.     if not inspect.ismodule(module):
  223.         raise TypeError, 'Expected a module: %r' % module
  224.     inspect.ismodule(module)
  225.     if path.startswith('/'):
  226.         raise ValueError, 'Module-relative files may not have absolute paths'
  227.     path.startswith('/')
  228.     if hasattr(module, '__file__'):
  229.         basedir = os.path.split(module.__file__)[0]
  230.     elif module.__name__ == '__main__':
  231.         if len(sys.argv) > 0 and sys.argv[0] != '':
  232.             basedir = os.path.split(sys.argv[0])[0]
  233.         else:
  234.             basedir = os.curdir
  235.     else:
  236.         raise ValueError("Can't resolve paths relative to the module " + module + ' (it has no __file__)')
  237.     return hasattr(module, '__file__').path.join(basedir, *path.split('/'))
  238.  
  239.  
  240. class Example:
  241.     
  242.     def __init__(self, source, want, exc_msg = None, lineno = 0, indent = 0, options = None):
  243.         if not source.endswith('\n'):
  244.             source += '\n'
  245.         
  246.         if want and not want.endswith('\n'):
  247.             want += '\n'
  248.         
  249.         if exc_msg is not None and not exc_msg.endswith('\n'):
  250.             exc_msg += '\n'
  251.         
  252.         self.source = source
  253.         self.want = want
  254.         self.lineno = lineno
  255.         self.indent = indent
  256.         if options is None:
  257.             options = { }
  258.         
  259.         self.options = options
  260.         self.exc_msg = exc_msg
  261.  
  262.  
  263.  
  264. class DocTest:
  265.     
  266.     def __init__(self, examples, globs, name, filename, lineno, docstring):
  267.         self.examples = examples
  268.         self.docstring = docstring
  269.         self.globs = globs.copy()
  270.         self.name = name
  271.         self.filename = filename
  272.         self.lineno = lineno
  273.  
  274.     
  275.     def __repr__(self):
  276.         if len(self.examples) == 0:
  277.             examples = 'no examples'
  278.         elif len(self.examples) == 1:
  279.             examples = '1 example'
  280.         else:
  281.             examples = '%d examples' % len(self.examples)
  282.         return '<DocTest %s from %s:%s (%s)>' % (self.name, self.filename, self.lineno, examples)
  283.  
  284.     
  285.     def __cmp__(self, other):
  286.         if not isinstance(other, DocTest):
  287.             return -1
  288.         return cmp((self.name, self.filename, self.lineno, id(self)), (other.name, other.filename, other.lineno, id(other)))
  289.  
  290.  
  291.  
  292. class DocTestParser:
  293.     _EXAMPLE_RE = re.compile('\n        # Source consists of a PS1 line followed by zero or more PS2 lines.\n        (?P<source>\n            (?:^(?P<indent> [ ]*) >>>    .*)    # PS1 line\n            (?:\\n           [ ]*  \\.\\.\\. .*)*)  # PS2 lines\n        \\n?\n        # Want consists of any non-blank lines that do not start with PS1.\n        (?P<want> (?:(?![ ]*$)    # Not a blank line\n                     (?![ ]*>>>)  # Not a line starting with PS1\n                     .*$\\n?       # But any other line\n                  )*)\n        ', re.MULTILINE | re.VERBOSE)
  294.     _EXCEPTION_RE = re.compile("\n        # Grab the traceback header.  Different versions of Python have\n        # said different things on the first traceback line.\n        ^(?P<hdr> Traceback\\ \\(\n            (?: most\\ recent\\ call\\ last\n            |   innermost\\ last\n            ) \\) :\n        )\n        \\s* $                # toss trailing whitespace on the header.\n        (?P<stack> .*?)      # don't blink: absorb stuff until...\n        ^ (?P<msg> \\w+ .*)   #     a line *starts* with alphanum.\n        ", re.VERBOSE | re.MULTILINE | re.DOTALL)
  295.     _IS_BLANK_OR_COMMENT = re.compile('^[ ]*(#.*)?$').match
  296.     
  297.     def parse(self, string, name = '<string>'):
  298.         string = string.expandtabs()
  299.         min_indent = self._min_indent(string)
  300.         output = []
  301.         (charno, lineno) = (0, 0)
  302.         for m in self._EXAMPLE_RE.finditer(string):
  303.             output.append(string[charno:m.start()])
  304.             lineno += string.count('\n', charno, m.start())
  305.             (source, options, want, exc_msg) = self._parse_example(m, name, lineno)
  306.             if not self._IS_BLANK_OR_COMMENT(source):
  307.                 output.append(Example(source, want, exc_msg, lineno = lineno, indent = min_indent + len(m.group('indent')), options = options))
  308.             
  309.             lineno += string.count('\n', m.start(), m.end())
  310.             charno = m.end()
  311.         
  312.         output.append(string[charno:])
  313.         return output
  314.  
  315.     
  316.     def get_doctest(self, string, globs, name, filename, lineno):
  317.         return DocTest(self.get_examples(string, name), globs, name, filename, lineno, string)
  318.  
  319.     
  320.     def get_examples(self, string, name = '<string>'):
  321.         return _[1]
  322.  
  323.     
  324.     def _parse_example(self, m, name, lineno):
  325.         indent = len(m.group('indent'))
  326.         source_lines = m.group('source').split('\n')
  327.         self._check_prompt_blank(source_lines, indent, name, lineno)
  328.         self._check_prefix(source_lines[1:], ' ' * indent + '.', name, lineno)
  329.         source = []([ sl[indent + 4:] for sl in source_lines ])
  330.         want = m.group('want')
  331.         want_lines = want.split('\n')
  332.         self._check_prefix(want_lines, ' ' * indent, name, lineno + len(source_lines))
  333.         want = []([ wl[indent:] for wl in want_lines ])
  334.         m = self._EXCEPTION_RE.match(want)
  335.         options = self._find_options(source, name, lineno)
  336.         return (source, options, want, exc_msg)
  337.  
  338.     _OPTION_DIRECTIVE_RE = re.compile('#\\s*doctest:\\s*([^\\n\\\'"]*)$', re.MULTILINE)
  339.     
  340.     def _find_options(self, source, name, lineno):
  341.         options = { }
  342.         for m in self._OPTION_DIRECTIVE_RE.finditer(source):
  343.             option_strings = m.group(1).replace(',', ' ').split()
  344.             for option in option_strings:
  345.                 if option[0] not in '+-' or option[1:] not in OPTIONFLAGS_BY_NAME:
  346.                     raise ValueError('line %r of the doctest for %s has an invalid option: %r' % (lineno + 1, name, option))
  347.                 option[1:] not in OPTIONFLAGS_BY_NAME
  348.                 flag = OPTIONFLAGS_BY_NAME[option[1:]]
  349.                 options[flag] = option[0] == '+'
  350.             
  351.         
  352.         if options and self._IS_BLANK_OR_COMMENT(source):
  353.             raise ValueError('line %r of the doctest for %s has an option directive on a line with no example: %r' % (lineno, name, source))
  354.         self._IS_BLANK_OR_COMMENT(source)
  355.         return options
  356.  
  357.     _INDENT_RE = re.compile('^([ ]*)(?=\\S)', re.MULTILINE)
  358.     
  359.     def _min_indent(self, s):
  360.         indents = [ len(indent) for indent in self._INDENT_RE.findall(s) ]
  361.         if len(indents) > 0:
  362.             return min(indents)
  363.         return 0
  364.  
  365.     
  366.     def _check_prompt_blank(self, lines, indent, name, lineno):
  367.         for i, line in enumerate(lines):
  368.             if len(line) >= indent + 4 and line[indent + 3] != ' ':
  369.                 raise ValueError('line %r of the docstring for %s lacks blank after %s: %r' % (lineno + i + 1, name, line[indent:indent + 3], line))
  370.             line[indent + 3] != ' '
  371.         
  372.  
  373.     
  374.     def _check_prefix(self, lines, prefix, name, lineno):
  375.         for i, line in enumerate(lines):
  376.             if line and not line.startswith(prefix):
  377.                 raise ValueError('line %r of the docstring for %s has inconsistent leading whitespace: %r' % (lineno + i + 1, name, line))
  378.             not line.startswith(prefix)
  379.         
  380.  
  381.  
  382.  
  383. class DocTestFinder:
  384.     
  385.     def __init__(self, verbose = False, parser = DocTestParser(), recurse = True, exclude_empty = True):
  386.         self._parser = parser
  387.         self._verbose = verbose
  388.         self._recurse = recurse
  389.         self._exclude_empty = exclude_empty
  390.  
  391.     
  392.     def find(self, obj, name = None, module = None, globs = None, extraglobs = None):
  393.         if name is None:
  394.             name = getattr(obj, '__name__', None)
  395.             if name is None:
  396.                 raise ValueError("DocTestFinder.find: name must be given when obj.__name__ doesn't exist: %r" % (type(obj),))
  397.             name is None
  398.         
  399.         if module is False:
  400.             module = None
  401.         elif module is None:
  402.             module = inspect.getmodule(obj)
  403.         
  404.         
  405.         try:
  406.             if not inspect.getsourcefile(obj):
  407.                 pass
  408.             file = inspect.getfile(obj)
  409.             if module is not None:
  410.                 source_lines = linecache.getlines(file, module.__dict__)
  411.             else:
  412.                 source_lines = linecache.getlines(file)
  413.             if not source_lines:
  414.                 source_lines = None
  415.         except TypeError:
  416.             source_lines = None
  417.  
  418.         if globs is None:
  419.             if module is None:
  420.                 globs = { }
  421.             else:
  422.                 globs = module.__dict__.copy()
  423.         else:
  424.             globs = globs.copy()
  425.         if extraglobs is not None:
  426.             globs.update(extraglobs)
  427.         
  428.         if '__name__' not in globs:
  429.             globs['__name__'] = '__main__'
  430.         
  431.         tests = []
  432.         self._find(tests, obj, name, module, source_lines, globs, { })
  433.         tests.sort()
  434.         return tests
  435.  
  436.     
  437.     def _from_module(self, module, object):
  438.         if module is None:
  439.             return True
  440.         if inspect.getmodule(object) is not None:
  441.             return module is inspect.getmodule(object)
  442.         if inspect.isfunction(object):
  443.             return module.__dict__ is object.func_globals
  444.         if inspect.isclass(object):
  445.             return module.__name__ == object.__module__
  446.         if hasattr(object, '__module__'):
  447.             return module.__name__ == object.__module__
  448.         if isinstance(object, property):
  449.             return True
  450.         raise ValueError('object must be a class or function')
  451.  
  452.     
  453.     def _find(self, tests, obj, name, module, source_lines, globs, seen):
  454.         if self._verbose:
  455.             print 'Finding tests in %s' % name
  456.         
  457.         if id(obj) in seen:
  458.             return None
  459.         seen[id(obj)] = 1
  460.         test = self._get_test(obj, name, module, globs, source_lines)
  461.         if test is not None:
  462.             tests.append(test)
  463.         
  464.         if inspect.ismodule(obj) and self._recurse:
  465.             for valname, val in obj.__dict__.items():
  466.                 valname = '%s.%s' % (name, valname)
  467.                 if (inspect.isfunction(val) or inspect.isclass(val)) and self._from_module(module, val):
  468.                     self._find(tests, val, valname, module, source_lines, globs, seen)
  469.                     continue
  470.             
  471.         
  472.         if inspect.ismodule(obj) and self._recurse:
  473.             for valname, val in getattr(obj, '__test__', { }).items():
  474.                 if not isinstance(valname, basestring):
  475.                     raise ValueError('DocTestFinder.find: __test__ keys must be strings: %r' % (type(valname),))
  476.                 isinstance(valname, basestring)
  477.                 if not inspect.isfunction(val) and inspect.isclass(val) and inspect.ismethod(val) and inspect.ismodule(val) or isinstance(val, basestring):
  478.                     raise ValueError('DocTestFinder.find: __test__ values must be strings, functions, methods, classes, or modules: %r' % (type(val),))
  479.                 isinstance(val, basestring)
  480.                 valname = '%s.__test__.%s' % (name, valname)
  481.                 self._find(tests, val, valname, module, source_lines, globs, seen)
  482.             
  483.         
  484.         if inspect.isclass(obj) and self._recurse:
  485.             for valname, val in obj.__dict__.items():
  486.                 if isinstance(val, staticmethod):
  487.                     val = getattr(obj, valname)
  488.                 
  489.                 if isinstance(val, classmethod):
  490.                     val = getattr(obj, valname).im_func
  491.                 
  492.                 if (inspect.isfunction(val) and inspect.isclass(val) or isinstance(val, property)) and self._from_module(module, val):
  493.                     valname = '%s.%s' % (name, valname)
  494.                     self._find(tests, val, valname, module, source_lines, globs, seen)
  495.                     continue
  496.             
  497.         
  498.  
  499.     
  500.     def _get_test(self, obj, name, module, globs, source_lines):
  501.         if isinstance(obj, basestring):
  502.             docstring = obj
  503.         else:
  504.             
  505.             try:
  506.                 if obj.__doc__ is None:
  507.                     docstring = ''
  508.                 else:
  509.                     docstring = obj.__doc__
  510.                     if not isinstance(docstring, basestring):
  511.                         docstring = str(docstring)
  512.             except (TypeError, AttributeError):
  513.                 docstring = ''
  514.             
  515.  
  516.         lineno = self._find_lineno(obj, source_lines)
  517.         if self._exclude_empty and not docstring:
  518.             return None
  519.         if module is None:
  520.             filename = None
  521.         else:
  522.             filename = getattr(module, '__file__', module.__name__)
  523.             if filename[-4:] in ('.pyc', '.pyo'):
  524.                 filename = filename[:-1]
  525.             
  526.         return self._parser.get_doctest(docstring, globs, name, filename, lineno)
  527.  
  528.     
  529.     def _find_lineno(self, obj, source_lines):
  530.         lineno = None
  531.         if inspect.ismodule(obj):
  532.             lineno = 0
  533.         
  534.         if inspect.isclass(obj):
  535.             if source_lines is None:
  536.                 return None
  537.             pat = re.compile('^\\s*class\\s*%s\\b' % getattr(obj, '__name__', '-'))
  538.             for i, line in enumerate(source_lines):
  539.                 if pat.match(line):
  540.                     lineno = i
  541.                     break
  542.                     continue
  543.                 source_lines is None
  544.             
  545.         
  546.         if inspect.ismethod(obj):
  547.             obj = obj.im_func
  548.         
  549.         if inspect.isfunction(obj):
  550.             obj = obj.func_code
  551.         
  552.         if inspect.istraceback(obj):
  553.             obj = obj.tb_frame
  554.         
  555.         if inspect.isframe(obj):
  556.             obj = obj.f_code
  557.         
  558.         if inspect.iscode(obj):
  559.             lineno = getattr(obj, 'co_firstlineno', None) - 1
  560.         
  561.  
  562.  
  563.  
  564. class DocTestRunner:
  565.     DIVIDER = '*' * 70
  566.     
  567.     def __init__(self, checker = None, verbose = None, optionflags = 0):
  568.         if not checker:
  569.             pass
  570.         self._checker = OutputChecker()
  571.         if verbose is None:
  572.             verbose = '-v' in sys.argv
  573.         
  574.         self._verbose = verbose
  575.         self.optionflags = optionflags
  576.         self.original_optionflags = optionflags
  577.         self.tries = 0
  578.         self.failures = 0
  579.         self._name2ft = { }
  580.         self._fakeout = _SpoofOut()
  581.  
  582.     
  583.     def report_start(self, out, test, example):
  584.         if self._verbose:
  585.             if example.want:
  586.                 out('Trying:\n' + _indent(example.source) + 'Expecting:\n' + _indent(example.want))
  587.             else:
  588.                 out('Trying:\n' + _indent(example.source) + 'Expecting nothing\n')
  589.         
  590.  
  591.     
  592.     def report_success(self, out, test, example, got):
  593.         if self._verbose:
  594.             out('ok\n')
  595.         
  596.  
  597.     
  598.     def report_failure(self, out, test, example, got):
  599.         out(self._failure_header(test, example) + self._checker.output_difference(example, got, self.optionflags))
  600.  
  601.     
  602.     def report_unexpected_exception(self, out, test, example, exc_info):
  603.         out(self._failure_header(test, example) + 'Exception raised:\n' + _indent(_exception_traceback(exc_info)))
  604.  
  605.     
  606.     def _failure_header(self, test, example):
  607.         out = [
  608.             self.DIVIDER]
  609.         if test.filename:
  610.             if test.lineno is not None and example.lineno is not None:
  611.                 lineno = test.lineno + example.lineno + 1
  612.             else:
  613.                 lineno = '?'
  614.             out.append('File "%s", line %s, in %s' % (test.filename, lineno, test.name))
  615.         else:
  616.             out.append('Line %s, in %s' % (example.lineno + 1, test.name))
  617.         out.append('Failed example:')
  618.         source = example.source
  619.         out.append(_indent(source))
  620.         return '\n'.join(out)
  621.  
  622.     
  623.     def __run(self, test, compileflags, out):
  624.         failures = tries = 0
  625.         original_optionflags = self.optionflags
  626.         (SUCCESS, FAILURE, BOOM) = range(3)
  627.         check = self._checker.check_output
  628.         for examplenum, example in enumerate(test.examples):
  629.             if self.optionflags & REPORT_ONLY_FIRST_FAILURE:
  630.                 pass
  631.             quiet = failures > 0
  632.             self.optionflags = original_optionflags
  633.             if example.options:
  634.                 for optionflag, val in example.options.items():
  635.                     if val:
  636.                         self.optionflags |= optionflag
  637.                         continue
  638.                     self
  639.                     self.optionflags &= ~optionflag
  640.                 
  641.             
  642.             if self.optionflags & SKIP:
  643.                 continue
  644.             
  645.             tries += 1
  646.             if not quiet:
  647.                 self.report_start(out, test, example)
  648.             
  649.             filename = '<doctest %s[%d]>' % (test.name, examplenum)
  650.             
  651.             try:
  652.                 exec compile(example.source, filename, 'single', compileflags, 1) in test.globs
  653.                 self.debugger.set_continue()
  654.                 exception = None
  655.             except KeyboardInterrupt:
  656.                 raise 
  657.             except:
  658.                 exception = sys.exc_info()
  659.                 self.debugger.set_continue()
  660.  
  661.             got = self._fakeout.getvalue()
  662.             self._fakeout.truncate(0)
  663.             outcome = FAILURE
  664.             if exception is None:
  665.                 if check(example.want, got, self.optionflags):
  666.                     outcome = SUCCESS
  667.                 
  668.             else:
  669.                 exc_info = sys.exc_info()
  670.                 exc_msg = traceback.format_exception_only(*exc_info[:2])[-1]
  671.                 if not quiet:
  672.                     got += _exception_traceback(exc_info)
  673.                 
  674.                 if example.exc_msg is None:
  675.                     outcome = BOOM
  676.                 elif check(example.exc_msg, exc_msg, self.optionflags):
  677.                     outcome = SUCCESS
  678.                 elif self.optionflags & IGNORE_EXCEPTION_DETAIL:
  679.                     m1 = re.match('[^:]*:', example.exc_msg)
  680.                     m2 = re.match('[^:]*:', exc_msg)
  681.                     if m1 and m2 and check(m1.group(0), m2.group(0), self.optionflags):
  682.                         outcome = SUCCESS
  683.                     
  684.                 
  685.             if outcome is SUCCESS:
  686.                 if not quiet:
  687.                     self.report_success(out, test, example, got)
  688.                 
  689.             quiet
  690.             if outcome is FAILURE:
  691.                 if not quiet:
  692.                     self.report_failure(out, test, example, got)
  693.                 
  694.                 failures += 1
  695.                 continue
  696.             if outcome is BOOM:
  697.                 if not quiet:
  698.                     self.report_unexpected_exception(out, test, example, exc_info)
  699.                 
  700.                 failures += 1
  701.                 continue
  702.         
  703.         self.optionflags = original_optionflags
  704.         self._DocTestRunner__record_outcome(test, failures, tries)
  705.         return TestResults(failures, tries)
  706.  
  707.     
  708.     def __record_outcome(self, test, f, t):
  709.         (f2, t2) = self._name2ft.get(test.name, (0, 0))
  710.         self._name2ft[test.name] = (f + f2, t + t2)
  711.         self.failures += f
  712.         self.tries += t
  713.  
  714.     __LINECACHE_FILENAME_RE = re.compile('<doctest (?P<name>[\\w\\.]+)\\[(?P<examplenum>\\d+)\\]>$')
  715.     
  716.     def __patched_linecache_getlines(self, filename, module_globals = None):
  717.         m = self._DocTestRunner__LINECACHE_FILENAME_RE.match(filename)
  718.         if m and m.group('name') == self.test.name:
  719.             example = self.test.examples[int(m.group('examplenum'))]
  720.             return example.source.splitlines(True)
  721.         return self.save_linecache_getlines(filename, module_globals)
  722.  
  723.     
  724.     def run(self, test, compileflags = None, out = None, clear_globs = True):
  725.         self.test = test
  726.         if compileflags is None:
  727.             compileflags = _extract_future_flags(test.globs)
  728.         
  729.         save_stdout = sys.stdout
  730.         if out is None:
  731.             out = save_stdout.write
  732.         
  733.         sys.stdout = self._fakeout
  734.         save_set_trace = pdb.set_trace
  735.         self.debugger = _OutputRedirectingPdb(save_stdout)
  736.         self.debugger.reset()
  737.         pdb.set_trace = self.debugger.set_trace
  738.         self.save_linecache_getlines = linecache.getlines
  739.         linecache.getlines = self._DocTestRunner__patched_linecache_getlines
  740.         
  741.         try:
  742.             return self._DocTestRunner__run(test, compileflags, out)
  743.         finally:
  744.             sys.stdout = save_stdout
  745.             pdb.set_trace = save_set_trace
  746.             linecache.getlines = self.save_linecache_getlines
  747.             if clear_globs:
  748.                 test.globs.clear()
  749.             
  750.  
  751.  
  752.     
  753.     def summarize(self, verbose = None):
  754.         if verbose is None:
  755.             verbose = self._verbose
  756.         
  757.         notests = []
  758.         passed = []
  759.         failed = []
  760.         totalt = totalf = 0
  761.         for x in self._name2ft.items():
  762.             (f, t) = (name,)
  763.             totalt += t
  764.             totalf += f
  765.             if t == 0:
  766.                 notests.append(name)
  767.                 continue
  768.             x
  769.             if f == 0:
  770.                 passed.append((name, t))
  771.                 continue
  772.             failed.append(x)
  773.         
  774.         if verbose:
  775.             if notests:
  776.                 print len(notests), 'items had no tests:'
  777.                 notests.sort()
  778.                 for thing in notests:
  779.                     print '   ', thing
  780.                 
  781.             
  782.             if passed:
  783.                 print len(passed), 'items passed all tests:'
  784.                 passed.sort()
  785.                 for thing, count in passed:
  786.                     print ' %3d tests in %s' % (count, thing)
  787.                 
  788.             
  789.         
  790.         if failed:
  791.             print self.DIVIDER
  792.             print len(failed), 'items had failures:'
  793.             failed.sort()
  794.             for f, t in failed:
  795.                 print ' %3d of %3d in %s' % (f, t, thing)
  796.             
  797.         
  798.         if verbose:
  799.             print totalt, 'tests in', len(self._name2ft), 'items.'
  800.             print totalt - totalf, 'passed and', totalf, 'failed.'
  801.         
  802.         if totalf:
  803.             print '***Test Failed***', totalf, 'failures.'
  804.         elif verbose:
  805.             print 'Test passed.'
  806.         
  807.         return TestResults(totalf, totalt)
  808.  
  809.     
  810.     def merge(self, other):
  811.         d = self._name2ft
  812.         for f, t in other._name2ft.items():
  813.             if name in d:
  814.                 (f2, t2) = d[name]
  815.                 f = f + f2
  816.                 t = t + t2
  817.             
  818.             d[name] = (f, t)
  819.         
  820.  
  821.  
  822.  
  823. class OutputChecker:
  824.     
  825.     def check_output(self, want, got, optionflags):
  826.         if got == want:
  827.             return True
  828.         return False
  829.  
  830.     
  831.     def _do_a_fancy_diff(self, want, got, optionflags):
  832.         if not optionflags & (REPORT_UDIFF | REPORT_CDIFF | REPORT_NDIFF):
  833.             return False
  834.         return optionflags & REPORT_NDIFF if optionflags & REPORT_NDIFF else got.count('\n') > 2
  835.  
  836.     
  837.     def output_difference(self, example, got, optionflags):
  838.         want = example.want
  839.         if not optionflags & DONT_ACCEPT_BLANKLINE:
  840.             got = re.sub('(?m)^[ ]*(?=\n)', BLANKLINE_MARKER, got)
  841.         
  842.         if self._do_a_fancy_diff(want, got, optionflags):
  843.             want_lines = want.splitlines(True)
  844.             got_lines = got.splitlines(True)
  845.             if optionflags & REPORT_UDIFF:
  846.                 diff = difflib.unified_diff(want_lines, got_lines, n = 2)
  847.                 diff = list(diff)[2:]
  848.                 kind = 'unified diff with -expected +actual'
  849.             elif optionflags & REPORT_CDIFF:
  850.                 diff = difflib.context_diff(want_lines, got_lines, n = 2)
  851.                 diff = list(diff)[2:]
  852.                 kind = 'context diff with expected followed by actual'
  853.             elif optionflags & REPORT_NDIFF:
  854.                 engine = difflib.Differ(charjunk = difflib.IS_CHARACTER_JUNK)
  855.                 diff = list(engine.compare(want_lines, got_lines))
  856.                 kind = 'ndiff with -expected +actual'
  857.             
  858.             diff = [ line.rstrip() + '\n' for line in diff ]
  859.             return 'Differences (%s):\n' % kind + _indent(''.join(diff))
  860.         if want and got:
  861.             return 'Expected:\n%sGot:\n%s' % (_indent(want), _indent(got))
  862.         if want:
  863.             return 'Expected:\n%sGot nothing\n' % _indent(want)
  864.         if got:
  865.             return 'Expected nothing\nGot:\n%s' % _indent(got)
  866.         return 'Expected nothing\nGot nothing\n'
  867.  
  868.  
  869.  
  870. class DocTestFailure(Exception):
  871.     
  872.     def __init__(self, test, example, got):
  873.         self.test = test
  874.         self.example = example
  875.         self.got = got
  876.  
  877.     
  878.     def __str__(self):
  879.         return str(self.test)
  880.  
  881.  
  882.  
  883. class UnexpectedException(Exception):
  884.     
  885.     def __init__(self, test, example, exc_info):
  886.         self.test = test
  887.         self.example = example
  888.         self.exc_info = exc_info
  889.  
  890.     
  891.     def __str__(self):
  892.         return str(self.test)
  893.  
  894.  
  895.  
  896. class DebugRunner(DocTestRunner):
  897.     
  898.     def run(self, test, compileflags = None, out = None, clear_globs = True):
  899.         r = DocTestRunner.run(self, test, compileflags, out, False)
  900.         if clear_globs:
  901.             test.globs.clear()
  902.         
  903.         return r
  904.  
  905.     
  906.     def report_unexpected_exception(self, out, test, example, exc_info):
  907.         raise UnexpectedException(test, example, exc_info)
  908.  
  909.     
  910.     def report_failure(self, out, test, example, got):
  911.         raise DocTestFailure(test, example, got)
  912.  
  913.  
  914. master = None
  915.  
  916. def testmod(m = None, name = None, globs = None, verbose = None, report = True, optionflags = 0, extraglobs = None, raise_on_error = False, exclude_empty = False):
  917.     global master
  918.     if m is None:
  919.         m = sys.modules.get('__main__')
  920.     
  921.     if not inspect.ismodule(m):
  922.         raise TypeError('testmod: module required; %r' % (m,))
  923.     inspect.ismodule(m)
  924.     if name is None:
  925.         name = m.__name__
  926.     
  927.     finder = DocTestFinder(exclude_empty = exclude_empty)
  928.     if raise_on_error:
  929.         runner = DebugRunner(verbose = verbose, optionflags = optionflags)
  930.     else:
  931.         runner = DocTestRunner(verbose = verbose, optionflags = optionflags)
  932.     for test in finder.find(m, name, globs = globs, extraglobs = extraglobs):
  933.         runner.run(test)
  934.     
  935.     if report:
  936.         runner.summarize()
  937.     
  938.     if master is None:
  939.         master = runner
  940.     else:
  941.         master.merge(runner)
  942.     return TestResults(runner.failures, runner.tries)
  943.  
  944.  
  945. def testfile(filename, module_relative = True, name = None, package = None, globs = None, verbose = None, report = True, optionflags = 0, extraglobs = None, raise_on_error = False, parser = DocTestParser(), encoding = None):
  946.     global master
  947.     if package and not module_relative:
  948.         raise ValueError('Package may only be specified for module-relative paths.')
  949.     not module_relative
  950.     (text, filename) = _load_testfile(filename, package, module_relative)
  951.     if name is None:
  952.         name = os.path.basename(filename)
  953.     
  954.     if globs is None:
  955.         globs = { }
  956.     else:
  957.         globs = globs.copy()
  958.     if extraglobs is not None:
  959.         globs.update(extraglobs)
  960.     
  961.     if '__name__' not in globs:
  962.         globs['__name__'] = '__main__'
  963.     
  964.     if raise_on_error:
  965.         runner = DebugRunner(verbose = verbose, optionflags = optionflags)
  966.     else:
  967.         runner = DocTestRunner(verbose = verbose, optionflags = optionflags)
  968.     if encoding is not None:
  969.         text = text.decode(encoding)
  970.     
  971.     test = parser.get_doctest(text, globs, name, filename, 0)
  972.     runner.run(test)
  973.     if report:
  974.         runner.summarize()
  975.     
  976.     if master is None:
  977.         master = runner
  978.     else:
  979.         master.merge(runner)
  980.     return TestResults(runner.failures, runner.tries)
  981.  
  982.  
  983. def run_docstring_examples(f, globs, verbose = False, name = 'NoName', compileflags = None, optionflags = 0):
  984.     finder = DocTestFinder(verbose = verbose, recurse = False)
  985.     runner = DocTestRunner(verbose = verbose, optionflags = optionflags)
  986.     for test in finder.find(f, name, globs = globs):
  987.         runner.run(test, compileflags = compileflags)
  988.     
  989.  
  990.  
  991. class Tester:
  992.     
  993.     def __init__(self, mod = None, globs = None, verbose = None, optionflags = 0):
  994.         warnings.warn('class Tester is deprecated; use class doctest.DocTestRunner instead', DeprecationWarning, stacklevel = 2)
  995.         if mod is None and globs is None:
  996.             raise TypeError('Tester.__init__: must specify mod or globs')
  997.         globs is None
  998.         if mod is not None and not inspect.ismodule(mod):
  999.             raise TypeError('Tester.__init__: mod must be a module; %r' % (mod,))
  1000.         not inspect.ismodule(mod)
  1001.         if globs is None:
  1002.             globs = mod.__dict__
  1003.         
  1004.         self.globs = globs
  1005.         self.verbose = verbose
  1006.         self.optionflags = optionflags
  1007.         self.testfinder = DocTestFinder()
  1008.         self.testrunner = DocTestRunner(verbose = verbose, optionflags = optionflags)
  1009.  
  1010.     
  1011.     def runstring(self, s, name):
  1012.         test = DocTestParser().get_doctest(s, self.globs, name, None, None)
  1013.         if self.verbose:
  1014.             print 'Running string', name
  1015.         
  1016.         (f, t) = self.testrunner.run(test)
  1017.         if self.verbose:
  1018.             print f, 'of', t, 'examples failed in string', name
  1019.         
  1020.         return TestResults(f, t)
  1021.  
  1022.     
  1023.     def rundoc(self, object, name = None, module = None):
  1024.         f = t = 0
  1025.         tests = self.testfinder.find(object, name, module = module, globs = self.globs)
  1026.         for test in tests:
  1027.             (f2, t2) = self.testrunner.run(test)
  1028.             f = f + f2
  1029.             t = t + t2
  1030.         
  1031.         return TestResults(f, t)
  1032.  
  1033.     
  1034.     def rundict(self, d, name, module = None):
  1035.         import types as types
  1036.         m = types.ModuleType(name)
  1037.         m.__dict__.update(d)
  1038.         if module is None:
  1039.             module = False
  1040.         
  1041.         return self.rundoc(m, name, module)
  1042.  
  1043.     
  1044.     def run__test__(self, d, name):
  1045.         import types
  1046.         m = types.ModuleType(name)
  1047.         m.__test__ = d
  1048.         return self.rundoc(m, name)
  1049.  
  1050.     
  1051.     def summarize(self, verbose = None):
  1052.         return self.testrunner.summarize(verbose)
  1053.  
  1054.     
  1055.     def merge(self, other):
  1056.         self.testrunner.merge(other.testrunner)
  1057.  
  1058.  
  1059. _unittest_reportflags = 0
  1060.  
  1061. def set_unittest_reportflags(flags):
  1062.     global _unittest_reportflags
  1063.     if flags & REPORTING_FLAGS != flags:
  1064.         raise ValueError('Only reporting flags allowed', flags)
  1065.     flags & REPORTING_FLAGS != flags
  1066.     old = _unittest_reportflags
  1067.     _unittest_reportflags = flags
  1068.     return old
  1069.  
  1070.  
  1071. class DocTestCase(unittest.TestCase):
  1072.     
  1073.     def __init__(self, test, optionflags = 0, setUp = None, tearDown = None, checker = None):
  1074.         unittest.TestCase.__init__(self)
  1075.         self._dt_optionflags = optionflags
  1076.         self._dt_checker = checker
  1077.         self._dt_test = test
  1078.         self._dt_setUp = setUp
  1079.         self._dt_tearDown = tearDown
  1080.  
  1081.     
  1082.     def setUp(self):
  1083.         test = self._dt_test
  1084.         if self._dt_setUp is not None:
  1085.             self._dt_setUp(test)
  1086.         
  1087.  
  1088.     
  1089.     def tearDown(self):
  1090.         test = self._dt_test
  1091.         if self._dt_tearDown is not None:
  1092.             self._dt_tearDown(test)
  1093.         
  1094.         test.globs.clear()
  1095.  
  1096.     
  1097.     def runTest(self):
  1098.         test = self._dt_test
  1099.         old = sys.stdout
  1100.         new = StringIO()
  1101.         optionflags = self._dt_optionflags
  1102.         if not optionflags & REPORTING_FLAGS:
  1103.             optionflags |= _unittest_reportflags
  1104.         
  1105.         runner = DocTestRunner(optionflags = optionflags, checker = self._dt_checker, verbose = False)
  1106.         
  1107.         try:
  1108.             runner.DIVIDER = '-' * 70
  1109.             (failures, tries) = runner.run(test, out = new.write, clear_globs = False)
  1110.         finally:
  1111.             sys.stdout = old
  1112.  
  1113.         if failures:
  1114.             raise self.failureException(self.format_failure(new.getvalue()))
  1115.         failures
  1116.  
  1117.     
  1118.     def format_failure(self, err):
  1119.         test = self._dt_test
  1120.         if test.lineno is None:
  1121.             lineno = 'unknown line number'
  1122.         else:
  1123.             lineno = '%s' % test.lineno
  1124.         lname = '.'.join(test.name.split('.')[-1:])
  1125.         return 'Failed doctest test for %s\n  File "%s", line %s, in %s\n\n%s' % (test.name, test.filename, lineno, lname, err)
  1126.  
  1127.     
  1128.     def debug(self):
  1129.         self.setUp()
  1130.         runner = DebugRunner(optionflags = self._dt_optionflags, checker = self._dt_checker, verbose = False)
  1131.         runner.run(self._dt_test, clear_globs = False)
  1132.         self.tearDown()
  1133.  
  1134.     
  1135.     def id(self):
  1136.         return self._dt_test.name
  1137.  
  1138.     
  1139.     def __repr__(self):
  1140.         name = self._dt_test.name.split('.')
  1141.         return '%s (%s)' % (name[-1], '.'.join(name[:-1]))
  1142.  
  1143.     __str__ = __repr__
  1144.     
  1145.     def shortDescription(self):
  1146.         return 'Doctest: ' + self._dt_test.name
  1147.  
  1148.  
  1149.  
  1150. def DocTestSuite(module = None, globs = None, extraglobs = None, test_finder = None, **options):
  1151.     if test_finder is None:
  1152.         test_finder = DocTestFinder()
  1153.     
  1154.     module = _normalize_module(module)
  1155.     tests = test_finder.find(module, globs = globs, extraglobs = extraglobs)
  1156.     if not tests:
  1157.         raise ValueError(module, 'has no tests')
  1158.     tests
  1159.     tests.sort()
  1160.     suite = unittest.TestSuite()
  1161.     for test in tests:
  1162.         if len(test.examples) == 0:
  1163.             continue
  1164.         
  1165.         if not test.filename:
  1166.             filename = module.__file__
  1167.             if filename[-4:] in ('.pyc', '.pyo'):
  1168.                 filename = filename[:-1]
  1169.             
  1170.             test.filename = filename
  1171.         
  1172.         suite.addTest(DocTestCase(test, **options))
  1173.     
  1174.     return suite
  1175.  
  1176.  
  1177. class DocFileCase(DocTestCase):
  1178.     
  1179.     def id(self):
  1180.         return '_'.join(self._dt_test.name.split('.'))
  1181.  
  1182.     
  1183.     def __repr__(self):
  1184.         return self._dt_test.filename
  1185.  
  1186.     __str__ = __repr__
  1187.     
  1188.     def format_failure(self, err):
  1189.         return 'Failed doctest test for %s\n  File "%s", line 0\n\n%s' % (self._dt_test.name, self._dt_test.filename, err)
  1190.  
  1191.  
  1192.  
  1193. def DocFileTest(path, module_relative = True, package = None, globs = None, parser = DocTestParser(), encoding = None, **options):
  1194.     if globs is None:
  1195.         globs = { }
  1196.     else:
  1197.         globs = globs.copy()
  1198.     if package and not module_relative:
  1199.         raise ValueError('Package may only be specified for module-relative paths.')
  1200.     not module_relative
  1201.     (doc, path) = _load_testfile(path, package, module_relative)
  1202.     if '__file__' not in globs:
  1203.         globs['__file__'] = path
  1204.     
  1205.     name = os.path.basename(path)
  1206.     if encoding is not None:
  1207.         doc = doc.decode(encoding)
  1208.     
  1209.     test = parser.get_doctest(doc, globs, name, path, 0)
  1210.     return DocFileCase(test, **options)
  1211.  
  1212.  
  1213. def DocFileSuite(*paths, **kw):
  1214.     suite = unittest.TestSuite()
  1215.     if kw.get('module_relative', True):
  1216.         kw['package'] = _normalize_module(kw.get('package'))
  1217.     
  1218.     for path in paths:
  1219.         suite.addTest(DocFileTest(path, **kw))
  1220.     
  1221.     return suite
  1222.  
  1223.  
  1224. def script_from_examples(s):
  1225.     output = []
  1226.     for piece in DocTestParser().parse(s):
  1227.         if isinstance(piece, Example):
  1228.             output.append(piece.source[:-1])
  1229.             want = piece.want
  1230.             if want:
  1231.                 output.append('# Expected:')
  1232.                 [] += [ '## ' + l for l in want.split('\n')[:-1] ]
  1233.             
  1234.         want
  1235.         [] += [ _comment_line(l) for l in piece.split('\n')[:-1] ]
  1236.     
  1237.     while output and output[-1] == '#':
  1238.         output.pop()
  1239.         continue
  1240.         []
  1241.     while output and output[0] == '#':
  1242.         output.pop(0)
  1243.         continue
  1244.         output
  1245.     return '\n'.join(output) + '\n'
  1246.  
  1247.  
  1248. def testsource(module, name):
  1249.     module = _normalize_module(module)
  1250.     tests = DocTestFinder().find(module)
  1251.     test = _[1]
  1252.     if not test:
  1253.         raise ValueError(name, 'not found in tests')
  1254.     test
  1255.     test = test[0]
  1256.     testsrc = script_from_examples(test.docstring)
  1257.     return testsrc
  1258.  
  1259.  
  1260. def debug_src(src, pm = False, globs = None):
  1261.     testsrc = script_from_examples(src)
  1262.     debug_script(testsrc, pm, globs)
  1263.  
  1264.  
  1265. def debug_script(src, pm = False, globs = None):
  1266.     import pdb
  1267.     srcfilename = tempfile.mktemp('.py', 'doctestdebug')
  1268.     f = open(srcfilename, 'w')
  1269.     f.write(src)
  1270.     f.close()
  1271.     
  1272.     try:
  1273.         if globs:
  1274.             globs = globs.copy()
  1275.         else:
  1276.             globs = { }
  1277.         if pm:
  1278.             
  1279.             try:
  1280.                 execfile(srcfilename, globs, globs)
  1281.             print sys.exc_info()[1]
  1282.             pdb.post_mortem(sys.exc_info()[2])
  1283.  
  1284.         else:
  1285.             pdb.run('execfile(%r)' % srcfilename, globs, globs)
  1286.     finally:
  1287.         os.remove(srcfilename)
  1288.  
  1289.  
  1290.  
  1291. def debug(module, name, pm = False):
  1292.     module = _normalize_module(module)
  1293.     testsrc = testsource(module, name)
  1294.     debug_script(testsrc, pm, module.__dict__)
  1295.  
  1296.  
  1297. class _TestClass:
  1298.     
  1299.     def __init__(self, val):
  1300.         self.val = val
  1301.  
  1302.     
  1303.     def square(self):
  1304.         self.val = self.val ** 2
  1305.         return self
  1306.  
  1307.     
  1308.     def get(self):
  1309.         return self.val
  1310.  
  1311.  
  1312. __test__ = {
  1313.     '_TestClass': _TestClass,
  1314.     'string': '\n                      Example of a string object, searched as-is.\n                      >>> x = 1; y = 2\n                      >>> x + y, x * y\n                      (3, 2)\n                      ',
  1315.     'bool-int equivalence': '\n                                    In 2.2, boolean expressions displayed\n                                    0 or 1.  By default, we still accept\n                                    them.  This can be disabled by passing\n                                    DONT_ACCEPT_TRUE_FOR_1 to the new\n                                    optionflags argument.\n                                    >>> 4 == 4\n                                    1\n                                    >>> 4 == 4\n                                    True\n                                    >>> 4 > 4\n                                    0\n                                    >>> 4 > 4\n                                    False\n                                    ',
  1316.     'blank lines': "\n                Blank lines can be marked with <BLANKLINE>:\n                    >>> print 'foo\\n\\nbar\\n'\n                    foo\n                    <BLANKLINE>\n                    bar\n                    <BLANKLINE>\n            ",
  1317.     'ellipsis': "\n                If the ellipsis flag is used, then '...' can be used to\n                elide substrings in the desired output:\n                    >>> print range(1000) #doctest: +ELLIPSIS\n                    [0, 1, 2, ..., 999]\n            ",
  1318.     'whitespace normalization': '\n                If the whitespace normalization flag is used, then\n                differences in whitespace are ignored.\n                    >>> print range(30) #doctest: +NORMALIZE_WHITESPACE\n                    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\n                     15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,\n                     27, 28, 29]\n            ' }
  1319.  
  1320. def _test():
  1321.     testfiles = _[1]
  1322.     return 0
  1323.  
  1324. if __name__ == '__main__':
  1325.     sys.exit(_test())
  1326.  
  1327.