mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Make assertSequenceEqual error messages less cryptic, particularly for nested sequences.
This commit is contained in:
		
							parent
							
								
									7285a2666e
								
							
						
					
					
						commit
						04516611e7
					
				
					 1 changed files with 32 additions and 25 deletions
				
			
		|  | @ -731,23 +731,32 @@ def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None): | |||
|             if seq1 == seq2: | ||||
|                 return | ||||
| 
 | ||||
|             seq1_repr = repr(seq1) | ||||
|             seq2_repr = repr(seq2) | ||||
|             if len(seq1_repr) > 30: | ||||
|                 seq1_repr = seq1_repr[:30] + '...' | ||||
|             if len(seq2_repr) > 30: | ||||
|                 seq2_repr = seq2_repr[:30] + '...' | ||||
|             elements = (seq_type_name.capitalize(), seq1_repr, seq2_repr) | ||||
|             differing = '%ss differ: %s != %s\n' % elements | ||||
| 
 | ||||
|             for i in xrange(min(len1, len2)): | ||||
|                 try: | ||||
|                     item1 = seq1[i] | ||||
|                 except (TypeError, IndexError, NotImplementedError): | ||||
|                     differing = ('Unable to index element %d of first %s\n' % | ||||
|                     differing += ('\nUnable to index element %d of first %s\n' % | ||||
|                                  (i, seq_type_name)) | ||||
|                     break | ||||
| 
 | ||||
|                 try: | ||||
|                     item2 = seq2[i] | ||||
|                 except (TypeError, IndexError, NotImplementedError): | ||||
|                     differing = ('Unable to index element %d of second %s\n' % | ||||
|                     differing += ('\nUnable to index element %d of second %s\n' % | ||||
|                                  (i, seq_type_name)) | ||||
|                     break | ||||
| 
 | ||||
|                 if item1 != item2: | ||||
|                     differing = ('First differing element %d:\n%s\n%s\n' % | ||||
|                     differing += ('\nFirst differing element %d:\n%s\n%s\n' % | ||||
|                                  (i, item1, item2)) | ||||
|                     break | ||||
|             else: | ||||
|  | @ -755,28 +764,26 @@ def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None): | |||
|                     type(seq1) != type(seq2)): | ||||
|                     # The sequences are the same, but have differing types. | ||||
|                     return | ||||
|                 # A catch-all message for handling arbitrary user-defined | ||||
|                 # sequences. | ||||
|                 differing = '%ss differ:\n' % seq_type_name.capitalize() | ||||
|                 if len1 > len2: | ||||
|                     differing = ('First %s contains %d additional ' | ||||
|                                  'elements.\n' % (seq_type_name, len1 - len2)) | ||||
|                     try: | ||||
|                         differing += ('First extra element %d:\n%s\n' % | ||||
|                                       (len2, seq1[len2])) | ||||
|                     except (TypeError, IndexError, NotImplementedError): | ||||
|                         differing += ('Unable to index element %d ' | ||||
|                                       'of first %s\n' % (len2, seq_type_name)) | ||||
|                 elif len1 < len2: | ||||
|                     differing = ('Second %s contains %d additional ' | ||||
|                                  'elements.\n' % (seq_type_name, len2 - len1)) | ||||
|                     try: | ||||
|                         differing += ('First extra element %d:\n%s\n' % | ||||
|                                       (len1, seq2[len1])) | ||||
|                     except (TypeError, IndexError, NotImplementedError): | ||||
|                         differing += ('Unable to index element %d ' | ||||
|                                       'of second %s\n' % (len1, seq_type_name)) | ||||
|         standardMsg = differing + '\n'.join(difflib.ndiff(pprint.pformat(seq1).splitlines(), | ||||
| 
 | ||||
|             if len1 > len2: | ||||
|                 differing += ('\nFirst %s contains %d additional ' | ||||
|                              'elements.\n' % (seq_type_name, len1 - len2)) | ||||
|                 try: | ||||
|                     differing += ('First extra element %d:\n%s\n' % | ||||
|                                   (len2, seq1[len2])) | ||||
|                 except (TypeError, IndexError, NotImplementedError): | ||||
|                     differing += ('Unable to index element %d ' | ||||
|                                   'of first %s\n' % (len2, seq_type_name)) | ||||
|             elif len1 < len2: | ||||
|                 differing += ('\nSecond %s contains %d additional ' | ||||
|                              'elements.\n' % (seq_type_name, len2 - len1)) | ||||
|                 try: | ||||
|                     differing += ('First extra element %d:\n%s\n' % | ||||
|                                   (len1, seq2[len1])) | ||||
|                 except (TypeError, IndexError, NotImplementedError): | ||||
|                     differing += ('Unable to index element %d ' | ||||
|                                   'of second %s\n' % (len1, seq_type_name)) | ||||
|         standardMsg = differing + '\n' + '\n'.join(difflib.ndiff(pprint.pformat(seq1).splitlines(), | ||||
|                                             pprint.pformat(seq2).splitlines())) | ||||
|         msg = self._formatMessage(msg, standardMsg) | ||||
|         self.fail(msg) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Michael Foord
						Michael Foord