Viewing file: test_unpack.py (2.45 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
from test.test_support import TestFailed, verbose
t = (1, 2, 3) l = [4, 5, 6]
class Seq: def __getitem__(self, i): if i >= 0 and i < 3: return i raise IndexError
a = -1 b = -1 c = -1
# unpack tuple if verbose: print 'unpack tuple' a, b, c = t if a != 1 or b != 2 or c != 3: raise TestFailed
# unpack list if verbose: print 'unpack list' a, b, c = l if a != 4 or b != 5 or c != 6: raise TestFailed
# unpack implied tuple if verbose: print 'unpack implied tuple' a, b, c = 7, 8, 9 if a != 7 or b != 8 or c != 9: raise TestFailed
# 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 if verbose: print 'unpack sequence' a, b, c = Seq() if a != 0 or b != 1 or c != 2: raise TestFailed
# single element unpacking, with extra syntax 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
# unpacking non-sequence if verbose: print 'unpack non-sequence' try: a, b, c = 7 raise TestFailed except TypeError: pass
# unpacking tuple of wrong size if verbose: print 'unpack tuple wrong size' try: a, b = t raise TestFailed except ValueError: pass
# unpacking list of wrong size if verbose: print 'unpack list wrong size' try: a, b = l raise TestFailed except ValueError: pass
# unpacking sequence too short if verbose: print 'unpack sequence too short' try: a, b, c, d = Seq() raise TestFailed except ValueError: pass
# unpacking sequence too long if verbose: print 'unpack sequence too long' try: a, b = Seq() raise TestFailed except ValueError: pass
# unpacking a sequence where the test for too long raises a different # kind of error class BozoError(Exception): pass
class BadSeq: 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 if verbose: print 'unpack sequence too long, wrong error' try: a, b, c, d, e = BadSeq() raise TestFailed except BozoError: pass
# trigger code while expecting an IndexError if verbose: print 'unpack sequence too short, wrong error' try: a, b, c = BadSeq() raise TestFailed except BozoError: pass
|