diff options
author | Armin Rigo <arigo@tunes.org> | 2018-08-05 09:42:36 +0200 |
---|---|---|
committer | Armin Rigo <arigo@tunes.org> | 2018-08-05 09:42:36 +0200 |
commit | 8e9f6a7e42bb137756243296ac21a30eb2f34e39 (patch) | |
tree | 56a7c2be6ed7570f51f069213cdfd506892a2bfc | |
parent | 409f7dc9ace9a4493e36b7a7c012adb0a9c5887d (diff) | |
download | cffi-8e9f6a7e42bb137756243296ac21a30eb2f34e39.tar.gz |
Add test from the recent ctypes fix bpo-29565 (may fail on win64)
-rw-r--r-- | testing/cffi0/backend_tests.py | 27 |
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 |