Issue #24731: Fixed crash on converting objects with special methods
__str__, __trunc__, and __float__ returning instances of subclasses of
str, long, and float to subclasses of str, long, and float correspondingly.
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index be8f89b..b12f982 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -33,6 +33,9 @@
return None
codecs.register(search_function)
+class UnicodeSubclass(unicode):
+ pass
+
class UnicodeTest(
string_tests.CommonTest,
string_tests.MixinStrUnicodeUserStringTest,
@@ -685,9 +688,6 @@
u'unicode remains unicode'
)
- class UnicodeSubclass(unicode):
- pass
-
self.assertEqual(
unicode(UnicodeSubclass('unicode subclass becomes unicode')),
u'unicode subclass becomes unicode'
@@ -1269,6 +1269,9 @@
self.assertEqual(unicode(Foo6("bar")), u"foou")
self.assertEqual(unicode(Foo7("bar")), u"foou")
self.assertEqual(unicode(Foo8("foo")), u"foofoo")
+ self.assertIs(type(unicode(Foo8("foo"))), Foo8)
+ self.assertEqual(UnicodeSubclass(Foo8("foo")), u"foofoo")
+ self.assertIs(type(UnicodeSubclass(Foo8("foo"))), UnicodeSubclass)
self.assertEqual(str(Foo9("foo")), "string")
self.assertEqual(unicode(Foo9("foo")), u"not unicode")