summaryrefslogtreecommitdiff
path: root/lib/python2.7/test/test_unpack.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/test/test_unpack.py')
-rw-r--r--lib/python2.7/test/test_unpack.py130
1 files changed, 130 insertions, 0 deletions
diff --git a/lib/python2.7/test/test_unpack.py b/lib/python2.7/test/test_unpack.py
new file mode 100644
index 0000000..7ddbc62
--- /dev/null
+++ b/lib/python2.7/test/test_unpack.py
@@ -0,0 +1,130 @@
+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: 'int' object is not iterable
+
+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):
+ from test import test_support
+ from test import test_unpack
+ test_support.run_doctest(test_unpack, verbose)
+
+if __name__ == "__main__":
+ test_main(verbose=True)