[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"