[Python-checkins] python/dist/src/Lib/test test_descr.py,1.139,1.140
gvanrossum@users.sourceforge.net
gvanrossum@users.sourceforge.net
Thu, 13 Jun 2002 12:18:07 -0700
Update of /cvsroot/python/python/dist/src/Lib/test
In directory usw-pr-cvs1:/tmp/cvs-serv11967/Lib/test
Modified Files:
test_descr.py
Log Message:
Hopefully this addresses the remaining issues of SF bugs 459235 and
473985. Through a subtle rearrangement of some members in the etype
struct (!), mapping methods are now preferred over sequence methods,
which is necessary to support str.__getitem__("hello", slice(4)) etc.
Index: test_descr.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_descr.py,v
retrieving revision 1.139
retrieving revision 1.140
diff -C2 -d -r1.139 -r1.140
*** test_descr.py 6 Jun 2002 17:53:03 -0000 1.139
--- test_descr.py 13 Jun 2002 19:17:46 -0000 1.140
***************
*** 3100,3103 ****
--- 3100,3148 ----
vereq(b.getfoo(), 24)
+ def slices():
+ if verbose:
+ print "Testing cases with slices and overridden __getitem__ ..."
+ # Strings
+ vereq("hello"[:4], "hell")
+ vereq("hello"[slice(4)], "hell")
+ vereq(str.__getitem__("hello", slice(4)), "hell")
+ class S(str):
+ def __getitem__(self, x):
+ return str.__getitem__(self, x)
+ vereq(S("hello")[:4], "hell")
+ vereq(S("hello")[slice(4)], "hell")
+ vereq(S("hello").__getitem__(slice(4)), "hell")
+ # Tuples
+ vereq((1,2,3)[:2], (1,2))
+ vereq((1,2,3)[slice(2)], (1,2))
+ vereq(tuple.__getitem__((1,2,3), slice(2)), (1,2))
+ class T(tuple):
+ def __getitem__(self, x):
+ return tuple.__getitem__(self, x)
+ vereq(T((1,2,3))[:2], (1,2))
+ vereq(T((1,2,3))[slice(2)], (1,2))
+ vereq(T((1,2,3)).__getitem__(slice(2)), (1,2))
+ # Lists
+ vereq([1,2,3][:2], [1,2])
+ vereq([1,2,3][slice(2)], [1,2])
+ vereq(list.__getitem__([1,2,3], slice(2)), [1,2])
+ class L(list):
+ def __getitem__(self, x):
+ return list.__getitem__(self, x)
+ vereq(L([1,2,3])[:2], [1,2])
+ vereq(L([1,2,3])[slice(2)], [1,2])
+ vereq(L([1,2,3]).__getitem__(slice(2)), [1,2])
+ # Now do lists and __setitem__
+ a = L([1,2,3])
+ a[slice(1, 3)] = [3,2]
+ vereq(a, [1,3,2])
+ a[slice(0, 2, 1)] = [3,1]
+ vereq(a, [3,1,2])
+ a.__setitem__(slice(1, 3), [2,1])
+ vereq(a, [3,2,1])
+ a.__setitem__(slice(0, 2, 1), [2,3])
+ vereq(a, [2,3,1])
+
+
def do_this_first():
if verbose:
***************
*** 3183,3186 ****
--- 3228,3232 ----
string_exceptions()
copy_setstate()
+ slices()
if verbose: print "All OK"