| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  | from test_support import * | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | t = (1, 2, 3) | 
					
						
							|  |  |  | l = [4, 5, 6] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Seq: | 
					
						
							|  |  |  |     def __getitem__(self, i): | 
					
						
							| 
									
										
										
										
											1998-03-26 22:14:20 +00:00
										 |  |  |         if i >= 0 and i < 3: return i | 
					
						
							|  |  |  |         raise IndexError | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # 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 | 
					
						
							|  |  |  | BozoError = 'BozoError' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BadSeq: | 
					
						
							|  |  |  |     def __getitem__(self, i): | 
					
						
							| 
									
										
										
										
											1998-03-26 22:14:20 +00:00
										 |  |  |         if i >= 0 and i < 3: | 
					
						
							|  |  |  |             return i | 
					
						
							|  |  |  |         elif i == 3: | 
					
						
							|  |  |  |             raise BozoError | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             raise IndexError | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +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 |