diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -887,9 +887,10 @@ else: seq_type_name = "sequence" + max_seq_len = 0 differing = None try: - len1 = len(seq1) + len1 = max_seq_len = len(seq1) except (TypeError, NotImplementedError): differing = 'First %s has no length. Non-sequence?' % ( seq_type_name) @@ -900,6 +901,10 @@ except (TypeError, NotImplementedError): differing = 'Second %s has no length. Non-sequence?' % ( seq_type_name) + else: + if len2 > max_seq_len: + max_seq_len = len2 + if differing is None: if seq1 == seq2: @@ -953,11 +958,14 @@ differing += ('Unable to index element %d ' 'of second %s\n' % (len1, seq_type_name)) standardMsg = differing - diffMsg = '\n' + '\n'.join( - difflib.ndiff(pprint.pformat(seq1).splitlines(), - pprint.pformat(seq2).splitlines())) + # calculating the diff might take a long time and produce unreadable + # output if there are too many elements + if max_seq_len < 30: + diffMsg = '\n' + '\n'.join( + difflib.ndiff(pprint.pformat(seq1).splitlines(), + pprint.pformat(seq2).splitlines())) + standardMsg = self._truncateMessage(standardMsg, diffMsg) - standardMsg = self._truncateMessage(standardMsg, diffMsg) msg = self._formatMessage(msg, standardMsg) self.fail(msg)