diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -634,7 +634,10 @@ class TestCase(object): def _baseAssertEqual(self, first, second, msg=None): """The default assertEqual implementation, not type specific.""" - if not first == second: + with warnings.catch_warnings(): + warnings.simplefilter("ignore", BytesWarning) + not_equal = (not first == second) + if not_equal: standardMsg = '%s != %s' % (safe_repr(first), safe_repr(second)) msg = self._formatMessage(msg, standardMsg) raise self.failureException(msg) @@ -767,7 +770,10 @@ class TestCase(object): seq_type_name) if differing is None: - if seq1 == seq2: + with warnings.catch_warnings(): + warnings.simplefilter("ignore", BytesWarning) + equal = (seq1 == seq2) + if equal: return seq1_repr = safe_repr(seq1) @@ -794,9 +800,12 @@ class TestCase(object): (i, seq_type_name)) break - if item1 != item2: + with warnings.catch_warnings(): + warnings.simplefilter("ignore", BytesWarning) + not_equal = (item1 != item2) + if not_equal: differing += ('\nFirst differing element %d:\n%s\n%s\n' % - (i, item1, item2)) + (i, safe_repr(item1), safe_repr(item2))) break else: if (len1 == len2 and seq_type is None and @@ -809,7 +818,7 @@ class TestCase(object): 'elements.\n' % (seq_type_name, len1 - len2)) try: differing += ('First extra element %d:\n%s\n' % - (len2, seq1[len2])) + (len2, safe_repr(seq1[len2]))) except (TypeError, IndexError, NotImplementedError): differing += ('Unable to index element %d ' 'of first %s\n' % (len2, seq_type_name)) @@ -818,7 +827,7 @@ class TestCase(object): 'elements.\n' % (seq_type_name, len2 - len1)) try: differing += ('First extra element %d:\n%s\n' % - (len1, seq2[len1])) + (len1, safe_repr(seq2[len1]))) except (TypeError, IndexError, NotImplementedError): differing += ('Unable to index element %d ' 'of second %s\n' % (len1, seq_type_name)) diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py --- a/Lib/unittest/test/test_case.py +++ b/Lib/unittest/test/test_case.py @@ -595,6 +595,23 @@ class Test_TestCase(unittest.TestCase, T self.assertTupleEqual((), ()) self.assertSequenceEqual([], ()) + a = ['str'] + b = [b'bytes'] + with warnings.catch_warnings(): + warnings.simplefilter("error", BytesWarning) + self.assertRaises(unittest.TestCase.failureException, + self.assertEqual, 'str', b'bytes') + self.assertRaises(unittest.TestCase.failureException, + self.assertListEqual, a, b) + self.assertRaises(unittest.TestCase.failureException, + self.assertListEqual, tuple(a), tuple(b)) + self.assertRaises(unittest.TestCase.failureException, + self.assertSequenceEqual, a, tuple(b)) + self.assertRaises(unittest.TestCase.failureException, + self.assertSequenceEqual, b+b, b) + self.assertRaises(unittest.TestCase.failureException, + self.assertSequenceEqual, b, b+b) + a = [0, 'a', []] b = [] self.assertRaises(unittest.TestCase.failureException,