120 lines
3.5 KiB
Python
120 lines
3.5 KiB
Python
|
#!/usr/bin/env python
|
||
|
# UserString is a wrapper around the native builtin string type.
|
||
|
# UserString instances should behave similar to builtin string objects.
|
||
|
|
||
|
import unittest
|
||
|
from test import test_support, string_tests
|
||
|
|
||
|
from UserString import UserString, MutableString
|
||
|
|
||
|
class UserStringTest(
|
||
|
string_tests.CommonTest,
|
||
|
string_tests.MixinStrUnicodeUserStringTest,
|
||
|
string_tests.MixinStrStringUserStringTest,
|
||
|
string_tests.MixinStrUserStringTest
|
||
|
):
|
||
|
|
||
|
type2test = UserString
|
||
|
|
||
|
# Overwrite the three testing methods, because UserString
|
||
|
# can't cope with arguments propagated to UserString
|
||
|
# (and we don't test with subclasses)
|
||
|
def checkequal(self, result, object, methodname, *args):
|
||
|
result = self.fixtype(result)
|
||
|
object = self.fixtype(object)
|
||
|
# we don't fix the arguments, because UserString can't cope with it
|
||
|
realresult = getattr(object, methodname)(*args)
|
||
|
self.assertEqual(
|
||
|
result,
|
||
|
realresult
|
||
|
)
|
||
|
|
||
|
def checkraises(self, exc, object, methodname, *args):
|
||
|
object = self.fixtype(object)
|
||
|
# we don't fix the arguments, because UserString can't cope with it
|
||
|
self.assertRaises(
|
||
|
exc,
|
||
|
getattr(object, methodname),
|
||
|
*args
|
||
|
)
|
||
|
|
||
|
def checkcall(self, object, methodname, *args):
|
||
|
object = self.fixtype(object)
|
||
|
# we don't fix the arguments, because UserString can't cope with it
|
||
|
getattr(object, methodname)(*args)
|
||
|
|
||
|
class MutableStringTest(UserStringTest):
|
||
|
type2test = MutableString
|
||
|
|
||
|
# MutableStrings can be hashed => deactivate test
|
||
|
def test_hash(self):
|
||
|
pass
|
||
|
|
||
|
def test_setitem(self):
|
||
|
s = self.type2test("foo")
|
||
|
self.assertRaises(IndexError, s.__setitem__, -4, "bar")
|
||
|
self.assertRaises(IndexError, s.__setitem__, 3, "bar")
|
||
|
s[-1] = "bar"
|
||
|
self.assertEqual(s, "fobar")
|
||
|
s[0] = "bar"
|
||
|
self.assertEqual(s, "barobar")
|
||
|
|
||
|
def test_delitem(self):
|
||
|
s = self.type2test("foo")
|
||
|
self.assertRaises(IndexError, s.__delitem__, -4)
|
||
|
self.assertRaises(IndexError, s.__delitem__, 3)
|
||
|
del s[-1]
|
||
|
self.assertEqual(s, "fo")
|
||
|
del s[0]
|
||
|
self.assertEqual(s, "o")
|
||
|
del s[0]
|
||
|
self.assertEqual(s, "")
|
||
|
|
||
|
def test_setslice(self):
|
||
|
s = self.type2test("foo")
|
||
|
s[:] = "bar"
|
||
|
self.assertEqual(s, "bar")
|
||
|
s[1:2] = "foo"
|
||
|
self.assertEqual(s, "bfoor")
|
||
|
s[1:-1] = UserString("a")
|
||
|
self.assertEqual(s, "bar")
|
||
|
s[0:10] = 42
|
||
|
self.assertEqual(s, "42")
|
||
|
|
||
|
def test_delslice(self):
|
||
|
s = self.type2test("foobar")
|
||
|
del s[3:10]
|
||
|
self.assertEqual(s, "foo")
|
||
|
del s[-1:10]
|
||
|
self.assertEqual(s, "fo")
|
||
|
|
||
|
def test_immutable(self):
|
||
|
s = self.type2test("foobar")
|
||
|
s2 = s.immutable()
|
||
|
self.assertEqual(s, s2)
|
||
|
self.assert_(isinstance(s2, UserString))
|
||
|
|
||
|
def test_iadd(self):
|
||
|
s = self.type2test("foo")
|
||
|
s += "bar"
|
||
|
self.assertEqual(s, "foobar")
|
||
|
s += UserString("baz")
|
||
|
self.assertEqual(s, "foobarbaz")
|
||
|
s += 42
|
||
|
self.assertEqual(s, "foobarbaz42")
|
||
|
|
||
|
def test_imul(self):
|
||
|
s = self.type2test("foo")
|
||
|
s *= 1
|
||
|
self.assertEqual(s, "foo")
|
||
|
s *= 2
|
||
|
self.assertEqual(s, "foofoo")
|
||
|
s *= -1
|
||
|
self.assertEqual(s, "")
|
||
|
|
||
|
def test_main():
|
||
|
test_support.run_unittest(UserStringTest, MutableStringTest)
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
test_main()
|