Fix test_from_dll* in test_returnfuncptrs.py.

This commit is contained in:
Serhiy Storchaka 2013-02-07 14:57:53 +02:00
parent 785d1b1703
commit 8e8bbc5e7d
1 changed files with 4 additions and 5 deletions

View File

@ -32,31 +32,30 @@ class ReturnFuncPtrTestCase(unittest.TestCase):
self.assertRaises(ArgumentError, strchr, "abcdef", 3) self.assertRaises(ArgumentError, strchr, "abcdef", 3)
self.assertRaises(TypeError, strchr, "abcdef") self.assertRaises(TypeError, strchr, "abcdef")
@unittest.skipIf(os.name == 'nt', 'Temporarily disabled for Windows')
def test_from_dll(self): def test_from_dll(self):
dll = CDLL(_ctypes_test.__file__) dll = CDLL(_ctypes_test.__file__)
# _CFuncPtr instances are now callable with a tuple argument # _CFuncPtr instances are now callable with a tuple argument
# which denotes a function name and a dll: # which denotes a function name and a dll:
strchr = CFUNCTYPE(c_char_p, c_char_p, c_char)(("strchr", dll)) strchr = CFUNCTYPE(c_char_p, c_char_p, c_char)(("my_strchr", dll))
self.assertTrue(strchr(b"abcdef", b"b"), "bcdef") self.assertTrue(strchr(b"abcdef", b"b"), "bcdef")
self.assertEqual(strchr(b"abcdef", b"x"), None) self.assertEqual(strchr(b"abcdef", b"x"), None)
self.assertRaises(ArgumentError, strchr, b"abcdef", 3.0) self.assertRaises(ArgumentError, strchr, b"abcdef", 3.0)
self.assertRaises(TypeError, strchr, b"abcdef") self.assertRaises(TypeError, strchr, b"abcdef")
# Issue 6083: Reference counting bug # Issue 6083: Reference counting bug
@unittest.skipIf(os.name == 'nt', 'Temporarily disabled for Windows')
def test_from_dll_refcount(self): def test_from_dll_refcount(self):
class BadSequence(tuple): class BadSequence(tuple):
def __getitem__(self, key): def __getitem__(self, key):
if key == 0: if key == 0:
return "strchr" return "my_strchr"
if key == 1: if key == 1:
return CDLL(_ctypes_test.__file__) return CDLL(_ctypes_test.__file__)
raise IndexError raise IndexError
# _CFuncPtr instances are now callable with a tuple argument # _CFuncPtr instances are now callable with a tuple argument
# which denotes a function name and a dll: # which denotes a function name and a dll:
strchr = CFUNCTYPE(c_char_p, c_char_p, c_char)(BadSequence(("strchr", CDLL(_ctypes_test.__file__)))) strchr = CFUNCTYPE(c_char_p, c_char_p, c_char)(
BadSequence(("my_strchr", CDLL(_ctypes_test.__file__))))
self.assertTrue(strchr(b"abcdef", b"b"), "bcdef") self.assertTrue(strchr(b"abcdef", b"b"), "bcdef")
self.assertEqual(strchr(b"abcdef", b"x"), None) self.assertEqual(strchr(b"abcdef", b"x"), None)
self.assertRaises(ArgumentError, strchr, b"abcdef", 3.0) self.assertRaises(ArgumentError, strchr, b"abcdef", 3.0)