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_str.py b/Lib/test/test_str.py
index 774c634..5bb9f48 100644
--- a/Lib/test/test_str.py
+++ b/Lib/test/test_str.py
@@ -4,6 +4,9 @@
from test import test_support, string_tests
+class StrSubclass(str):
+ pass
+
class StrTest(
string_tests.CommonTest,
string_tests.MixinStrUnicodeUserStringTest,
@@ -107,6 +110,9 @@
self.assertEqual(str(Foo6("bar")), "foos")
self.assertEqual(str(Foo7("bar")), "foos")
self.assertEqual(str(Foo8("foo")), "foofoo")
+ self.assertIs(type(str(Foo8("foo"))), Foo8)
+ self.assertEqual(StrSubclass(Foo8("foo")), "foofoo")
+ self.assertIs(type(StrSubclass(Foo8("foo"))), StrSubclass)
self.assertEqual(str(Foo9("foo")), "string")
self.assertEqual(unicode(Foo9("foo")), u"not unicode")