summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2008-02-07 03:25:46 (GMT)
committerRaymond Hettinger <python@rcn.com>2008-02-07 03:25:46 (GMT)
commit882a416900ab24d78f398809d1b1a4a119db91e6 (patch)
tree455b742451b9baf6fe0fffe5863f64c921fd7523 /Lib
parent017b6a3ad2be5c0e3309fb016234397211d6ffa7 (diff)
downloadcpython-882a416900ab24d78f398809d1b1a4a119db91e6.zip
cpython-882a416900ab24d78f398809d1b1a4a119db91e6.tar.gz
cpython-882a416900ab24d78f398809d1b1a4a119db91e6.tar.bz2
Merge r60628, r60631, and r60633. Register UserList and UserString will the appropriate ABCs.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/UserList.py6
-rwxr-xr-xLib/UserString.py11
-rw-r--r--Lib/test/test_iterlen.py42
3 files changed, 14 insertions, 45 deletions
diff --git a/Lib/UserList.py b/Lib/UserList.py
index 072f6a7..17f45c8 100644
--- a/Lib/UserList.py
+++ b/Lib/UserList.py
@@ -1,6 +1,8 @@
"""A more or less complete user-defined wrapper around list objects."""
-class UserList:
+import collections
+
+class UserList(collections.MutableSequence):
def __init__(self, initlist=None):
self.data = []
if initlist is not None:
@@ -83,3 +85,5 @@ class UserList:
self.data.extend(other.data)
else:
self.data.extend(other)
+
+collections.MutableSequence.register(UserList)
diff --git a/Lib/UserString.py b/Lib/UserString.py
index 9c58a34..71984a7 100755
--- a/Lib/UserString.py
+++ b/Lib/UserString.py
@@ -6,10 +6,11 @@ Note: string objects have grown methods in Python 1.6
This module requires Python 1.6 or later.
"""
import sys
+import collections
__all__ = ["UserString","MutableString"]
-class UserString:
+class UserString(collections.Sequence):
def __init__(self, seq):
if isinstance(seq, basestring):
self.data = seq
@@ -129,7 +130,9 @@ class UserString:
def upper(self): return self.__class__(self.data.upper())
def zfill(self, width): return self.__class__(self.data.zfill(width))
-class MutableString(UserString):
+collections.Sequence.register(UserString)
+
+class MutableString(UserString, collections.MutableSequence):
"""mutable string objects
Python strings are immutable objects. This has the advantage, that
@@ -208,6 +211,10 @@ class MutableString(UserString):
def __imul__(self, n):
self.data *= n
return self
+ def insert(self, index, value):
+ self[index:index] = value
+
+collections.MutableSequence.register(MutableString)
if __name__ == "__main__":
# execute the regression test to stdout, if called as a script:
diff --git a/Lib/test/test_iterlen.py b/Lib/test/test_iterlen.py
index af4467e..2a32512 100644
--- a/Lib/test/test_iterlen.py
+++ b/Lib/test/test_iterlen.py
@@ -45,7 +45,6 @@ import unittest
from test import test_support
from itertools import repeat
from collections import deque
-from UserList import UserList
from __builtin__ import len as _len
n = 10
@@ -196,45 +195,6 @@ class TestListReversed(TestInvariantWithoutMutations):
d.extend(xrange(20))
self.assertEqual(len(it), 0)
-class TestSeqIter(TestInvariantWithoutMutations):
-
- def setUp(self):
- self.it = iter(UserList(range(n)))
-
- def test_mutation(self):
- d = UserList(range(n))
- it = iter(d)
- it.next()
- it.next()
- self.assertEqual(len(it), n-2)
- d.append(n)
- self.assertEqual(len(it), n-1) # grow with append
- d[1:] = []
- self.assertEqual(len(it), 0)
- self.assertEqual(list(it), [])
- d.extend(xrange(20))
- self.assertEqual(len(it), 0)
-
-class TestSeqIterReversed(TestInvariantWithoutMutations):
-
- def setUp(self):
- self.it = reversed(UserList(range(n)))
-
- def test_mutation(self):
- d = UserList(range(n))
- it = reversed(d)
- it.next()
- it.next()
- self.assertEqual(len(it), n-2)
- d.append(n)
- self.assertEqual(len(it), n-2) # ignore append
- d[1:] = []
- self.assertEqual(len(it), 0)
- self.assertEqual(list(it), []) # confirm invariant
- d.extend(xrange(20))
- self.assertEqual(len(it), 0)
-
-
def test_main():
unittests = [
TestRepeat,
@@ -249,8 +209,6 @@ def test_main():
TestSet,
TestList,
TestListReversed,
- TestSeqIter,
- TestSeqIterReversed,
]
test_support.run_unittest(*unittests)