summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_unpack.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_unpack.py')
-rw-r--r--Lib/test/test_unpack.py275
1 files changed, 131 insertions, 144 deletions
diff --git a/Lib/test/test_unpack.py b/Lib/test/test_unpack.py
index a8fd09c..3f72648 100644
--- a/Lib/test/test_unpack.py
+++ b/Lib/test/test_unpack.py
@@ -1,144 +1,131 @@
-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
+doctests = """
+
+Unpack tuple
+
+ >>> t = (1, 2, 3)
+ >>> a, b, c = t
+ >>> a == 1 and b == 2 and c == 3
+ True
+
+Unpack list
+
+ >>> l = [4, 5, 6]
+ >>> a, b, c = l
+ >>> a == 4 and b == 5 and c == 6
+ True
+
+Unpack implied tuple
+
+ >>> a, b, c = 7, 8, 9
+ >>> a == 7 and b == 8 and c == 9
+ True
+
+Unpack string... fun!
+
+ >>> a, b, c = 'one'
+ >>> a == 'o' and b == 'n' and c == 'e'
+ True
+
+Unpack generic sequence
+
+ >>> 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
+
+Single element unpacking, with extra syntax
+
+ >>> st = (99,)
+ >>> sl = [100]
+ >>> a, = st
+ >>> a
+ 99
+ >>> b, = sl
+ >>> b
+ 100
+
+Now for some failures
+
+Unpacking non-sequence
+
+ >>> a, b, c = 7
+ Traceback (most recent call last):
+ ...
+ TypeError: unpack non-sequence
+
+Unpacking tuple of wrong size
+
+ >>> a, b = t
+ Traceback (most recent call last):
+ ...
+ ValueError: too many values to unpack
+
+Unpacking tuple of wrong size
+
+ >>> a, b = l
+ Traceback (most recent call last):
+ ...
+ ValueError: too many values to unpack
+
+Unpacking sequence too short
+
+ >>> a, b, c, d = Seq()
+ Traceback (most recent call last):
+ ...
+ ValueError: need more than 3 values to unpack
+
+Unpacking sequence too long
+
+ >>> a, b = Seq()
+ Traceback (most recent call last):
+ ...
+ ValueError: too many values to unpack
+
+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 (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)