[Python-checkins] python/dist/src/Lib/test test_class.py,1.11,1.12
nascheme at users.sourceforge.net
nascheme at users.sourceforge.net
Mon Jul 19 18:29:18 CEST 2004
Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28866/Lib/test
Modified Files:
test_class.py
Log Message:
Check the type of values returned by __int__, __float__, __long__,
__oct__, and __hex__. Raise TypeError if an invalid type is
returned. Note that PyNumber_Int and PyNumber_Long can still
return ints or longs. Fixes SF bug #966618.
Index: test_class.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_class.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** test_class.py 20 Oct 2003 14:01:51 -0000 1.11
--- test_class.py 19 Jul 2004 16:29:15 -0000 1.12
***************
*** 44,52 ****
"pos",
"abs",
- "int",
- "long",
- "float",
- "oct",
- "hex",
# generic operations
--- 44,47 ----
***************
*** 59,62 ****
--- 54,62 ----
# "str",
# "repr",
+ # "int",
+ # "long",
+ # "float",
+ # "oct",
+ # "hex",
# These are separate because they can influence the test of other methods.
***************
*** 82,85 ****
--- 82,105 ----
return "AllTests"
+ def __int__(self, *args):
+ print "__int__:", args
+ return 1
+
+ def __float__(self, *args):
+ print "__float__:", args
+ return 1.0
+
+ def __long__(self, *args):
+ print "__long__:", args
+ return 1L
+
+ def __oct__(self, *args):
+ print "__oct__:", args
+ return '01'
+
+ def __hex__(self, *args):
+ print "__hex__:", args
+ return '0x1'
+
def __cmp__(self, *args):
print "__cmp__:", args
***************
*** 196,214 ****
+testme
abs(testme)
! if sys.platform[:4] != 'java':
! int(testme)
! long(testme)
! float(testme)
! oct(testme)
! hex(testme)
! else:
! # Jython enforced that these methods return
! # a value of the expected type.
! print "__int__: ()"
! print "__long__: ()"
! print "__float__: ()"
! print "__oct__: ()"
! print "__hex__: ()"
!
# And the rest...
--- 216,224 ----
+testme
abs(testme)
! int(testme)
! long(testme)
! float(testme)
! oct(testme)
! hex(testme)
# And the rest...
***************
*** 255,258 ****
--- 265,316 ----
+ # return values of some method are type-checked
+ class BadTypeClass:
+ def __int__(self):
+ return None
+ __float__ = __int__
+ __long__ = __int__
+ __str__ = __int__
+ __repr__ = __int__
+ __oct__ = __int__
+ __hex__ = __int__
+
+ def check_exc(stmt, exception):
+ """Raise TestFailed if executing 'stmt' does not raise 'exception'
+ """
+ try:
+ exec stmt
+ except exception:
+ pass
+ else:
+ raise TestFailed, "%s should raise %s" % (stmt, exception)
+
+ check_exc("int(BadTypeClass())", TypeError)
+ check_exc("float(BadTypeClass())", TypeError)
+ check_exc("long(BadTypeClass())", TypeError)
+ check_exc("str(BadTypeClass())", TypeError)
+ check_exc("repr(BadTypeClass())", TypeError)
+ check_exc("oct(BadTypeClass())", TypeError)
+ check_exc("hex(BadTypeClass())", TypeError)
+
+ # mixing up ints and longs is okay
+ class IntLongMixClass:
+ def __int__(self):
+ return 0L
+
+ def __long__(self):
+ return 0
+
+ try:
+ int(IntLongMixClass())
+ except TypeError:
+ raise TestFailed, "TypeError should not be raised"
+
+ try:
+ long(IntLongMixClass())
+ except TypeError:
+ raise TestFailed, "TypeError should not be raised"
+
+
# Test correct errors from hash() on objects with comparisons but no __hash__
***************
*** 265,279 ****
def __cmp__(self, other): return 0
! try: hash(C1())
! except TypeError: pass
! else: raise TestFailed, "hash(C1()) should raise an exception"
class C2:
def __eq__(self, other): return 1
! try: hash(C2())
! except TypeError: pass
! else: raise TestFailed, "hash(C2()) should raise an exception"
!
# Test for SF bug 532646
--- 323,332 ----
def __cmp__(self, other): return 0
! check_exc("hash(C1())", TypeError)
class C2:
def __eq__(self, other): return 1
! check_exc("hash(C2())", TypeError)
# Test for SF bug 532646
More information about the Python-checkins
mailing list