[Python-checkins] r60641 - in python/trunk/Lib: UserList.py UserString.py test/test_iterlen.py

raymond.hettinger python-checkins at python.org
Thu Feb 7 04:25:46 CET 2008


Author: raymond.hettinger
Date: Thu Feb  7 04:25:46 2008
New Revision: 60641

Modified:
   python/trunk/Lib/UserList.py
   python/trunk/Lib/UserString.py
   python/trunk/Lib/test/test_iterlen.py
Log:
Merge r60628, r60631, and r60633.  Register UserList and UserString will the appropriate ABCs.

Modified: python/trunk/Lib/UserList.py
==============================================================================
--- python/trunk/Lib/UserList.py	(original)
+++ python/trunk/Lib/UserList.py	Thu Feb  7 04:25:46 2008
@@ -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 @@
             self.data.extend(other.data)
         else:
             self.data.extend(other)
+
+collections.MutableSequence.register(UserList)

Modified: python/trunk/Lib/UserString.py
==============================================================================
--- python/trunk/Lib/UserString.py	(original)
+++ python/trunk/Lib/UserString.py	Thu Feb  7 04:25:46 2008
@@ -6,10 +6,11 @@
 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 @@
     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 @@
     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:

Modified: python/trunk/Lib/test/test_iterlen.py
==============================================================================
--- python/trunk/Lib/test/test_iterlen.py	(original)
+++ python/trunk/Lib/test/test_iterlen.py	Thu Feb  7 04:25:46 2008
@@ -45,7 +45,6 @@
 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 @@
         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 @@
         TestSet,
         TestList,
         TestListReversed,
-        TestSeqIter,
-        TestSeqIterReversed,
     ]
     test_support.run_unittest(*unittests)
 


More information about the Python-checkins mailing list