Fred Drake | a22b576 | 2000-04-03 03:51:50 +0000 | [diff] [blame] | 1 | #!/usr/bin/env python |
Fred Drake | a22b576 | 2000-04-03 03:51:50 +0000 | [diff] [blame] | 2 | # UserString is a wrapper around the native builtin string type. |
| 3 | # UserString instances should behave similar to builtin string objects. |
Walter Dörwald | 0fd583c | 2003-02-21 12:53:50 +0000 | [diff] [blame] | 4 | |
| 5 | import unittest |
| 6 | from test import test_support, string_tests |
| 7 | |
Walter Dörwald | 3040b19 | 2005-02-17 18:51:48 +0000 | [diff] [blame] | 8 | from UserString import UserString, MutableString |
Fred Drake | a22b576 | 2000-04-03 03:51:50 +0000 | [diff] [blame] | 9 | |
Walter Dörwald | 0fd583c | 2003-02-21 12:53:50 +0000 | [diff] [blame] | 10 | class UserStringTest( |
| 11 | string_tests.CommonTest, |
| 12 | string_tests.MixinStrUnicodeUserStringTest, |
Walter Dörwald | 0fd583c | 2003-02-21 12:53:50 +0000 | [diff] [blame] | 13 | ): |
| 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örwald | 3040b19 | 2005-02-17 18:51:48 +0000 | [diff] [blame] | 44 | class MutableStringTest(UserStringTest): |
| 45 | type2test = MutableString |
| 46 | |
| 47 | # MutableStrings can be hashed => deactivate test |
| 48 | def test_hash(self): |
| 49 | pass |
| 50 | |
Walter Dörwald | 7f79152 | 2005-02-17 22:03:31 +0000 | [diff] [blame] | 51 | def test_setitem(self): |
| 52 | s = self.type2test("foo") |
Walter Dörwald | af3b39a | 2005-02-18 13:22:43 +0000 | [diff] [blame] | 53 | self.assertRaises(IndexError, s.__setitem__, -4, "bar") |
Walter Dörwald | 7f79152 | 2005-02-17 22:03:31 +0000 | [diff] [blame] | 54 | self.assertRaises(IndexError, s.__setitem__, 3, "bar") |
Walter Dörwald | af3b39a | 2005-02-18 13:22:43 +0000 | [diff] [blame] | 55 | s[-1] = "bar" |
| 56 | self.assertEqual(s, "fobar") |
Walter Dörwald | 7f79152 | 2005-02-17 22:03:31 +0000 | [diff] [blame] | 57 | s[0] = "bar" |
Walter Dörwald | af3b39a | 2005-02-18 13:22:43 +0000 | [diff] [blame] | 58 | self.assertEqual(s, "barobar") |
Walter Dörwald | 7f79152 | 2005-02-17 22:03:31 +0000 | [diff] [blame] | 59 | |
| 60 | def test_delitem(self): |
| 61 | s = self.type2test("foo") |
Walter Dörwald | af3b39a | 2005-02-18 13:22:43 +0000 | [diff] [blame] | 62 | self.assertRaises(IndexError, s.__delitem__, -4) |
Walter Dörwald | 1fd4db9 | 2005-02-17 22:31:28 +0000 | [diff] [blame] | 63 | self.assertRaises(IndexError, s.__delitem__, 3) |
Walter Dörwald | af3b39a | 2005-02-18 13:22:43 +0000 | [diff] [blame] | 64 | del s[-1] |
| 65 | self.assertEqual(s, "fo") |
Walter Dörwald | 7f79152 | 2005-02-17 22:03:31 +0000 | [diff] [blame] | 66 | del s[0] |
Walter Dörwald | 7f79152 | 2005-02-17 22:03:31 +0000 | [diff] [blame] | 67 | 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örwald | 0fd583c | 2003-02-21 12:53:50 +0000 | [diff] [blame] | 113 | def test_main(): |
Walter Dörwald | 3040b19 | 2005-02-17 18:51:48 +0000 | [diff] [blame] | 114 | test_support.run_unittest(UserStringTest, MutableStringTest) |
Walter Dörwald | 0fd583c | 2003-02-21 12:53:50 +0000 | [diff] [blame] | 115 | |
Fred Drake | a22b576 | 2000-04-03 03:51:50 +0000 | [diff] [blame] | 116 | if __name__ == "__main__": |
Walter Dörwald | 0fd583c | 2003-02-21 12:53:50 +0000 | [diff] [blame] | 117 | test_main() |