home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 June / maximum-cd-2011-06.iso / DiscContents / LibO_3.3.1_Win_x86_install_multi.exe / libreoffice1.cab / test_doctest.py < prev    next >
Encoding:
Python Source  |  2011-02-15  |  74.5 KB  |  2,436 lines

  1. """
  2. Test script for doctest.
  3. """
  4.  
  5. from test import test_support
  6. import doctest
  7. import warnings
  8.  
  9. ######################################################################
  10. ## Sample Objects (used by test cases)
  11. ######################################################################
  12.  
  13. def sample_func(v):
  14.     """
  15.     Blah blah
  16.  
  17.     >>> print sample_func(22)
  18.     44
  19.  
  20.     Yee ha!
  21.     """
  22.     return v+v
  23.  
  24. class SampleClass:
  25.     """
  26.     >>> print 1
  27.     1
  28.  
  29.     >>> # comments get ignored.  so are empty PS1 and PS2 prompts:
  30.     >>>
  31.     ...
  32.  
  33.     Multiline example:
  34.     >>> sc = SampleClass(3)
  35.     >>> for i in range(10):
  36.     ...     sc = sc.double()
  37.     ...     print sc.get(),
  38.     6 12 24 48 96 192 384 768 1536 3072
  39.     """
  40.     def __init__(self, val):
  41.         """
  42.         >>> print SampleClass(12).get()
  43.         12
  44.         """
  45.         self.val = val
  46.  
  47.     def double(self):
  48.         """
  49.         >>> print SampleClass(12).double().get()
  50.         24
  51.         """
  52.         return SampleClass(self.val + self.val)
  53.  
  54.     def get(self):
  55.         """
  56.         >>> print SampleClass(-5).get()
  57.         -5
  58.         """
  59.         return self.val
  60.  
  61.     def a_staticmethod(v):
  62.         """
  63.         >>> print SampleClass.a_staticmethod(10)
  64.         11
  65.         """
  66.         return v+1
  67.     a_staticmethod = staticmethod(a_staticmethod)
  68.  
  69.     def a_classmethod(cls, v):
  70.         """
  71.         >>> print SampleClass.a_classmethod(10)
  72.         12
  73.         >>> print SampleClass(0).a_classmethod(10)
  74.         12
  75.         """
  76.         return v+2
  77.     a_classmethod = classmethod(a_classmethod)
  78.  
  79.     a_property = property(get, doc="""
  80.         >>> print SampleClass(22).a_property
  81.         22
  82.         """)
  83.  
  84.     class NestedClass:
  85.         """
  86.         >>> x = SampleClass.NestedClass(5)
  87.         >>> y = x.square()
  88.         >>> print y.get()
  89.         25
  90.         """
  91.         def __init__(self, val=0):
  92.             """
  93.             >>> print SampleClass.NestedClass().get()
  94.             0
  95.             """
  96.             self.val = val
  97.         def square(self):
  98.             return SampleClass.NestedClass(self.val*self.val)
  99.         def get(self):
  100.             return self.val
  101.  
  102. class SampleNewStyleClass(object):
  103.     r"""
  104.     >>> print '1\n2\n3'
  105.     1
  106.     2
  107.     3
  108.     """
  109.     def __init__(self, val):
  110.         """
  111.         >>> print SampleNewStyleClass(12).get()
  112.         12
  113.         """
  114.         self.val = val
  115.  
  116.     def double(self):
  117.         """
  118.         >>> print SampleNewStyleClass(12).double().get()
  119.         24
  120.         """
  121.         return SampleNewStyleClass(self.val + self.val)
  122.  
  123.     def get(self):
  124.         """
  125.         >>> print SampleNewStyleClass(-5).get()
  126.         -5
  127.         """
  128.         return self.val
  129.  
  130. ######################################################################
  131. ## Fake stdin (for testing interactive debugging)
  132. ######################################################################
  133.  
  134. class _FakeInput:
  135.     """
  136.     A fake input stream for pdb's interactive debugger.  Whenever a
  137.     line is read, print it (to simulate the user typing it), and then
  138.     return it.  The set of lines to return is specified in the
  139.     constructor; they should not have trailing newlines.
  140.     """
  141.     def __init__(self, lines):
  142.         self.lines = lines
  143.  
  144.     def readline(self):
  145.         line = self.lines.pop(0)
  146.         print line
  147.         return line+'\n'
  148.  
  149. ######################################################################
  150. ## Test Cases
  151. ######################################################################
  152.  
  153. def test_Example(): r"""
  154. Unit tests for the `Example` class.
  155.  
  156. Example is a simple container class that holds:
  157.   - `source`: A source string.
  158.   - `want`: An expected output string.
  159.   - `exc_msg`: An expected exception message string (or None if no
  160.     exception is expected).
  161.   - `lineno`: A line number (within the docstring).
  162.   - `indent`: The example's indentation in the input string.
  163.   - `options`: An option dictionary, mapping option flags to True or
  164.     False.
  165.  
  166. These attributes are set by the constructor.  `source` and `want` are
  167. required; the other attributes all have default values:
  168.  
  169.     >>> example = doctest.Example('print 1', '1\n')
  170.     >>> (example.source, example.want, example.exc_msg,
  171.     ...  example.lineno, example.indent, example.options)
  172.     ('print 1\n', '1\n', None, 0, 0, {})
  173.  
  174. The first three attributes (`source`, `want`, and `exc_msg`) may be
  175. specified positionally; the remaining arguments should be specified as
  176. keyword arguments:
  177.  
  178.     >>> exc_msg = 'IndexError: pop from an empty list'
  179.     >>> example = doctest.Example('[].pop()', '', exc_msg,
  180.     ...                           lineno=5, indent=4,
  181.     ...                           options={doctest.ELLIPSIS: True})
  182.     >>> (example.source, example.want, example.exc_msg,
  183.     ...  example.lineno, example.indent, example.options)
  184.     ('[].pop()\n', '', 'IndexError: pop from an empty list\n', 5, 4, {8: True})
  185.  
  186. The constructor normalizes the `source` string to end in a newline:
  187.  
  188.     Source spans a single line: no terminating newline.
  189.     >>> e = doctest.Example('print 1', '1\n')
  190.     >>> e.source, e.want
  191.     ('print 1\n', '1\n')
  192.  
  193.     >>> e = doctest.Example('print 1\n', '1\n')
  194.     >>> e.source, e.want
  195.     ('print 1\n', '1\n')
  196.  
  197.     Source spans multiple lines: require terminating newline.
  198.     >>> e = doctest.Example('print 1;\nprint 2\n', '1\n2\n')
  199.     >>> e.source, e.want
  200.     ('print 1;\nprint 2\n', '1\n2\n')
  201.  
  202.     >>> e = doctest.Example('print 1;\nprint 2', '1\n2\n')
  203.     >>> e.source, e.want
  204.     ('print 1;\nprint 2\n', '1\n2\n')
  205.  
  206.     Empty source string (which should never appear in real examples)
  207.     >>> e = doctest.Example('', '')
  208.     >>> e.source, e.want
  209.     ('\n', '')
  210.  
  211. The constructor normalizes the `want` string to end in a newline,
  212. unless it's the empty string:
  213.  
  214.     >>> e = doctest.Example('print 1', '1\n')
  215.     >>> e.source, e.want
  216.     ('print 1\n', '1\n')
  217.  
  218.     >>> e = doctest.Example('print 1', '1')
  219.     >>> e.source, e.want
  220.     ('print 1\n', '1\n')
  221.  
  222.     >>> e = doctest.Example('print', '')
  223.     >>> e.source, e.want
  224.     ('print\n', '')
  225.  
  226. The constructor normalizes the `exc_msg` string to end in a newline,
  227. unless it's `None`:
  228.  
  229.     Message spans one line
  230.     >>> exc_msg = 'IndexError: pop from an empty list'
  231.     >>> e = doctest.Example('[].pop()', '', exc_msg)
  232.     >>> e.exc_msg
  233.     'IndexError: pop from an empty list\n'
  234.  
  235.     >>> exc_msg = 'IndexError: pop from an empty list\n'
  236.     >>> e = doctest.Example('[].pop()', '', exc_msg)
  237.     >>> e.exc_msg
  238.     'IndexError: pop from an empty list\n'
  239.  
  240.     Message spans multiple lines
  241.     >>> exc_msg = 'ValueError: 1\n  2'
  242.     >>> e = doctest.Example('raise ValueError("1\n  2")', '', exc_msg)
  243.     >>> e.exc_msg
  244.     'ValueError: 1\n  2\n'
  245.  
  246.     >>> exc_msg = 'ValueError: 1\n  2\n'
  247.     >>> e = doctest.Example('raise ValueError("1\n  2")', '', exc_msg)
  248.     >>> e.exc_msg
  249.     'ValueError: 1\n  2\n'
  250.  
  251.     Empty (but non-None) exception message (which should never appear
  252.     in real examples)
  253.     >>> exc_msg = ''
  254.     >>> e = doctest.Example('raise X()', '', exc_msg)
  255.     >>> e.exc_msg
  256.     '\n'
  257. """
  258.  
  259. def test_DocTest(): r"""
  260. Unit tests for the `DocTest` class.
  261.  
  262. DocTest is a collection of examples, extracted from a docstring, along
  263. with information about where the docstring comes from (a name,
  264. filename, and line number).  The docstring is parsed by the `DocTest`
  265. constructor:
  266.  
  267.     >>> docstring = '''
  268.     ...     >>> print 12
  269.     ...     12
  270.     ...
  271.     ... Non-example text.
  272.     ...
  273.     ...     >>> print 'another\example'
  274.     ...     another
  275.     ...     example
  276.     ... '''
  277.     >>> globs = {} # globals to run the test in.
  278.     >>> parser = doctest.DocTestParser()
  279.     >>> test = parser.get_doctest(docstring, globs, 'some_test',
  280.     ...                           'some_file', 20)
  281.     >>> print test
  282.     <DocTest some_test from some_file:20 (2 examples)>
  283.     >>> len(test.examples)
  284.     2
  285.     >>> e1, e2 = test.examples
  286.     >>> (e1.source, e1.want, e1.lineno)
  287.     ('print 12\n', '12\n', 1)
  288.     >>> (e2.source, e2.want, e2.lineno)
  289.     ("print 'another\\example'\n", 'another\nexample\n', 6)
  290.  
  291. Source information (name, filename, and line number) is available as
  292. attributes on the doctest object:
  293.  
  294.     >>> (test.name, test.filename, test.lineno)
  295.     ('some_test', 'some_file', 20)
  296.  
  297. The line number of an example within its containing file is found by
  298. adding the line number of the example and the line number of its
  299. containing test:
  300.  
  301.     >>> test.lineno + e1.lineno
  302.     21
  303.     >>> test.lineno + e2.lineno
  304.     26
  305.  
  306. If the docstring contains inconsistant leading whitespace in the
  307. expected output of an example, then `DocTest` will raise a ValueError:
  308.  
  309.     >>> docstring = r'''
  310.     ...       >>> print 'bad\nindentation'
  311.     ...       bad
  312.     ...     indentation
  313.     ...     '''
  314.     >>> parser.get_doctest(docstring, globs, 'some_test', 'filename', 0)
  315.     Traceback (most recent call last):
  316.     ValueError: line 4 of the docstring for some_test has inconsistent leading whitespace: 'indentation'
  317.  
  318. If the docstring contains inconsistent leading whitespace on
  319. continuation lines, then `DocTest` will raise a ValueError:
  320.  
  321.     >>> docstring = r'''
  322.     ...       >>> print ('bad indentation',
  323.     ...     ...          2)
  324.     ...       ('bad', 'indentation')
  325.     ...     '''
  326.     >>> parser.get_doctest(docstring, globs, 'some_test', 'filename', 0)
  327.     Traceback (most recent call last):
  328.     ValueError: line 2 of the docstring for some_test has inconsistent leading whitespace: '...          2)'
  329.  
  330. If there's no blank space after a PS1 prompt ('>>>'), then `DocTest`
  331. will raise a ValueError:
  332.  
  333.     >>> docstring = '>>>print 1\n1'
  334.     >>> parser.get_doctest(docstring, globs, 'some_test', 'filename', 0)
  335.     Traceback (most recent call last):
  336.     ValueError: line 1 of the docstring for some_test lacks blank after >>>: '>>>print 1'
  337.  
  338. If there's no blank space after a PS2 prompt ('...'), then `DocTest`
  339. will raise a ValueError:
  340.  
  341.     >>> docstring = '>>> if 1:\n...print 1\n1'
  342.     >>> parser.get_doctest(docstring, globs, 'some_test', 'filename', 0)
  343.     Traceback (most recent call last):
  344.     ValueError: line 2 of the docstring for some_test lacks blank after ...: '...print 1'
  345.  
  346. """
  347.  
  348. def test_DocTestFinder(): r"""
  349. Unit tests for the `DocTestFinder` class.
  350.  
  351. DocTestFinder is used to extract DocTests from an object's docstring
  352. and the docstrings of its contained objects.  It can be used with
  353. modules, functions, classes, methods, staticmethods, classmethods, and
  354. properties.
  355.  
  356. Finding Tests in Functions
  357. ~~~~~~~~~~~~~~~~~~~~~~~~~~
  358. For a function whose docstring contains examples, DocTestFinder.find()
  359. will return a single test (for that function's docstring):
  360.  
  361.     >>> finder = doctest.DocTestFinder()
  362.  
  363. We'll simulate a __file__ attr that ends in pyc:
  364.  
  365.     >>> import test.test_doctest
  366.     >>> old = test.test_doctest.__file__
  367.     >>> test.test_doctest.__file__ = 'test_doctest.pyc'
  368.  
  369.     >>> tests = finder.find(sample_func)
  370.  
  371.     >>> print tests  # doctest: +ELLIPSIS
  372.     [<DocTest sample_func from ...:13 (1 example)>]
  373.  
  374. The exact name depends on how test_doctest was invoked, so allow for
  375. leading path components.
  376.  
  377.     >>> tests[0].filename # doctest: +ELLIPSIS
  378.     '...test_doctest.py'
  379.  
  380.     >>> test.test_doctest.__file__ = old
  381.  
  382.  
  383.     >>> e = tests[0].examples[0]
  384.     >>> (e.source, e.want, e.lineno)
  385.     ('print sample_func(22)\n', '44\n', 3)
  386.  
  387. By default, tests are created for objects with no docstring:
  388.  
  389.     >>> def no_docstring(v):
  390.     ...     pass
  391.     >>> finder.find(no_docstring)
  392.     []
  393.  
  394. However, the optional argument `exclude_empty` to the DocTestFinder
  395. constructor can be used to exclude tests for objects with empty
  396. docstrings:
  397.  
  398.     >>> def no_docstring(v):
  399.     ...     pass
  400.     >>> excl_empty_finder = doctest.DocTestFinder(exclude_empty=True)
  401.     >>> excl_empty_finder.find(no_docstring)
  402.     []
  403.  
  404. If the function has a docstring with no examples, then a test with no
  405. examples is returned.  (This lets `DocTestRunner` collect statistics
  406. about which functions have no tests -- but is that useful?  And should
  407. an empty test also be created when there's no docstring?)
  408.  
  409.     >>> def no_examples(v):
  410.     ...     ''' no doctest examples '''
  411.     >>> finder.find(no_examples) # doctest: +ELLIPSIS
  412.     [<DocTest no_examples from ...:1 (no examples)>]
  413.  
  414. Finding Tests in Classes
  415. ~~~~~~~~~~~~~~~~~~~~~~~~
  416. For a class, DocTestFinder will create a test for the class's
  417. docstring, and will recursively explore its contents, including
  418. methods, classmethods, staticmethods, properties, and nested classes.
  419.  
  420.     >>> finder = doctest.DocTestFinder()
  421.     >>> tests = finder.find(SampleClass)
  422.     >>> for t in tests:
  423.     ...     print '%2s  %s' % (len(t.examples), t.name)
  424.      3  SampleClass
  425.      3  SampleClass.NestedClass
  426.      1  SampleClass.NestedClass.__init__
  427.      1  SampleClass.__init__
  428.      2  SampleClass.a_classmethod
  429.      1  SampleClass.a_property
  430.      1  SampleClass.a_staticmethod
  431.      1  SampleClass.double
  432.      1  SampleClass.get
  433.  
  434. New-style classes are also supported:
  435.  
  436.     >>> tests = finder.find(SampleNewStyleClass)
  437.     >>> for t in tests:
  438.     ...     print '%2s  %s' % (len(t.examples), t.name)
  439.      1  SampleNewStyleClass
  440.      1  SampleNewStyleClass.__init__
  441.      1  SampleNewStyleClass.double
  442.      1  SampleNewStyleClass.get
  443.  
  444. Finding Tests in Modules
  445. ~~~~~~~~~~~~~~~~~~~~~~~~
  446. For a module, DocTestFinder will create a test for the class's
  447. docstring, and will recursively explore its contents, including
  448. functions, classes, and the `__test__` dictionary, if it exists:
  449.  
  450.     >>> # A module
  451.     >>> import types
  452.     >>> m = types.ModuleType('some_module')
  453.     >>> def triple(val):
  454.     ...     '''
  455.     ...     >>> print triple(11)
  456.     ...     33
  457.     ...     '''
  458.     ...     return val*3
  459.     >>> m.__dict__.update({
  460.     ...     'sample_func': sample_func,
  461.     ...     'SampleClass': SampleClass,
  462.     ...     '__doc__': '''
  463.     ...         Module docstring.
  464.     ...             >>> print 'module'
  465.     ...             module
  466.     ...         ''',
  467.     ...     '__test__': {
  468.     ...         'd': '>>> print 6\n6\n>>> print 7\n7\n',
  469.     ...         'c': triple}})
  470.  
  471.     >>> finder = doctest.DocTestFinder()
  472.     >>> # Use module=test.test_doctest, to prevent doctest from
  473.     >>> # ignoring the objects since they weren't defined in m.
  474.     >>> import test.test_doctest
  475.     >>> tests = finder.find(m, module=test.test_doctest)
  476.     >>> for t in tests:
  477.     ...     print '%2s  %s' % (len(t.examples), t.name)
  478.      1  some_module
  479.      3  some_module.SampleClass
  480.      3  some_module.SampleClass.NestedClass
  481.      1  some_module.SampleClass.NestedClass.__init__
  482.      1  some_module.SampleClass.__init__
  483.      2  some_module.SampleClass.a_classmethod
  484.      1  some_module.SampleClass.a_property
  485.      1  some_module.SampleClass.a_staticmethod
  486.      1  some_module.SampleClass.double
  487.      1  some_module.SampleClass.get
  488.      1  some_module.__test__.c
  489.      2  some_module.__test__.d
  490.      1  some_module.sample_func
  491.  
  492. Duplicate Removal
  493. ~~~~~~~~~~~~~~~~~
  494. If a single object is listed twice (under different names), then tests
  495. will only be generated for it once:
  496.  
  497.     >>> from test import doctest_aliases
  498.     >>> tests = excl_empty_finder.find(doctest_aliases)
  499.     >>> print len(tests)
  500.     2
  501.     >>> print tests[0].name
  502.     test.doctest_aliases.TwoNames
  503.  
  504.     TwoNames.f and TwoNames.g are bound to the same object.
  505.     We can't guess which will be found in doctest's traversal of
  506.     TwoNames.__dict__ first, so we have to allow for either.
  507.  
  508.     >>> tests[1].name.split('.')[-1] in ['f', 'g']
  509.     True
  510.  
  511. Empty Tests
  512. ~~~~~~~~~~~
  513. By default, an object with no doctests doesn't create any tests:
  514.  
  515.     >>> tests = doctest.DocTestFinder().find(SampleClass)
  516.     >>> for t in tests:
  517.     ...     print '%2s  %s' % (len(t.examples), t.name)
  518.      3  SampleClass
  519.      3  SampleClass.NestedClass
  520.      1  SampleClass.NestedClass.__init__
  521.      1  SampleClass.__init__
  522.      2  SampleClass.a_classmethod
  523.      1  SampleClass.a_property
  524.      1  SampleClass.a_staticmethod
  525.      1  SampleClass.double
  526.      1  SampleClass.get
  527.  
  528. By default, that excluded objects with no doctests.  exclude_empty=False
  529. tells it to include (empty) tests for objects with no doctests.  This feature
  530. is really to support backward compatibility in what doctest.master.summarize()
  531. displays.
  532.  
  533.     >>> tests = doctest.DocTestFinder(exclude_empty=False).find(SampleClass)
  534.     >>> for t in tests:
  535.     ...     print '%2s  %s' % (len(t.examples), t.name)
  536.      3  SampleClass
  537.      3  SampleClass.NestedClass
  538.      1  SampleClass.NestedClass.__init__
  539.      0  SampleClass.NestedClass.get
  540.      0  SampleClass.NestedClass.square
  541.      1  SampleClass.__init__
  542.      2  SampleClass.a_classmethod
  543.      1  SampleClass.a_property
  544.      1  SampleClass.a_staticmethod
  545.      1  SampleClass.double
  546.      1  SampleClass.get
  547.  
  548. Turning off Recursion
  549. ~~~~~~~~~~~~~~~~~~~~~
  550. DocTestFinder can be told not to look for tests in contained objects
  551. using the `recurse` flag:
  552.  
  553.     >>> tests = doctest.DocTestFinder(recurse=False).find(SampleClass)
  554.     >>> for t in tests:
  555.     ...     print '%2s  %s' % (len(t.examples), t.name)
  556.      3  SampleClass
  557.  
  558. Line numbers
  559. ~~~~~~~~~~~~
  560. DocTestFinder finds the line number of each example:
  561.  
  562.     >>> def f(x):
  563.     ...     '''
  564.     ...     >>> x = 12
  565.     ...
  566.     ...     some text
  567.     ...
  568.     ...     >>> # examples are not created for comments & bare prompts.
  569.     ...     >>>
  570.     ...     ...
  571.     ...
  572.     ...     >>> for x in range(10):
  573.     ...     ...     print x,
  574.     ...     0 1 2 3 4 5 6 7 8 9
  575.     ...     >>> x//2
  576.     ...     6
  577.     ...     '''
  578.     >>> test = doctest.DocTestFinder().find(f)[0]
  579.     >>> [e.lineno for e in test.examples]
  580.     [1, 9, 12]
  581. """
  582.  
  583. def test_DocTestParser(): r"""
  584. Unit tests for the `DocTestParser` class.
  585.  
  586. DocTestParser is used to parse docstrings containing doctest examples.
  587.  
  588. The `parse` method divides a docstring into examples and intervening
  589. text:
  590.  
  591.     >>> s = '''
  592.     ...     >>> x, y = 2, 3  # no output expected
  593.     ...     >>> if 1:
  594.     ...     ...     print x
  595.     ...     ...     print y
  596.     ...     2
  597.     ...     3
  598.     ...
  599.     ...     Some text.
  600.     ...     >>> x+y
  601.     ...     5
  602.     ...     '''
  603.     >>> parser = doctest.DocTestParser()
  604.     >>> for piece in parser.parse(s):
  605.     ...     if isinstance(piece, doctest.Example):
  606.     ...         print 'Example:', (piece.source, piece.want, piece.lineno)
  607.     ...     else:
  608.     ...         print '   Text:', `piece`
  609.        Text: '\n'
  610.     Example: ('x, y = 2, 3  # no output expected\n', '', 1)
  611.        Text: ''
  612.     Example: ('if 1:\n    print x\n    print y\n', '2\n3\n', 2)
  613.        Text: '\nSome text.\n'
  614.     Example: ('x+y\n', '5\n', 9)
  615.        Text: ''
  616.  
  617. The `get_examples` method returns just the examples:
  618.  
  619.     >>> for piece in parser.get_examples(s):
  620.     ...     print (piece.source, piece.want, piece.lineno)
  621.     ('x, y = 2, 3  # no output expected\n', '', 1)
  622.     ('if 1:\n    print x\n    print y\n', '2\n3\n', 2)
  623.     ('x+y\n', '5\n', 9)
  624.  
  625. The `get_doctest` method creates a Test from the examples, along with the
  626. given arguments:
  627.  
  628.     >>> test = parser.get_doctest(s, {}, 'name', 'filename', lineno=5)
  629.     >>> (test.name, test.filename, test.lineno)
  630.     ('name', 'filename', 5)
  631.     >>> for piece in test.examples:
  632.     ...     print (piece.source, piece.want, piece.lineno)
  633.     ('x, y = 2, 3  # no output expected\n', '', 1)
  634.     ('if 1:\n    print x\n    print y\n', '2\n3\n', 2)
  635.     ('x+y\n', '5\n', 9)
  636. """
  637.  
  638. class test_DocTestRunner:
  639.     def basics(): r"""
  640. Unit tests for the `DocTestRunner` class.
  641.  
  642. DocTestRunner is used to run DocTest test cases, and to accumulate
  643. statistics.  Here's a simple DocTest case we can use:
  644.  
  645.     >>> def f(x):
  646.     ...     '''
  647.     ...     >>> x = 12
  648.     ...     >>> print x
  649.     ...     12
  650.     ...     >>> x//2
  651.     ...     6
  652.     ...     '''
  653.     >>> test = doctest.DocTestFinder().find(f)[0]
  654.  
  655. The main DocTestRunner interface is the `run` method, which runs a
  656. given DocTest case in a given namespace (globs).  It returns a tuple
  657. `(f,t)`, where `f` is the number of failed tests and `t` is the number
  658. of tried tests.
  659.  
  660.     >>> doctest.DocTestRunner(verbose=False).run(test)
  661.     TestResults(failed=0, attempted=3)
  662.  
  663. If any example produces incorrect output, then the test runner reports
  664. the failure and proceeds to the next example:
  665.  
  666.     >>> def f(x):
  667.     ...     '''
  668.     ...     >>> x = 12
  669.     ...     >>> print x
  670.     ...     14
  671.     ...     >>> x//2
  672.     ...     6
  673.     ...     '''
  674.     >>> test = doctest.DocTestFinder().find(f)[0]
  675.     >>> doctest.DocTestRunner(verbose=True).run(test)
  676.     ... # doctest: +ELLIPSIS
  677.     Trying:
  678.         x = 12
  679.     Expecting nothing
  680.     ok
  681.     Trying:
  682.         print x
  683.     Expecting:
  684.         14
  685.     **********************************************************************
  686.     File ..., line 4, in f
  687.     Failed example:
  688.         print x
  689.     Expected:
  690.         14
  691.     Got:
  692.         12
  693.     Trying:
  694.         x//2
  695.     Expecting:
  696.         6
  697.     ok
  698.     TestResults(failed=1, attempted=3)
  699. """
  700.     def verbose_flag(): r"""
  701. The `verbose` flag makes the test runner generate more detailed
  702. output:
  703.  
  704.     >>> def f(x):
  705.     ...     '''
  706.     ...     >>> x = 12
  707.     ...     >>> print x
  708.     ...     12
  709.     ...     >>> x//2
  710.     ...     6
  711.     ...     '''
  712.     >>> test = doctest.DocTestFinder().find(f)[0]
  713.  
  714.     >>> doctest.DocTestRunner(verbose=True).run(test)
  715.     Trying:
  716.         x = 12
  717.     Expecting nothing
  718.     ok
  719.     Trying:
  720.         print x
  721.     Expecting:
  722.         12
  723.     ok
  724.     Trying:
  725.         x//2
  726.     Expecting:
  727.         6
  728.     ok
  729.     TestResults(failed=0, attempted=3)
  730.  
  731. If the `verbose` flag is unspecified, then the output will be verbose
  732. iff `-v` appears in sys.argv:
  733.  
  734.     >>> # Save the real sys.argv list.
  735.     >>> old_argv = sys.argv
  736.  
  737.     >>> # If -v does not appear in sys.argv, then output isn't verbose.
  738.     >>> sys.argv = ['test']
  739.     >>> doctest.DocTestRunner().run(test)
  740.     TestResults(failed=0, attempted=3)
  741.  
  742.     >>> # If -v does appear in sys.argv, then output is verbose.
  743.     >>> sys.argv = ['test', '-v']
  744.     >>> doctest.DocTestRunner().run(test)
  745.     Trying:
  746.         x = 12
  747.     Expecting nothing
  748.     ok
  749.     Trying:
  750.         print x
  751.     Expecting:
  752.         12
  753.     ok
  754.     Trying:
  755.         x//2
  756.     Expecting:
  757.         6
  758.     ok
  759.     TestResults(failed=0, attempted=3)
  760.  
  761.     >>> # Restore sys.argv
  762.     >>> sys.argv = old_argv
  763.  
  764. In the remaining examples, the test runner's verbosity will be
  765. explicitly set, to ensure that the test behavior is consistent.
  766.     """
  767.     def exceptions(): r"""
  768. Tests of `DocTestRunner`'s exception handling.
  769.  
  770. An expected exception is specified with a traceback message.  The
  771. lines between the first line and the type/value may be omitted or
  772. replaced with any other string:
  773.  
  774.     >>> def f(x):
  775.     ...     '''
  776.     ...     >>> x = 12
  777.     ...     >>> print x//0
  778.     ...     Traceback (most recent call last):
  779.     ...     ZeroDivisionError: integer division or modulo by zero
  780.     ...     '''
  781.     >>> test = doctest.DocTestFinder().find(f)[0]
  782.     >>> doctest.DocTestRunner(verbose=False).run(test)
  783.     TestResults(failed=0, attempted=2)
  784.  
  785. An example may not generate output before it raises an exception; if
  786. it does, then the traceback message will not be recognized as
  787. signaling an expected exception, so the example will be reported as an
  788. unexpected exception:
  789.  
  790.     >>> def f(x):
  791.     ...     '''
  792.     ...     >>> x = 12
  793.     ...     >>> print 'pre-exception output', x//0
  794.     ...     pre-exception output
  795.     ...     Traceback (most recent call last):
  796.     ...     ZeroDivisionError: integer division or modulo by zero
  797.     ...     '''
  798.     >>> test = doctest.DocTestFinder().find(f)[0]
  799.     >>> doctest.DocTestRunner(verbose=False).run(test)
  800.     ... # doctest: +ELLIPSIS
  801.     **********************************************************************
  802.     File ..., line 4, in f
  803.     Failed example:
  804.         print 'pre-exception output', x//0
  805.     Exception raised:
  806.         ...
  807.         ZeroDivisionError: integer division or modulo by zero
  808.     TestResults(failed=1, attempted=2)
  809.  
  810. Exception messages may contain newlines:
  811.  
  812.     >>> def f(x):
  813.     ...     r'''
  814.     ...     >>> raise ValueError, 'multi\nline\nmessage'
  815.     ...     Traceback (most recent call last):
  816.     ...     ValueError: multi
  817.     ...     line
  818.     ...     message
  819.     ...     '''
  820.     >>> test = doctest.DocTestFinder().find(f)[0]
  821.     >>> doctest.DocTestRunner(verbose=False).run(test)
  822.     TestResults(failed=0, attempted=1)
  823.  
  824. If an exception is expected, but an exception with the wrong type or
  825. message is raised, then it is reported as a failure:
  826.  
  827.     >>> def f(x):
  828.     ...     r'''
  829.     ...     >>> raise ValueError, 'message'
  830.     ...     Traceback (most recent call last):
  831.     ...     ValueError: wrong message
  832.     ...     '''
  833.     >>> test = doctest.DocTestFinder().find(f)[0]
  834.     >>> doctest.DocTestRunner(verbose=False).run(test)
  835.     ... # doctest: +ELLIPSIS
  836.     **********************************************************************
  837.     File ..., line 3, in f
  838.     Failed example:
  839.         raise ValueError, 'message'
  840.     Expected:
  841.         Traceback (most recent call last):
  842.         ValueError: wrong message
  843.     Got:
  844.         Traceback (most recent call last):
  845.         ...
  846.         ValueError: message
  847.     TestResults(failed=1, attempted=1)
  848.  
  849. However, IGNORE_EXCEPTION_DETAIL can be used to allow a mismatch in the
  850. detail:
  851.  
  852.     >>> def f(x):
  853.     ...     r'''
  854.     ...     >>> raise ValueError, 'message' #doctest: +IGNORE_EXCEPTION_DETAIL
  855.     ...     Traceback (most recent call last):
  856.     ...     ValueError: wrong message
  857.     ...     '''
  858.     >>> test = doctest.DocTestFinder().find(f)[0]
  859.     >>> doctest.DocTestRunner(verbose=False).run(test)
  860.     TestResults(failed=0, attempted=1)
  861.  
  862. But IGNORE_EXCEPTION_DETAIL does not allow a mismatch in the exception type:
  863.  
  864.     >>> def f(x):
  865.     ...     r'''
  866.     ...     >>> raise ValueError, 'message' #doctest: +IGNORE_EXCEPTION_DETAIL
  867.     ...     Traceback (most recent call last):
  868.     ...     TypeError: wrong type
  869.     ...     '''
  870.     >>> test = doctest.DocTestFinder().find(f)[0]
  871.     >>> doctest.DocTestRunner(verbose=False).run(test)
  872.     ... # doctest: +ELLIPSIS
  873.     **********************************************************************
  874.     File ..., line 3, in f
  875.     Failed example:
  876.         raise ValueError, 'message' #doctest: +IGNORE_EXCEPTION_DETAIL
  877.     Expected:
  878.         Traceback (most recent call last):
  879.         TypeError: wrong type
  880.     Got:
  881.         Traceback (most recent call last):
  882.         ...
  883.         ValueError: message
  884.     TestResults(failed=1, attempted=1)
  885.  
  886. If an exception is raised but not expected, then it is reported as an
  887. unexpected exception:
  888.  
  889.     >>> def f(x):
  890.     ...     r'''
  891.     ...     >>> 1//0
  892.     ...     0
  893.     ...     '''
  894.     >>> test = doctest.DocTestFinder().find(f)[0]
  895.     >>> doctest.DocTestRunner(verbose=False).run(test)
  896.     ... # doctest: +ELLIPSIS
  897.     **********************************************************************
  898.     File ..., line 3, in f
  899.     Failed example:
  900.         1//0
  901.     Exception raised:
  902.         Traceback (most recent call last):
  903.         ...
  904.         ZeroDivisionError: integer division or modulo by zero
  905.     TestResults(failed=1, attempted=1)
  906. """
  907.     def optionflags(): r"""
  908. Tests of `DocTestRunner`'s option flag handling.
  909.  
  910. Several option flags can be used to customize the behavior of the test
  911. runner.  These are defined as module constants in doctest, and passed
  912. to the DocTestRunner constructor (multiple constants should be ORed
  913. together).
  914.  
  915. The DONT_ACCEPT_TRUE_FOR_1 flag disables matches between True/False
  916. and 1/0:
  917.  
  918.     >>> def f(x):
  919.     ...     '>>> True\n1\n'
  920.  
  921.     >>> # Without the flag:
  922.     >>> test = doctest.DocTestFinder().find(f)[0]
  923.     >>> doctest.DocTestRunner(verbose=False).run(test)
  924.     TestResults(failed=0, attempted=1)
  925.  
  926.     >>> # With the flag:
  927.     >>> test = doctest.DocTestFinder().find(f)[0]
  928.     >>> flags = doctest.DONT_ACCEPT_TRUE_FOR_1
  929.     >>> doctest.DocTestRunner(verbose=False, optionflags=flags).run(test)
  930.     ... # doctest: +ELLIPSIS
  931.     **********************************************************************
  932.     File ..., line 2, in f
  933.     Failed example:
  934.         True
  935.     Expected:
  936.         1
  937.     Got:
  938.         True
  939.     TestResults(failed=1, attempted=1)
  940.  
  941. The DONT_ACCEPT_BLANKLINE flag disables the match between blank lines
  942. and the '<BLANKLINE>' marker:
  943.  
  944.     >>> def f(x):
  945.     ...     '>>> print "a\\n\\nb"\na\n<BLANKLINE>\nb\n'
  946.  
  947.     >>> # Without the flag:
  948.     >>> test = doctest.DocTestFinder().find(f)[0]
  949.     >>> doctest.DocTestRunner(verbose=False).run(test)
  950.     TestResults(failed=0, attempted=1)
  951.  
  952.     >>> # With the flag:
  953.     >>> test = doctest.DocTestFinder().find(f)[0]
  954.     >>> flags = doctest.DONT_ACCEPT_BLANKLINE
  955.     >>> doctest.DocTestRunner(verbose=False, optionflags=flags).run(test)
  956.     ... # doctest: +ELLIPSIS
  957.     **********************************************************************
  958.     File ..., line 2, in f
  959.     Failed example:
  960.         print "a\n\nb"
  961.     Expected:
  962.         a
  963.         <BLANKLINE>
  964.         b
  965.     Got:
  966.         a
  967.     <BLANKLINE>
  968.         b
  969.     TestResults(failed=1, attempted=1)
  970.  
  971. The NORMALIZE_WHITESPACE flag causes all sequences of whitespace to be
  972. treated as equal:
  973.  
  974.     >>> def f(x):
  975.     ...     '>>> print 1, 2, 3\n  1   2\n 3'
  976.  
  977.     >>> # Without the flag:
  978.     >>> test = doctest.DocTestFinder().find(f)[0]
  979.     >>> doctest.DocTestRunner(verbose=False).run(test)
  980.     ... # doctest: +ELLIPSIS
  981.     **********************************************************************
  982.     File ..., line 2, in f
  983.     Failed example:
  984.         print 1, 2, 3
  985.     Expected:
  986.           1   2
  987.          3
  988.     Got:
  989.         1 2 3
  990.     TestResults(failed=1, attempted=1)
  991.  
  992.     >>> # With the flag:
  993.     >>> test = doctest.DocTestFinder().find(f)[0]
  994.     >>> flags = doctest.NORMALIZE_WHITESPACE
  995.     >>> doctest.DocTestRunner(verbose=False, optionflags=flags).run(test)
  996.     TestResults(failed=0, attempted=1)
  997.  
  998.     An example from the docs:
  999.     >>> print range(20) #doctest: +NORMALIZE_WHITESPACE
  1000.     [0,   1,  2,  3,  4,  5,  6,  7,  8,  9,
  1001.     10,  11, 12, 13, 14, 15, 16, 17, 18, 19]
  1002.  
  1003. The ELLIPSIS flag causes ellipsis marker ("...") in the expected
  1004. output to match any substring in the actual output:
  1005.  
  1006.     >>> def f(x):
  1007.     ...     '>>> print range(15)\n[0, 1, 2, ..., 14]\n'
  1008.  
  1009.     >>> # Without the flag:
  1010.     >>> test = doctest.DocTestFinder().find(f)[0]
  1011.     >>> doctest.DocTestRunner(verbose=False).run(test)
  1012.     ... # doctest: +ELLIPSIS
  1013.     **********************************************************************
  1014.     File ..., line 2, in f
  1015.     Failed example:
  1016.         print range(15)
  1017.     Expected:
  1018.         [0, 1, 2, ..., 14]
  1019.     Got:
  1020.         [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
  1021.     TestResults(failed=1, attempted=1)
  1022.  
  1023.     >>> # With the flag:
  1024.     >>> test = doctest.DocTestFinder().find(f)[0]
  1025.     >>> flags = doctest.ELLIPSIS
  1026.     >>> doctest.DocTestRunner(verbose=False, optionflags=flags).run(test)
  1027.     TestResults(failed=0, attempted=1)
  1028.  
  1029.     ... also matches nothing:
  1030.  
  1031.     >>> for i in range(100):
  1032.     ...     print i**2, #doctest: +ELLIPSIS
  1033.     0 1...4...9 16 ... 36 49 64 ... 9801
  1034.  
  1035.     ... can be surprising; e.g., this test passes:
  1036.  
  1037.     >>> for i in range(21): #doctest: +ELLIPSIS
  1038.     ...     print i,
  1039.     0 1 2 ...1...2...0
  1040.  
  1041.     Examples from the docs:
  1042.  
  1043.     >>> print range(20) # doctest:+ELLIPSIS
  1044.     [0, 1, ..., 18, 19]
  1045.  
  1046.     >>> print range(20) # doctest: +ELLIPSIS
  1047.     ...                 # doctest: +NORMALIZE_WHITESPACE
  1048.     [0,    1, ...,   18,    19]
  1049.  
  1050. The SKIP flag causes an example to be skipped entirely.  I.e., the
  1051. example is not run.  It can be useful in contexts where doctest
  1052. examples serve as both documentation and test cases, and an example
  1053. should be included for documentation purposes, but should not be
  1054. checked (e.g., because its output is random, or depends on resources
  1055. which would be unavailable.)  The SKIP flag can also be used for
  1056. 'commenting out' broken examples.
  1057.  
  1058.     >>> import unavailable_resource           # doctest: +SKIP
  1059.     >>> unavailable_resource.do_something()   # doctest: +SKIP
  1060.     >>> unavailable_resource.blow_up()        # doctest: +SKIP
  1061.     Traceback (most recent call last):
  1062.         ...
  1063.     UncheckedBlowUpError:  Nobody checks me.
  1064.  
  1065.     >>> import random
  1066.     >>> print random.random() # doctest: +SKIP
  1067.     0.721216923889
  1068.  
  1069. The REPORT_UDIFF flag causes failures that involve multi-line expected
  1070. and actual outputs to be displayed using a unified diff:
  1071.  
  1072.     >>> def f(x):
  1073.     ...     r'''
  1074.     ...     >>> print '\n'.join('abcdefg')
  1075.     ...     a
  1076.     ...     B
  1077.     ...     c
  1078.     ...     d
  1079.     ...     f
  1080.     ...     g
  1081.     ...     h
  1082.     ...     '''
  1083.  
  1084.     >>> # Without the flag:
  1085.     >>> test = doctest.DocTestFinder().find(f)[0]
  1086.     >>> doctest.DocTestRunner(verbose=False).run(test)
  1087.     ... # doctest: +ELLIPSIS
  1088.     **********************************************************************
  1089.     File ..., line 3, in f
  1090.     Failed example:
  1091.         print '\n'.join('abcdefg')
  1092.     Expected:
  1093.         a
  1094.         B
  1095.         c
  1096.         d
  1097.         f
  1098.         g
  1099.         h
  1100.     Got:
  1101.         a
  1102.         b
  1103.         c
  1104.         d
  1105.         e
  1106.         f
  1107.         g
  1108.     TestResults(failed=1, attempted=1)
  1109.  
  1110.     >>> # With the flag:
  1111.     >>> test = doctest.DocTestFinder().find(f)[0]
  1112.     >>> flags = doctest.REPORT_UDIFF
  1113.     >>> doctest.DocTestRunner(verbose=False, optionflags=flags).run(test)
  1114.     ... # doctest: +ELLIPSIS
  1115.     **********************************************************************
  1116.     File ..., line 3, in f
  1117.     Failed example:
  1118.         print '\n'.join('abcdefg')
  1119.     Differences (unified diff with -expected +actual):
  1120.         @@ -1,7 +1,7 @@
  1121.          a
  1122.         -B
  1123.         +b
  1124.          c
  1125.          d
  1126.         +e
  1127.          f
  1128.          g
  1129.         -h
  1130.     TestResults(failed=1, attempted=1)
  1131.  
  1132. The REPORT_CDIFF flag causes failures that involve multi-line expected
  1133. and actual outputs to be displayed using a context diff:
  1134.  
  1135.     >>> # Reuse f() from the REPORT_UDIFF example, above.
  1136.     >>> test = doctest.DocTestFinder().find(f)[0]
  1137.     >>> flags = doctest.REPORT_CDIFF
  1138.     >>> doctest.DocTestRunner(verbose=False, optionflags=flags).run(test)
  1139.     ... # doctest: +ELLIPSIS
  1140.     **********************************************************************
  1141.     File ..., line 3, in f
  1142.     Failed example:
  1143.         print '\n'.join('abcdefg')
  1144.     Differences (context diff with expected followed by actual):
  1145.         ***************
  1146.         *** 1,7 ****
  1147.           a
  1148.         ! B
  1149.           c
  1150.           d
  1151.           f
  1152.           g
  1153.         - h
  1154.         --- 1,7 ----
  1155.           a
  1156.         ! b
  1157.           c
  1158.           d
  1159.         + e
  1160.           f
  1161.           g
  1162.     TestResults(failed=1, attempted=1)
  1163.  
  1164.  
  1165. The REPORT_NDIFF flag causes failures to use the difflib.Differ algorithm
  1166. used by the popular ndiff.py utility.  This does intraline difference
  1167. marking, as well as interline differences.
  1168.  
  1169.     >>> def f(x):
  1170.     ...     r'''
  1171.     ...     >>> print "a b  c d e f g h i   j k l m"
  1172.     ...     a b c d e f g h i j k 1 m
  1173.     ...     '''
  1174.     >>> test = doctest.DocTestFinder().find(f)[0]
  1175.     >>> flags = doctest.REPORT_NDIFF
  1176.     >>> doctest.DocTestRunner(verbose=False, optionflags=flags).run(test)
  1177.     ... # doctest: +ELLIPSIS
  1178.     **********************************************************************
  1179.     File ..., line 3, in f
  1180.     Failed example:
  1181.         print "a b  c d e f g h i   j k l m"
  1182.     Differences (ndiff with -expected +actual):
  1183.         - a b c d e f g h i j k 1 m
  1184.         ?                       ^
  1185.         + a b  c d e f g h i   j k l m
  1186.         ?     +              ++    ^
  1187.     TestResults(failed=1, attempted=1)
  1188.  
  1189. The REPORT_ONLY_FIRST_FAILURE supresses result output after the first
  1190. failing example:
  1191.  
  1192.     >>> def f(x):
  1193.     ...     r'''
  1194.     ...     >>> print 1 # first success
  1195.     ...     1
  1196.     ...     >>> print 2 # first failure
  1197.     ...     200
  1198.     ...     >>> print 3 # second failure
  1199.     ...     300
  1200.     ...     >>> print 4 # second success
  1201.     ...     4
  1202.     ...     >>> print 5 # third failure
  1203.     ...     500
  1204.     ...     '''
  1205.     >>> test = doctest.DocTestFinder().find(f)[0]
  1206.     >>> flags = doctest.REPORT_ONLY_FIRST_FAILURE
  1207.     >>> doctest.DocTestRunner(verbose=False, optionflags=flags).run(test)
  1208.     ... # doctest: +ELLIPSIS
  1209.     **********************************************************************
  1210.     File ..., line 5, in f
  1211.     Failed example:
  1212.         print 2 # first failure
  1213.     Expected:
  1214.         200
  1215.     Got:
  1216.         2
  1217.     TestResults(failed=3, attempted=5)
  1218.  
  1219. However, output from `report_start` is not supressed:
  1220.  
  1221.     >>> doctest.DocTestRunner(verbose=True, optionflags=flags).run(test)
  1222.     ... # doctest: +ELLIPSIS
  1223.     Trying:
  1224.         print 1 # first success
  1225.     Expecting:
  1226.         1
  1227.     ok
  1228.     Trying:
  1229.         print 2 # first failure
  1230.     Expecting:
  1231.         200
  1232.     **********************************************************************
  1233.     File ..., line 5, in f
  1234.     Failed example:
  1235.         print 2 # first failure
  1236.     Expected:
  1237.         200
  1238.     Got:
  1239.         2
  1240.     TestResults(failed=3, attempted=5)
  1241.  
  1242. For the purposes of REPORT_ONLY_FIRST_FAILURE, unexpected exceptions
  1243. count as failures:
  1244.  
  1245.     >>> def f(x):
  1246.     ...     r'''
  1247.     ...     >>> print 1 # first success
  1248.     ...     1
  1249.     ...     >>> raise ValueError(2) # first failure
  1250.     ...     200
  1251.     ...     >>> print 3 # second failure
  1252.     ...     300
  1253.     ...     >>> print 4 # second success
  1254.     ...     4
  1255.     ...     >>> print 5 # third failure
  1256.     ...     500
  1257.     ...     '''
  1258.     >>> test = doctest.DocTestFinder().find(f)[0]
  1259.     >>> flags = doctest.REPORT_ONLY_FIRST_FAILURE
  1260.     >>> doctest.DocTestRunner(verbose=False, optionflags=flags).run(test)
  1261.     ... # doctest: +ELLIPSIS
  1262.     **********************************************************************
  1263.     File ..., line 5, in f
  1264.     Failed example:
  1265.         raise ValueError(2) # first failure
  1266.     Exception raised:
  1267.         ...
  1268.         ValueError: 2
  1269.     TestResults(failed=3, attempted=5)
  1270.  
  1271. New option flags can also be registered, via register_optionflag().  Here
  1272. we reach into doctest's internals a bit.
  1273.  
  1274.     >>> unlikely = "UNLIKELY_OPTION_NAME"
  1275.     >>> unlikely in doctest.OPTIONFLAGS_BY_NAME
  1276.     False
  1277.     >>> new_flag_value = doctest.register_optionflag(unlikely)
  1278.     >>> unlikely in doctest.OPTIONFLAGS_BY_NAME
  1279.     True
  1280.  
  1281. Before 2.4.4/2.5, registering a name more than once erroneously created
  1282. more than one flag value.  Here we verify that's fixed:
  1283.  
  1284.     >>> redundant_flag_value = doctest.register_optionflag(unlikely)
  1285.     >>> redundant_flag_value == new_flag_value
  1286.     True
  1287.  
  1288. Clean up.
  1289.     >>> del doctest.OPTIONFLAGS_BY_NAME[unlikely]
  1290.  
  1291.     """
  1292.  
  1293.     def option_directives(): r"""
  1294. Tests of `DocTestRunner`'s option directive mechanism.
  1295.  
  1296. Option directives can be used to turn option flags on or off for a
  1297. single example.  To turn an option on for an example, follow that
  1298. example with a comment of the form ``# doctest: +OPTION``:
  1299.  
  1300.     >>> def f(x): r'''
  1301.     ...     >>> print range(10)       # should fail: no ellipsis
  1302.     ...     [0, 1, ..., 9]
  1303.     ...
  1304.     ...     >>> print range(10)       # doctest: +ELLIPSIS
  1305.     ...     [0, 1, ..., 9]
  1306.     ...     '''
  1307.     >>> test = doctest.DocTestFinder().find(f)[0]
  1308.     >>> doctest.DocTestRunner(verbose=False).run(test)
  1309.     ... # doctest: +ELLIPSIS
  1310.     **********************************************************************
  1311.     File ..., line 2, in f
  1312.     Failed example:
  1313.         print range(10)       # should fail: no ellipsis
  1314.     Expected:
  1315.         [0, 1, ..., 9]
  1316.     Got:
  1317.         [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  1318.     TestResults(failed=1, attempted=2)
  1319.  
  1320. To turn an option off for an example, follow that example with a
  1321. comment of the form ``# doctest: -OPTION``:
  1322.  
  1323.     >>> def f(x): r'''
  1324.     ...     >>> print range(10)
  1325.     ...     [0, 1, ..., 9]
  1326.     ...
  1327.     ...     >>> # should fail: no ellipsis
  1328.     ...     >>> print range(10)       # doctest: -ELLIPSIS
  1329.     ...     [0, 1, ..., 9]
  1330.     ...     '''
  1331.     >>> test = doctest.DocTestFinder().find(f)[0]
  1332.     >>> doctest.DocTestRunner(verbose=False,
  1333.     ...                       optionflags=doctest.ELLIPSIS).run(test)
  1334.     ... # doctest: +ELLIPSIS
  1335.     **********************************************************************
  1336.     File ..., line 6, in f
  1337.     Failed example:
  1338.         print range(10)       # doctest: -ELLIPSIS
  1339.     Expected:
  1340.         [0, 1, ..., 9]
  1341.     Got:
  1342.         [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  1343.     TestResults(failed=1, attempted=2)
  1344.  
  1345. Option directives affect only the example that they appear with; they
  1346. do not change the options for surrounding examples:
  1347.  
  1348.     >>> def f(x): r'''
  1349.     ...     >>> print range(10)       # Should fail: no ellipsis
  1350.     ...     [0, 1, ..., 9]
  1351.     ...
  1352.     ...     >>> print range(10)       # doctest: +ELLIPSIS
  1353.     ...     [0, 1, ..., 9]
  1354.     ...
  1355.     ...     >>> print range(10)       # Should fail: no ellipsis
  1356.     ...     [0, 1, ..., 9]
  1357.     ...     '''
  1358.     >>> test = doctest.DocTestFinder().find(f)[0]
  1359.     >>> doctest.DocTestRunner(verbose=False).run(test)
  1360.     ... # doctest: +ELLIPSIS
  1361.     **********************************************************************
  1362.     File ..., line 2, in f
  1363.     Failed example:
  1364.         print range(10)       # Should fail: no ellipsis
  1365.     Expected:
  1366.         [0, 1, ..., 9]
  1367.     Got:
  1368.         [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  1369.     **********************************************************************
  1370.     File ..., line 8, in f
  1371.     Failed example:
  1372.         print range(10)       # Should fail: no ellipsis
  1373.     Expected:
  1374.         [0, 1, ..., 9]
  1375.     Got:
  1376.         [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  1377.     TestResults(failed=2, attempted=3)
  1378.  
  1379. Multiple options may be modified by a single option directive.  They
  1380. may be separated by whitespace, commas, or both:
  1381.  
  1382.     >>> def f(x): r'''
  1383.     ...     >>> print range(10)       # Should fail
  1384.     ...     [0, 1,  ...,   9]
  1385.     ...     >>> print range(10)       # Should succeed
  1386.     ...     ... # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
  1387.     ...     [0, 1,  ...,   9]
  1388.     ...     '''
  1389.     >>> test = doctest.DocTestFinder().find(f)[0]
  1390.     >>> doctest.DocTestRunner(verbose=False).run(test)
  1391.     ... # doctest: +ELLIPSIS
  1392.     **********************************************************************
  1393.     File ..., line 2, in f
  1394.     Failed example:
  1395.         print range(10)       # Should fail
  1396.     Expected:
  1397.         [0, 1,  ...,   9]
  1398.     Got:
  1399.         [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  1400.     TestResults(failed=1, attempted=2)
  1401.  
  1402.     >>> def f(x): r'''
  1403.     ...     >>> print range(10)       # Should fail
  1404.     ...     [0, 1,  ...,   9]
  1405.     ...     >>> print range(10)       # Should succeed
  1406.     ...     ... # doctest: +ELLIPSIS,+NORMALIZE_WHITESPACE
  1407.     ...     [0, 1,  ...,   9]
  1408.     ...     '''
  1409.     >>> test = doctest.DocTestFinder().find(f)[0]
  1410.     >>> doctest.DocTestRunner(verbose=False).run(test)
  1411.     ... # doctest: +ELLIPSIS
  1412.     **********************************************************************
  1413.     File ..., line 2, in f
  1414.     Failed example:
  1415.         print range(10)       # Should fail
  1416.     Expected:
  1417.         [0, 1,  ...,   9]
  1418.     Got:
  1419.         [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  1420.     TestResults(failed=1, attempted=2)
  1421.  
  1422.     >>> def f(x): r'''
  1423.     ...     >>> print range(10)       # Should fail
  1424.     ...     [0, 1,  ...,   9]
  1425.     ...     >>> print range(10)       # Should succeed
  1426.     ...     ... # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
  1427.     ...     [0, 1,  ...,   9]
  1428.     ...     '''
  1429.     >>> test = doctest.DocTestFinder().find(f)[0]
  1430.     >>> doctest.DocTestRunner(verbose=False).run(test)
  1431.     ... # doctest: +ELLIPSIS
  1432.     **********************************************************************
  1433.     File ..., line 2, in f
  1434.     Failed example:
  1435.         print range(10)       # Should fail
  1436.     Expected:
  1437.         [0, 1,  ...,   9]
  1438.     Got:
  1439.         [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  1440.     TestResults(failed=1, attempted=2)
  1441.  
  1442. The option directive may be put on the line following the source, as
  1443. long as a continuation prompt is used:
  1444.  
  1445.     >>> def f(x): r'''
  1446.     ...     >>> print range(10)
  1447.     ...     ... # doctest: +ELLIPSIS
  1448.     ...     [0, 1, ..., 9]
  1449.     ...     '''
  1450.     >>> test = doctest.DocTestFinder().find(f)[0]
  1451.     >>> doctest.DocTestRunner(verbose=False).run(test)
  1452.     TestResults(failed=0, attempted=1)
  1453.  
  1454. For examples with multi-line source, the option directive may appear
  1455. at the end of any line:
  1456.  
  1457.     >>> def f(x): r'''
  1458.     ...     >>> for x in range(10): # doctest: +ELLIPSIS
  1459.     ...     ...     print x,
  1460.     ...     0 1 2 ... 9
  1461.     ...
  1462.     ...     >>> for x in range(10):
  1463.     ...     ...     print x,        # doctest: +ELLIPSIS
  1464.     ...     0 1 2 ... 9
  1465.     ...     '''
  1466.     >>> test = doctest.DocTestFinder().find(f)[0]
  1467.     >>> doctest.DocTestRunner(verbose=False).run(test)
  1468.     TestResults(failed=0, attempted=2)
  1469.  
  1470. If more than one line of an example with multi-line source has an
  1471. option directive, then they are combined:
  1472.  
  1473.     >>> def f(x): r'''
  1474.     ...     Should fail (option directive not on the last line):
  1475.     ...         >>> for x in range(10): # doctest: +ELLIPSIS
  1476.     ...         ...     print x,        # doctest: +NORMALIZE_WHITESPACE
  1477.     ...         0  1    2...9
  1478.     ...     '''
  1479.     >>> test = doctest.DocTestFinder().find(f)[0]
  1480.     >>> doctest.DocTestRunner(verbose=False).run(test)
  1481.     TestResults(failed=0, attempted=1)
  1482.  
  1483. It is an error to have a comment of the form ``# doctest:`` that is
  1484. *not* followed by words of the form ``+OPTION`` or ``-OPTION``, where
  1485. ``OPTION`` is an option that has been registered with
  1486. `register_option`:
  1487.  
  1488.     >>> # Error: Option not registered
  1489.     >>> s = '>>> print 12   #doctest: +BADOPTION'
  1490.     >>> test = doctest.DocTestParser().get_doctest(s, {}, 's', 's.py', 0)
  1491.     Traceback (most recent call last):
  1492.     ValueError: line 1 of the doctest for s has an invalid option: '+BADOPTION'
  1493.  
  1494.     >>> # Error: No + or - prefix
  1495.     >>> s = '>>> print 12   #doctest: ELLIPSIS'
  1496.     >>> test = doctest.DocTestParser().get_doctest(s, {}, 's', 's.py', 0)
  1497.     Traceback (most recent call last):
  1498.     ValueError: line 1 of the doctest for s has an invalid option: 'ELLIPSIS'
  1499.  
  1500. It is an error to use an option directive on a line that contains no
  1501. source:
  1502.  
  1503.     >>> s = '>>> # doctest: +ELLIPSIS'
  1504.     >>> test = doctest.DocTestParser().get_doctest(s, {}, 's', 's.py', 0)
  1505.     Traceback (most recent call last):
  1506.     ValueError: line 0 of the doctest for s has an option directive on a line with no example: '# doctest: +ELLIPSIS'
  1507. """
  1508.  
  1509. def test_testsource(): r"""
  1510. Unit tests for `testsource()`.
  1511.  
  1512. The testsource() function takes a module and a name, finds the (first)
  1513. test with that name in that module, and converts it to a script. The
  1514. example code is converted to regular Python code.  The surrounding
  1515. words and expected output are converted to comments:
  1516.  
  1517.     >>> import test.test_doctest
  1518.     >>> name = 'test.test_doctest.sample_func'
  1519.     >>> print doctest.testsource(test.test_doctest, name)
  1520.     # Blah blah
  1521.     #
  1522.     print sample_func(22)
  1523.     # Expected:
  1524.     ## 44
  1525.     #
  1526.     # Yee ha!
  1527.     <BLANKLINE>
  1528.  
  1529.     >>> name = 'test.test_doctest.SampleNewStyleClass'
  1530.     >>> print doctest.testsource(test.test_doctest, name)
  1531.     print '1\n2\n3'
  1532.     # Expected:
  1533.     ## 1
  1534.     ## 2
  1535.     ## 3
  1536.     <BLANKLINE>
  1537.  
  1538.     >>> name = 'test.test_doctest.SampleClass.a_classmethod'
  1539.     >>> print doctest.testsource(test.test_doctest, name)
  1540.     print SampleClass.a_classmethod(10)
  1541.     # Expected:
  1542.     ## 12
  1543.     print SampleClass(0).a_classmethod(10)
  1544.     # Expected:
  1545.     ## 12
  1546.     <BLANKLINE>
  1547. """
  1548.  
  1549. def test_debug(): r"""
  1550.  
  1551. Create a docstring that we want to debug:
  1552.  
  1553.     >>> s = '''
  1554.     ...     >>> x = 12
  1555.     ...     >>> print x
  1556.     ...     12
  1557.     ...     '''
  1558.  
  1559. Create some fake stdin input, to feed to the debugger:
  1560.  
  1561.     >>> import tempfile
  1562.     >>> real_stdin = sys.stdin
  1563.     >>> sys.stdin = _FakeInput(['next', 'print x', 'continue'])
  1564.  
  1565. Run the debugger on the docstring, and then restore sys.stdin.
  1566.  
  1567.     >>> try: doctest.debug_src(s)
  1568.     ... finally: sys.stdin = real_stdin
  1569.     > <string>(1)<module>()
  1570.     (Pdb) next
  1571.     12
  1572.     --Return--
  1573.     > <string>(1)<module>()->None
  1574.     (Pdb) print x
  1575.     12
  1576.     (Pdb) continue
  1577.  
  1578. """
  1579.  
  1580. def test_pdb_set_trace():
  1581.     """Using pdb.set_trace from a doctest.
  1582.  
  1583.     You can use pdb.set_trace from a doctest.  To do so, you must
  1584.     retrieve the set_trace function from the pdb module at the time
  1585.     you use it.  The doctest module changes sys.stdout so that it can
  1586.     capture program output.  It also temporarily replaces pdb.set_trace
  1587.     with a version that restores stdout.  This is necessary for you to
  1588.     see debugger output.
  1589.  
  1590.       >>> doc = '''
  1591.       ... >>> x = 42
  1592.       ... >>> import pdb; pdb.set_trace()
  1593.       ... '''
  1594.       >>> parser = doctest.DocTestParser()
  1595.       >>> test = parser.get_doctest(doc, {}, "foo", "foo.py", 0)
  1596.       >>> runner = doctest.DocTestRunner(verbose=False)
  1597.  
  1598.     To demonstrate this, we'll create a fake standard input that
  1599.     captures our debugger input:
  1600.  
  1601.       >>> import tempfile
  1602.       >>> real_stdin = sys.stdin
  1603.       >>> sys.stdin = _FakeInput([
  1604.       ...    'print x',  # print data defined by the example
  1605.       ...    'continue', # stop debugging
  1606.       ...    ''])
  1607.  
  1608.       >>> try: runner.run(test)
  1609.       ... finally: sys.stdin = real_stdin
  1610.       --Return--
  1611.       > <doctest foo[1]>(1)<module>()->None
  1612.       -> import pdb; pdb.set_trace()
  1613.       (Pdb) print x
  1614.       42
  1615.       (Pdb) continue
  1616.       TestResults(failed=0, attempted=2)
  1617.  
  1618.       You can also put pdb.set_trace in a function called from a test:
  1619.  
  1620.       >>> def calls_set_trace():
  1621.       ...    y=2
  1622.       ...    import pdb; pdb.set_trace()
  1623.  
  1624.       >>> doc = '''
  1625.       ... >>> x=1
  1626.       ... >>> calls_set_trace()
  1627.       ... '''
  1628.       >>> test = parser.get_doctest(doc, globals(), "foo", "foo.py", 0)
  1629.       >>> real_stdin = sys.stdin
  1630.       >>> sys.stdin = _FakeInput([
  1631.       ...    'print y',  # print data defined in the function
  1632.       ...    'up',       # out of function
  1633.       ...    'print x',  # print data defined by the example
  1634.       ...    'continue', # stop debugging
  1635.       ...    ''])
  1636.  
  1637.       >>> try:
  1638.       ...     runner.run(test)
  1639.       ... finally:
  1640.       ...     sys.stdin = real_stdin
  1641.       --Return--
  1642.       > <doctest test.test_doctest.test_pdb_set_trace[8]>(3)calls_set_trace()->None
  1643.       -> import pdb; pdb.set_trace()
  1644.       (Pdb) print y
  1645.       2
  1646.       (Pdb) up
  1647.       > <doctest foo[1]>(1)<module>()
  1648.       -> calls_set_trace()
  1649.       (Pdb) print x
  1650.       1
  1651.       (Pdb) continue
  1652.       TestResults(failed=0, attempted=2)
  1653.  
  1654.     During interactive debugging, source code is shown, even for
  1655.     doctest examples:
  1656.  
  1657.       >>> doc = '''
  1658.       ... >>> def f(x):
  1659.       ... ...     g(x*2)
  1660.       ... >>> def g(x):
  1661.       ... ...     print x+3
  1662.       ... ...     import pdb; pdb.set_trace()
  1663.       ... >>> f(3)
  1664.       ... '''
  1665.       >>> test = parser.get_doctest(doc, globals(), "foo", "foo.py", 0)
  1666.       >>> real_stdin = sys.stdin
  1667.       >>> sys.stdin = _FakeInput([
  1668.       ...    'list',     # list source from example 2
  1669.       ...    'next',     # return from g()
  1670.       ...    'list',     # list source from example 1
  1671.       ...    'next',     # return from f()
  1672.       ...    'list',     # list source from example 3
  1673.       ...    'continue', # stop debugging
  1674.       ...    ''])
  1675.       >>> try: runner.run(test)
  1676.       ... finally: sys.stdin = real_stdin
  1677.       ... # doctest: +NORMALIZE_WHITESPACE
  1678.       --Return--
  1679.       > <doctest foo[1]>(3)g()->None
  1680.       -> import pdb; pdb.set_trace()
  1681.       (Pdb) list
  1682.         1     def g(x):
  1683.         2         print x+3
  1684.         3  ->     import pdb; pdb.set_trace()
  1685.       [EOF]
  1686.       (Pdb) next
  1687.       --Return--
  1688.       > <doctest foo[0]>(2)f()->None
  1689.       -> g(x*2)
  1690.       (Pdb) list
  1691.         1     def f(x):
  1692.         2  ->     g(x*2)
  1693.       [EOF]
  1694.       (Pdb) next
  1695.       --Return--
  1696.       > <doctest foo[2]>(1)<module>()->None
  1697.       -> f(3)
  1698.       (Pdb) list
  1699.         1  -> f(3)
  1700.       [EOF]
  1701.       (Pdb) continue
  1702.       **********************************************************************
  1703.       File "foo.py", line 7, in foo
  1704.       Failed example:
  1705.           f(3)
  1706.       Expected nothing
  1707.       Got:
  1708.           9
  1709.       TestResults(failed=1, attempted=3)
  1710.       """
  1711.  
  1712. def test_pdb_set_trace_nested():
  1713.     """This illustrates more-demanding use of set_trace with nested functions.
  1714.  
  1715.     >>> class C(object):
  1716.     ...     def calls_set_trace(self):
  1717.     ...         y = 1
  1718.     ...         import pdb; pdb.set_trace()
  1719.     ...         self.f1()
  1720.     ...         y = 2
  1721.     ...     def f1(self):
  1722.     ...         x = 1
  1723.     ...         self.f2()
  1724.     ...         x = 2
  1725.     ...     def f2(self):
  1726.     ...         z = 1
  1727.     ...         z = 2
  1728.  
  1729.     >>> calls_set_trace = C().calls_set_trace
  1730.  
  1731.     >>> doc = '''
  1732.     ... >>> a = 1
  1733.     ... >>> calls_set_trace()
  1734.     ... '''
  1735.     >>> parser = doctest.DocTestParser()
  1736.     >>> runner = doctest.DocTestRunner(verbose=False)
  1737.     >>> test = parser.get_doctest(doc, globals(), "foo", "foo.py", 0)
  1738.     >>> real_stdin = sys.stdin
  1739.     >>> sys.stdin = _FakeInput([
  1740.     ...    'print y',  # print data defined in the function
  1741.     ...    'step', 'step', 'step', 'step', 'step', 'step', 'print z',
  1742.     ...    'up', 'print x',
  1743.     ...    'up', 'print y',
  1744.     ...    'up', 'print foo',
  1745.     ...    'continue', # stop debugging
  1746.     ...    ''])
  1747.  
  1748.     >>> try:
  1749.     ...     runner.run(test)
  1750.     ... finally:
  1751.     ...     sys.stdin = real_stdin
  1752.     > <doctest test.test_doctest.test_pdb_set_trace_nested[0]>(5)calls_set_trace()
  1753.     -> self.f1()
  1754.     (Pdb) print y
  1755.     1
  1756.     (Pdb) step
  1757.     --Call--
  1758.     > <doctest test.test_doctest.test_pdb_set_trace_nested[0]>(7)f1()
  1759.     -> def f1(self):
  1760.     (Pdb) step
  1761.     > <doctest test.test_doctest.test_pdb_set_trace_nested[0]>(8)f1()
  1762.     -> x = 1
  1763.     (Pdb) step
  1764.     > <doctest test.test_doctest.test_pdb_set_trace_nested[0]>(9)f1()
  1765.     -> self.f2()
  1766.     (Pdb) step
  1767.     --Call--
  1768.     > <doctest test.test_doctest.test_pdb_set_trace_nested[0]>(11)f2()
  1769.     -> def f2(self):
  1770.     (Pdb) step
  1771.     > <doctest test.test_doctest.test_pdb_set_trace_nested[0]>(12)f2()
  1772.     -> z = 1
  1773.     (Pdb) step
  1774.     > <doctest test.test_doctest.test_pdb_set_trace_nested[0]>(13)f2()
  1775.     -> z = 2
  1776.     (Pdb) print z
  1777.     1
  1778.     (Pdb) up
  1779.     > <doctest test.test_doctest.test_pdb_set_trace_nested[0]>(9)f1()
  1780.     -> self.f2()
  1781.     (Pdb) print x
  1782.     1
  1783.     (Pdb) up
  1784.     > <doctest test.test_doctest.test_pdb_set_trace_nested[0]>(5)calls_set_trace()
  1785.     -> self.f1()
  1786.     (Pdb) print y
  1787.     1
  1788.     (Pdb) up
  1789.     > <doctest foo[1]>(1)<module>()
  1790.     -> calls_set_trace()
  1791.     (Pdb) print foo
  1792.     *** NameError: name 'foo' is not defined
  1793.     (Pdb) continue
  1794.     TestResults(failed=0, attempted=2)
  1795. """
  1796.  
  1797. def test_DocTestSuite():
  1798.     """DocTestSuite creates a unittest test suite from a doctest.
  1799.  
  1800.        We create a Suite by providing a module.  A module can be provided
  1801.        by passing a module object:
  1802.  
  1803.          >>> import unittest
  1804.          >>> import test.sample_doctest
  1805.          >>> suite = doctest.DocTestSuite(test.sample_doctest)
  1806.          >>> suite.run(unittest.TestResult())
  1807.          <unittest.TestResult run=9 errors=0 failures=4>
  1808.  
  1809.        We can also supply the module by name:
  1810.  
  1811.          >>> suite = doctest.DocTestSuite('test.sample_doctest')
  1812.          >>> suite.run(unittest.TestResult())
  1813.          <unittest.TestResult run=9 errors=0 failures=4>
  1814.  
  1815.        We can use the current module:
  1816.  
  1817.          >>> suite = test.sample_doctest.test_suite()
  1818.          >>> suite.run(unittest.TestResult())
  1819.          <unittest.TestResult run=9 errors=0 failures=4>
  1820.  
  1821.        We can supply global variables.  If we pass globs, they will be
  1822.        used instead of the module globals.  Here we'll pass an empty
  1823.        globals, triggering an extra error:
  1824.  
  1825.          >>> suite = doctest.DocTestSuite('test.sample_doctest', globs={})
  1826.          >>> suite.run(unittest.TestResult())
  1827.          <unittest.TestResult run=9 errors=0 failures=5>
  1828.  
  1829.        Alternatively, we can provide extra globals.  Here we'll make an
  1830.        error go away by providing an extra global variable:
  1831.  
  1832.          >>> suite = doctest.DocTestSuite('test.sample_doctest',
  1833.          ...                              extraglobs={'y': 1})
  1834.          >>> suite.run(unittest.TestResult())
  1835.          <unittest.TestResult run=9 errors=0 failures=3>
  1836.  
  1837.        You can pass option flags.  Here we'll cause an extra error
  1838.        by disabling the blank-line feature:
  1839.  
  1840.          >>> suite = doctest.DocTestSuite('test.sample_doctest',
  1841.          ...                      optionflags=doctest.DONT_ACCEPT_BLANKLINE)
  1842.          >>> suite.run(unittest.TestResult())
  1843.          <unittest.TestResult run=9 errors=0 failures=5>
  1844.  
  1845.        You can supply setUp and tearDown functions:
  1846.  
  1847.          >>> def setUp(t):
  1848.          ...     import test.test_doctest
  1849.          ...     test.test_doctest.sillySetup = True
  1850.  
  1851.          >>> def tearDown(t):
  1852.          ...     import test.test_doctest
  1853.          ...     del test.test_doctest.sillySetup
  1854.  
  1855.        Here, we installed a silly variable that the test expects:
  1856.  
  1857.          >>> suite = doctest.DocTestSuite('test.sample_doctest',
  1858.          ...      setUp=setUp, tearDown=tearDown)
  1859.          >>> suite.run(unittest.TestResult())
  1860.          <unittest.TestResult run=9 errors=0 failures=3>
  1861.  
  1862.        But the tearDown restores sanity:
  1863.  
  1864.          >>> import test.test_doctest
  1865.          >>> test.test_doctest.sillySetup
  1866.          Traceback (most recent call last):
  1867.          ...
  1868.          AttributeError: 'module' object has no attribute 'sillySetup'
  1869.  
  1870.        The setUp and tearDown funtions are passed test objects. Here
  1871.        we'll use the setUp function to supply the missing variable y:
  1872.  
  1873.          >>> def setUp(test):
  1874.          ...     test.globs['y'] = 1
  1875.  
  1876.          >>> suite = doctest.DocTestSuite('test.sample_doctest', setUp=setUp)
  1877.          >>> suite.run(unittest.TestResult())
  1878.          <unittest.TestResult run=9 errors=0 failures=3>
  1879.  
  1880.        Here, we didn't need to use a tearDown function because we
  1881.        modified the test globals, which are a copy of the
  1882.        sample_doctest module dictionary.  The test globals are
  1883.        automatically cleared for us after a test.
  1884.        """
  1885.  
  1886. def test_DocFileSuite():
  1887.     """We can test tests found in text files using a DocFileSuite.
  1888.  
  1889.        We create a suite by providing the names of one or more text
  1890.        files that include examples:
  1891.  
  1892.          >>> import unittest
  1893.          >>> suite = doctest.DocFileSuite('test_doctest.txt',
  1894.          ...                              'test_doctest2.txt',
  1895.          ...                              'test_doctest4.txt')
  1896.          >>> suite.run(unittest.TestResult())
  1897.          <unittest.TestResult run=3 errors=0 failures=3>
  1898.  
  1899.        The test files are looked for in the directory containing the
  1900.        calling module.  A package keyword argument can be provided to
  1901.        specify a different relative location.
  1902.  
  1903.          >>> import unittest
  1904.          >>> suite = doctest.DocFileSuite('test_doctest.txt',
  1905.          ...                              'test_doctest2.txt',
  1906.          ...                              'test_doctest4.txt',
  1907.          ...                              package='test')
  1908.          >>> suite.run(unittest.TestResult())
  1909.          <unittest.TestResult run=3 errors=0 failures=3>
  1910.  
  1911.        Support for using a package's __loader__.get_data() is also
  1912.        provided.
  1913.  
  1914.          >>> import unittest, pkgutil, test
  1915.          >>> added_loader = False
  1916.          >>> if not hasattr(test, '__loader__'):
  1917.          ...     test.__loader__ = pkgutil.get_loader(test)
  1918.          ...     added_loader = True
  1919.          >>> try:
  1920.          ...     suite = doctest.DocFileSuite('test_doctest.txt',
  1921.          ...                                  'test_doctest2.txt',
  1922.          ...                                  'test_doctest4.txt',
  1923.          ...                                  package='test')
  1924.          ...     suite.run(unittest.TestResult())
  1925.          ... finally:
  1926.          ...     if added_loader:
  1927.          ...         del test.__loader__
  1928.          <unittest.TestResult run=3 errors=0 failures=3>
  1929.  
  1930.        '/' should be used as a path separator.  It will be converted
  1931.        to a native separator at run time:
  1932.  
  1933.          >>> suite = doctest.DocFileSuite('../test/test_doctest.txt')
  1934.          >>> suite.run(unittest.TestResult())
  1935.          <unittest.TestResult run=1 errors=0 failures=1>
  1936.  
  1937.        If DocFileSuite is used from an interactive session, then files
  1938.        are resolved relative to the directory of sys.argv[0]:
  1939.  
  1940.          >>> import types, os.path, test.test_doctest
  1941.          >>> save_argv = sys.argv
  1942.          >>> sys.argv = [test.test_doctest.__file__]
  1943.          >>> suite = doctest.DocFileSuite('test_doctest.txt',
  1944.          ...                              package=types.ModuleType('__main__'))
  1945.          >>> sys.argv = save_argv
  1946.  
  1947.        By setting `module_relative=False`, os-specific paths may be
  1948.        used (including absolute paths and paths relative to the
  1949.        working directory):
  1950.  
  1951.          >>> # Get the absolute path of the test package.
  1952.          >>> test_doctest_path = os.path.abspath(test.test_doctest.__file__)
  1953.          >>> test_pkg_path = os.path.split(test_doctest_path)[0]
  1954.  
  1955.          >>> # Use it to find the absolute path of test_doctest.txt.
  1956.          >>> test_file = os.path.join(test_pkg_path, 'test_doctest.txt')
  1957.  
  1958.          >>> suite = doctest.DocFileSuite(test_file, module_relative=False)
  1959.          >>> suite.run(unittest.TestResult())
  1960.          <unittest.TestResult run=1 errors=0 failures=1>
  1961.  
  1962.        It is an error to specify `package` when `module_relative=False`:
  1963.  
  1964.          >>> suite = doctest.DocFileSuite(test_file, module_relative=False,
  1965.          ...                              package='test')
  1966.          Traceback (most recent call last):
  1967.          ValueError: Package may only be specified for module-relative paths.
  1968.  
  1969.        You can specify initial global variables:
  1970.  
  1971.          >>> suite = doctest.DocFileSuite('test_doctest.txt',
  1972.          ...                              'test_doctest2.txt',
  1973.          ...                              'test_doctest4.txt',
  1974.          ...                              globs={'favorite_color': 'blue'})
  1975.          >>> suite.run(unittest.TestResult())
  1976.          <unittest.TestResult run=3 errors=0 failures=2>
  1977.  
  1978.        In this case, we supplied a missing favorite color. You can
  1979.        provide doctest options:
  1980.  
  1981.          >>> suite = doctest.DocFileSuite('test_doctest.txt',
  1982.          ...                              'test_doctest2.txt',
  1983.          ...                              'test_doctest4.txt',
  1984.          ...                         optionflags=doctest.DONT_ACCEPT_BLANKLINE,
  1985.          ...                              globs={'favorite_color': 'blue'})
  1986.          >>> suite.run(unittest.TestResult())
  1987.          <unittest.TestResult run=3 errors=0 failures=3>
  1988.  
  1989.        And, you can provide setUp and tearDown functions:
  1990.  
  1991.          >>> def setUp(t):
  1992.          ...     import test.test_doctest
  1993.          ...     test.test_doctest.sillySetup = True
  1994.  
  1995.          >>> def tearDown(t):
  1996.          ...     import test.test_doctest
  1997.          ...     del test.test_doctest.sillySetup
  1998.  
  1999.        Here, we installed a silly variable that the test expects:
  2000.  
  2001.          >>> suite = doctest.DocFileSuite('test_doctest.txt',
  2002.          ...                              'test_doctest2.txt',
  2003.          ...                              'test_doctest4.txt',
  2004.          ...                              setUp=setUp, tearDown=tearDown)
  2005.          >>> suite.run(unittest.TestResult())
  2006.          <unittest.TestResult run=3 errors=0 failures=2>
  2007.  
  2008.        But the tearDown restores sanity:
  2009.  
  2010.          >>> import test.test_doctest
  2011.          >>> test.test_doctest.sillySetup
  2012.          Traceback (most recent call last):
  2013.          ...
  2014.          AttributeError: 'module' object has no attribute 'sillySetup'
  2015.  
  2016.        The setUp and tearDown funtions are passed test objects.
  2017.        Here, we'll use a setUp function to set the favorite color in
  2018.        test_doctest.txt:
  2019.  
  2020.          >>> def setUp(test):
  2021.          ...     test.globs['favorite_color'] = 'blue'
  2022.  
  2023.          >>> suite = doctest.DocFileSuite('test_doctest.txt', setUp=setUp)
  2024.          >>> suite.run(unittest.TestResult())
  2025.          <unittest.TestResult run=1 errors=0 failures=0>
  2026.  
  2027.        Here, we didn't need to use a tearDown function because we
  2028.        modified the test globals.  The test globals are
  2029.        automatically cleared for us after a test.
  2030.  
  2031.        Tests in a file run using `DocFileSuite` can also access the
  2032.        `__file__` global, which is set to the name of the file
  2033.        containing the tests:
  2034.  
  2035.          >>> suite = doctest.DocFileSuite('test_doctest3.txt')
  2036.          >>> suite.run(unittest.TestResult())
  2037.          <unittest.TestResult run=1 errors=0 failures=0>
  2038.  
  2039.        If the tests contain non-ASCII characters, we have to specify which
  2040.        encoding the file is encoded with. We do so by using the `encoding`
  2041.        parameter:
  2042.  
  2043.          >>> suite = doctest.DocFileSuite('test_doctest.txt',
  2044.          ...                              'test_doctest2.txt',
  2045.          ...                              'test_doctest4.txt',
  2046.          ...                              encoding='utf-8')
  2047.          >>> suite.run(unittest.TestResult())
  2048.          <unittest.TestResult run=3 errors=0 failures=2>
  2049.  
  2050.        """
  2051.  
  2052. def test_trailing_space_in_test():
  2053.     """
  2054.     Trailing spaces in expected output are significant:
  2055.  
  2056.       >>> x, y = 'foo', ''
  2057.       >>> print x, y
  2058.       foo \n
  2059.     """
  2060.  
  2061.  
  2062. def test_unittest_reportflags():
  2063.     """Default unittest reporting flags can be set to control reporting
  2064.  
  2065.     Here, we'll set the REPORT_ONLY_FIRST_FAILURE option so we see
  2066.     only the first failure of each test.  First, we'll look at the
  2067.     output without the flag.  The file test_doctest.txt file has two
  2068.     tests. They both fail if blank lines are disabled:
  2069.  
  2070.       >>> suite = doctest.DocFileSuite('test_doctest.txt',
  2071.       ...                          optionflags=doctest.DONT_ACCEPT_BLANKLINE)
  2072.       >>> import unittest
  2073.       >>> result = suite.run(unittest.TestResult())
  2074.       >>> print result.failures[0][1] # doctest: +ELLIPSIS
  2075.       Traceback ...
  2076.       Failed example:
  2077.           favorite_color
  2078.       ...
  2079.       Failed example:
  2080.           if 1:
  2081.       ...
  2082.  
  2083.     Note that we see both failures displayed.
  2084.  
  2085.       >>> old = doctest.set_unittest_reportflags(
  2086.       ...    doctest.REPORT_ONLY_FIRST_FAILURE)
  2087.  
  2088.     Now, when we run the test:
  2089.  
  2090.       >>> result = suite.run(unittest.TestResult())
  2091.       >>> print result.failures[0][1] # doctest: +ELLIPSIS
  2092.       Traceback ...
  2093.       Failed example:
  2094.           favorite_color
  2095.       Exception raised:
  2096.           ...
  2097.           NameError: name 'favorite_color' is not defined
  2098.       <BLANKLINE>
  2099.       <BLANKLINE>
  2100.  
  2101.     We get only the first failure.
  2102.  
  2103.     If we give any reporting options when we set up the tests,
  2104.     however:
  2105.  
  2106.       >>> suite = doctest.DocFileSuite('test_doctest.txt',
  2107.       ...     optionflags=doctest.DONT_ACCEPT_BLANKLINE | doctest.REPORT_NDIFF)
  2108.  
  2109.     Then the default eporting options are ignored:
  2110.  
  2111.       >>> result = suite.run(unittest.TestResult())
  2112.       >>> print result.failures[0][1] # doctest: +ELLIPSIS
  2113.       Traceback ...
  2114.       Failed example:
  2115.           favorite_color
  2116.       ...
  2117.       Failed example:
  2118.           if 1:
  2119.              print 'a'
  2120.              print
  2121.              print 'b'
  2122.       Differences (ndiff with -expected +actual):
  2123.             a
  2124.           - <BLANKLINE>
  2125.           +
  2126.             b
  2127.       <BLANKLINE>
  2128.       <BLANKLINE>
  2129.  
  2130.  
  2131.     Test runners can restore the formatting flags after they run:
  2132.  
  2133.       >>> ignored = doctest.set_unittest_reportflags(old)
  2134.  
  2135.     """
  2136.  
  2137. def test_testfile(): r"""
  2138. Tests for the `testfile()` function.  This function runs all the
  2139. doctest examples in a given file.  In its simple invokation, it is
  2140. called with the name of a file, which is taken to be relative to the
  2141. calling module.  The return value is (#failures, #tests).
  2142.  
  2143.     >>> doctest.testfile('test_doctest.txt') # doctest: +ELLIPSIS
  2144.     **********************************************************************
  2145.     File "...", line 6, in test_doctest.txt
  2146.     Failed example:
  2147.         favorite_color
  2148.     Exception raised:
  2149.         ...
  2150.         NameError: name 'favorite_color' is not defined
  2151.     **********************************************************************
  2152.     1 items had failures:
  2153.        1 of   2 in test_doctest.txt
  2154.     ***Test Failed*** 1 failures.
  2155.     TestResults(failed=1, attempted=2)
  2156.     >>> doctest.master = None  # Reset master.
  2157.  
  2158. (Note: we'll be clearing doctest.master after each call to
  2159. `doctest.testfile`, to supress warnings about multiple tests with the
  2160. same name.)
  2161.  
  2162. Globals may be specified with the `globs` and `extraglobs` parameters:
  2163.  
  2164.     >>> globs = {'favorite_color': 'blue'}
  2165.     >>> doctest.testfile('test_doctest.txt', globs=globs)
  2166.     TestResults(failed=0, attempted=2)
  2167.     >>> doctest.master = None  # Reset master.
  2168.  
  2169.     >>> extraglobs = {'favorite_color': 'red'}
  2170.     >>> doctest.testfile('test_doctest.txt', globs=globs,
  2171.     ...                  extraglobs=extraglobs) # doctest: +ELLIPSIS
  2172.     **********************************************************************
  2173.     File "...", line 6, in test_doctest.txt
  2174.     Failed example:
  2175.         favorite_color
  2176.     Expected:
  2177.         'blue'
  2178.     Got:
  2179.         'red'
  2180.     **********************************************************************
  2181.     1 items had failures:
  2182.        1 of   2 in test_doctest.txt
  2183.     ***Test Failed*** 1 failures.
  2184.     TestResults(failed=1, attempted=2)
  2185.     >>> doctest.master = None  # Reset master.
  2186.  
  2187. The file may be made relative to a given module or package, using the
  2188. optional `module_relative` parameter:
  2189.  
  2190.     >>> doctest.testfile('test_doctest.txt', globs=globs,
  2191.     ...                  module_relative='test')
  2192.     TestResults(failed=0, attempted=2)
  2193.     >>> doctest.master = None  # Reset master.
  2194.  
  2195. Verbosity can be increased with the optional `verbose` paremter:
  2196.  
  2197.     >>> doctest.testfile('test_doctest.txt', globs=globs, verbose=True)
  2198.     Trying:
  2199.         favorite_color
  2200.     Expecting:
  2201.         'blue'
  2202.     ok
  2203.     Trying:
  2204.         if 1:
  2205.            print 'a'
  2206.            print
  2207.            print 'b'
  2208.     Expecting:
  2209.         a
  2210.         <BLANKLINE>
  2211.         b
  2212.     ok
  2213.     1 items passed all tests:
  2214.        2 tests in test_doctest.txt
  2215.     2 tests in 1 items.
  2216.     2 passed and 0 failed.
  2217.     Test passed.
  2218.     TestResults(failed=0, attempted=2)
  2219.     >>> doctest.master = None  # Reset master.
  2220.  
  2221. The name of the test may be specified with the optional `name`
  2222. parameter:
  2223.  
  2224.     >>> doctest.testfile('test_doctest.txt', name='newname')
  2225.     ... # doctest: +ELLIPSIS
  2226.     **********************************************************************
  2227.     File "...", line 6, in newname
  2228.     ...
  2229.     TestResults(failed=1, attempted=2)
  2230.     >>> doctest.master = None  # Reset master.
  2231.  
  2232. The summary report may be supressed with the optional `report`
  2233. parameter:
  2234.  
  2235.     >>> doctest.testfile('test_doctest.txt', report=False)
  2236.     ... # doctest: +ELLIPSIS
  2237.     **********************************************************************
  2238.     File "...", line 6, in test_doctest.txt
  2239.     Failed example:
  2240.         favorite_color
  2241.     Exception raised:
  2242.         ...
  2243.         NameError: name 'favorite_color' is not defined
  2244.     TestResults(failed=1, attempted=2)
  2245.     >>> doctest.master = None  # Reset master.
  2246.  
  2247. The optional keyword argument `raise_on_error` can be used to raise an
  2248. exception on the first error (which may be useful for postmortem
  2249. debugging):
  2250.  
  2251.     >>> doctest.testfile('test_doctest.txt', raise_on_error=True)
  2252.     ... # doctest: +ELLIPSIS
  2253.     Traceback (most recent call last):
  2254.     UnexpectedException: ...
  2255.     >>> doctest.master = None  # Reset master.
  2256.  
  2257. If the tests contain non-ASCII characters, the tests might fail, since
  2258. it's unknown which encoding is used. The encoding can be specified
  2259. using the optional keyword argument `encoding`:
  2260.  
  2261.     >>> doctest.testfile('test_doctest4.txt') # doctest: +ELLIPSIS
  2262.     **********************************************************************
  2263.     File "...", line 7, in test_doctest4.txt
  2264.     Failed example:
  2265.         u'...'
  2266.     Expected:
  2267.         u'f\xf6\xf6'
  2268.     Got:
  2269.         u'f\xc3\xb6\xc3\xb6'
  2270.     **********************************************************************
  2271.     ...
  2272.     **********************************************************************
  2273.     1 items had failures:
  2274.        2 of   4 in test_doctest4.txt
  2275.     ***Test Failed*** 2 failures.
  2276.     TestResults(failed=2, attempted=4)
  2277.     >>> doctest.master = None  # Reset master.
  2278.  
  2279.     >>> doctest.testfile('test_doctest4.txt', encoding='utf-8')
  2280.     TestResults(failed=0, attempted=4)
  2281.     >>> doctest.master = None  # Reset master.
  2282. """
  2283.  
  2284. # old_test1, ... used to live in doctest.py, but cluttered it.  Note
  2285. # that these use the deprecated doctest.Tester, so should go away (or
  2286. # be rewritten) someday.
  2287.  
  2288. # Ignore all warnings about the use of class Tester in this module.
  2289. # Note that the name of this module may differ depending on how it's
  2290. # imported, so the use of __name__ is important.
  2291. warnings.filterwarnings("ignore", "class Tester", DeprecationWarning,
  2292.                         __name__, 0)
  2293.  
  2294. def old_test1(): r"""
  2295. >>> from doctest import Tester
  2296. >>> t = Tester(globs={'x': 42}, verbose=0)
  2297. >>> t.runstring(r'''
  2298. ...      >>> x = x * 2
  2299. ...      >>> print x
  2300. ...      42
  2301. ... ''', 'XYZ')
  2302. **********************************************************************
  2303. Line 3, in XYZ
  2304. Failed example:
  2305.     print x
  2306. Expected:
  2307.     42
  2308. Got:
  2309.     84
  2310. TestResults(failed=1, attempted=2)
  2311. >>> t.runstring(">>> x = x * 2\n>>> print x\n84\n", 'example2')
  2312. TestResults(failed=0, attempted=2)
  2313. >>> t.summarize()
  2314. **********************************************************************
  2315. 1 items had failures:
  2316.    1 of   2 in XYZ
  2317. ***Test Failed*** 1 failures.
  2318. TestResults(failed=1, attempted=4)
  2319. >>> t.summarize(verbose=1)
  2320. 1 items passed all tests:
  2321.    2 tests in example2
  2322. **********************************************************************
  2323. 1 items had failures:
  2324.    1 of   2 in XYZ
  2325. 4 tests in 2 items.
  2326. 3 passed and 1 failed.
  2327. ***Test Failed*** 1 failures.
  2328. TestResults(failed=1, attempted=4)
  2329. """
  2330.  
  2331. def old_test2(): r"""
  2332.         >>> from doctest import Tester
  2333.         >>> t = Tester(globs={}, verbose=1)
  2334.         >>> test = r'''
  2335.         ...    # just an example
  2336.         ...    >>> x = 1 + 2
  2337.         ...    >>> x
  2338.         ...    3
  2339.         ... '''
  2340.         >>> t.runstring(test, "Example")
  2341.         Running string Example
  2342.         Trying:
  2343.             x = 1 + 2
  2344.         Expecting nothing
  2345.         ok
  2346.         Trying:
  2347.             x
  2348.         Expecting:
  2349.             3
  2350.         ok
  2351.         0 of 2 examples failed in string Example
  2352.         TestResults(failed=0, attempted=2)
  2353. """
  2354.  
  2355. def old_test3(): r"""
  2356.         >>> from doctest import Tester
  2357.         >>> t = Tester(globs={}, verbose=0)
  2358.         >>> def _f():
  2359.         ...     '''Trivial docstring example.
  2360.         ...     >>> assert 2 == 2
  2361.         ...     '''
  2362.         ...     return 32
  2363.         ...
  2364.         >>> t.rundoc(_f)  # expect 0 failures in 1 example
  2365.         TestResults(failed=0, attempted=1)
  2366. """
  2367.  
  2368. def old_test4(): """
  2369.         >>> import types
  2370.         >>> m1 = types.ModuleType('_m1')
  2371.         >>> m2 = types.ModuleType('_m2')
  2372.         >>> test_data = \"""
  2373.         ... def _f():
  2374.         ...     '''>>> assert 1 == 1
  2375.         ...     '''
  2376.         ... def g():
  2377.         ...    '''>>> assert 2 != 1
  2378.         ...    '''
  2379.         ... class H:
  2380.         ...    '''>>> assert 2 > 1
  2381.         ...    '''
  2382.         ...    def bar(self):
  2383.         ...        '''>>> assert 1 < 2
  2384.         ...        '''
  2385.         ... \"""
  2386.         >>> exec test_data in m1.__dict__
  2387.         >>> exec test_data in m2.__dict__
  2388.         >>> m1.__dict__.update({"f2": m2._f, "g2": m2.g, "h2": m2.H})
  2389.  
  2390.         Tests that objects outside m1 are excluded:
  2391.  
  2392.         >>> from doctest import Tester
  2393.         >>> t = Tester(globs={}, verbose=0)
  2394.         >>> t.rundict(m1.__dict__, "rundict_test", m1)  # f2 and g2 and h2 skipped
  2395.         TestResults(failed=0, attempted=4)
  2396.  
  2397.         Once more, not excluding stuff outside m1:
  2398.  
  2399.         >>> t = Tester(globs={}, verbose=0)
  2400.         >>> t.rundict(m1.__dict__, "rundict_test_pvt")  # None are skipped.
  2401.         TestResults(failed=0, attempted=8)
  2402.  
  2403.         The exclusion of objects from outside the designated module is
  2404.         meant to be invoked automagically by testmod.
  2405.  
  2406.         >>> doctest.testmod(m1, verbose=False)
  2407.         TestResults(failed=0, attempted=4)
  2408. """
  2409.  
  2410. ######################################################################
  2411. ## Main
  2412. ######################################################################
  2413.  
  2414. def test_main():
  2415.     # Check the doctest cases in doctest itself:
  2416.     test_support.run_doctest(doctest, verbosity=True)
  2417.     # Check the doctest cases defined here:
  2418.     from test import test_doctest
  2419.     test_support.run_doctest(test_doctest, verbosity=True)
  2420.  
  2421. import trace, sys
  2422. def test_coverage(coverdir):
  2423.     tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix,],
  2424.                          trace=0, count=1)
  2425.     tracer.run('reload(doctest); test_main()')
  2426.     r = tracer.results()
  2427.     print 'Writing coverage results...'
  2428.     r.write_results(show_missing=True, summary=True,
  2429.                     coverdir=coverdir)
  2430.  
  2431. if __name__ == '__main__':
  2432.     if '-c' in sys.argv:
  2433.         test_coverage('/tmp/doctest.cover')
  2434.     else:
  2435.         test_main()
  2436.