blob: 6fa377966f250b1c2246c8b0ba2de3f607f8085b [file] [log] [blame]
Walter Dörwald0fd583c2003-02-21 12:53:50 +00001import unittest
2from test import test_support, string_tests
3
4
5class StrTest(
6 string_tests.CommonTest,
7 string_tests.MixinStrUnicodeUserStringTest,
Walter Dörwald57d88e52004-08-26 16:53:04 +00008 string_tests.MixinStrUserStringTest,
9 string_tests.MixinStrUnicodeTest,
Walter Dörwald0fd583c2003-02-21 12:53:50 +000010 ):
11
Walter Dörwald4c271fe2007-06-07 13:52:37 +000012 type2test = str8
Walter Dörwald0fd583c2003-02-21 12:53:50 +000013
14 # We don't need to propagate to str
15 def fixtype(self, obj):
16 return obj
17
Walter Dörwald43440a62003-03-31 18:07:50 +000018 def test_formatting(self):
19 string_tests.MixinStrUnicodeUserStringTest.test_formatting(self)
Walter Dörwalddb290f02007-05-05 14:12:24 +000020 self.assertRaises(OverflowError, '%c'.__mod__, 0x12341234)
Walter Dörwald43440a62003-03-31 18:07:50 +000021
Guido van Rossum49d6b072006-08-17 21:11:47 +000022 def test_iterators(self):
23 # Make sure str objects have an __iter__ method
24 it = "abc".__iter__()
Georg Brandla18af4e2007-04-21 15:47:16 +000025 self.assertEqual(next(it), "a")
26 self.assertEqual(next(it), "b")
27 self.assertEqual(next(it), "c")
28 self.assertRaises(StopIteration, next, it)
Guido van Rossum49d6b072006-08-17 21:11:47 +000029
Brett Cannonc3647ac2005-04-26 03:45:26 +000030 def test_conversion(self):
31 # Make sure __str__() behaves properly
Brett Cannonc3647ac2005-04-26 03:45:26 +000032
33 class Foo1:
34 def __str__(self):
35 return "foo"
36
37 class Foo2(object):
38 def __str__(self):
39 return "foo"
40
41 class Foo3(object):
42 def __str__(self):
Guido van Rossumef87d6e2007-05-02 19:09:54 +000043 return "foo"
Brett Cannonc3647ac2005-04-26 03:45:26 +000044
Guido van Rossumea0ebd82007-05-15 21:10:24 +000045 class Foo4(str8):
Brett Cannonc3647ac2005-04-26 03:45:26 +000046 def __str__(self):
Guido van Rossumef87d6e2007-05-02 19:09:54 +000047 return "foo"
Brett Cannonc3647ac2005-04-26 03:45:26 +000048
49 class Foo5(str):
Guido van Rossumea0ebd82007-05-15 21:10:24 +000050 def __unicode__(self):
Guido van Rossumef87d6e2007-05-02 19:09:54 +000051 return "foo"
Brett Cannonc3647ac2005-04-26 03:45:26 +000052
Guido van Rossumea0ebd82007-05-15 21:10:24 +000053 class Foo6(str8):
Brett Cannonc3647ac2005-04-26 03:45:26 +000054 def __str__(self):
55 return "foos"
56
57 def __unicode__(self):
Guido van Rossumef87d6e2007-05-02 19:09:54 +000058 return "foou"
Brett Cannonc3647ac2005-04-26 03:45:26 +000059
Guido van Rossumef87d6e2007-05-02 19:09:54 +000060 class Foo7(str):
Brett Cannonc3647ac2005-04-26 03:45:26 +000061 def __str__(self):
62 return "foos"
63 def __unicode__(self):
Guido van Rossumef87d6e2007-05-02 19:09:54 +000064 return "foou"
Brett Cannonc3647ac2005-04-26 03:45:26 +000065
66 class Foo8(str):
67 def __new__(cls, content=""):
68 return str.__new__(cls, 2*content)
69 def __str__(self):
70 return self
71
Guido van Rossumea0ebd82007-05-15 21:10:24 +000072 class Foo9(str8):
Brett Cannonc3647ac2005-04-26 03:45:26 +000073 def __str__(self):
74 return "string"
75 def __unicode__(self):
76 return "not unicode"
77
Brett Cannonc3647ac2005-04-26 03:45:26 +000078 self.assertEqual(str(Foo1()), "foo")
79 self.assertEqual(str(Foo2()), "foo")
80 self.assertEqual(str(Foo3()), "foo")
81 self.assertEqual(str(Foo4("bar")), "foo")
82 self.assertEqual(str(Foo5("bar")), "foo")
Guido van Rossumea0ebd82007-05-15 21:10:24 +000083 self.assertEqual(str8(Foo6("bar")), "foos")
84 self.assertEqual(str(Foo6("bar")), "foou")
85 self.assertEqual(str8(Foo7("bar")), "foos")
86 self.assertEqual(str(Foo7("bar")), "foou")
Brett Cannonc3647ac2005-04-26 03:45:26 +000087 self.assertEqual(str(Foo8("foo")), "foofoo")
Guido van Rossumea0ebd82007-05-15 21:10:24 +000088 self.assertEqual(str8(Foo9("foo")), "string")
Guido van Rossumef87d6e2007-05-02 19:09:54 +000089 self.assertEqual(str(Foo9("foo")), "not unicode")
Brett Cannonc3647ac2005-04-26 03:45:26 +000090
Walter Dörwald0fd583c2003-02-21 12:53:50 +000091def test_main():
Walter Dörwald21d3a322003-05-01 17:45:56 +000092 test_support.run_unittest(StrTest)
Walter Dörwald0fd583c2003-02-21 12:53:50 +000093
94if __name__ == "__main__":
95 test_main()