| 
									
										
										
										
											2002-07-30 23:27:12 +00:00
										 |  |  | from test.test_support import TestFailed, verbose | 
					
						
							| 
									
										
										
										
											1997-08-25 22:17:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | t = (1, 2, 3) | 
					
						
							|  |  |  | l = [4, 5, 6] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Seq: | 
					
						
							|  |  |  |     def __getitem__(self, i): | 
					
						
							| 
									
										
										
										
											1998-03-26 19:42:58 +00:00
										 |  |  |         if i >= 0 and i < 3: return i | 
					
						
							|  |  |  |         raise IndexError | 
					
						
							| 
									
										
										
										
											1997-08-25 22:17:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | a = -1 | 
					
						
							|  |  |  | b = -1 | 
					
						
							|  |  |  | c = -1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # unpack tuple | 
					
						
							|  |  |  | if verbose: | 
					
						
							|  |  |  |     print 'unpack tuple' | 
					
						
							|  |  |  | a, b, c = t | 
					
						
							| 
									
										
										
										
											2000-12-12 23:11:42 +00:00
										 |  |  | if a != 1 or b != 2 or c != 3: | 
					
						
							| 
									
										
										
										
											1997-08-25 22:17:45 +00:00
										 |  |  |     raise TestFailed | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # unpack list | 
					
						
							|  |  |  | if verbose: | 
					
						
							|  |  |  |     print 'unpack list' | 
					
						
							|  |  |  | a, b, c = l | 
					
						
							| 
									
										
										
										
											2000-12-12 23:11:42 +00:00
										 |  |  | if a != 4 or b != 5 or c != 6: | 
					
						
							| 
									
										
										
										
											1997-08-25 22:17:45 +00:00
										 |  |  |     raise TestFailed | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # unpack implied tuple | 
					
						
							|  |  |  | if verbose: | 
					
						
							|  |  |  |     print 'unpack implied tuple' | 
					
						
							|  |  |  | a, b, c = 7, 8, 9 | 
					
						
							| 
									
										
										
										
											2000-12-12 23:11:42 +00:00
										 |  |  | if a != 7 or b != 8 or c != 9: | 
					
						
							| 
									
										
										
										
											1997-08-25 22:17:45 +00:00
										 |  |  |     raise TestFailed | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # unpack string... fun! | 
					
						
							|  |  |  | if verbose: | 
					
						
							|  |  |  |     print 'unpack string' | 
					
						
							|  |  |  | a, b, c = 'one' | 
					
						
							| 
									
										
										
										
											2000-12-12 23:11:42 +00:00
										 |  |  | if a != 'o' or b != 'n' or c != 'e': | 
					
						
							| 
									
										
										
										
											1997-08-25 22:17:45 +00:00
										 |  |  |     raise TestFailed | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # unpack generic sequence | 
					
						
							|  |  |  | if verbose: | 
					
						
							|  |  |  |     print 'unpack sequence' | 
					
						
							|  |  |  | a, b, c = Seq() | 
					
						
							| 
									
										
										
										
											2000-12-12 23:11:42 +00:00
										 |  |  | if a != 0 or b != 1 or c != 2: | 
					
						
							| 
									
										
										
										
											1997-08-25 22:17:45 +00:00
										 |  |  |     raise TestFailed | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-12 14:45:58 +00:00
										 |  |  | # single element unpacking, with extra syntax | 
					
						
							|  |  |  | if verbose: | 
					
						
							|  |  |  |     print 'unpack single tuple/list' | 
					
						
							|  |  |  | st = (99,) | 
					
						
							|  |  |  | sl = [100] | 
					
						
							|  |  |  | a, = st | 
					
						
							| 
									
										
										
										
											2000-12-12 23:11:42 +00:00
										 |  |  | if a != 99: | 
					
						
							| 
									
										
										
										
											2000-10-12 14:45:58 +00:00
										 |  |  |     raise TestFailed | 
					
						
							|  |  |  | b, = sl | 
					
						
							| 
									
										
										
										
											2000-12-12 23:11:42 +00:00
										 |  |  | if b != 100: | 
					
						
							| 
									
										
										
										
											2000-10-12 14:45:58 +00:00
										 |  |  |     raise TestFailed | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-08-25 22:17:45 +00:00
										 |  |  | # 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 | 
					
						
							| 
									
										
										
										
											2000-08-18 14:50:20 +00:00
										 |  |  | class BozoError(Exception): | 
					
						
							|  |  |  |     pass | 
					
						
							| 
									
										
										
										
											1997-08-25 22:17:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class BadSeq: | 
					
						
							|  |  |  |     def __getitem__(self, i): | 
					
						
							| 
									
										
										
										
											1998-03-26 19:42:58 +00:00
										 |  |  |         if i >= 0 and i < 3: | 
					
						
							|  |  |  |             return i | 
					
						
							|  |  |  |         elif i == 3: | 
					
						
							|  |  |  |             raise BozoError | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             raise IndexError | 
					
						
							| 
									
										
										
										
											1997-08-25 22:17:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # 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 |