summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Rigo <arigo@tunes.org>2018-08-05 09:42:36 +0200
committerArmin Rigo <arigo@tunes.org>2018-08-05 09:42:36 +0200
commit8e9f6a7e42bb137756243296ac21a30eb2f34e39 (patch)
tree56a7c2be6ed7570f51f069213cdfd506892a2bfc
parent409f7dc9ace9a4493e36b7a7c012adb0a9c5887d (diff)
downloadcffi-8e9f6a7e42bb137756243296ac21a30eb2f34e39.tar.gz
Add test from the recent ctypes fix bpo-29565 (may fail on win64)
-rw-r--r--testing/cffi0/backend_tests.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/testing/cffi0/backend_tests.py b/testing/cffi0/backend_tests.py
index c9fadac..85fb0d4 100644
--- a/testing/cffi0/backend_tests.py
+++ b/testing/cffi0/backend_tests.py
@@ -1945,3 +1945,30 @@ class BackendTests:
# only works with the Python FFI instances
ffi = FFI(backend=self.Backend())
assert ffi.sizeof("struct{int a;}") == ffi.sizeof("int")
+
+ def test_callback_large_struct(self):
+ ffi = FFI(backend=self.Backend())
+ # more than 8 bytes
+ ffi.cdef("struct foo_s { unsigned long a, b, c; };")
+ #
+ @ffi.callback("void(struct foo_s)")
+ def cb(s):
+ seen.append(ffi.typeof(s))
+ s.a += 1
+ s.b += 2
+ s.c += 3
+ seen.append(s.a)
+ seen.append(s.b)
+ seen.append(s.c)
+ #
+ s1 = ffi.new("struct foo_s *", {'a': 100, 'b': 200, 'c': 300})
+ seen = []
+ cb(s1[0])
+ assert len(seen) == 4
+ assert s1.a == 100 # unmodified
+ assert s1.b == 200
+ assert s1.c == 300
+ assert seen[0] == ffi.typeof("struct foo_s")
+ assert seen[1] == 101
+ assert seen[2] == 202
+ assert seen[3] == 303