[Python-checkins] CVS: python/dist/src/Lib/test test_descr.py,1.1.2.34,1.1.2.35

Guido van Rossum gvanrossum@users.sourceforge.net
Thu, 19 Jul 2001 09:25:29 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory usw-pr-cvs1:/tmp/cvs-serv7362

Modified Files:
      Tag: descr-branch
	test_descr.py 
Log Message:
Add a test that checks some fundamental operator overloadings:
getattr, getitem, getslice, and their set- and del- siblings.


Index: test_descr.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/Attic/test_descr.py,v
retrieving revision 1.1.2.34
retrieving revision 1.1.2.35
diff -C2 -r1.1.2.34 -r1.1.2.35
*** test_descr.py	2001/07/14 01:38:56	1.1.2.34
--- test_descr.py	2001/07/19 16:25:27	1.1.2.35
***************
*** 743,746 ****
--- 743,803 ----
      verify(X().f() == "A")
  
+ def overloading():
+     if verbose: print "testing operator overloading..."
+ 
+     class B(object):
+         "Intermediate class because object doesn't have a __setattr__"
+ 
+     class C(B):
+ 
+         def __getattr__(self, name):
+             if name == "foo":
+                 return ("getattr", name)
+             else:
+                 return B.__getattr__(self, name)
+         def __setattr__(self, name, value):
+             if name == "foo":
+                 self.setattr = (name, value)
+             else:
+                 return B.__setattr__(self, name, value)
+         def __delattr__(self, name):
+             if name == "foo":
+                 self.delattr = name
+             else:
+                 return B.__delattr__(self, name)
+ 
+         def __getitem__(self, key):
+             return ("getitem", key)
+         def __setitem__(self, key, value):
+             self.setitem = (key, value)
+         def __delitem__(self, key):
+             self.delitem = key
+ 
+         def __getslice__(self, i, j):
+             return ("getslice", i, j)
+         def __setslice__(self, i, j, value):
+             self.setslice = (i, j, value)
+         def __delslice__(self, i, j):
+             self.delslice = (i, j)
+ 
+     a = C()
+     verify(a.foo == ("getattr", "foo"))
+     a.foo = 12
+     verify(a.setattr == ("foo", 12))
+     del a.foo
+     verify(a.delattr == "foo")
+ 
+     verify(a[12] == ("getitem", 12))
+     a[12] = 21
+     verify(a.setitem == (12, 21))
+     del a[12]
+     verify(a.delitem == 12)
+ 
+     verify(a[0:10] == ("getslice", 0, 10))
+     a[0:10] = "foo"
+     verify(a.setslice == (0, 10, "foo"))
+     del a[0:10]
+     verify(a.delslice == (0, 10))
+ 
  def all():
      lists()
***************
*** 768,771 ****
--- 825,829 ----
      newslot()
      altmro()
+     overloading()
  
  all()