blob: ec0f1a93361498673ddb9a6228b413f7a3b8b94f [file] [log] [blame]
Fred Drakea22b5762000-04-03 03:51:50 +00001#!/usr/bin/env python
Fred Drakea22b5762000-04-03 03:51:50 +00002# UserString is a wrapper around the native builtin string type.
3# UserString instances should behave similar to builtin string objects.
Walter Dörwald0fd583c2003-02-21 12:53:50 +00004
5import unittest
6from test import test_support, string_tests
7
Walter Dörwald3040b192005-02-17 18:51:48 +00008from UserString import UserString, MutableString
Fred Drakea22b5762000-04-03 03:51:50 +00009
Walter Dörwald0fd583c2003-02-21 12:53:50 +000010class UserStringTest(
11 string_tests.CommonTest,
12 string_tests.MixinStrUnicodeUserStringTest,
Walter Dörwald0fd583c2003-02-21 12:53:50 +000013 ):
14
15 type2test = UserString
16
17 # Overwrite the three testing methods, because UserString
18 # can't cope with arguments propagated to UserString
19 # (and we don't test with subclasses)
20 def checkequal(self, result, object, methodname, *args):
21 result = self.fixtype(result)
22 object = self.fixtype(object)
23 # we don't fix the arguments, because UserString can't cope with it
24 realresult = getattr(object, methodname)(*args)
25 self.assertEqual(
26 result,
27 realresult
28 )
29
30 def checkraises(self, exc, object, methodname, *args):
31 object = self.fixtype(object)
32 # we don't fix the arguments, because UserString can't cope with it
33 self.assertRaises(
34 exc,
35 getattr(object, methodname),
36 *args
37 )
38
39 def checkcall(self, object, methodname, *args):
40 object = self.fixtype(object)
41 # we don't fix the arguments, because UserString can't cope with it
42 getattr(object, methodname)(*args)
43
Walter Dörwald3040b192005-02-17 18:51:48 +000044class MutableStringTest(UserStringTest):
45 type2test = MutableString
46
47 # MutableStrings can be hashed => deactivate test
48 def test_hash(self):
49 pass
50
Walter Dörwald7f791522005-02-17 22:03:31 +000051 def test_setitem(self):
52 s = self.type2test("foo")
Walter Dörwaldaf3b39a2005-02-18 13:22:43 +000053 self.assertRaises(IndexError, s.__setitem__, -4, "bar")
Walter Dörwald7f791522005-02-17 22:03:31 +000054 self.assertRaises(IndexError, s.__setitem__, 3, "bar")
Walter Dörwaldaf3b39a2005-02-18 13:22:43 +000055 s[-1] = "bar"
56 self.assertEqual(s, "fobar")
Walter Dörwald7f791522005-02-17 22:03:31 +000057 s[0] = "bar"
Walter Dörwaldaf3b39a2005-02-18 13:22:43 +000058 self.assertEqual(s, "barobar")
Walter Dörwald7f791522005-02-17 22:03:31 +000059
60 def test_delitem(self):
61 s = self.type2test("foo")
Walter Dörwaldaf3b39a2005-02-18 13:22:43 +000062 self.assertRaises(IndexError, s.__delitem__, -4)
Walter Dörwald1fd4db92005-02-17 22:31:28 +000063 self.assertRaises(IndexError, s.__delitem__, 3)
Walter Dörwaldaf3b39a2005-02-18 13:22:43 +000064 del s[-1]
65 self.assertEqual(s, "fo")
Walter Dörwald7f791522005-02-17 22:03:31 +000066 del s[0]
Walter Dörwald7f791522005-02-17 22:03:31 +000067 self.assertEqual(s, "o")
68 del s[0]
69 self.assertEqual(s, "")
70
71 def test_setslice(self):
72 s = self.type2test("foo")
73 s[:] = "bar"
74 self.assertEqual(s, "bar")
75 s[1:2] = "foo"
76 self.assertEqual(s, "bfoor")
77 s[1:-1] = UserString("a")
78 self.assertEqual(s, "bar")
79 s[0:10] = 42
80 self.assertEqual(s, "42")
81
82 def test_delslice(self):
83 s = self.type2test("foobar")
84 del s[3:10]
85 self.assertEqual(s, "foo")
86 del s[-1:10]
87 self.assertEqual(s, "fo")
88
89 def test_immutable(self):
90 s = self.type2test("foobar")
91 s2 = s.immutable()
92 self.assertEqual(s, s2)
93 self.assert_(isinstance(s2, UserString))
94
95 def test_iadd(self):
96 s = self.type2test("foo")
97 s += "bar"
98 self.assertEqual(s, "foobar")
99 s += UserString("baz")
100 self.assertEqual(s, "foobarbaz")
101 s += 42
102 self.assertEqual(s, "foobarbaz42")
103
104 def test_imul(self):
105 s = self.type2test("foo")
106 s *= 1
107 self.assertEqual(s, "foo")
108 s *= 2
109 self.assertEqual(s, "foofoo")
110 s *= -1
111 self.assertEqual(s, "")
112
Walter Dörwald0fd583c2003-02-21 12:53:50 +0000113def test_main():
Walter Dörwald3040b192005-02-17 18:51:48 +0000114 test_support.run_unittest(UserStringTest, MutableStringTest)
Walter Dörwald0fd583c2003-02-21 12:53:50 +0000115
Fred Drakea22b5762000-04-03 03:51:50 +0000116if __name__ == "__main__":
Walter Dörwald0fd583c2003-02-21 12:53:50 +0000117 test_main()