summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Dörwald <walter@livinglogic.de>2005-02-18 13:22:43 (GMT)
committerWalter Dörwald <walter@livinglogic.de>2005-02-18 13:22:43 (GMT)
commitaf3b39a1823d57eca4034ce6879ab926f175595e (patch)
tree6f66deffcd98a72aa66e5ebf3da44b3fbb4155e0
parent612df8e21ded5a6d7c0f6641f16422883c61b4d9 (diff)
downloadcpython-af3b39a1823d57eca4034ce6879ab926f175595e.zip
cpython-af3b39a1823d57eca4034ce6879ab926f175595e.tar.gz
cpython-af3b39a1823d57eca4034ce6879ab926f175595e.tar.bz2
Add support for negative indices in UserString.MutableString.__setitem__
and UserString.MutableString.__delitem__.
-rwxr-xr-xLib/UserString.py4
-rwxr-xr-xLib/test/test_userstring.py14
-rw-r--r--Misc/NEWS3
3 files changed, 14 insertions, 7 deletions
diff --git a/Lib/UserString.py b/Lib/UserString.py
index e8e0fed..3251139 100755
--- a/Lib/UserString.py
+++ b/Lib/UserString.py
@@ -146,9 +146,13 @@ class MutableString(UserString):
def __hash__(self):
raise TypeError, "unhashable type (it is mutable)"
def __setitem__(self, index, sub):
+ if index < 0:
+ index += len(self.data)
if index < 0 or index >= len(self.data): raise IndexError
self.data = self.data[:index] + sub + self.data[index+1:]
def __delitem__(self, index):
+ if index < 0:
+ index += len(self.data)
if index < 0 or index >= len(self.data): raise IndexError
self.data = self.data[:index] + self.data[index+1:]
def __setslice__(self, start, end, sub):
diff --git a/Lib/test/test_userstring.py b/Lib/test/test_userstring.py
index 95f1351..53114db 100755
--- a/Lib/test/test_userstring.py
+++ b/Lib/test/test_userstring.py
@@ -52,20 +52,20 @@ class MutableStringTest(UserStringTest):
def test_setitem(self):
s = self.type2test("foo")
- self.assertRaises(IndexError, s.__setitem__, -1, "bar")
+ 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, "baroo")
- s[4] = "foo"
- self.assertEqual(s, "barofoo")
+ self.assertEqual(s, "barobar")
def test_delitem(self):
s = self.type2test("foo")
- self.assertRaises(IndexError, s.__delitem__, -1)
+ 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, "oo")
- del s[1]
self.assertEqual(s, "o")
del s[0]
self.assertEqual(s, "")
diff --git a/Misc/NEWS b/Misc/NEWS
index a5ab25a..71e7b82 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -152,6 +152,9 @@ Library
- The reconvert.quote function can now emit triple-quoted strings. The
reconvert module now has some simple documentation.
+- ``UserString.MutableString`` now supports negative indices in
+ ``__setitem__`` and ``__delitem__``
+
Build
-----