| 
									
										
										
										
											2009-07-19 21:01:52 +00:00
										 |  |  | """Various utility functions.""" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-22 00:15:53 +00:00
										 |  |  | __unittest = True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-05 13:14:43 +00:00
										 |  |  | _MAX_LENGTH = 80 | 
					
						
							|  |  |  | def safe_repr(obj, short=False): | 
					
						
							| 
									
										
											  
											
												Merged revisions 78227,78229,78288,78348,78377,78770,78774-78776,78810 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r78227 | michael.foord | 2010-02-18 14:30:09 -0600 (Thu, 18 Feb 2010) | 1 line
  unittest.TestCase uses safe_repr for producing failure messages. Partial fix for issue 7956
........
  r78229 | michael.foord | 2010-02-18 15:37:07 -0600 (Thu, 18 Feb 2010) | 1 line
  Fix unittest.TestCase.assertDictContainsSubset so it can't die with unicode issues when constructing failure messages. Issue 7956
........
  r78288 | michael.foord | 2010-02-21 08:48:59 -0600 (Sun, 21 Feb 2010) | 1 line
  Silence UnicodeWarning in crazy unittest test.
........
  r78348 | michael.foord | 2010-02-22 17:28:32 -0600 (Mon, 22 Feb 2010) | 1 line
  Support for old TestResult object (unittest) with warnings when using unsupported features.
........
  r78377 | michael.foord | 2010-02-23 11:00:53 -0600 (Tue, 23 Feb 2010) | 1 line
  unittest.TestResult can now be used with the TextTestRunner. TextTestRunner compatible with old TestResult objects.
........
  r78770 | michael.foord | 2010-03-07 14:22:12 -0600 (Sun, 07 Mar 2010) | 1 line
  Fix for potentials errors in constructing unittest failure messages. Plus skipped test methods no longer run setUp and tearDown (Issue 8059)
........
  r78774 | michael.foord | 2010-03-07 16:04:55 -0600 (Sun, 07 Mar 2010) | 1 line
  Addition of setUpClass and setUpModule shared fixtures to unittest.
........
  r78775 | michael.foord | 2010-03-07 17:10:36 -0600 (Sun, 07 Mar 2010) | 1 line
  Fix accidental name rebinding in unittest py3k warning filtering.
........
  r78776 | michael.foord | 2010-03-07 17:16:20 -0600 (Sun, 07 Mar 2010) | 1 line
  Remove accidental print statement from last commit.
........
  r78810 | raymond.hettinger | 2010-03-09 02:44:18 -0600 (Tue, 09 Mar 2010) | 5 lines
  Improve the basic example.
  * Show both the decorator and regular form for assertRaises()
  * Use assertTrue() instead of assertIn() to teach useful minimal subset of the API
........
											
										 
											2010-03-14 15:04:17 +00:00
										 |  |  |     try: | 
					
						
							| 
									
										
										
										
											2010-06-05 13:14:43 +00:00
										 |  |  |         result = repr(obj) | 
					
						
							| 
									
										
											  
											
												Merged revisions 78227,78229,78288,78348,78377,78770,78774-78776,78810 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r78227 | michael.foord | 2010-02-18 14:30:09 -0600 (Thu, 18 Feb 2010) | 1 line
  unittest.TestCase uses safe_repr for producing failure messages. Partial fix for issue 7956
........
  r78229 | michael.foord | 2010-02-18 15:37:07 -0600 (Thu, 18 Feb 2010) | 1 line
  Fix unittest.TestCase.assertDictContainsSubset so it can't die with unicode issues when constructing failure messages. Issue 7956
........
  r78288 | michael.foord | 2010-02-21 08:48:59 -0600 (Sun, 21 Feb 2010) | 1 line
  Silence UnicodeWarning in crazy unittest test.
........
  r78348 | michael.foord | 2010-02-22 17:28:32 -0600 (Mon, 22 Feb 2010) | 1 line
  Support for old TestResult object (unittest) with warnings when using unsupported features.
........
  r78377 | michael.foord | 2010-02-23 11:00:53 -0600 (Tue, 23 Feb 2010) | 1 line
  unittest.TestResult can now be used with the TextTestRunner. TextTestRunner compatible with old TestResult objects.
........
  r78770 | michael.foord | 2010-03-07 14:22:12 -0600 (Sun, 07 Mar 2010) | 1 line
  Fix for potentials errors in constructing unittest failure messages. Plus skipped test methods no longer run setUp and tearDown (Issue 8059)
........
  r78774 | michael.foord | 2010-03-07 16:04:55 -0600 (Sun, 07 Mar 2010) | 1 line
  Addition of setUpClass and setUpModule shared fixtures to unittest.
........
  r78775 | michael.foord | 2010-03-07 17:10:36 -0600 (Sun, 07 Mar 2010) | 1 line
  Fix accidental name rebinding in unittest py3k warning filtering.
........
  r78776 | michael.foord | 2010-03-07 17:16:20 -0600 (Sun, 07 Mar 2010) | 1 line
  Remove accidental print statement from last commit.
........
  r78810 | raymond.hettinger | 2010-03-09 02:44:18 -0600 (Tue, 09 Mar 2010) | 5 lines
  Improve the basic example.
  * Show both the decorator and regular form for assertRaises()
  * Use assertTrue() instead of assertIn() to teach useful minimal subset of the API
........
											
										 
											2010-03-14 15:04:17 +00:00
										 |  |  |     except Exception: | 
					
						
							| 
									
										
										
										
											2010-06-05 13:14:43 +00:00
										 |  |  |         result = object.__repr__(obj) | 
					
						
							|  |  |  |     if not short or len(result) < _MAX_LENGTH: | 
					
						
							|  |  |  |         return result | 
					
						
							|  |  |  |     return result[:_MAX_LENGTH] + ' [truncated]...' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 78227,78229,78288,78348,78377,78770,78774-78776,78810 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r78227 | michael.foord | 2010-02-18 14:30:09 -0600 (Thu, 18 Feb 2010) | 1 line
  unittest.TestCase uses safe_repr for producing failure messages. Partial fix for issue 7956
........
  r78229 | michael.foord | 2010-02-18 15:37:07 -0600 (Thu, 18 Feb 2010) | 1 line
  Fix unittest.TestCase.assertDictContainsSubset so it can't die with unicode issues when constructing failure messages. Issue 7956
........
  r78288 | michael.foord | 2010-02-21 08:48:59 -0600 (Sun, 21 Feb 2010) | 1 line
  Silence UnicodeWarning in crazy unittest test.
........
  r78348 | michael.foord | 2010-02-22 17:28:32 -0600 (Mon, 22 Feb 2010) | 1 line
  Support for old TestResult object (unittest) with warnings when using unsupported features.
........
  r78377 | michael.foord | 2010-02-23 11:00:53 -0600 (Tue, 23 Feb 2010) | 1 line
  unittest.TestResult can now be used with the TextTestRunner. TextTestRunner compatible with old TestResult objects.
........
  r78770 | michael.foord | 2010-03-07 14:22:12 -0600 (Sun, 07 Mar 2010) | 1 line
  Fix for potentials errors in constructing unittest failure messages. Plus skipped test methods no longer run setUp and tearDown (Issue 8059)
........
  r78774 | michael.foord | 2010-03-07 16:04:55 -0600 (Sun, 07 Mar 2010) | 1 line
  Addition of setUpClass and setUpModule shared fixtures to unittest.
........
  r78775 | michael.foord | 2010-03-07 17:10:36 -0600 (Sun, 07 Mar 2010) | 1 line
  Fix accidental name rebinding in unittest py3k warning filtering.
........
  r78776 | michael.foord | 2010-03-07 17:16:20 -0600 (Sun, 07 Mar 2010) | 1 line
  Remove accidental print statement from last commit.
........
  r78810 | raymond.hettinger | 2010-03-09 02:44:18 -0600 (Tue, 09 Mar 2010) | 5 lines
  Improve the basic example.
  * Show both the decorator and regular form for assertRaises()
  * Use assertTrue() instead of assertIn() to teach useful minimal subset of the API
........
											
										 
											2010-03-14 15:04:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-19 21:01:52 +00:00
										 |  |  | def strclass(cls): | 
					
						
							|  |  |  |     return "%s.%s" % (cls.__module__, cls.__name__) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def sorted_list_difference(expected, actual): | 
					
						
							|  |  |  |     """Finds elements in only one or the other of two, sorted input lists.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Returns a two-element tuple of lists.    The first list contains those | 
					
						
							|  |  |  |     elements in the "expected" list but not in the "actual" list, and the | 
					
						
							|  |  |  |     second contains those elements in the "actual" list but not in the | 
					
						
							|  |  |  |     "expected" list.    Duplicate elements in either input list are ignored. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     i = j = 0 | 
					
						
							|  |  |  |     missing = [] | 
					
						
							|  |  |  |     unexpected = [] | 
					
						
							|  |  |  |     while True: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             e = expected[i] | 
					
						
							|  |  |  |             a = actual[j] | 
					
						
							|  |  |  |             if e < a: | 
					
						
							|  |  |  |                 missing.append(e) | 
					
						
							|  |  |  |                 i += 1 | 
					
						
							|  |  |  |                 while expected[i] == e: | 
					
						
							|  |  |  |                     i += 1 | 
					
						
							|  |  |  |             elif e > a: | 
					
						
							|  |  |  |                 unexpected.append(a) | 
					
						
							|  |  |  |                 j += 1 | 
					
						
							|  |  |  |                 while actual[j] == a: | 
					
						
							|  |  |  |                     j += 1 | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 i += 1 | 
					
						
							|  |  |  |                 try: | 
					
						
							|  |  |  |                     while expected[i] == e: | 
					
						
							|  |  |  |                         i += 1 | 
					
						
							|  |  |  |                 finally: | 
					
						
							|  |  |  |                     j += 1 | 
					
						
							|  |  |  |                     while actual[j] == a: | 
					
						
							|  |  |  |                         j += 1 | 
					
						
							|  |  |  |         except IndexError: | 
					
						
							|  |  |  |             missing.extend(expected[i:]) | 
					
						
							|  |  |  |             unexpected.extend(actual[j:]) | 
					
						
							|  |  |  |             break | 
					
						
							|  |  |  |     return missing, unexpected | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def unorderable_list_difference(expected, actual): | 
					
						
							|  |  |  |     """Same behavior as sorted_list_difference but
 | 
					
						
							|  |  |  |     for lists of unorderable items (like dicts). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     As it does a linear search per item (remove) it | 
					
						
							|  |  |  |     has O(n*n) performance."""
 | 
					
						
							|  |  |  |     missing = [] | 
					
						
							|  |  |  |     while expected: | 
					
						
							|  |  |  |         item = expected.pop() | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             actual.remove(item) | 
					
						
							|  |  |  |         except ValueError: | 
					
						
							|  |  |  |             missing.append(item) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # anything left in actual is unexpected | 
					
						
							|  |  |  |     return missing, actual | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def three_way_cmp(x, y): | 
					
						
							|  |  |  |     """Return -1 if x < y, 0 if x == y and 1 if x > y""" | 
					
						
							|  |  |  |     return (x > y) - (x < y) |