Kaydet (Commit) f08a0176 authored tarafından Florent Xicluna's avatar Florent Xicluna

Get rid of buffer() in test_ctypes: backport the 3.x tests.

üst 52093b8e
...@@ -6,7 +6,7 @@ import re ...@@ -6,7 +6,7 @@ import re
def dump(obj): def dump(obj):
# helper function to dump memory contents in hex, with a hyphen # helper function to dump memory contents in hex, with a hyphen
# between the bytes. # between the bytes.
h = hexlify(buffer(obj)) h = hexlify(memoryview(obj))
return re.sub(r"(..)", r"\1-", h)[:-1] return re.sub(r"(..)", r"\1-", h)[:-1]
......
...@@ -4,7 +4,7 @@ from binascii import hexlify ...@@ -4,7 +4,7 @@ from binascii import hexlify
from ctypes import * from ctypes import *
def bin(s): def bin(s):
return hexlify(buffer(s)).upper() return hexlify(memoryview(s)).upper()
# Each *simple* type that supports different byte orders has an # Each *simple* type that supports different byte orders has an
# __ctype_be__ attribute that specifies the same type in BIG ENDIAN # __ctype_be__ attribute that specifies the same type in BIG ENDIAN
......
import unittest import unittest
from ctypes import * from ctypes import *
import re, struct, sys import re, sys
if sys.byteorder == "little": if sys.byteorder == "little":
THIS_ENDIAN = "<" THIS_ENDIAN = "<"
...@@ -9,27 +9,6 @@ else: ...@@ -9,27 +9,6 @@ else:
THIS_ENDIAN = ">" THIS_ENDIAN = ">"
OTHER_ENDIAN = "<" OTHER_ENDIAN = "<"
class memoryview(object):
# This class creates a memoryview - like object from data returned
# by the private _ctypes._buffer_info() function, just enough for
# these tests.
#
# It can be removed when the py3k memoryview object is backported.
def __init__(self, ob):
from _ctypes import _buffer_info
self.format, self.ndim, self.shape = _buffer_info(ob)
if self.shape == ():
self.shape = None
self.itemsize = sizeof(ob)
else:
size = sizeof(ob)
for dim in self.shape:
size //= dim
self.itemsize = size
self.strides = None
self.readonly = False
self.size = sizeof(ob)
def normalize(format): def normalize(format):
# Remove current endian specifier and white space from a format # Remove current endian specifier and white space from a format
# string # string
...@@ -46,7 +25,10 @@ class Test(unittest.TestCase): ...@@ -46,7 +25,10 @@ class Test(unittest.TestCase):
v = memoryview(ob) v = memoryview(ob)
try: try:
self.assertEqual(normalize(v.format), normalize(fmt)) self.assertEqual(normalize(v.format), normalize(fmt))
self.assertEqual(v.size, sizeof(ob)) if shape is not None:
self.assertEqual(len(v), shape[0])
else:
self.assertEqual(len(v) * sizeof(itemtp), sizeof(ob))
self.assertEqual(v.itemsize, sizeof(itemtp)) self.assertEqual(v.itemsize, sizeof(itemtp))
self.assertEqual(v.shape, shape) self.assertEqual(v.shape, shape)
# ctypes object always have a non-strided memory block # ctypes object always have a non-strided memory block
...@@ -58,7 +40,7 @@ class Test(unittest.TestCase): ...@@ -58,7 +40,7 @@ class Test(unittest.TestCase):
n = 1 n = 1
for dim in v.shape: for dim in v.shape:
n = n * dim n = n * dim
self.assertEqual(v.itemsize * n, v.size) self.assertEqual(n * v.itemsize, len(v.tobytes()))
except: except:
# so that we can see the failing type # so that we can see the failing type
print(tp) print(tp)
...@@ -70,7 +52,10 @@ class Test(unittest.TestCase): ...@@ -70,7 +52,10 @@ class Test(unittest.TestCase):
v = memoryview(ob) v = memoryview(ob)
try: try:
self.assertEqual(v.format, fmt) self.assertEqual(v.format, fmt)
self.assertEqual(v.size, sizeof(ob)) if shape is not None:
self.assertEqual(len(v), shape[0])
else:
self.assertEqual(len(v) * sizeof(itemtp), sizeof(ob))
self.assertEqual(v.itemsize, sizeof(itemtp)) self.assertEqual(v.itemsize, sizeof(itemtp))
self.assertEqual(v.shape, shape) self.assertEqual(v.shape, shape)
# ctypes object always have a non-strided memory block # ctypes object always have a non-strided memory block
...@@ -82,7 +67,7 @@ class Test(unittest.TestCase): ...@@ -82,7 +67,7 @@ class Test(unittest.TestCase):
n = 1 n = 1
for dim in v.shape: for dim in v.shape:
n = n * dim n = n * dim
self.assertEqual(v.itemsize * n, v.size) self.assertEqual(n, len(v))
except: except:
# so that we can see the failing type # so that we can see the failing type
print(tp) print(tp)
......
...@@ -28,8 +28,8 @@ class PickleTest(unittest.TestCase): ...@@ -28,8 +28,8 @@ class PickleTest(unittest.TestCase):
]: ]:
dst = self.loads(self.dumps(src)) dst = self.loads(self.dumps(src))
self.assertEqual(src.__dict__, dst.__dict__) self.assertEqual(src.__dict__, dst.__dict__)
self.assertEqual(buffer(src)[:], self.assertEqual(memoryview(src).tobytes(),
buffer(dst)[:]) memoryview(dst).tobytes())
def test_struct(self): def test_struct(self):
X.init_called = 0 X.init_called = 0
...@@ -46,8 +46,8 @@ class PickleTest(unittest.TestCase): ...@@ -46,8 +46,8 @@ class PickleTest(unittest.TestCase):
# ctypes instances are identical when the instance __dict__ # ctypes instances are identical when the instance __dict__
# and the memory buffer are identical # and the memory buffer are identical
self.assertEqual(y.__dict__, x.__dict__) self.assertEqual(y.__dict__, x.__dict__)
self.assertEqual(buffer(y)[:], self.assertEqual(memoryview(y).tobytes(),
buffer(x)[:]) memoryview(x).tobytes())
def test_unpickable(self): def test_unpickable(self):
# ctypes objects that are pointers or contain pointers are # ctypes objects that are pointers or contain pointers are
......
...@@ -2,7 +2,7 @@ from ctypes import * ...@@ -2,7 +2,7 @@ from ctypes import *
import unittest, sys import unittest, sys
def callback_func(arg): def callback_func(arg):
42 / arg 42 // arg
raise ValueError(arg) raise ValueError(arg)
if sys.platform == "win32": if sys.platform == "win32":
...@@ -69,7 +69,7 @@ class CallbackTracbackTestCase(unittest.TestCase): ...@@ -69,7 +69,7 @@ class CallbackTracbackTestCase(unittest.TestCase):
out = self.capture_stderr(cb, "spam") out = self.capture_stderr(cb, "spam")
self.assertEqual(out.splitlines()[-1], self.assertEqual(out.splitlines()[-1],
"TypeError: " "TypeError: "
"unsupported operand type(s) for /: 'int' and 'str'") "unsupported operand type(s) for //: 'int' and 'str'")
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
...@@ -30,17 +30,17 @@ class StringArrayTestCase(unittest.TestCase): ...@@ -30,17 +30,17 @@ class StringArrayTestCase(unittest.TestCase):
buf.value = "Hello, World" buf.value = "Hello, World"
self.assertEqual(buf.value, "Hello, World") self.assertEqual(buf.value, "Hello, World")
self.assertRaises(TypeError, setattr, buf, "value", buffer("Hello, World")) self.assertRaises(TypeError, setattr, buf, "value", memoryview("Hello, World"))
self.assertRaises(TypeError, setattr, buf, "value", buffer("abc")) self.assertRaises(TypeError, setattr, buf, "value", memoryview("abc"))
self.assertRaises(ValueError, setattr, buf, "raw", buffer("x" * 100)) self.assertRaises(ValueError, setattr, buf, "raw", memoryview("x" * 100))
def test_c_buffer_raw(self): def test_c_buffer_raw(self):
buf = c_buffer(32) buf = c_buffer(32)
buf.raw = buffer("Hello, World") buf.raw = memoryview("Hello, World")
self.assertEqual(buf.value, "Hello, World") self.assertEqual(buf.value, "Hello, World")
self.assertRaises(TypeError, setattr, buf, "value", buffer("abc")) self.assertRaises(TypeError, setattr, buf, "value", memoryview("abc"))
self.assertRaises(ValueError, setattr, buf, "raw", buffer("x" * 100)) self.assertRaises(ValueError, setattr, buf, "raw", memoryview("x" * 100))
def test_param_1(self): def test_param_1(self):
BUF = c_char * 4 BUF = c_char * 4
......
import unittest import unittest
from test.test_support import run_unittest, import_module, check_py3k_warnings from test.test_support import run_unittest, import_module
#Skip tests if _ctypes module does not exist #Skip tests if _ctypes module does not exist
import_module('_ctypes') import_module('_ctypes')
def test_main(): def test_main():
with check_py3k_warnings(("buffer.. not supported", DeprecationWarning), import ctypes.test
("classic (int|long) division", DeprecationWarning)): skipped, testcases = ctypes.test.get_tests(ctypes.test, "test_*.py", verbosity=0)
import ctypes.test suites = [unittest.makeSuite(t) for t in testcases]
skipped, testcases = ctypes.test.get_tests(ctypes.test, "test_*.py", verbosity=0) run_unittest(unittest.TestSuite(suites))
suites = [unittest.makeSuite(t) for t in testcases]
run_unittest(unittest.TestSuite(suites))
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment