ironic doctest bug?

Discussion in 'Python' started by Alan G Isaac, Aug 13, 2004.

  1. Alan G Isaac

    Alan G Isaac Guest

    > python doctest.py -v
    Running doctest.__doc__
    Trying: [1, 2, 3].remove(42)
    Expecting:
    Traceback (most recent call last):
    File "<stdin>", line 1, in ?
    ValueError: list.remove(x): x not in list
    ok
    Trying: x = 12
    Expecting: nothing
    ok
    Trying: x
    Expecting: 12
    ok
    Trying:
    if x == 13:
    print "yes"
    else:
    print "no"
    print "NO"
    print "NO!!!"
    Expecting:
    no
    NO
    NO!!!
    ok
    Trying:
    if "yes" == \
    "y" + \
    "es": # in the source code you'll see the doubled backslashes
    print 'yes'
    Expecting: yes
    ok
    Trying: assert "Easy!"
    Expecting: nothing
    ok
    Trying: import math
    Expecting: nothing
    ok
    Trying: math.floor(1.9)
    Expecting: 1.0
    ok
    0 of 8 examples failed in doctest.__doc__
    Running doctest.DocTestSuite.__doc__
    0 of 0 examples failed in doctest.DocTestSuite.__doc__
    Running doctest.DocTestTestFailure.__doc__
    0 of 0 examples failed in doctest.DocTestTestFailure.__doc__
    Running doctest.Tester.__doc__
    Trying: from doctest import Tester
    Expecting: nothing
    ok
    Trying: t = Tester(globs={'x': 42}, verbose=0)
    Expecting: nothing
    ok
    Trying:
    t.runstring(r'''
    >>> x = x * 2
    >>> print x

    42
    ''', 'XYZ')
    Expecting:
    *****************************************************************
    Failure in example: print x
    from line #2 of XYZ
    Expected: 42
    Got: 84
    (1, 2)
    ok
    Trying: t.runstring(">>> x = x * 2\n>>> print x\n84\n", 'example2')
    Expecting: (0, 2)
    ok
    Trying: t.summarize()
    Expecting:
    *****************************************************************
    1 items had failures:
    1 of 2 in XYZ
    ***Test Failed*** 1 failures.
    (1, 4)
    ok
    Trying: t.summarize(verbose=1)
    Expecting:
    1 items passed all tests:
    2 tests in example2
    *****************************************************************
    1 items had failures:
    1 of 2 in XYZ
    4 tests in 2 items.
    3 passed and 1 failed.
    ***Test Failed*** 1 failures.
    (1, 4)
    ok
    0 of 6 examples failed in doctest.Tester.__doc__
    Running doctest.Tester._Tester__record_outcome.__doc__
    0 of 0 examples failed in doctest.Tester._Tester__record_outcome.__doc__
    Running doctest.Tester._Tester__runone.__doc__
    0 of 0 examples failed in doctest.Tester._Tester__runone.__doc__
    Running doctest.Tester.__init__.__doc__
    0 of 0 examples failed in doctest.Tester.__init__.__doc__
    Running doctest.Tester.merge.__doc__
    Trying: from doctest import Tester
    Expecting: nothing
    ok
    Trying: t1 = Tester(globs={}, verbose=0)
    Expecting: nothing
    ok
    Trying:
    t1.runstring('''
    >>> x = 12
    >>> print x

    12
    ''', "t1example")
    Expecting: (0, 2)
    ok
    Trying: t2 = Tester(globs={}, verbose=0)
    Expecting: nothing
    ok
    Trying:
    t2.runstring('''
    >>> x = 13
    >>> print x

    13
    ''', "t2example")
    Expecting: (0, 2)
    ok
    Trying: common = ">>> assert 1 + 2 == 3\n"
    Expecting: nothing
    ok
    Trying: t1.runstring(common, "common")
    Expecting: (0, 1)
    ok
    Trying: t2.runstring(common, "common")
    Expecting: (0, 1)
    ok
    Trying: t1.merge(t2)
    Expecting: *** Tester.merge: 'common' in both testers; summing outcomes.
    ok
    Trying: t1.summarize(1)
    Expecting:
    3 items passed all tests:
    2 tests in common
    2 tests in t1example
    2 tests in t2example
    6 tests in 3 items.
    6 passed and 0 failed.
    Test passed.
    (0, 6)
    ok
    0 of 10 examples failed in doctest.Tester.merge.__doc__
    Running doctest.Tester.run__test__.__doc__
    0 of 0 examples failed in doctest.Tester.run__test__.__doc__
    Running doctest.Tester.rundict.__doc__
    Trying: import new
    Expecting: nothing
    ok
    Trying: m1 = new.module('_m1')
    Expecting: nothing
    ok
    Trying: m2 = new.module('_m2')
    Expecting: nothing
    ok
    Trying:
    test_data = """
    def _f():
    '''>>> assert 1 == 1
    '''
    def g():
    '''>>> assert 2 != 1
    '''
    class H:
    '''>>> assert 2 > 1
    '''
    def bar(self):
    '''>>> assert 1 < 2
    '''
    """
    Expecting: nothing
    ok
    Trying: exec test_data in m1.__dict__
    Expecting: nothing
    ok
    Trying: exec test_data in m2.__dict__
    Expecting: nothing
    ok
    Trying: m1.__dict__.update({"f2": m2._f, "g2": m2.g, "h2": m2.H})
    Expecting: nothing
    ok
    Trying: t = Tester(globs={}, verbose=0, isprivate=is_private)
    Expecting: nothing
    ok
    Trying:
    t.rundict(m1.__dict__, "rundict_test", m1) # _f, f2 and g2 and h2 skipped
    Expecting: (0, 3)
    ok
    Trying: t = Tester(globs={}, verbose=0)
    Expecting: nothing
    ok
    Trying:
    t.rundict(m1.__dict__, "rundict_test_pvt", m1) # Only f2, g2 and h2 skipped
    Expecting: (0, 4)
    ok
    Trying: t = Tester(globs={}, verbose=0)
    Expecting: nothing
    ok
    Trying: t.rundict(m1.__dict__, "rundict_test_pvt") # None are skipped.
    Expecting: (0, 8)
    ok
    Trying: testmod(m1, isprivate=is_private)
    Expecting: (0, 3)
    *****************************************************************
    Failure in example: testmod(m1, isprivate=is_private)
    from line #55 of doctest.Tester.rundict
    Expected: (0, 3)
    Got:
    Running _m1.__doc__
    0 of 0 examples failed in _m1.__doc__
    Running _m1.H.__doc__
    Trying: assert 2 > 1
    Expecting: nothing
    ok
    0 of 1 examples failed in _m1.H.__doc__
    Running _m1.H.bar.__doc__
    Trying: assert 1 < 2
    Expecting: nothing
    ok
    0 of 1 examples failed in _m1.H.bar.__doc__
    Running _m1.g.__doc__
    Trying: assert 2 != 1
    Expecting: nothing
    ok
    0 of 1 examples failed in _m1.g.__doc__
    1 items had no tests:
    _m1
    3 items passed all tests:
    1 tests in _m1.H
    1 tests in _m1.H.bar
    1 tests in _m1.g
    3 tests in 4 items.
    3 passed and 0 failed.
    Test passed.
    (0, 3)
    1 of 14 examples failed in doctest.Tester.rundict.__doc__
    Running doctest.Tester.rundoc.__doc__
    Trying: t = Tester(globs={}, verbose=0)
    Expecting: nothing
    ok
    Trying:
    def _f():
    '''Trivial docstring example.
    >>> assert 2 == 2

    '''
    return 32
    Expecting: nothing
    ok
    Trying: t.rundoc(_f) # expect 0 failures in 1 example
    Expecting: (0, 1)
    ok
    0 of 3 examples failed in doctest.Tester.rundoc.__doc__
    Running doctest.Tester.runstring.__doc__
    Trying: t = Tester(globs={}, verbose=1)
    Expecting: nothing
    ok
    Trying:
    test = r'''
    # just an example
    >>> x = 1 + 2
    >>> x

    3
    '''
    Expecting: nothing
    ok
    Trying: t.runstring(test, "Example")
    Expecting:
    Running string Example
    Trying: x = 1 + 2
    Expecting: nothing
    ok
    Trying: x
    Expecting: 3
    ok
    0 of 2 examples failed in string Example
    (0, 2)
    ok
    0 of 3 examples failed in doctest.Tester.runstring.__doc__
    Running doctest.Tester.summarize.__doc__
    0 of 0 examples failed in doctest.Tester.summarize.__doc__
    Running doctest._SpoofOut.__doc__
    0 of 0 examples failed in doctest._SpoofOut.__doc__
    Running doctest._SpoofOut.__init__.__doc__
    0 of 0 examples failed in doctest._SpoofOut.__init__.__doc__
    Running doctest._SpoofOut.clear.__doc__
    0 of 0 examples failed in doctest._SpoofOut.clear.__doc__
    Running doctest._SpoofOut.flush.__doc__
    0 of 0 examples failed in doctest._SpoofOut.flush.__doc__
    Running doctest._SpoofOut.get.__doc__
    0 of 0 examples failed in doctest._SpoofOut.get.__doc__
    Running doctest._SpoofOut.write.__doc__
    0 of 0 examples failed in doctest._SpoofOut.write.__doc__
    Running doctest._TestClass.__doc__
    Trying: _TestClass(13).get() + _TestClass(-12).get()
    Expecting: 1
    ok
    Trying: hex(_TestClass(13).square().get())
    Expecting: '0xa9'
    ok
    0 of 2 examples failed in doctest._TestClass.__doc__
    Running doctest._TestClass.__init__.__doc__
    Trying: t = _TestClass(123)
    Expecting: nothing
    ok
    Trying: print t.get()
    Expecting: 123
    ok
    0 of 2 examples failed in doctest._TestClass.__init__.__doc__
    Running doctest._TestClass.get.__doc__
    Trying: x = _TestClass(-42)
    Expecting: nothing
    ok
    Trying: print x.get()
    Expecting: -42
    ok
    0 of 2 examples failed in doctest._TestClass.get.__doc__
    Running doctest._TestClass.square.__doc__
    Trying: _TestClass(13).square().get()
    Expecting: 169
    ok
    0 of 1 examples failed in doctest._TestClass.square.__doc__
    Running doctest._expect.__doc__
    0 of 0 examples failed in doctest._expect.__doc__
    Running doctest._extract_doctests.__doc__
    0 of 0 examples failed in doctest._extract_doctests.__doc__
    Running doctest._extract_examples.__doc__
    0 of 0 examples failed in doctest._extract_examples.__doc__
    Running doctest._extract_future_flags.__doc__
    0 of 0 examples failed in doctest._extract_future_flags.__doc__
    Running doctest._find_tests.__doc__
    0 of 0 examples failed in doctest._find_tests.__doc__
    Running doctest._from_module.__doc__
    0 of 0 examples failed in doctest._from_module.__doc__
    Running doctest._get_doctest.__doc__
    0 of 0 examples failed in doctest._get_doctest.__doc__
    Running doctest._normalize_module.__doc__
    0 of 0 examples failed in doctest._normalize_module.__doc__
    Running doctest._run_examples.__doc__
    0 of 0 examples failed in doctest._run_examples.__doc__
    Running doctest._run_examples_inner.__doc__
    0 of 0 examples failed in doctest._run_examples_inner.__doc__
    Running doctest._tag_out.__doc__
    0 of 0 examples failed in doctest._tag_out.__doc__
    Running doctest._test.__doc__
    0 of 0 examples failed in doctest._test.__doc__
    Running doctest._utest.__doc__
    0 of 0 examples failed in doctest._utest.__doc__
    Running doctest.debug.__doc__
    0 of 0 examples failed in doctest.debug.__doc__
    Running doctest.is_private.__doc__
    Trying: is_private("a.b", "my_func")
    Expecting: False
    ok
    Trying: is_private("____", "_my_func")
    Expecting: True
    ok
    Trying: is_private("someclass", "__init__")
    Expecting: False
    ok
    Trying: is_private("sometypo", "__init_")
    Expecting: True
    ok
    Trying: is_private("x.y.z", "_")
    Expecting: True
    ok
    Trying: is_private("_x.y.z", "__")
    Expecting: False
    ok
    Trying: is_private("", "") # senseless but consistent
    Expecting: False
    ok
    0 of 7 examples failed in doctest.is_private.__doc__
    Running doctest.run_docstring_examples.__doc__
    0 of 0 examples failed in doctest.run_docstring_examples.__doc__
    Running doctest.testmod.__doc__
    0 of 0 examples failed in doctest.testmod.__doc__
    Running doctest.testsource.__doc__
    0 of 0 examples failed in doctest.testsource.__doc__
    Running doctest.__test__._TestClass.__doc__
    Trying: _TestClass(13).get() + _TestClass(-12).get()
    Expecting: 1
    ok
    Trying: hex(_TestClass(13).square().get())
    Expecting: '0xa9'
    ok
    0 of 2 examples failed in doctest.__test__._TestClass.__doc__
    Running doctest.__test__._TestClass.__init__.__doc__
    Trying: t = _TestClass(123)
    Expecting: nothing
    ok
    Trying: print t.get()
    Expecting: 123
    ok
    0 of 2 examples failed in doctest.__test__._TestClass.__init__.__doc__
    Running doctest.__test__._TestClass.get.__doc__
    Trying: x = _TestClass(-42)
    Expecting: nothing
    ok
    Trying: print x.get()
    Expecting: -42
    ok
    0 of 2 examples failed in doctest.__test__._TestClass.get.__doc__
    Running doctest.__test__._TestClass.square.__doc__
    Trying: _TestClass(13).square().get()
    Expecting: 169
    ok
    0 of 1 examples failed in doctest.__test__._TestClass.square.__doc__
    Running string doctest.__test__.bool-int equivalence
    Trying: 4 == 4
    Expecting: 1
    ok
    Trying: 4 == 4
    Expecting: True
    ok
    Trying: 4 > 4
    Expecting: 0
    ok
    Trying: 4 > 4
    Expecting: False
    ok
    0 of 4 examples failed in string doctest.__test__.bool-int equivalence
    Running string doctest.__test__.string
    Trying: x = 1; y = 2
    Expecting: nothing
    ok
    Trying: x + y, x * y
    Expecting: (3, 2)
    ok
    0 of 2 examples failed in string doctest.__test__.string
    30 items had no tests:
    doctest.DocTestSuite
    doctest.DocTestTestFailure
    doctest.Tester._Tester__record_outcome
    doctest.Tester._Tester__runone
    doctest.Tester.__init__
    doctest.Tester.run__test__
    doctest.Tester.summarize
    doctest._SpoofOut
    doctest._SpoofOut.__init__
    doctest._SpoofOut.clear
    doctest._SpoofOut.flush
    doctest._SpoofOut.get
    doctest._SpoofOut.write
    doctest._expect
    doctest._extract_doctests
    doctest._extract_examples
    doctest._extract_future_flags
    doctest._find_tests
    doctest._from_module
    doctest._get_doctest
    doctest._normalize_module
    doctest._run_examples
    doctest._run_examples_inner
    doctest._tag_out
    doctest._test
    doctest._utest
    doctest.debug
    doctest.run_docstring_examples
    doctest.testmod
    doctest.testsource
    16 items passed all tests:
    8 tests in doctest
    6 tests in doctest.Tester
    10 tests in doctest.Tester.merge
    3 tests in doctest.Tester.rundoc
    3 tests in doctest.Tester.runstring
    2 tests in doctest._TestClass
    2 tests in doctest._TestClass.__init__
    2 tests in doctest._TestClass.get
    1 tests in doctest._TestClass.square
    2 tests in doctest.__test__._TestClass
    2 tests in doctest.__test__._TestClass.__init__
    2 tests in doctest.__test__._TestClass.get
    1 tests in doctest.__test__._TestClass.square
    4 tests in doctest.__test__.bool-int equivalence
    2 tests in doctest.__test__.string
    7 tests in doctest.is_private
    *****************************************************************
    1 items had failures:
    1 of 14 in doctest.Tester.rundict
    71 tests in 47 items.
    70 passed and 1 failed.
    ***Test Failed*** 1 failures.
    Alan G Isaac, Aug 13, 2004
    #1
    1. Advertising

  2. Alan G Isaac

    Alan G Isaac Guest

    "Alan G Isaac" <> wrote in message
    news:...
    > 1 items had failures:
    > 1 of 14 in doctest.Tester.rundict
    > 71 tests in 47 items.
    > 70 passed and 1 failed.
    > ***Test Failed*** 1 failures.


    This was the punchline of course.
    Am I overlooking something?
    Thanks,
    Alan Isaac
    Alan G Isaac, Aug 15, 2004
    #2
    1. Advertising

  3. Alan G Isaac

    Tim Peters Guest

    [Alan G Isaac]
    >> 1 items had failures:
    >> 1 of 14 in doctest.Tester.rundict
    >> 71 tests in 47 items.
    >> 70 passed and 1 failed.
    >> ***Test Failed*** 1 failures.


    > This was the punchline of course.
    > Am I overlooking something?


    Mostly just this:

    http://www.catb.org/~esr/faqs/smart-questions.html

    You didn't say which version of Python, or which OS, and didn't ask a
    specific question despite a long original post. Those points all
    conspired to make the post ignorable.

    My guess is that you're using some flavor of Python 2.3. Your
    original post contained the only relevant clue:

    > python doctest.py -v


    If you had run it without -v, my guess is that it would have passed.

    Looking at the output with -v identifies the failing test when running
    with -v. That's

    >>> testmod(m1, isprivate=is_private)


    in doctest.Tester.rundict's docstring.

    Looking at the other tests in the docstring shows that they all add
    verbose=0 to their testmod() call, and that this one was unique in not
    doing so. So someone was probably a teensy careless when they added
    this test. Change the test to

    >>> testmod(m1, isprivate=is_private, verbose=0)


    so it looks like the others, and then it passes with or without -v.

    It's too minor a bug to justify a new Python 2.3 release <wink>. The
    problem doesn't exist in Python CVS, so it won't happen in 2.4.
    Tim Peters, Aug 15, 2004
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Steven Taschuk

    Re: Simulte user input using doctest

    Steven Taschuk, Jun 27, 2003, in forum: Python
    Replies:
    0
    Views:
    1,205
    Steven Taschuk
    Jun 27, 2003
  2. Paul M

    ps2, IDLE, and doctest

    Paul M, Oct 17, 2003, in forum: Python
    Replies:
    0
    Views:
    395
    Paul M
    Oct 17, 2003
  3. Replies:
    0
    Views:
    260
  4. Edward K. Ream

    doctest bug?

    Edward K. Ream, Jul 19, 2004, in forum: Python
    Replies:
    3
    Views:
    395
    Tim Peters
    Jul 20, 2004
  5. Michele Simionato

    doctest bug with nested triple quotes

    Michele Simionato, Aug 2, 2005, in forum: Python
    Replies:
    3
    Views:
    584
    Michele Simionato
    Aug 2, 2005
Loading...

Share This Page