Issue #1680159: unicode coercion during an 'in' operation was masking
any errors that might occur during coercion of the left operand and
turning them into a TypeError with a message text that was confusing in
the given context. This patch lets any errors through, as was already
done during coercion of the right hand side.
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index 2b269cc..31bceb3 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -344,7 +344,8 @@
# If the following fails either
# the contains operator does not propagate UnicodeErrors or
# someone has changed the default encoding
- self.assertRaises(UnicodeError, 'g\xe2teau'.__contains__, u'\xe2')
+ self.assertRaises(UnicodeDecodeError, 'g\xe2teau'.__contains__, u'\xe2')
+ self.assertRaises(UnicodeDecodeError, u'g\xe2teau'.__contains__, '\xe2')
self.assertTrue(u'' in '')
self.assertTrue('' in u'')
@@ -375,6 +376,7 @@
self.assertTrue(u'asdf' not in u'')
self.assertRaises(TypeError, u"abc".__contains__)
+ self.assertRaises(TypeError, u"abc".__contains__, object())
def test_formatting(self):
string_tests.MixinStrUnicodeUserStringTest.test_formatting(self)