Port test_unpack to doctest (patch #736962).
This commit is contained in:
parent
6bc937cfd2
commit
3981511070
@ -1,144 +1,131 @@
|
|||||||
from test.test_support import TestFailed, verbose
|
doctests = """
|
||||||
|
|
||||||
t = (1, 2, 3)
|
Unpack tuple
|
||||||
l = [4, 5, 6]
|
|
||||||
|
|
||||||
class Seq:
|
>>> t = (1, 2, 3)
|
||||||
def __getitem__(self, i):
|
>>> a, b, c = t
|
||||||
if i >= 0 and i < 3: return i
|
>>> a == 1 and b == 2 and c == 3
|
||||||
raise IndexError
|
True
|
||||||
|
|
||||||
a = -1
|
Unpack list
|
||||||
b = -1
|
|
||||||
c = -1
|
|
||||||
|
|
||||||
# unpack tuple
|
>>> l = [4, 5, 6]
|
||||||
if verbose:
|
>>> a, b, c = l
|
||||||
print 'unpack tuple'
|
>>> a == 4 and b == 5 and c == 6
|
||||||
a, b, c = t
|
True
|
||||||
if a != 1 or b != 2 or c != 3:
|
|
||||||
raise TestFailed
|
|
||||||
|
|
||||||
# unpack list
|
Unpack implied tuple
|
||||||
if verbose:
|
|
||||||
print 'unpack list'
|
|
||||||
a, b, c = l
|
|
||||||
if a != 4 or b != 5 or c != 6:
|
|
||||||
raise TestFailed
|
|
||||||
|
|
||||||
# unpack implied tuple
|
>>> a, b, c = 7, 8, 9
|
||||||
if verbose:
|
>>> a == 7 and b == 8 and c == 9
|
||||||
print 'unpack implied tuple'
|
True
|
||||||
a, b, c = 7, 8, 9
|
|
||||||
if a != 7 or b != 8 or c != 9:
|
|
||||||
raise TestFailed
|
|
||||||
|
|
||||||
# unpack string... fun!
|
Unpack string... fun!
|
||||||
if verbose:
|
|
||||||
print 'unpack string'
|
|
||||||
a, b, c = 'one'
|
|
||||||
if a != 'o' or b != 'n' or c != 'e':
|
|
||||||
raise TestFailed
|
|
||||||
|
|
||||||
# unpack generic sequence
|
>>> a, b, c = 'one'
|
||||||
if verbose:
|
>>> a == 'o' and b == 'n' and c == 'e'
|
||||||
print 'unpack sequence'
|
True
|
||||||
a, b, c = Seq()
|
|
||||||
if a != 0 or b != 1 or c != 2:
|
|
||||||
raise TestFailed
|
|
||||||
|
|
||||||
# single element unpacking, with extra syntax
|
Unpack generic sequence
|
||||||
if verbose:
|
|
||||||
print 'unpack single tuple/list'
|
|
||||||
st = (99,)
|
|
||||||
sl = [100]
|
|
||||||
a, = st
|
|
||||||
if a != 99:
|
|
||||||
raise TestFailed
|
|
||||||
b, = sl
|
|
||||||
if b != 100:
|
|
||||||
raise TestFailed
|
|
||||||
|
|
||||||
# now for some failures
|
>>> class Seq:
|
||||||
|
... def __getitem__(self, i):
|
||||||
|
... if i >= 0 and i < 3: return i
|
||||||
|
... raise IndexError
|
||||||
|
...
|
||||||
|
>>> a, b, c = Seq()
|
||||||
|
>>> a == 0 and b == 1 and c == 2
|
||||||
|
True
|
||||||
|
|
||||||
# unpacking non-sequence
|
Single element unpacking, with extra syntax
|
||||||
if verbose:
|
|
||||||
print 'unpack non-sequence'
|
|
||||||
try:
|
|
||||||
a, b, c = 7
|
|
||||||
raise TestFailed
|
|
||||||
except TypeError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
>>> st = (99,)
|
||||||
|
>>> sl = [100]
|
||||||
|
>>> a, = st
|
||||||
|
>>> a
|
||||||
|
99
|
||||||
|
>>> b, = sl
|
||||||
|
>>> b
|
||||||
|
100
|
||||||
|
|
||||||
# unpacking tuple of wrong size
|
Now for some failures
|
||||||
if verbose:
|
|
||||||
print 'unpack tuple wrong size'
|
|
||||||
try:
|
|
||||||
a, b = t
|
|
||||||
raise TestFailed
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# unpacking list of wrong size
|
Unpacking non-sequence
|
||||||
if verbose:
|
|
||||||
print 'unpack list wrong size'
|
|
||||||
try:
|
|
||||||
a, b = l
|
|
||||||
raise TestFailed
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
>>> a, b, c = 7
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
TypeError: unpack non-sequence
|
||||||
|
|
||||||
# unpacking sequence too short
|
Unpacking tuple of wrong size
|
||||||
if verbose:
|
|
||||||
print 'unpack sequence too short'
|
|
||||||
try:
|
|
||||||
a, b, c, d = Seq()
|
|
||||||
raise TestFailed
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
>>> a, b = t
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: too many values to unpack
|
||||||
|
|
||||||
# unpacking sequence too long
|
Unpacking tuple of wrong size
|
||||||
if verbose:
|
|
||||||
print 'unpack sequence too long'
|
|
||||||
try:
|
|
||||||
a, b = Seq()
|
|
||||||
raise TestFailed
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
>>> a, b = l
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: too many values to unpack
|
||||||
|
|
||||||
# unpacking a sequence where the test for too long raises a different
|
Unpacking sequence too short
|
||||||
# kind of error
|
|
||||||
class BozoError(Exception):
|
|
||||||
pass
|
|
||||||
|
|
||||||
class BadSeq:
|
>>> a, b, c, d = Seq()
|
||||||
def __getitem__(self, i):
|
Traceback (most recent call last):
|
||||||
if i >= 0 and i < 3:
|
...
|
||||||
return i
|
ValueError: need more than 3 values to unpack
|
||||||
elif i == 3:
|
|
||||||
raise BozoError
|
|
||||||
else:
|
|
||||||
raise IndexError
|
|
||||||
|
|
||||||
|
Unpacking sequence too long
|
||||||
|
|
||||||
# trigger code while not expecting an IndexError
|
>>> a, b = Seq()
|
||||||
if verbose:
|
Traceback (most recent call last):
|
||||||
print 'unpack sequence too long, wrong error'
|
...
|
||||||
try:
|
ValueError: too many values to unpack
|
||||||
a, b, c, d, e = BadSeq()
|
|
||||||
raise TestFailed
|
|
||||||
except BozoError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# trigger code while expecting an IndexError
|
Unpacking a sequence where the test for too long raises a different kind of
|
||||||
if verbose:
|
error
|
||||||
print 'unpack sequence too short, wrong error'
|
|
||||||
try:
|
>>> class BozoError(Exception):
|
||||||
a, b, c = BadSeq()
|
... pass
|
||||||
raise TestFailed
|
...
|
||||||
except BozoError:
|
>>> class BadSeq:
|
||||||
pass
|
... def __getitem__(self, i):
|
||||||
|
... if i >= 0 and i < 3:
|
||||||
|
... return i
|
||||||
|
... elif i == 3:
|
||||||
|
... raise BozoError
|
||||||
|
... else:
|
||||||
|
... raise IndexError
|
||||||
|
...
|
||||||
|
|
||||||
|
Trigger code while not expecting an IndexError (unpack sequence too long, wrong
|
||||||
|
error)
|
||||||
|
|
||||||
|
>>> a, b, c, d, e = BadSeq()
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
BozoError
|
||||||
|
|
||||||
|
Trigger code while expecting an IndexError (unpack sequence too short, wrong
|
||||||
|
error)
|
||||||
|
|
||||||
|
>>> a, b, c = BadSeq()
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
BozoError
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
__test__ = {'doctests' : doctests}
|
||||||
|
|
||||||
|
def test_main(verbose=False):
|
||||||
|
import sys
|
||||||
|
from test import test_support
|
||||||
|
from test import test_unpack
|
||||||
|
test_support.run_doctest(test_unpack, verbose)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
test_main(verbose=True)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user