From f1dfeed52b6ff4c0135c6d1658b82799c853a002 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Mon, 2 Oct 2023 11:26:28 +0200 Subject: [PATCH] Update to 1.16.0 - Fixes: rhbz#2240695 Upstream has moved to GitHub and this release is no longer tagged on heptapod. The requirements.txt file is gone, we only need pytest anyway to test this package. --- 113.patch | 95 - 115.patch | 5414 ---------------------------------------------- 116.patch | 103 - 482f0af.patch | 315 --- 69660bd.patch | 25 - 814c55e.patch | 45 - 87f514b.patch | 103 - c3593e4.patch | 54 - python-cffi.spec | 28 +- sources | 2 +- 10 files changed, 9 insertions(+), 6175 deletions(-) delete mode 100644 113.patch delete mode 100644 115.patch delete mode 100644 116.patch delete mode 100644 482f0af.patch delete mode 100644 69660bd.patch delete mode 100644 814c55e.patch delete mode 100644 87f514b.patch delete mode 100644 c3593e4.patch diff --git a/113.patch b/113.patch deleted file mode 100644 index 477ae3e..0000000 --- a/113.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 8a3c2c816d789639b49d3ae867213393ed7abdff Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= -Date: Fri, 15 Jul 2022 16:11:37 +0200 -Subject: [PATCH] Adjust tests for a last minute Python 3.11 change in the - traceback format - -See https://github.com/python/cpython/issues/93883 -and https://github.com/python/cpython/pull/93994 - ---HG-- -branch : python3.11.0b4 ---- - c/test_c.py | 35 ++--------------------------------- - 1 file changed, 2 insertions(+), 33 deletions(-) - -diff --git a/c/test_c.py b/c/test_c.py -index cde83b80..048711c7 100644 ---- a/c/test_c.py -+++ b/c/test_c.py -@@ -1342,11 +1342,11 @@ def test_callback_exception(): - except ImportError: - import io as cStringIO # Python 3 - import linecache -- def matches(istr, ipattern, ipattern38, ipattern311): -+ def matches(istr, ipattern, ipattern38, ipattern311=None): - if sys.version_info >= (3, 8): - ipattern = ipattern38 - if sys.version_info >= (3, 11): -- ipattern = ipattern311 -+ ipattern = ipattern311 or ipattern38 - str, pattern = istr, ipattern - while '$' in pattern: - i = pattern.index('$') -@@ -1400,16 +1400,6 @@ Traceback (most recent call last): - File "$", line $, in check_value - $ - ValueError: 42 --""", """\ --Exception ignored from cffi callback : --Traceback (most recent call last): -- File "$", line $, in Zcb1 -- $ -- $ -- File "$", line $, in check_value -- $ -- $ --ValueError: 42 - """) - sys.stderr = cStringIO.StringIO() - bigvalue = 20000 -@@ -1424,13 +1414,6 @@ Traceback (most recent call last): - File "$", line $, in test_callback_exception - $ - OverflowError: integer 60000 does not fit 'short' --""", """\ --Exception ignored from cffi callback , trying to convert the result back to C: --Traceback (most recent call last): -- File "$", line $, in test_callback_exception -- $ -- $ --OverflowError: integer 60000 does not fit 'short' - """) - sys.stderr = cStringIO.StringIO() - bigvalue = 20000 -@@ -1479,19 +1462,6 @@ Traceback (most recent call last): - File "$", line $, in test_callback_exception - $ - TypeError: $integer$ --""", """\ --Exception ignored from cffi callback , trying to convert the result back to C: --Traceback (most recent call last): -- File "$", line $, in test_callback_exception -- $ -- $ --OverflowError: integer 60000 does not fit 'short' --Exception ignored during handling of the above exception by 'onerror': --Traceback (most recent call last): -- File "$", line $, in test_callback_exception -- $ -- $ --TypeError: $integer$ - """) - # - sys.stderr = cStringIO.StringIO() -@@ -1526,7 +1496,6 @@ Exception ignored from cffi callback , trying to convert t - Traceback (most recent call last): - File "$", line $, in test_callback_exception - $ -- $ - OverflowError: integer 60000 does not fit 'short' - Exception ignored during handling of the above exception by 'onerror': - Traceback (most recent call last): --- -GitLab - diff --git a/115.patch b/115.patch deleted file mode 100644 index 2651cb5..0000000 --- a/115.patch +++ /dev/null @@ -1,5414 +0,0 @@ -From bd02e1b122612baa74a126e428bacebc7889e897 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= -Date: Fri, 11 Nov 2022 14:51:14 +0100 -Subject: [PATCH] Replace py.test usage with pytest, explicitly require py for - tests - -pytest 7.2+ no longer depends on py. It ships py.path and py.error only. -See https://docs.pytest.org/en/7.2.x/changelog.html#deprecations - -The tests use py.code as well, hence we declare and document a test dependency on py. - ---HG-- -branch : py.test ---- - README.md | 4 +- - c/test_c.py | 387 +++++++++++++-------------- - doc/source/installation.rst | 6 +- - requirements.txt | 1 + - testing/cffi0/backend_tests.py | 151 ++++++----- - testing/cffi0/test_cdata.py | 1 - - testing/cffi0/test_ctypes.py | 21 +- - testing/cffi0/test_ffi_backend.py | 40 +-- - testing/cffi0/test_function.py | 57 ++-- - testing/cffi0/test_ownlib.py | 51 ++-- - testing/cffi0/test_parsing.py | 47 ++-- - testing/cffi0/test_verify.py | 190 ++++++------- - testing/cffi0/test_version.py | 5 +- - testing/cffi0/test_zdistutils.py | 4 +- - testing/cffi0/test_zintegration.py | 4 +- - testing/cffi1/test_cffi_binary.py | 7 +- - testing/cffi1/test_commontypes.py | 5 +- - testing/cffi1/test_dlopen.py | 10 +- - testing/cffi1/test_ffi_obj.py | 48 ++-- - testing/cffi1/test_new_ffi_1.py | 131 +++++---- - testing/cffi1/test_parse_c_type.py | 9 +- - testing/cffi1/test_pkgconfig.py | 10 +- - testing/cffi1/test_re_python.py | 22 +- - testing/cffi1/test_realize_c_type.py | 5 +- - testing/cffi1/test_recompiler.py | 166 ++++++------ - testing/cffi1/test_verify1.py | 184 ++++++------- - testing/cffi1/test_zdist.py | 9 +- - testing/embedding/test_basic.py | 4 +- - testing/support.py | 4 +- - 29 files changed, 794 insertions(+), 789 deletions(-) - -diff --git a/README.md b/README.md -index b56afb71..b4b84884 100644 ---- a/README.md -+++ b/README.md -@@ -30,10 +30,10 @@ Testing/development tips - - To run tests under CPython, run:: - -- pip install pytest # if you don't have py.test already -+ pip install pytest py # if you don't have pytest and py already - pip install pycparser - python setup.py build_ext -f -i -- py.test c/ testing/ -+ pytest c/ testing/ - - If you run in another directory (either the tests or another program), - you should use the environment variable ``PYTHONPATH=/path`` to point -diff --git a/c/test_c.py b/c/test_c.py -index 048711c7..5fd670b9 100644 ---- a/c/test_c.py -+++ b/c/test_c.py -@@ -1,4 +1,3 @@ --import py - import pytest - import sys - -@@ -80,7 +79,7 @@ def find_and_load_library(name, flags=RTLD_NOW): - assert sys.platform == 'win32' - assert (sys.version_info >= (3,) or - '__pypy__' in sys.builtin_module_names) -- py.test.skip("dlopen(None) cannot work on Windows " -+ pytest.skip("dlopen(None) cannot work on Windows " - "with PyPy or Python 3") - return load_library(path, flags) - -@@ -107,7 +106,7 @@ def test_all_rtld_symbols(): - RTLD_DEEPBIND - - def test_new_primitive_type(): -- py.test.raises(KeyError, new_primitive_type, "foo") -+ pytest.raises(KeyError, new_primitive_type, "foo") - p = new_primitive_type("signed char") - assert repr(p) == "" - -@@ -137,7 +136,7 @@ def test_cast_to_signed_char(): - assert (x != cast(q, -66)) is False - - def test_sizeof_type(): -- py.test.raises(TypeError, sizeof, 42.5) -+ pytest.raises(TypeError, sizeof, 42.5) - p = new_primitive_type("short") - assert sizeof(p) == 2 - -@@ -151,7 +150,7 @@ def test_integer_types(): - assert int(cast(p, max)) == max - assert int(cast(p, min - 1)) == max - assert int(cast(p, max + 1)) == min -- py.test.raises(TypeError, cast, p, None) -+ pytest.raises(TypeError, cast, p, None) - assert long(cast(p, min - 1)) == max - assert int(cast(p, b'\x08')) == 8 - assert int(cast(p, u+'\x08')) == 8 -@@ -169,8 +168,8 @@ def test_integer_types(): - - def test_no_float_on_int_types(): - p = new_primitive_type('long') -- py.test.raises(TypeError, float, cast(p, 42)) -- py.test.raises(TypeError, complex, cast(p, 42)) -+ pytest.raises(TypeError, float, cast(p, 42)) -+ pytest.raises(TypeError, complex, cast(p, 42)) - - def test_float_types(): - INF = 1E200 * 1E200 -@@ -190,8 +189,8 @@ def test_float_types(): - assert type(int(cast(p, 1E22))) is long - assert type(long(cast(p, 61.91))) is long - assert type(long(cast(p, 1E22))) is long -- py.test.raises(OverflowError, int, cast(p, INF)) -- py.test.raises(OverflowError, int, cast(p, -INF)) -+ pytest.raises(OverflowError, int, cast(p, INF)) -+ pytest.raises(OverflowError, int, cast(p, -INF)) - assert float(cast(p, 1.25)) == 1.25 - assert float(cast(p, INF)) == INF - assert float(cast(p, -INF)) == -INF -@@ -204,7 +203,7 @@ def test_float_types(): - assert float(cast(p, b'\x09')) == 9.0 - assert float(cast(p, u+'\x09')) == 9.0 - assert float(cast(p, True)) == 1.0 -- py.test.raises(TypeError, cast, p, None) -+ pytest.raises(TypeError, cast, p, None) - - def test_complex_types(): - INF = 1E200 * 1E200 -@@ -217,9 +216,9 @@ def test_complex_types(): - assert bool(cast(p, INF*1j)) - assert bool(cast(p, -INF*1j)) - # "can't convert complex to float", like CPython's "float(0j)" -- py.test.raises(TypeError, int, cast(p, -150)) -- py.test.raises(TypeError, long, cast(p, -150)) -- py.test.raises(TypeError, float, cast(p, -150)) -+ pytest.raises(TypeError, int, cast(p, -150)) -+ pytest.raises(TypeError, long, cast(p, -150)) -+ pytest.raises(TypeError, float, cast(p, -150)) - assert complex(cast(p, 1.25)) == 1.25 - assert complex(cast(p, 1.25j)) == 1.25j - assert complex(cast(p, complex(0,INF))) == complex(0,INF) -@@ -235,14 +234,14 @@ def test_complex_types(): - assert complex(cast(p, b'\x09')) == 9.0 + 0j - assert complex(cast(p, u+'\x09')) == 9.0 + 0j - assert complex(cast(p, True)) == 1.0 + 0j -- py.test.raises(TypeError, cast, p, None) -+ pytest.raises(TypeError, cast, p, None) - # -- py.test.raises(TypeError, cast, new_primitive_type(name), 1+0j) -+ pytest.raises(TypeError, cast, new_primitive_type(name), 1+0j) - # - for basetype in ["char", "int", "uint64_t", "float", - "double", "long double"]: - baseobj = cast(new_primitive_type(basetype), 65) -- py.test.raises(TypeError, complex, baseobj) -+ pytest.raises(TypeError, complex, baseobj) - # - BArray = new_array_type(new_pointer_type(p), 10) - x = newp(BArray, None) -@@ -256,7 +255,7 @@ def test_complex_types(): - return 2 + 3j - assert complex(Foo()) == 2 + 3j - assert complex(cast(p, Foo())) == 2 + 3j -- py.test.raises(TypeError, cast, new_primitive_type("int"), 1+0j) -+ pytest.raises(TypeError, cast, new_primitive_type("int"), 1+0j) - - def test_character_type(): - p = new_primitive_type("char") -@@ -294,8 +293,8 @@ def test_inspect_pointer_type(): - - def test_pointer_to_int(): - BInt = new_primitive_type("int") -- py.test.raises(TypeError, newp, BInt) -- py.test.raises(TypeError, newp, BInt, None) -+ pytest.raises(TypeError, newp, BInt) -+ pytest.raises(TypeError, newp, BInt, None) - BPtr = new_pointer_type(BInt) - p = newp(BPtr) - assert repr(p) == "" % size_of_int() -@@ -307,7 +306,7 @@ def test_pointer_to_int(): - assert repr(q).startswith("" - # -- py.test.raises(TypeError, new_array_type, new_pointer_type(p), "foo") -- py.test.raises(ValueError, new_array_type, new_pointer_type(p), -42) -+ pytest.raises(TypeError, new_array_type, new_pointer_type(p), "foo") -+ pytest.raises(ValueError, new_array_type, new_pointer_type(p), -42) - # - p1 = new_array_type(new_pointer_type(p), None) - assert repr(p1) == "" -- py.test.raises(ValueError, new_array_type, new_pointer_type(p1), 42) -+ pytest.raises(ValueError, new_array_type, new_pointer_type(p1), 42) - # - p1 = new_array_type(new_pointer_type(p), 42) - p2 = new_array_type(new_pointer_type(p1), 25) -@@ -528,9 +527,9 @@ def test_array_type(): - p2 = new_array_type(new_pointer_type(p1), None) - assert repr(p2) == "" - # -- py.test.raises(OverflowError, -+ pytest.raises(OverflowError, - new_array_type, new_pointer_type(p), sys.maxsize+1) -- py.test.raises(OverflowError, -+ pytest.raises(OverflowError, - new_array_type, new_pointer_type(p), sys.maxsize // 3) - - def test_inspect_array_type(): -@@ -569,13 +568,13 @@ def test_array_instance(): - with pytest.raises(IndexError) as e: - a[LENGTH+100] = 500 - assert ('(expected %d < %d)' % (LENGTH+100, LENGTH)) in str(e.value) -- py.test.raises(TypeError, int, a) -+ pytest.raises(TypeError, int, a) - - def test_array_of_unknown_length_instance(): - p = new_primitive_type("int") - p1 = new_array_type(new_pointer_type(p), None) -- py.test.raises(TypeError, newp, p1, None) -- py.test.raises(ValueError, newp, p1, -42) -+ pytest.raises(TypeError, newp, p1, None) -+ pytest.raises(ValueError, newp, p1, -42) - a = newp(p1, 42) - assert len(a) == 42 - for i in range(42): -@@ -744,8 +743,8 @@ def test_new_struct_type(): - assert repr(BStruct) == "" - BPtr = new_pointer_type(BStruct) - assert repr(BPtr) == "" -- py.test.raises(ValueError, sizeof, BStruct) -- py.test.raises(ValueError, alignof, BStruct) -+ pytest.raises(ValueError, sizeof, BStruct) -+ pytest.raises(ValueError, alignof, BStruct) - - def test_new_union_type(): - BUnion = new_union_type("union foo") -@@ -877,7 +876,7 @@ def test_union_instance(): - p = newp(new_pointer_type(BUnion), {'a2': bigval}) - assert p.a1 == -42 - assert p.a2 == bigval -- py.test.raises(OverflowError, newp, new_pointer_type(BUnion), -+ pytest.raises(OverflowError, newp, new_pointer_type(BUnion), - {'a1': bigval}) - p = newp(new_pointer_type(BUnion), []) - assert p.a1 == p.a2 == 0 -@@ -917,7 +916,7 @@ def test_struct_init_list(): - assert s.a3 == -123 - assert s.p4 == cast(BVoidP, 0) - # -- py.test.raises(KeyError, newp, BStructPtr, {'foobar': 0}) -+ pytest.raises(KeyError, newp, BStructPtr, {'foobar': 0}) - # - p = newp(BIntPtr, 14141) - s = newp(BStructPtr, [12, 34, 56, p]) -@@ -928,7 +927,7 @@ def test_struct_init_list(): - assert s.p4 == cast(BVoidP, 0) - assert not s.p4 - # -- py.test.raises(TypeError, newp, BStructPtr, [12, 34, 56, None]) -+ pytest.raises(TypeError, newp, BStructPtr, [12, 34, 56, None]) - - def test_array_in_struct(): - BInt = new_primitive_type("int") -@@ -944,12 +943,12 @@ def test_offsetof(): - return typeoffsetof(BType, fieldname)[1] - BInt = new_primitive_type("int") - BStruct = new_struct_type("struct foo") -- py.test.raises(TypeError, offsetof, BInt, "abc") -- py.test.raises(TypeError, offsetof, BStruct, "abc") -+ pytest.raises(TypeError, offsetof, BInt, "abc") -+ pytest.raises(TypeError, offsetof, BStruct, "abc") - complete_struct_or_union(BStruct, [('abc', BInt, -1), ('def', BInt, -1)]) - assert offsetof(BStruct, 'abc') == 0 - assert offsetof(BStruct, 'def') == size_of_int() -- py.test.raises(KeyError, offsetof, BStruct, "ghi") -+ pytest.raises(KeyError, offsetof, BStruct, "ghi") - assert offsetof(new_pointer_type(BStruct), "def") == size_of_int() - - def test_function_type(): -@@ -987,7 +986,7 @@ def test_function_void_result(): - def test_function_void_arg(): - BVoid = new_void_type() - BInt = new_primitive_type("int") -- py.test.raises(TypeError, new_function_type, (BVoid,), BInt, False) -+ pytest.raises(TypeError, new_function_type, (BVoid,), BInt, False) - - def test_call_function_0(): - BSignedChar = new_primitive_type("signed char") -@@ -995,8 +994,8 @@ def test_call_function_0(): - f = cast(BFunc0, _testfunc(0)) - assert f(40, 2) == 42 - assert f(-100, -100) == -200 + 256 -- py.test.raises(OverflowError, f, 128, 0) -- py.test.raises(OverflowError, f, 0, 128) -+ pytest.raises(OverflowError, f, 128, 0) -+ pytest.raises(OverflowError, f, 0, 128) - - def test_call_function_0_pretend_bool_result(): - BSignedChar = new_primitive_type("signed char") -@@ -1005,7 +1004,7 @@ def test_call_function_0_pretend_bool_result(): - f = cast(BFunc0, _testfunc(0)) - assert f(40, -39) is True - assert f(40, -40) is False -- py.test.raises(ValueError, f, 40, 2) -+ pytest.raises(ValueError, f, 40, 2) - - def test_call_function_1(): - BInt = new_primitive_type("int") -@@ -1079,9 +1078,9 @@ def test_call_function_6(): - assert typeof(res) is BIntPtr - assert res[0] == 242 - 1000 - # -- py.test.raises(TypeError, f, 123456) -- py.test.raises(TypeError, f, "foo") -- py.test.raises(TypeError, f, u+"bar") -+ pytest.raises(TypeError, f, 123456) -+ pytest.raises(TypeError, f, "foo") -+ pytest.raises(TypeError, f, u+"bar") - - def test_call_function_7(): - BChar = new_primitive_type("char") -@@ -1110,7 +1109,7 @@ def test_call_function_20(): - f = cast(BFunc20, _testfunc(20)) - x = newp(BStructPtr, {'a1': b'A', 'a2': -4042}) - # can't pass a 'struct foo' -- py.test.raises(TypeError, f, x[0]) -+ pytest.raises(TypeError, f, x[0]) - - def test_call_function_21(): - BInt = new_primitive_type("int") -@@ -1155,9 +1154,9 @@ def test_call_function_23(): - assert res == 1000 * ord(b'f') - res = f(cast(BVoidP, 0)) # NULL - assert res == -42 -- py.test.raises(TypeError, f, None) -- py.test.raises(TypeError, f, 0) -- py.test.raises(TypeError, f, 0.0) -+ pytest.raises(TypeError, f, None) -+ pytest.raises(TypeError, f, 0) -+ pytest.raises(TypeError, f, 0.0) - - def test_call_function_23_bis(): - # declaring the function as int(unsigned char*) -@@ -1178,7 +1177,7 @@ def test_call_function_23_bool_array(): - f = cast(BFunc23, _testfunc(23)) - res = f(b"\x01\x01") - assert res == 1000 -- py.test.raises(ValueError, f, b"\x02\x02") -+ pytest.raises(ValueError, f, b"\x02\x02") - - def test_cannot_pass_struct_with_array_of_length_0(): - BInt = new_primitive_type("int") -@@ -1187,9 +1186,9 @@ def test_cannot_pass_struct_with_array_of_length_0(): - BStructP = new_pointer_type(BStruct) - complete_struct_or_union(BStruct, [('a', BArray0)]) - BFunc = new_function_type((BStruct,), BInt, False) -- py.test.raises(NotImplementedError, cast(BFunc, 123), cast(BStructP, 123)) -+ pytest.raises(NotImplementedError, cast(BFunc, 123), cast(BStructP, 123)) - BFunc2 = new_function_type((BInt,), BStruct, False) -- py.test.raises(NotImplementedError, cast(BFunc2, 123), 123) -+ pytest.raises(NotImplementedError, cast(BFunc2, 123), 123) - - def test_call_function_9(): - BInt = new_primitive_type("int") -@@ -1198,8 +1197,8 @@ def test_call_function_9(): - assert f(0) == 0 - assert f(1, cast(BInt, 42)) == 42 - assert f(2, cast(BInt, 40), cast(BInt, 2)) == 42 -- py.test.raises(TypeError, f, 1, 42) -- py.test.raises(TypeError, f, 2, None) -+ pytest.raises(TypeError, f, 1, 42) -+ pytest.raises(TypeError, f, 2, None) - # promotion of chars and shorts to ints - BSChar = new_primitive_type("signed char") - BUChar = new_primitive_type("unsigned char") -@@ -1218,7 +1217,7 @@ def test_call_function_24(): - assert (result.imag != 2*5.1) and (abs(result.imag - 2*5.1) < 1e-5) # inexact - else: - f = cast(BFunc3, _testfunc(9)) -- py.test.raises(NotImplementedError, f, 12.3, 34.5) -+ pytest.raises(NotImplementedError, f, 12.3, 34.5) - - def test_call_function_25(): - BDouble = new_primitive_type("double") -@@ -1232,7 +1231,7 @@ def test_call_function_25(): - assert (result.imag != 2*5.1) and (abs(result.imag - 2*5.1) < 1e-10) # inexact - else: - f = cast(BFunc3, _testfunc(9)) -- py.test.raises(NotImplementedError, f, 12.3, 34.5) -+ pytest.raises(NotImplementedError, f, 12.3, 34.5) - - def test_cannot_call_with_a_autocompleted_struct(): - BSChar = new_primitive_type("signed char") -@@ -1244,7 +1243,7 @@ def test_cannot_call_with_a_autocompleted_struct(): - ('b', BSChar, -1, 0)]) - BFunc = new_function_type((BStruct,), BDouble) # internally not callable - dummy_func = cast(BFunc, 42) -- e = py.test.raises(NotImplementedError, dummy_func, "?") -+ e = pytest.raises(NotImplementedError, dummy_func, "?") - msg = ("ctype 'struct foo' not supported as argument. It is a struct " - 'declared with "...;", but the C calling convention may depend ' - "on the missing fields; or, it contains anonymous struct/unions. " -@@ -1283,20 +1282,20 @@ def test_read_variable(): - ## FIXME: this test assumes glibc specific behavior, it's not compliant with C standard - ## https://bugs.pypy.org/issue1643 - if not sys.platform.startswith("linux"): -- py.test.skip("untested") -+ pytest.skip("untested") - BVoidP = new_pointer_type(new_void_type()) - ll = find_and_load_library('c') - stderr = ll.read_variable(BVoidP, "stderr") - assert stderr == cast(BVoidP, _testfunc(8)) - # - ll.close_lib() -- py.test.raises(ValueError, ll.read_variable, BVoidP, "stderr") -+ pytest.raises(ValueError, ll.read_variable, BVoidP, "stderr") - - def test_read_variable_as_unknown_length_array(): - ## FIXME: this test assumes glibc specific behavior, it's not compliant with C standard - ## https://bugs.pypy.org/issue1643 - if not sys.platform.startswith("linux"): -- py.test.skip("untested") -+ pytest.skip("untested") - BCharP = new_pointer_type(new_primitive_type("char")) - BArray = new_array_type(BCharP, None) - ll = find_and_load_library('c') -@@ -1308,7 +1307,7 @@ def test_write_variable(): - ## FIXME: this test assumes glibc specific behavior, it's not compliant with C standard - ## https://bugs.pypy.org/issue1643 - if not sys.platform.startswith("linux") or is_musl: -- py.test.skip("untested") -+ pytest.skip("untested") - BVoidP = new_pointer_type(new_void_type()) - ll = find_and_load_library('c') - stderr = ll.read_variable(BVoidP, "stderr") -@@ -1319,7 +1318,7 @@ def test_write_variable(): - assert ll.read_variable(BVoidP, "stderr") == stderr - # - ll.close_lib() -- py.test.raises(ValueError, ll.write_variable, BVoidP, "stderr", stderr) -+ pytest.raises(ValueError, ll.write_variable, BVoidP, "stderr", stderr) - - def test_callback(): - BInt = new_primitive_type("int") -@@ -1333,7 +1332,7 @@ def test_callback(): - assert repr(f).startswith( - ", ) for most -@@ -2021,7 +2020,7 @@ def test_newp_copying(): - # - BArray = new_array_type(new_pointer_type(BInt), None) - a1 = newp(BArray, [1, 2, 3, 4]) -- py.test.raises(TypeError, newp, BArray, a1) -+ pytest.raises(TypeError, newp, BArray, a1) - BArray6 = new_array_type(new_pointer_type(BInt), 6) - a1 = newp(BArray6, [10, 20, 30]) - a2 = newp(BArray6, a1) -@@ -2055,7 +2054,7 @@ def test_string(): - p = a + 2 - assert string(p) == b"llo" - assert string(newp(new_array_type(BCharP, 4), b"abcd")) == b"abcd" -- py.test.raises(RuntimeError, string, cast(BCharP, 0)) -+ pytest.raises(RuntimeError, string, cast(BCharP, 0)) - assert string(a, 4) == b"hell" - assert string(a, 5) == b"hello" - assert string(a, 6) == b"hello" -@@ -2100,14 +2099,14 @@ def test_string_typeerror(): - BShort = new_primitive_type("short") - BArray = new_array_type(new_pointer_type(BShort), None) - a = newp(BArray, [65, 66, 67]) -- py.test.raises(TypeError, string, a) -+ pytest.raises(TypeError, string, a) - - def test_bug_convert_to_ptr(): - BChar = new_primitive_type("char") - BCharP = new_pointer_type(BChar) - BDouble = new_primitive_type("double") - x = cast(BDouble, 42) -- py.test.raises(TypeError, newp, new_pointer_type(BCharP), x) -+ pytest.raises(TypeError, newp, new_pointer_type(BCharP), x) - - def test_set_struct_fields(): - BChar = new_primitive_type("char") -@@ -2133,8 +2132,8 @@ def test_invalid_function_result_types(): - BUnion = new_union_type("union foo_u") - complete_struct_or_union(BUnion, []) - BFunc = new_function_type((), BUnion) -- py.test.raises(NotImplementedError, cast(BFunc, 123)) -- py.test.raises(TypeError, new_function_type, (), BArray) -+ pytest.raises(NotImplementedError, cast(BFunc, 123)) -+ pytest.raises(TypeError, new_function_type, (), BArray) - - def test_struct_return_in_func(): - BChar = new_primitive_type("char") -@@ -2240,8 +2239,8 @@ def test_cast_with_functionptr(): - complete_struct_or_union(BStruct, [('a1', BFunc, -1)]) - newp(BStructPtr, [cast(BFunc, 0)]) - newp(BStructPtr, [cast(BCharP, 0)]) -- py.test.raises(TypeError, newp, BStructPtr, [cast(BIntP, 0)]) -- py.test.raises(TypeError, newp, BStructPtr, [cast(BFunc2, 0)]) -+ pytest.raises(TypeError, newp, BStructPtr, [cast(BIntP, 0)]) -+ pytest.raises(TypeError, newp, BStructPtr, [cast(BFunc2, 0)]) - - def test_wchar(): - _test_wchar_variant("wchar_t") -@@ -2363,8 +2362,8 @@ def _test_wchar_variant(typename): - assert int(w) == 0x12345 - w = cast(BInt, u+'\U00012345') - assert repr(w) == "" -- py.test.raises(TypeError, cast, BInt, u+'') -- py.test.raises(TypeError, cast, BInt, u+'XX') -+ pytest.raises(TypeError, cast, BInt, u+'') -+ pytest.raises(TypeError, cast, BInt, u+'XX') - assert int(cast(BInt, u+'a')) == ord('a') - # - a = newp(BWCharArray, u+'hello - world') -@@ -2381,7 +2380,7 @@ def _test_wchar_variant(typename): - # - q = cast(BWCharP, 0) - assert str(q) == repr(q) -- py.test.raises(RuntimeError, string, q) -+ pytest.raises(RuntimeError, string, q) - # - def cb(p): - assert repr(p).startswith("= 2.7 -- py.test.raises(TypeError, memoryview, c) -+ pytest.raises(TypeError, memoryview, c) - mv1 = memoryview(buf) - assert len(mv1) == len(buf) and mv1[3] in (b"t", ord(b"t")) - # --mb_ass_item-- -@@ -2621,7 +2620,7 @@ def test_errno(): - - def test_errno_callback(): - if globals().get('PY_DOT_PY'): -- py.test.skip("cannot run this test on py.py (e.g. fails on Windows)") -+ pytest.skip("cannot run this test on py.py (e.g. fails on Windows)") - set_errno(95) - def cb(): - e = get_errno() -@@ -2647,12 +2646,12 @@ def test_cast_invalid(): - complete_struct_or_union(BStruct, []) - p = cast(new_pointer_type(BStruct), 123456) - s = p[0] -- py.test.raises(TypeError, cast, BStruct, s) -+ pytest.raises(TypeError, cast, BStruct, s) - - def test_bug_float_convertion(): - BDouble = new_primitive_type("double") - BDoubleP = new_pointer_type(BDouble) -- py.test.raises(TypeError, newp, BDoubleP, "foobar") -+ pytest.raises(TypeError, newp, BDoubleP, "foobar") - - def test_bug_delitem(): - BChar = new_primitive_type("char") -@@ -2670,7 +2669,7 @@ def test_bug_delattr(): - del x.a1 - - def test_variable_length_struct(): -- py.test.skip("later") -+ pytest.skip("later") - BLong = new_primitive_type("long") - BArray = new_array_type(new_pointer_type(BLong), None) - BStruct = new_struct_type("struct foo") -@@ -2680,7 +2679,7 @@ def test_variable_length_struct(): - assert sizeof(BStruct) == size_of_long() - assert alignof(BStruct) == alignof(BLong) - # -- py.test.raises(TypeError, newp, BStructP, None) -+ pytest.raises(TypeError, newp, BStructP, None) - x = newp(BStructP, 5) - assert sizeof(x) == 6 * size_of_long() - x[4] = 123 -@@ -2689,7 +2688,7 @@ def test_variable_length_struct(): - x[5] - assert len(x.a2) == 5 - # -- py.test.raises(TypeError, newp, BStructP, [123]) -+ pytest.raises(TypeError, newp, BStructP, [123]) - x = newp(BStructP, [123, 5]) - assert x.a1 == 123 - assert len(x.a2) == 5 -@@ -2724,7 +2723,7 @@ def test_autocast_int(): - assert x[0] == 42 - x = newp(BULongLongPtr, cast(BInt, 42)) - assert x[0] == 42 -- py.test.raises(OverflowError, newp, BULongLongPtr, cast(BInt, -42)) -+ pytest.raises(OverflowError, newp, BULongLongPtr, cast(BInt, -42)) - x = cast(BInt, cast(BInt, 42)) - assert int(x) == 42 - x = cast(BInt, cast(BLongLong, 42)) -@@ -2890,8 +2889,8 @@ def test_no_cdata_float(): - BUInt = new_primitive_type("unsigned int") - BUIntP = new_pointer_type(BUInt) - BFloat = new_primitive_type("float") -- py.test.raises(TypeError, newp, BIntP, cast(BFloat, 0.0)) -- py.test.raises(TypeError, newp, BUIntP, cast(BFloat, 0.0)) -+ pytest.raises(TypeError, newp, BIntP, cast(BFloat, 0.0)) -+ pytest.raises(TypeError, newp, BUIntP, cast(BFloat, 0.0)) - - def test_bool(): - BBool = new_primitive_type("_Bool") -@@ -2911,10 +2910,10 @@ def test_bool(): - assert newp(BBoolP, True)[0] == 1 - assert newp(BBoolP, 0)[0] == 0 - assert newp(BBoolP, 1)[0] == 1 -- py.test.raises(TypeError, newp, BBoolP, 1.0) -- py.test.raises(TypeError, newp, BBoolP, '\x00') -- py.test.raises(OverflowError, newp, BBoolP, 2) -- py.test.raises(OverflowError, newp, BBoolP, -1) -+ pytest.raises(TypeError, newp, BBoolP, 1.0) -+ pytest.raises(TypeError, newp, BBoolP, '\x00') -+ pytest.raises(OverflowError, newp, BBoolP, 2) -+ pytest.raises(OverflowError, newp, BBoolP, -1) - BCharP = new_pointer_type(new_primitive_type("char")) - p = newp(BCharP, b'\x01') - q = cast(BBoolP, p) -@@ -2922,7 +2921,7 @@ def test_bool(): - p = newp(BCharP, b'\x00') - q = cast(BBoolP, p) - assert q[0] is False -- py.test.raises(TypeError, string, cast(BBool, False)) -+ pytest.raises(TypeError, string, cast(BBool, False)) - BDouble = new_primitive_type("double") - assert int(cast(BBool, cast(BDouble, 0.1))) == 1 - assert int(cast(BBool, cast(BDouble, 0.0))) == 0 -@@ -2940,15 +2939,15 @@ def test_bool_forbidden_cases(): - q = cast(BBoolP, p) - with pytest.raises(ValueError): - q[0] -- py.test.raises(TypeError, newp, BBoolP, b'\x00') -+ pytest.raises(TypeError, newp, BBoolP, b'\x00') - assert newp(BBoolP, 0)[0] is False - assert newp(BBoolP, 1)[0] is True -- py.test.raises(OverflowError, newp, BBoolP, 2) -- py.test.raises(OverflowError, newp, BBoolP, -1) -- py.test.raises(ValueError, newp, BBoolA, b'\x00\x01\x02') -- py.test.raises(OverflowError, newp, BBoolA, [0, 1, 2]) -- py.test.raises(TypeError, string, newp(BBoolP, 1)) -- py.test.raises(TypeError, string, newp(BBoolA, [1])) -+ pytest.raises(OverflowError, newp, BBoolP, 2) -+ pytest.raises(OverflowError, newp, BBoolP, -1) -+ pytest.raises(ValueError, newp, BBoolA, b'\x00\x01\x02') -+ pytest.raises(OverflowError, newp, BBoolA, [0, 1, 2]) -+ pytest.raises(TypeError, string, newp(BBoolP, 1)) -+ pytest.raises(TypeError, string, newp(BBoolA, [1])) - - def test_typeoffsetof(): - BChar = new_primitive_type("char") -@@ -2957,39 +2956,39 @@ def test_typeoffsetof(): - complete_struct_or_union(BStruct, [('a1', BChar, -1), - ('a2', BChar, -1), - ('a3', BChar, -1)]) -- py.test.raises(TypeError, typeoffsetof, BStructPtr, None) -- py.test.raises(TypeError, typeoffsetof, BStruct, None) -+ pytest.raises(TypeError, typeoffsetof, BStructPtr, None) -+ pytest.raises(TypeError, typeoffsetof, BStruct, None) - assert typeoffsetof(BStructPtr, 'a1') == (BChar, 0) - assert typeoffsetof(BStruct, 'a1') == (BChar, 0) - assert typeoffsetof(BStructPtr, 'a2') == (BChar, 1) - assert typeoffsetof(BStruct, 'a3') == (BChar, 2) - assert typeoffsetof(BStructPtr, 'a2', 0) == (BChar, 1) - assert typeoffsetof(BStruct, u+'a3') == (BChar, 2) -- py.test.raises(TypeError, typeoffsetof, BStructPtr, 'a2', 1) -- py.test.raises(KeyError, typeoffsetof, BStructPtr, 'a4') -- py.test.raises(KeyError, typeoffsetof, BStruct, 'a5') -- py.test.raises(TypeError, typeoffsetof, BStruct, 42) -- py.test.raises(TypeError, typeoffsetof, BChar, 'a1') -+ pytest.raises(TypeError, typeoffsetof, BStructPtr, 'a2', 1) -+ pytest.raises(KeyError, typeoffsetof, BStructPtr, 'a4') -+ pytest.raises(KeyError, typeoffsetof, BStruct, 'a5') -+ pytest.raises(TypeError, typeoffsetof, BStruct, 42) -+ pytest.raises(TypeError, typeoffsetof, BChar, 'a1') - - def test_typeoffsetof_array(): - BInt = new_primitive_type("int") - BIntP = new_pointer_type(BInt) - BArray = new_array_type(BIntP, None) -- py.test.raises(TypeError, typeoffsetof, BArray, None) -- py.test.raises(TypeError, typeoffsetof, BArray, 'a1') -+ pytest.raises(TypeError, typeoffsetof, BArray, None) -+ pytest.raises(TypeError, typeoffsetof, BArray, 'a1') - assert typeoffsetof(BArray, 51) == (BInt, 51 * size_of_int()) - assert typeoffsetof(BIntP, 51) == (BInt, 51 * size_of_int()) - assert typeoffsetof(BArray, -51) == (BInt, -51 * size_of_int()) - MAX = sys.maxsize // size_of_int() - assert typeoffsetof(BArray, MAX) == (BInt, MAX * size_of_int()) - assert typeoffsetof(BIntP, MAX) == (BInt, MAX * size_of_int()) -- py.test.raises(OverflowError, typeoffsetof, BArray, MAX + 1) -+ pytest.raises(OverflowError, typeoffsetof, BArray, MAX + 1) - - def test_typeoffsetof_no_bitfield(): - BInt = new_primitive_type("int") - BStruct = new_struct_type("struct foo") - complete_struct_or_union(BStruct, [('a1', BInt, 4)]) -- py.test.raises(TypeError, typeoffsetof, BStruct, 'a1') -+ pytest.raises(TypeError, typeoffsetof, BStruct, 'a1') - - def test_rawaddressof(): - BChar = new_primitive_type("char") -@@ -3005,12 +3004,12 @@ def test_rawaddressof(): - assert repr(s) == "" - a = rawaddressof(BStructPtr, s, 0) - assert repr(a).startswith("= (3,): - - def test_FILE(): - if sys.platform == "win32": -- py.test.skip("testing FILE not implemented") -+ pytest.skip("testing FILE not implemented") - # - BFILE = new_struct_type("struct _IO_FILE") - BFILEP = new_pointer_type(BFILE) -@@ -3103,7 +3102,7 @@ def test_FILE(): - - def test_FILE_only_for_FILE_arg(): - if sys.platform == "win32": -- py.test.skip("testing FILE not implemented") -+ pytest.skip("testing FILE not implemented") - # - B_NOT_FILE = new_struct_type("struct NOT_FILE") - B_NOT_FILEP = new_pointer_type(B_NOT_FILE) -@@ -3119,14 +3118,14 @@ def test_FILE_only_for_FILE_arg(): - fr1 = posix.fdopen(fdr, 'r') - fw1 = posix.fdopen(fdw, 'w') - # -- e = py.test.raises(TypeError, fputs, b"hello world\n", fw1) -+ e = pytest.raises(TypeError, fputs, b"hello world\n", fw1) - assert str(e.value).startswith( - "initializer for ctype 'struct NOT_FILE *' must " - "be a cdata pointer, not ") - - def test_FILE_object(): - if sys.platform == "win32": -- py.test.skip("testing FILE not implemented") -+ pytest.skip("testing FILE not implemented") - # - BFILE = new_struct_type("FILE") - BFILEP = new_pointer_type(BFILE) -@@ -3166,7 +3165,7 @@ def test_errno_saved(): - - def test_GetLastError(): - if sys.platform != "win32": -- py.test.skip("GetLastError(): only for Windows") -+ pytest.skip("GetLastError(): only for Windows") - # - lib = find_and_load_library('KERNEL32.DLL') - BInt = new_primitive_type("int") -@@ -3211,7 +3210,7 @@ def test_nonstandard_integer_types(): - def test_cannot_convert_unicode_to_charp(): - BCharP = new_pointer_type(new_primitive_type("char")) - BCharArray = new_array_type(BCharP, None) -- py.test.raises(TypeError, newp, BCharArray, u+'foobar') -+ pytest.raises(TypeError, newp, BCharArray, u+'foobar') - - def test_buffer_keepalive(): - BCharP = new_pointer_type(new_primitive_type("char")) -@@ -3358,7 +3357,7 @@ def test_new_handle(): - if wr() is not None: - import gc; gc.collect() - assert wr() is None -- py.test.raises(RuntimeError, from_handle, cast(BCharP, 0)) -+ pytest.raises(RuntimeError, from_handle, cast(BCharP, 0)) - - def test_new_handle_cycle(): - import _weakref -@@ -3495,7 +3494,7 @@ def test_struct_array_no_length(): - BIntP = new_pointer_type(BInt) - BArray = new_array_type(BIntP, None) - BStruct = new_struct_type("foo") -- py.test.raises(TypeError, complete_struct_or_union, -+ pytest.raises(TypeError, complete_struct_or_union, - BStruct, [('x', BArray), - ('y', BInt)]) - # -@@ -3568,8 +3567,8 @@ def test_struct_array_no_length(): - q = cast(new_pointer_type(BStruct), p) - assert q.y[0] == 500 - assert q[0].y[0] == 500 -- py.test.raises(TypeError, len, q.y) -- py.test.raises(TypeError, len, q[0].y) -+ pytest.raises(TypeError, len, q.y) -+ pytest.raises(TypeError, len, q[0].y) - assert typeof(q.y) is BIntP - assert typeof(q[0].y) is BIntP - assert sizeof(q[0]) == sizeof(BStruct) -@@ -3593,12 +3592,12 @@ def test_struct_array_no_length(): - assert p.n == 42 - # - # more error cases -- py.test.raises(TypeError, newp, new_pointer_type(BStruct), [100, None]) -+ pytest.raises(TypeError, newp, new_pointer_type(BStruct), [100, None]) - BArray4 = new_array_type(BIntP, 4) - BStruct4 = new_struct_type("test4") - complete_struct_or_union(BStruct4, [('a', BArray4)]) # not varsized -- py.test.raises(TypeError, newp, new_pointer_type(BStruct4), [None]) -- py.test.raises(TypeError, newp, new_pointer_type(BStruct4), [4]) -+ pytest.raises(TypeError, newp, new_pointer_type(BStruct4), [None]) -+ pytest.raises(TypeError, newp, new_pointer_type(BStruct4), [4]) - p = newp(new_pointer_type(BStruct4), [[10, 20, 30]]) - assert p.a[0] == 10 - assert p.a[1] == 20 -@@ -3794,11 +3793,11 @@ def test_packed(): - - def test_packed_with_bitfields(): - if sys.platform == "win32": -- py.test.skip("testing gcc behavior") -+ pytest.skip("testing gcc behavior") - BLong = new_primitive_type("long") - BChar = new_primitive_type("char") - BStruct = new_struct_type("struct foo") -- py.test.raises(NotImplementedError, -+ pytest.raises(NotImplementedError, - complete_struct_or_union, - BStruct, [('a1', BLong, 30), - ('a2', BChar, 5)], -@@ -3826,7 +3825,7 @@ def test_from_buffer_not_str_unicode(): - assert p1 == from_buffer(BCharA, b"foo") - import gc; gc.collect() - assert p1 == from_buffer(BCharA, b"foo") -- py.test.raises(TypeError, from_buffer, BCharA, u+"foo") -+ pytest.raises(TypeError, from_buffer, BCharA, u+"foo") - try: - from __builtin__ import buffer - except ImportError: -@@ -3872,7 +3871,7 @@ def test_from_buffer_more_cases(): - try: - from _cffi_backend import _testbuff - except ImportError: -- py.test.skip("not for pypy") -+ pytest.skip("not for pypy") - BChar = new_primitive_type("char") - BCharP = new_pointer_type(BChar) - BCharA = new_array_type(BCharP, None) -@@ -3931,7 +3930,7 @@ def test_from_buffer_require_writable(): - BCharA = new_array_type(BCharP, None) - p1 = from_buffer(BCharA, b"foo", False) - assert p1 == from_buffer(BCharA, b"foo", False) -- py.test.raises((TypeError, BufferError), from_buffer, BCharA, b"foo", True) -+ pytest.raises((TypeError, BufferError), from_buffer, BCharA, b"foo", True) - ba = bytearray(b"foo") - p1 = from_buffer(BCharA, ba, True) - p1[0] = b"g" -@@ -3957,7 +3956,7 @@ def test_from_buffer_types(): - with pytest.raises(IndexError): - p1[-1] - # -- py.test.raises(TypeError, from_buffer, BInt, bytestring) -+ pytest.raises(TypeError, from_buffer, BInt, bytestring) - # - p2 = from_buffer(BIntP, bytestring) # int * - assert p2 == p1 or 'PY_DOT_PY' in globals() -@@ -3985,7 +3984,7 @@ def test_from_buffer_types(): - assert p2 == p1 or 'PY_DOT_PY' in globals() - # - BIntA4 = new_array_type(BIntP, 4) # int[4]: too big -- py.test.raises(ValueError, from_buffer, BIntA4, bytestring) -+ pytest.raises(ValueError, from_buffer, BIntA4, bytestring) - # - BStruct = new_struct_type("foo") - complete_struct_or_union(BStruct, [('a1', BInt, -1), -@@ -4029,7 +4028,7 @@ def test_from_buffer_types(): - assert sizeof(BEmptyStruct) == 0 - BEmptyStructP = new_pointer_type(BEmptyStruct) - BEmptyStructA = new_array_type(BEmptyStructP, None) -- py.test.raises(ZeroDivisionError, from_buffer, # empty[] -+ pytest.raises(ZeroDivisionError, from_buffer, # empty[] - BEmptyStructA, bytestring) - # - BEmptyStructA5 = new_array_type(BEmptyStructP, 5) -@@ -4135,7 +4134,7 @@ def test_memmove_readonly_readwrite(): - assert list(p) == [ord("a"), ord("b"), ord("c"), 0, 0] - memmove(p, bytearray(b"ABCDE"), 2) - assert list(p) == [ord("A"), ord("B"), ord("c"), 0, 0] -- py.test.raises((TypeError, BufferError), memmove, b"abcde", p, 3) -+ pytest.raises((TypeError, BufferError), memmove, b"abcde", p, 3) - ba = bytearray(b"xxxxx") - memmove(dest=ba, src=p, n=3) - assert ba == bytearray(b"ABcxx") -@@ -4146,13 +4145,13 @@ def test_memmove_sign_check(): - SignedChar = new_primitive_type("signed char") - SignedCharA = new_array_type(new_pointer_type(SignedChar), None) - p = newp(SignedCharA, 5) -- py.test.raises(ValueError, memmove, p, p + 1, -1) # not segfault -+ pytest.raises(ValueError, memmove, p, p + 1, -1) # not segfault - - def test_memmove_bad_cdata(): - BInt = new_primitive_type("int") - p = cast(BInt, 42) -- py.test.raises(TypeError, memmove, p, bytearray(b'a'), 1) -- py.test.raises(TypeError, memmove, bytearray(b'a'), p, 1) -+ pytest.raises(TypeError, memmove, p, bytearray(b'a'), 1) -+ pytest.raises(TypeError, memmove, bytearray(b'a'), p, 1) - - def test_dereference_null_ptr(): - BInt = new_primitive_type("int") -@@ -4247,9 +4246,9 @@ def test_unpack(): - assert (type(result[i]) is bool) == (type(samples[i]) is bool) - # - BInt = new_primitive_type("int") -- py.test.raises(TypeError, unpack, p) -- py.test.raises(TypeError, unpack, b"foobar", 6) -- py.test.raises(TypeError, unpack, cast(BInt, 42), 1) -+ pytest.raises(TypeError, unpack, p) -+ pytest.raises(TypeError, unpack, b"foobar", 6) -+ pytest.raises(TypeError, unpack, cast(BInt, 42), 1) - # - BPtr = new_pointer_type(BInt) - random_ptr = cast(BPtr, -424344) -@@ -4267,7 +4266,7 @@ def test_unpack(): - # - BStruct = new_struct_type("foo") - BStructPtr = new_pointer_type(BStruct) -- e = py.test.raises(ValueError, unpack, cast(BStructPtr, 42), 5) -+ e = pytest.raises(ValueError, unpack, cast(BStructPtr, 42), 5) - assert str(e.value) == "'foo *' points to items of unknown size" - complete_struct_or_union(BStruct, [('a1', BInt, -1), - ('a2', BInt, -1)]) -@@ -4276,11 +4275,11 @@ def test_unpack(): - assert typeof(lst[0]) is BStruct - assert lst[0].a1 == 4 and lst[1].a2 == 7 - # -- py.test.raises(RuntimeError, unpack, cast(new_pointer_type(BChar), 0), 0) -- py.test.raises(RuntimeError, unpack, cast(new_pointer_type(BChar), 0), 10) -+ pytest.raises(RuntimeError, unpack, cast(new_pointer_type(BChar), 0), 0) -+ pytest.raises(RuntimeError, unpack, cast(new_pointer_type(BChar), 0), 10) - # -- py.test.raises(ValueError, unpack, p0, -1) -- py.test.raises(ValueError, unpack, p, -1) -+ pytest.raises(ValueError, unpack, p0, -1) -+ pytest.raises(ValueError, unpack, p, -1) - - def test_cdata_dir(): - BInt = new_primitive_type("int") -@@ -4454,13 +4453,13 @@ def test_explicit_release_new_contextmgr(): - def test_explicit_release_badtype(): - BIntP = new_pointer_type(new_primitive_type("int")) - p = cast(BIntP, 12345) -- py.test.raises(ValueError, release, p) -- py.test.raises(ValueError, release, p) -+ pytest.raises(ValueError, release, p) -+ pytest.raises(ValueError, release, p) - BStruct = new_struct_type("struct foo") - BStructP = new_pointer_type(BStruct) - complete_struct_or_union(BStruct, [('p', BIntP, -1)]) - pstruct = newp(BStructP) -- py.test.raises(ValueError, release, pstruct[0]) -+ pytest.raises(ValueError, release, pstruct[0]) - - def test_explicit_release_badtype_contextmgr(): - BIntP = new_pointer_type(new_primitive_type("int")) -@@ -4526,7 +4525,7 @@ def test_explicit_release_from_buffer_contextmgr(): - - def test_explicit_release_bytearray_on_cpython(): - if '__pypy__' in sys.builtin_module_names: -- py.test.skip("pypy's bytearray are never locked") -+ pytest.skip("pypy's bytearray are never locked") - a = bytearray(b"xyz") - BChar = new_primitive_type("char") - BCharP = new_pointer_type(BChar) -diff --git a/doc/source/installation.rst b/doc/source/installation.rst -index e198f0de..944de25b 100644 ---- a/doc/source/installation.rst -+++ b/doc/source/installation.rst -@@ -44,9 +44,9 @@ Requirements: - * pycparser >= 2.06: https://github.com/eliben/pycparser (automatically - tracked by ``pip install cffi``). - --* `py.test`_ is needed to run the tests of CFFI itself. -+* `pytest`_ is needed to run the tests of CFFI itself. - --.. _`py.test`: http://pypi.python.org/pypi/pytest -+.. _`pytest`: http://pypi.python.org/pypi/pytest - - Download and Installation: - -@@ -67,7 +67,7 @@ Download and Installation: - (should work out of the box on Linux or Windows; see below for - `MacOS X`_.) - --* running the tests: ``py.test c/ testing/`` (if you didn't -+* running the tests: ``pytest c/ testing/`` (if you didn't - install cffi yet, you need first ``python setup_base.py build_ext -f - -i``) - -diff --git a/requirements.txt b/requirements.txt -index a97f0282..881a093f 100644 ---- a/requirements.txt -+++ b/requirements.txt -@@ -1,2 +1,3 @@ - pycparser - pytest -+py -diff --git a/testing/cffi0/backend_tests.py b/testing/cffi0/backend_tests.py -index ab013a1c..aed1b9c3 100644 ---- a/testing/cffi0/backend_tests.py -+++ b/testing/cffi0/backend_tests.py -@@ -1,4 +1,3 @@ --import py - import pytest - import platform - import sys, ctypes, ctypes.util -@@ -13,7 +12,7 @@ SIZE_OF_WCHAR = ctypes.sizeof(ctypes.c_wchar) - - def needs_dlopen_none(): - if sys.platform == 'win32' and not ctypes.util.find_library('c'): -- py.test.skip("dlopen(None) cannot work on Windows with this runtime") -+ pytest.skip("dlopen(None) cannot work on Windows with this runtime") - - - class BackendTests: -@@ -75,10 +74,10 @@ class BackendTests: - assert int(q) == int(p) - assert hash(q) == hash(p) - c_decl_ptr = '%s *' % c_decl -- py.test.raises(OverflowError, ffi.new, c_decl_ptr, min - 1) -- py.test.raises(OverflowError, ffi.new, c_decl_ptr, max + 1) -- py.test.raises(OverflowError, ffi.new, c_decl_ptr, long(min - 1)) -- py.test.raises(OverflowError, ffi.new, c_decl_ptr, long(max + 1)) -+ pytest.raises(OverflowError, ffi.new, c_decl_ptr, min - 1) -+ pytest.raises(OverflowError, ffi.new, c_decl_ptr, max + 1) -+ pytest.raises(OverflowError, ffi.new, c_decl_ptr, long(min - 1)) -+ pytest.raises(OverflowError, ffi.new, c_decl_ptr, long(max + 1)) - assert ffi.new(c_decl_ptr, min)[0] == min - assert ffi.new(c_decl_ptr, max)[0] == max - assert ffi.new(c_decl_ptr, long(min))[0] == min -@@ -86,7 +85,7 @@ class BackendTests: - - def test_new_unsupported_type(self): - ffi = FFI(backend=self.Backend()) -- e = py.test.raises(TypeError, ffi.new, "int") -+ e = pytest.raises(TypeError, ffi.new, "int") - assert str(e.value) == "expected a pointer or array ctype, got 'int'" - - def test_new_single_integer(self): -@@ -148,7 +147,7 @@ class BackendTests: - with pytest.raises(IndexError): - p[10] - # -- py.test.raises(TypeError, ffi.new, "int[]") -+ pytest.raises(TypeError, ffi.new, "int[]") - # - p = ffi.new("int[]", [-6, -7]) # a list is all the items, like C - assert p[0] == -6 -@@ -160,7 +159,7 @@ class BackendTests: - p = ffi.new("int[]", 0) - with pytest.raises(IndexError): - p[0] -- py.test.raises(ValueError, ffi.new, "int[]", -1) -+ pytest.raises(ValueError, ffi.new, "int[]", -1) - assert repr(p) == "" - - def test_pointer_init(self): -@@ -175,7 +174,7 @@ class BackendTests: - def test_cannot_cast(self): - ffi = FFI(backend=self.Backend()) - a = ffi.new("short int[10]") -- e = py.test.raises(TypeError, ffi.new, "long int **", a) -+ e = pytest.raises(TypeError, ffi.new, "long int **", a) - msg = str(e.value) - assert "'short[10]'" in msg and "'long *'" in msg - -@@ -301,9 +300,9 @@ class BackendTests: - assert not bool(ffi.cast("char", 0)) - assert bool(ffi.cast("char", 1)) - assert bool(ffi.cast("char", 255)) -- py.test.raises(TypeError, ffi.new, "char*", 32) -- py.test.raises(TypeError, ffi.new, "char*", u+"x") -- py.test.raises(TypeError, ffi.new, "char*", b"foo") -+ pytest.raises(TypeError, ffi.new, "char*", 32) -+ pytest.raises(TypeError, ffi.new, "char*", u+"x") -+ pytest.raises(TypeError, ffi.new, "char*", b"foo") - # - p = ffi.new("char[]", [b'a', b'b', b'\x9c']) - assert len(p) == 3 -@@ -322,13 +321,13 @@ class BackendTests: - p = ffi.new("char[2]", b"ab") - assert len(p) == 2 - assert [p[i] for i in range(2)] == [b'a', b'b'] -- py.test.raises(IndexError, ffi.new, "char[2]", b"abc") -+ pytest.raises(IndexError, ffi.new, "char[2]", b"abc") - - def check_wchar_t(self, ffi): - try: - ffi.cast("wchar_t", 0) - except NotImplementedError: -- py.test.skip("NotImplementedError: wchar_t") -+ pytest.skip("NotImplementedError: wchar_t") - - def test_wchar_t(self): - ffi = FFI(backend=self.Backend()) -@@ -338,7 +337,7 @@ class BackendTests: - if SIZE_OF_WCHAR > 2: - assert ffi.new("wchar_t*", u+'\U00012345')[0] == u+'\U00012345' - else: -- py.test.raises(TypeError, ffi.new, "wchar_t*", u+'\U00012345') -+ pytest.raises(TypeError, ffi.new, "wchar_t*", u+'\U00012345') - assert ffi.new("wchar_t*")[0] == u+'\x00' - assert int(ffi.cast("wchar_t", 300)) == 300 - assert not bool(ffi.cast("wchar_t", 0)) -@@ -346,8 +345,8 @@ class BackendTests: - assert bool(ffi.cast("wchar_t", 65535)) - if SIZE_OF_WCHAR > 2: - assert bool(ffi.cast("wchar_t", 65536)) -- py.test.raises(TypeError, ffi.new, "wchar_t*", 32) -- py.test.raises(TypeError, ffi.new, "wchar_t*", "foo") -+ pytest.raises(TypeError, ffi.new, "wchar_t*", 32) -+ pytest.raises(TypeError, ffi.new, "wchar_t*", "foo") - # - p = ffi.new("wchar_t[]", [u+'a', u+'b', u+'\u1234']) - assert len(p) == 3 -@@ -382,7 +381,7 @@ class BackendTests: - p = ffi.new("wchar_t[2]", u+"ab") - assert len(p) == 2 - assert [p[i] for i in range(2)] == [u+'a', u+'b'] -- py.test.raises(IndexError, ffi.new, "wchar_t[2]", u+"abc") -+ pytest.raises(IndexError, ffi.new, "wchar_t[2]", u+"abc") - - def test_none_as_null_doesnt_work(self): - ffi = FFI(backend=self.Backend()) -@@ -410,8 +409,8 @@ class BackendTests: - # - p = ffi.new("float*", 15.75) - assert p[0] == 15.75 -- py.test.raises(TypeError, int, p) -- py.test.raises(TypeError, float, p) -+ pytest.raises(TypeError, int, p) -+ pytest.raises(TypeError, float, p) - p[0] = 0.0 - assert bool(p) is True - # -@@ -444,7 +443,7 @@ class BackendTests: - assert repr(s) == "" % ( - SIZE_OF_INT + 2 * SIZE_OF_SHORT) - # -- py.test.raises(ValueError, ffi.new, "struct foo*", [1, 2, 3, 4]) -+ pytest.raises(ValueError, ffi.new, "struct foo*", [1, 2, 3, 4]) - - def test_constructor_struct_from_dict(self): - ffi = FFI(backend=self.Backend()) -@@ -453,7 +452,7 @@ class BackendTests: - assert s.a == 0 - assert s.b == 123 - assert s.c == 456 -- py.test.raises(KeyError, ffi.new, "struct foo*", {'d': 456}) -+ pytest.raises(KeyError, ffi.new, "struct foo*", {'d': 456}) - - def test_struct_pointer(self): - ffi = FFI(backend=self.Backend()) -@@ -469,7 +468,7 @@ class BackendTests: - - def test_struct_opaque(self): - ffi = FFI(backend=self.Backend()) -- py.test.raises(TypeError, ffi.new, "struct baz*") -+ pytest.raises(TypeError, ffi.new, "struct baz*") - p = ffi.new("struct baz **") # this works - assert p[0] == ffi.NULL - -@@ -536,19 +535,19 @@ class BackendTests: - - def test_union_opaque(self): - ffi = FFI(backend=self.Backend()) -- py.test.raises(TypeError, ffi.new, "union baz *") -+ pytest.raises(TypeError, ffi.new, "union baz *") - u = ffi.new("union baz **") # this works - assert u[0] == ffi.NULL - - def test_union_initializer(self): - ffi = FFI(backend=self.Backend()) - ffi.cdef("union foo { char a; int b; };") -- py.test.raises(TypeError, ffi.new, "union foo*", b'A') -- py.test.raises(TypeError, ffi.new, "union foo*", 5) -- py.test.raises(ValueError, ffi.new, "union foo*", [b'A', 5]) -+ pytest.raises(TypeError, ffi.new, "union foo*", b'A') -+ pytest.raises(TypeError, ffi.new, "union foo*", 5) -+ pytest.raises(ValueError, ffi.new, "union foo*", [b'A', 5]) - u = ffi.new("union foo*", [b'A']) - assert u.a == b'A' -- py.test.raises(TypeError, ffi.new, "union foo*", [1005]) -+ pytest.raises(TypeError, ffi.new, "union foo*", [1005]) - u = ffi.new("union foo*", {'b': 12345}) - assert u.b == 12345 - u = ffi.new("union foo*", []) -@@ -587,7 +586,7 @@ class BackendTests: - assert str(x) == repr(x) - assert ffi.string(x) == b"x" - assert ffi.string(ffi.new("char*", b"\x00")) == b"" -- py.test.raises(TypeError, ffi.new, "char*", unicode("foo")) -+ pytest.raises(TypeError, ffi.new, "char*", unicode("foo")) - - def test_unicode_from_wchar_pointer(self): - ffi = FFI(backend=self.Backend()) -@@ -670,7 +669,7 @@ class BackendTests: - - def test_voidp(self): - ffi = FFI(backend=self.Backend()) -- py.test.raises(TypeError, ffi.new, "void*") -+ pytest.raises(TypeError, ffi.new, "void*") - p = ffi.new("void **") - assert p[0] == ffi.NULL - a = ffi.new("int[]", [10, 11, 12]) -@@ -678,7 +677,7 @@ class BackendTests: - vp = p[0] - with pytest.raises(TypeError): - vp[0] -- py.test.raises(TypeError, ffi.new, "short **", a) -+ pytest.raises(TypeError, ffi.new, "short **", a) - # - ffi.cdef("struct foo { void *p; int *q; short *r; };") - s = ffi.new("struct foo *") -@@ -694,7 +693,7 @@ class BackendTests: - - def test_functionptr_simple(self): - ffi = FFI(backend=self.Backend()) -- py.test.raises(TypeError, ffi.callback, "int(*)(int)", 0) -+ pytest.raises(TypeError, ffi.callback, "int(*)(int)", 0) - def cb(n): - return n + 1 - cb.__qualname__ = 'cb' -@@ -970,7 +969,7 @@ class BackendTests: - needs_dlopen_none() - lib = ffi.dlopen(None) - assert lib.B == 0 -- py.test.raises(VerificationMissing, getattr, lib, "A") -+ pytest.raises(VerificationMissing, getattr, lib, "A") - assert lib.C == 1 - - def test_array_of_struct(self): -@@ -997,10 +996,10 @@ class BackendTests: - assert list(a) == [b"h", b"e", b"l", b"l", b"o", b"\0"] - assert list(iter(a)) == [b"h", b"e", b"l", b"l", b"o", b"\0"] - # -- py.test.raises(TypeError, iter, ffi.cast("char *", a)) -- py.test.raises(TypeError, list, ffi.cast("char *", a)) -- py.test.raises(TypeError, iter, ffi.new("int *")) -- py.test.raises(TypeError, list, ffi.new("int *")) -+ pytest.raises(TypeError, iter, ffi.cast("char *", a)) -+ pytest.raises(TypeError, list, ffi.cast("char *", a)) -+ pytest.raises(TypeError, iter, ffi.new("int *")) -+ pytest.raises(TypeError, list, ffi.new("int *")) - - def test_offsetof(self): - ffi = FFI(backend=self.Backend()) -@@ -1014,7 +1013,7 @@ class BackendTests: - ffi.cdef("struct foo { int a, b, c; };" - "struct bar { struct foo d, e; };") - assert ffi.offsetof("struct bar", "e") == 12 -- py.test.raises(KeyError, ffi.offsetof, "struct bar", "e.a") -+ pytest.raises(KeyError, ffi.offsetof, "struct bar", "e.a") - assert ffi.offsetof("struct bar", "e", "a") == 12 - assert ffi.offsetof("struct bar", "e", "b") == 16 - assert ffi.offsetof("struct bar", "e", "c") == 20 -@@ -1170,7 +1169,7 @@ class BackendTests: - try: - b = ffi.buffer(a) - except NotImplementedError as e: -- py.test.skip(str(e)) -+ pytest.skip(str(e)) - assert type(b) is ffi.buffer - content = b[:] - assert len(content) == len(b) == 2 -@@ -1190,7 +1189,7 @@ class BackendTests: - try: - b = ffi.buffer(a) - except NotImplementedError as e: -- py.test.skip(str(e)) -+ pytest.skip(str(e)) - content = b[:] - if sys.byteorder == 'little': - assert content.startswith(b'\x64\x00\x00\x00\x65\x00\x00\x00') -@@ -1207,7 +1206,7 @@ class BackendTests: - try: - b = ffi.buffer(a, 1) - except NotImplementedError as e: -- py.test.skip(str(e)) -+ pytest.skip(str(e)) - content = b[:] - assert len(content) == 1 - if sys.byteorder == 'little': -@@ -1226,7 +1225,7 @@ class BackendTests: - try: - ffi.buffer(a1) - except NotImplementedError as e: -- py.test.skip(str(e)) -+ pytest.skip(str(e)) - assert ffi.buffer(a1)[:] == ffi.buffer(a2, 4*10)[:] - - def test_ffi_buffer_with_file(self): -@@ -1238,7 +1237,7 @@ class BackendTests: - try: - ffi.buffer(a, 512) - except NotImplementedError as e: -- py.test.skip(str(e)) -+ pytest.skip(str(e)) - f.write(ffi.buffer(a, 1000 * ffi.sizeof("int"))) - f.seek(0) - assert f.read() == arraytostring(array.array('i', range(1000))) -@@ -1257,7 +1256,7 @@ class BackendTests: - try: - ffi.buffer(a, 512) - except NotImplementedError as e: -- py.test.skip(str(e)) -+ pytest.skip(str(e)) - f.write(ffi.buffer(a, 1000 * ffi.sizeof("int"))) - f.seek(0) - assert f.read() == arraytostring(array.array('i', range(1000))) -@@ -1280,7 +1279,7 @@ class BackendTests: - b_mid = ffi.buffer(a, 6) - b_other = ffi.buffer(c, 6) - except NotImplementedError as e: -- py.test.skip(str(e)) -+ pytest.skip(str(e)) - else: - content = b_full[:] - assert content == b_full == ba -@@ -1309,7 +1308,7 @@ class BackendTests: - assert q.data[6] == 15 - - def test_new_struct_containing_array_varsize(self): -- py.test.skip("later?") -+ pytest.skip("later?") - ffi = FFI(backend=self.Backend()) - ffi.cdef("struct foo_s { int len; short data[]; };") - p = ffi.new("struct foo_s *", 10) # a single integer is the length -@@ -1340,14 +1339,14 @@ class BackendTests: - ffi = FFI(backend=self.Backend()) - f = ffi.cast("int(*)(int)", 42) - assert f != ffi.NULL -- py.test.raises(CDefError, ffi.cast, "int(int)", 42) -- py.test.raises(CDefError, ffi.new, "int([5])(int)") -+ pytest.raises(CDefError, ffi.cast, "int(int)", 42) -+ pytest.raises(CDefError, ffi.new, "int([5])(int)") - a = ffi.new("int(*[5])(int)", [f]) - assert ffi.getctype(ffi.typeof(a)) == "int(*[5])(int)" - assert len(a) == 5 - assert a[0] == f - assert a[1] == ffi.NULL -- py.test.raises(TypeError, ffi.cast, "int(*)(int)[5]", 0) -+ pytest.raises(TypeError, ffi.cast, "int(*)(int)[5]", 0) - # - def cb(n): - return n + 1 -@@ -1369,7 +1368,7 @@ class BackendTests: - assert g(f) == b'B' - - def test_vararg_callback(self): -- py.test.skip("callback with '...'") -+ pytest.skip("callback with '...'") - ffi = FFI(backend=self.Backend()) - def cb(i, va_list): - j = ffi.va_arg(va_list, "int") -@@ -1433,7 +1432,7 @@ class BackendTests: - def test_new_ctype(self): - ffi = FFI(backend=self.Backend()) - p = ffi.new("int *") -- py.test.raises(TypeError, ffi.new, p) -+ pytest.raises(TypeError, ffi.new, p) - p = ffi.new(ffi.typeof("int *"), 42) - assert p[0] == 42 - -@@ -1479,7 +1478,7 @@ class BackendTests: - assert p.b == 12 - assert p.c == 14 - assert p.d == 14 -- py.test.raises(ValueError, ffi.new, "struct foo_s *", [0, 0, 0, 0]) -+ pytest.raises(ValueError, ffi.new, "struct foo_s *", [0, 0, 0, 0]) - - def test_nested_field_offset_align(self): - ffi = FFI(backend=self.Backend()) -@@ -1529,7 +1528,7 @@ class BackendTests: - assert p.b == 456 - assert p.c == 123 - assert p.d == 123 -- py.test.raises(ValueError, ffi.new, "union foo_u *", [0, 0, 0]) -+ pytest.raises(ValueError, ffi.new, "union foo_u *", [0, 0, 0]) - - def test_nested_anonymous_struct_2(self): - ffi = FFI(backend=self.Backend()) -@@ -1545,7 +1544,7 @@ class BackendTests: - assert p.a == 11 - assert p.b == p.c == p.d == 22 - assert p.e == 33 -- py.test.raises(ValueError, ffi.new, "struct foo_s *", [11, 22, 33, 44]) -+ pytest.raises(ValueError, ffi.new, "struct foo_s *", [11, 22, 33, 44]) - FOO = ffi.typeof("struct foo_s") - fields = [(name, fld.offset, fld.flags) for (name, fld) in FOO.fields] - assert fields == [ -@@ -1626,7 +1625,7 @@ class BackendTests: - def test_gc_disable(self): - ffi = FFI(backend=self.Backend()) - p = ffi.new("int *", 123) -- py.test.raises(TypeError, ffi.gc, p, None) -+ pytest.raises(TypeError, ffi.gc, p, None) - seen = [] - q1 = ffi.gc(p, lambda p: seen.append(1)) - q2 = ffi.gc(q1, lambda p: seen.append(2)) -@@ -1669,8 +1668,8 @@ class BackendTests: - assert int(ffi.cast("_Bool", b'\x80')) == 1 - assert ffi.new("_Bool *", False)[0] == 0 - assert ffi.new("_Bool *", 1)[0] == 1 -- py.test.raises(OverflowError, ffi.new, "_Bool *", 2) -- py.test.raises(TypeError, ffi.string, ffi.cast("_Bool", 2)) -+ pytest.raises(OverflowError, ffi.new, "_Bool *", 2) -+ pytest.raises(TypeError, ffi.string, ffi.cast("_Bool", 2)) - - def test_use_own_bool(self): - ffi = FFI(backend=self.Backend()) -@@ -1713,9 +1712,9 @@ class BackendTests: - a = ffi.addressof(p[0]) - assert repr(a).startswith("= (3,): -- py.test.skip("ctypes backend: not supported in Python 3: CType") -+ pytest.skip("ctypes backend: not supported in Python 3: CType") - backend_tests.BackendTests.test_CData_CType_2(self) -diff --git a/testing/cffi0/test_ffi_backend.py b/testing/cffi0/test_ffi_backend.py -index 8e29bc4f..2545d1fb 100644 ---- a/testing/cffi0/test_ffi_backend.py -+++ b/testing/cffi0/test_ffi_backend.py -@@ -1,4 +1,4 @@ --import py, sys, platform -+import sys, platform - import pytest - from testing.cffi0 import backend_tests, test_function, test_ownlib - from testing.support import u -@@ -18,7 +18,7 @@ class TestFFI(backend_tests.BackendTests, - def test_not_supported_bitfield_in_result(self): - ffi = FFI(backend=self.Backend()) - ffi.cdef("struct foo_s { int a,b,c,d,e; int x:1; };") -- e = py.test.raises(NotImplementedError, ffi.callback, -+ e = pytest.raises(NotImplementedError, ffi.callback, - "struct foo_s foo(void)", lambda: 42) - assert str(e.value) == ("struct foo_s(*)(): " - "callback with unsupported argument or return type or with '...'") -@@ -37,7 +37,7 @@ class TestFFI(backend_tests.BackendTests, - assert ffi.typeof(p) == ffi.typeof("void *") - assert ffi.from_handle(p) is o - assert ffi.from_handle(ffi.cast("char *", p)) is o -- py.test.raises(RuntimeError, ffi.from_handle, ffi.NULL) -+ pytest.raises(RuntimeError, ffi.from_handle, ffi.NULL) - - def test_callback_onerror(self): - ffi = FFI(backend=self.Backend()) -@@ -105,29 +105,29 @@ class TestFFI(backend_tests.BackendTests, - - def test_ffi_new_allocator_4(self): - ffi = FFI(backend=self.Backend()) -- py.test.raises(TypeError, ffi.new_allocator, free=lambda x: None) -+ pytest.raises(TypeError, ffi.new_allocator, free=lambda x: None) - # - def myalloc2(size): - raise LookupError - alloc2 = ffi.new_allocator(myalloc2) -- py.test.raises(LookupError, alloc2, "int[5]") -+ pytest.raises(LookupError, alloc2, "int[5]") - # - def myalloc3(size): - return 42 - alloc3 = ffi.new_allocator(myalloc3) -- e = py.test.raises(TypeError, alloc3, "int[5]") -+ e = pytest.raises(TypeError, alloc3, "int[5]") - assert str(e.value) == "alloc() must return a cdata object (got int)" - # - def myalloc4(size): - return ffi.cast("int", 42) - alloc4 = ffi.new_allocator(myalloc4) -- e = py.test.raises(TypeError, alloc4, "int[5]") -+ e = pytest.raises(TypeError, alloc4, "int[5]") - assert str(e.value) == "alloc() must return a cdata pointer, not 'int'" - # - def myalloc5(size): - return ffi.NULL - alloc5 = ffi.new_allocator(myalloc5) -- py.test.raises(MemoryError, alloc5, "int[5]") -+ pytest.raises(MemoryError, alloc5, "int[5]") - - def test_new_struct_containing_struct_containing_array_varsize(self): - ffi = FFI(backend=self.Backend()) -@@ -339,11 +339,11 @@ class TestBitfield: - q = ffi.cast("struct foo_s *", p) - assert q.x == 100 - assert ffi.typeof(q.a) is ffi.typeof("int *") # no length recorded -- py.test.raises(TypeError, len, q.a) -+ pytest.raises(TypeError, len, q.a) - assert q.a[0] == 200 - assert q.a[1] == 300 - assert q.a[2] == 400 -- py.test.raises(TypeError, list, q.a) -+ pytest.raises(TypeError, list, q.a) - - @pytest.mark.skipif("sys.platform != 'win32'") - def test_getwinerror(self): -@@ -382,9 +382,9 @@ class TestBitfield: - assert p[2] == b"c" - # - assert p == ffi.from_buffer(b"abcd", require_writable=False) -- py.test.raises((TypeError, BufferError), ffi.from_buffer, -+ pytest.raises((TypeError, BufferError), ffi.from_buffer, - "char[]", b"abcd", True) -- py.test.raises((TypeError, BufferError), ffi.from_buffer, b"abcd", -+ pytest.raises((TypeError, BufferError), ffi.from_buffer, b"abcd", - require_writable=True) - - def test_release(self): -@@ -442,7 +442,7 @@ class TestBitfield: - assert list(p) == [ord("a"), ord("b"), ord("c"), 0, 0] - ffi.memmove(p, bytearray(b"ABCDE"), 2) - assert list(p) == [ord("A"), ord("B"), ord("c"), 0, 0] -- py.test.raises((TypeError, BufferError), ffi.memmove, b"abcde", p, 3) -+ pytest.raises((TypeError, BufferError), ffi.memmove, b"abcde", p, 3) - ba = bytearray(b"xxxxx") - ffi.memmove(dest=ba, src=p, n=3) - assert ba == bytearray(b"ABcxx") -@@ -505,7 +505,7 @@ class TestBitfield: - - def test_ffi_def_extern(self): - ffi = FFI() -- py.test.raises(ValueError, ffi.def_extern) -+ pytest.raises(ValueError, ffi.def_extern) - - def test_introspect_typedef(self): - ffi = FFI() -@@ -565,19 +565,19 @@ class TestBitfield: - - def test_negative_array_size(self): - ffi = FFI() -- py.test.raises(ValueError, ffi.cast, "int[-5]", 0) -+ pytest.raises(ValueError, ffi.cast, "int[-5]", 0) - - def test_cannot_instantiate_manually(self): - ffi = FFI() - ct = type(ffi.typeof("void *")) -- py.test.raises(TypeError, ct) -- py.test.raises(TypeError, ct, ffi.NULL) -+ pytest.raises(TypeError, ct) -+ pytest.raises(TypeError, ct, ffi.NULL) - for cd in [type(ffi.cast("void *", 0)), - type(ffi.new("char[]", 3)), - type(ffi.gc(ffi.NULL, lambda x: None))]: -- py.test.raises(TypeError, cd) -- py.test.raises(TypeError, cd, ffi.NULL) -- py.test.raises(TypeError, cd, ffi.typeof("void *")) -+ pytest.raises(TypeError, cd) -+ pytest.raises(TypeError, cd, ffi.NULL) -+ pytest.raises(TypeError, cd, ffi.typeof("void *")) - - def test_explicitly_defined_char16_t(self): - ffi = FFI() -diff --git a/testing/cffi0/test_function.py b/testing/cffi0/test_function.py -index 84d8db63..6e741575 100644 ---- a/testing/cffi0/test_function.py -+++ b/testing/cffi0/test_function.py -@@ -1,4 +1,3 @@ --import py - import pytest - from cffi import FFI, CDefError - import math, os, sys -@@ -43,7 +42,7 @@ class TestFunction(object): - - def test_sinf(self): - if sys.platform == 'win32': -- py.test.skip("no sinf found in the Windows stdlib") -+ pytest.skip("no sinf found in the Windows stdlib") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - float sinf(float x); -@@ -68,7 +67,7 @@ class TestFunction(object): - def test_dlopen_filename(self): - path = ctypes.util.find_library(lib_m) - if not path: -- py.test.skip("%s not found" % lib_m) -+ pytest.skip("%s not found" % lib_m) - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - double cos(double x); -@@ -104,9 +103,9 @@ class TestFunction(object): - - def test_tlsalloc(self): - if sys.platform != 'win32': -- py.test.skip("win32 only") -+ pytest.skip("win32 only") - if self.Backend is CTypesBackend: -- py.test.skip("ctypes complains on wrong calling conv") -+ pytest.skip("ctypes complains on wrong calling conv") - ffi = FFI(backend=self.Backend()) - ffi.cdef("long TlsAlloc(void); int TlsFree(long);") - lib = ffi.dlopen('KERNEL32.DLL') -@@ -117,7 +116,7 @@ class TestFunction(object): - - def test_fputs(self): - if not sys.platform.startswith('linux'): -- py.test.skip("probably no symbol 'stderr' in the lib") -+ pytest.skip("probably no symbol 'stderr' in the lib") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - int fputs(const char *, void *); -@@ -134,7 +133,7 @@ class TestFunction(object): - - def test_fputs_without_const(self): - if not sys.platform.startswith('linux'): -- py.test.skip("probably no symbol 'stderr' in the lib") -+ pytest.skip("probably no symbol 'stderr' in the lib") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - int fputs(char *, void *); -@@ -151,7 +150,7 @@ class TestFunction(object): - - def test_vararg(self): - if not sys.platform.startswith('linux'): -- py.test.skip("probably no symbol 'stderr' in the lib") -+ pytest.skip("probably no symbol 'stderr' in the lib") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - int fprintf(void *, const char *format, ...); -@@ -190,7 +189,7 @@ class TestFunction(object): - """) - needs_dlopen_none() - ffi.C = ffi.dlopen(None) -- e = py.test.raises(TypeError, ffi.C.printf, b"hello %d\n", 42) -+ e = pytest.raises(TypeError, ffi.C.printf, b"hello %d\n", 42) - assert str(e.value) == ("argument 2 passed in the variadic part " - "needs to be a cdata object (got int)") - -@@ -218,7 +217,7 @@ class TestFunction(object): - assert res == 42 - # - if not sys.platform.startswith('linux'): -- py.test.skip("probably no symbol 'stderr' in the lib") -+ pytest.skip("probably no symbol 'stderr' in the lib") - ffi.cdef(""" - int fputs(const char *, void *); - extern void *stderr; -@@ -250,7 +249,7 @@ class TestFunction(object): - - def test_callback_returning_struct_three_bytes(self): - if self.Backend is CTypesBackend: -- py.test.skip("not supported with the ctypes backend") -+ pytest.skip("not supported with the ctypes backend") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - typedef struct { -@@ -278,7 +277,7 @@ class TestFunction(object): - - def test_write_variable(self): - if not sys.platform.startswith('linux') or _is_musl: -- py.test.skip("probably no symbol 'stdout' in the lib") -+ pytest.skip("probably no symbol 'stdout' in the lib") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - extern void *stdout; -@@ -304,10 +303,10 @@ class TestFunction(object): - - def test_function_with_struct_argument(self): - if sys.platform == 'win32': -- py.test.skip("no 'inet_ntoa'") -+ pytest.skip("no 'inet_ntoa'") - if (self.Backend is CTypesBackend and - '__pypy__' in sys.builtin_module_names): -- py.test.skip("ctypes limitation on pypy") -+ pytest.skip("ctypes limitation on pypy") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - struct in_addr { unsigned int s_addr; }; -@@ -331,7 +330,7 @@ class TestFunction(object): - - def test_fputs_custom_FILE(self): - if self.Backend is CTypesBackend: -- py.test.skip("FILE not supported with the ctypes backend") -+ pytest.skip("FILE not supported with the ctypes backend") - filename = str(udir.join('fputs_custom_FILE')) - ffi = FFI(backend=self.Backend()) - ffi.cdef("int fputs(const char *, FILE *);") -@@ -370,7 +369,7 @@ class TestFunction(object): - - def test_signed_char_star_accepts_string(self): - if self.Backend is CTypesBackend: -- py.test.skip("not supported by the ctypes backend") -+ pytest.skip("not supported by the ctypes backend") - ffi = FFI(backend=self.Backend()) - ffi.cdef("""int strlen(signed char *);""") - needs_dlopen_none() -@@ -380,7 +379,7 @@ class TestFunction(object): - - def test_unsigned_char_star_accepts_string(self): - if self.Backend is CTypesBackend: -- py.test.skip("not supported by the ctypes backend") -+ pytest.skip("not supported by the ctypes backend") - ffi = FFI(backend=self.Backend()) - ffi.cdef("""int strlen(unsigned char *);""") - needs_dlopen_none() -@@ -414,7 +413,7 @@ class TestFunction(object): - - def test_free_callback_cycle(self): - if self.Backend is CTypesBackend: -- py.test.skip("seems to fail with the ctypes backend on windows") -+ pytest.skip("seems to fail with the ctypes backend on windows") - import weakref - def make_callback(data): - container = [data] -@@ -437,9 +436,9 @@ class TestFunction(object): - - def test_windows_stdcall(self): - if sys.platform != 'win32': -- py.test.skip("Windows-only test") -+ pytest.skip("Windows-only test") - if self.Backend is CTypesBackend: -- py.test.skip("not with the ctypes backend") -+ pytest.skip("not with the ctypes backend") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - BOOL QueryPerformanceFrequency(LONGLONG *lpFrequency); -@@ -452,9 +451,9 @@ class TestFunction(object): - - def test_explicit_cdecl_stdcall(self): - if sys.platform != 'win32': -- py.test.skip("Windows-only test") -+ pytest.skip("Windows-only test") - if self.Backend is CTypesBackend: -- py.test.skip("not with the ctypes backend") -+ pytest.skip("not with the ctypes backend") - win64 = (sys.maxsize > 2**32) - # - ffi = FFI(backend=self.Backend()) -@@ -500,8 +499,8 @@ class TestFunction(object): - fns = ffi.cast("fns_t", 0) - ffi.new("fnc_t[]", [fnc]) - if not win64: -- py.test.raises(TypeError, ffi.new, "fnc_t[]", [fns]) -- py.test.raises(TypeError, ffi.new, "fns_t[]", [fnc]) -+ pytest.raises(TypeError, ffi.new, "fnc_t[]", [fns]) -+ pytest.raises(TypeError, ffi.new, "fns_t[]", [fnc]) - ffi.new("fns_t[]", [fns]) - - def test_stdcall_only_on_windows(self): -@@ -530,25 +529,25 @@ class TestFunction(object): - - def test_dlclose(self): - if self.Backend is CTypesBackend: -- py.test.skip("not with the ctypes backend") -+ pytest.skip("not with the ctypes backend") - ffi = FFI(backend=self.Backend()) - ffi.cdef("int foobar(void); extern int foobaz;") - lib = ffi.dlopen(lib_m) - ffi.dlclose(lib) -- e = py.test.raises(ValueError, getattr, lib, 'foobar') -+ e = pytest.raises(ValueError, getattr, lib, 'foobar') - assert str(e.value).startswith("library '") - assert str(e.value).endswith("' has already been closed") -- e = py.test.raises(ValueError, getattr, lib, 'foobaz') -+ e = pytest.raises(ValueError, getattr, lib, 'foobaz') - assert str(e.value).startswith("library '") - assert str(e.value).endswith("' has already been closed") -- e = py.test.raises(ValueError, setattr, lib, 'foobaz', 42) -+ e = pytest.raises(ValueError, setattr, lib, 'foobaz', 42) - assert str(e.value).startswith("library '") - assert str(e.value).endswith("' has already been closed") - ffi.dlclose(lib) # does not raise - - def test_passing_large_list(self): - if self.Backend is CTypesBackend: -- py.test.skip("the ctypes backend doesn't support this") -+ pytest.skip("the ctypes backend doesn't support this") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - void getenv(char *); -diff --git a/testing/cffi0/test_ownlib.py b/testing/cffi0/test_ownlib.py -index bbdab8ce..e1a61d67 100644 ---- a/testing/cffi0/test_ownlib.py -+++ b/testing/cffi0/test_ownlib.py -@@ -1,5 +1,6 @@ --import py, sys, os -+import sys, os - import subprocess, weakref -+import pytest - from cffi import FFI - from cffi.backend_ctypes import CTypesBackend - from testing.support import u, is_musl -@@ -180,9 +181,9 @@ class TestOwnLib(object): - - def test_getting_errno(self): - if self.module is None: -- py.test.skip("fix the auto-generation of the tiny test lib") -+ pytest.skip("fix the auto-generation of the tiny test lib") - if sys.platform == 'win32': -- py.test.skip("fails, errno at multiple addresses") -+ pytest.skip("fails, errno at multiple addresses") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - int test_getting_errno(void); -@@ -194,11 +195,11 @@ class TestOwnLib(object): - - def test_setting_errno(self): - if self.module is None: -- py.test.skip("fix the auto-generation of the tiny test lib") -+ pytest.skip("fix the auto-generation of the tiny test lib") - if sys.platform == 'win32': -- py.test.skip("fails, errno at multiple addresses") -+ pytest.skip("fails, errno at multiple addresses") - if self.Backend is CTypesBackend and '__pypy__' in sys.modules: -- py.test.skip("XXX errno issue with ctypes on pypy?") -+ pytest.skip("XXX errno issue with ctypes on pypy?") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - int test_setting_errno(void); -@@ -211,7 +212,7 @@ class TestOwnLib(object): - - def test_my_array_7(self): - if self.module is None: -- py.test.skip("fix the auto-generation of the tiny test lib") -+ pytest.skip("fix the auto-generation of the tiny test lib") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - extern int my_array[7]; -@@ -221,7 +222,7 @@ class TestOwnLib(object): - assert ownlib.my_array[i] == i - assert len(ownlib.my_array) == 7 - if self.Backend is CTypesBackend: -- py.test.skip("not supported by the ctypes backend") -+ pytest.skip("not supported by the ctypes backend") - ownlib.my_array = list(range(10, 17)) - for i in range(7): - assert ownlib.my_array[i] == 10 + i -@@ -231,9 +232,9 @@ class TestOwnLib(object): - - def test_my_array_no_length(self): - if self.module is None: -- py.test.skip("fix the auto-generation of the tiny test lib") -+ pytest.skip("fix the auto-generation of the tiny test lib") - if self.Backend is CTypesBackend: -- py.test.skip("not supported by the ctypes backend") -+ pytest.skip("not supported by the ctypes backend") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - extern int my_array[]; -@@ -241,7 +242,7 @@ class TestOwnLib(object): - ownlib = ffi.dlopen(self.module) - for i in range(7): - assert ownlib.my_array[i] == i -- py.test.raises(TypeError, len, ownlib.my_array) -+ pytest.raises(TypeError, len, ownlib.my_array) - ownlib.my_array = list(range(10, 17)) - for i in range(7): - assert ownlib.my_array[i] == 10 + i -@@ -251,7 +252,7 @@ class TestOwnLib(object): - - def test_keepalive_lib(self): - if self.module is None: -- py.test.skip("fix the auto-generation of the tiny test lib") -+ pytest.skip("fix the auto-generation of the tiny test lib") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - int test_getting_errno(void); -@@ -269,7 +270,7 @@ class TestOwnLib(object): - - def test_keepalive_ffi(self): - if self.module is None: -- py.test.skip("fix the auto-generation of the tiny test lib") -+ pytest.skip("fix the auto-generation of the tiny test lib") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - int test_getting_errno(void); -@@ -289,7 +290,7 @@ class TestOwnLib(object): - - def test_struct_by_value(self): - if self.module is None: -- py.test.skip("fix the auto-generation of the tiny test lib") -+ pytest.skip("fix the auto-generation of the tiny test lib") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - typedef struct { -@@ -330,9 +331,9 @@ class TestOwnLib(object): - - def test_addressof_lib(self): - if self.module is None: -- py.test.skip("fix the auto-generation of the tiny test lib") -+ pytest.skip("fix the auto-generation of the tiny test lib") - if self.Backend is CTypesBackend: -- py.test.skip("not implemented with the ctypes backend") -+ pytest.skip("not implemented with the ctypes backend") - ffi = FFI(backend=self.Backend()) - ffi.cdef("extern long left; int test_getting_errno(void);") - lib = ffi.dlopen(self.module) -@@ -348,9 +349,9 @@ class TestOwnLib(object): - - def test_char16_char32_t(self): - if self.module is None: -- py.test.skip("fix the auto-generation of the tiny test lib") -+ pytest.skip("fix the auto-generation of the tiny test lib") - if self.Backend is CTypesBackend: -- py.test.skip("not implemented with the ctypes backend") -+ pytest.skip("not implemented with the ctypes backend") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - char16_t foo_2bytes(char16_t); -@@ -363,9 +364,9 @@ class TestOwnLib(object): - - def test_modify_struct_value(self): - if self.module is None: -- py.test.skip("fix the auto-generation of the tiny test lib") -+ pytest.skip("fix the auto-generation of the tiny test lib") - if self.Backend is CTypesBackend: -- py.test.skip("fails with the ctypes backend on some architectures") -+ pytest.skip("fails with the ctypes backend on some architectures") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - typedef struct { -@@ -387,11 +388,11 @@ class TestOwnLib(object): - - def test_dlopen_handle(self): - if self.module is None: -- py.test.skip("fix the auto-generation of the tiny test lib") -+ pytest.skip("fix the auto-generation of the tiny test lib") - if sys.platform == 'win32' or is_musl: -- py.test.skip("uses 'dl' explicitly") -+ pytest.skip("uses 'dl' explicitly") - if self.__class__.Backend is CTypesBackend: -- py.test.skip("not for the ctypes backend") -+ pytest.skip("not for the ctypes backend") - backend = self.Backend() - ffi1 = FFI(backend=backend) - ffi1.cdef("""void *dlopen(const char *filename, int flags); -@@ -413,9 +414,9 @@ class TestOwnLib(object): - - def test_return_three_bytes(self): - if self.module is None: -- py.test.skip("fix the auto-generation of the tiny test lib") -+ pytest.skip("fix the auto-generation of the tiny test lib") - if self.__class__.Backend is CTypesBackend: -- py.test.skip("not working on win32 on the ctypes backend") -+ pytest.skip("not working on win32 on the ctypes backend") - ffi = FFI(backend=self.Backend()) - ffi.cdef(""" - typedef struct { -diff --git a/testing/cffi0/test_parsing.py b/testing/cffi0/test_parsing.py -index 5d93a8d3..af6293ed 100644 ---- a/testing/cffi0/test_parsing.py -+++ b/testing/cffi0/test_parsing.py -@@ -1,4 +1,5 @@ --import py, sys, re -+import sys, re -+import pytest - from cffi import FFI, FFIError, CDefError, VerificationError - from .backend_tests import needs_dlopen_none - from testing.support import is_musl -@@ -191,14 +192,14 @@ def test_remove_line_continuation_comments(): - - def test_dont_remove_comment_in_line_directives(): - ffi = FFI(backend=FakeBackend()) -- e = py.test.raises(CDefError, ffi.cdef, """ -+ e = pytest.raises(CDefError, ffi.cdef, """ - \t # \t line \t 8 \t "baz.c" \t - - some syntax error here - """) - assert str(e.value) == "parse error\nbaz.c:9:14: before: syntax" - # -- e = py.test.raises(CDefError, ffi.cdef, """ -+ e = pytest.raises(CDefError, ffi.cdef, """ - #line 7 "foo//bar.c" - - some syntax error here -@@ -206,14 +207,14 @@ def test_dont_remove_comment_in_line_directives(): - # - assert str(e.value) == "parse error\nfoo//bar.c:8:14: before: syntax" - ffi = FFI(backend=FakeBackend()) -- e = py.test.raises(CDefError, ffi.cdef, """ -+ e = pytest.raises(CDefError, ffi.cdef, """ - \t # \t 8 \t "baz.c" \t - - some syntax error here - """) - assert str(e.value) == "parse error\nbaz.c:9:14: before: syntax" - # -- e = py.test.raises(CDefError, ffi.cdef, """ -+ e = pytest.raises(CDefError, ffi.cdef, """ - # 7 "foo//bar.c" - - some syntax error here -@@ -222,7 +223,7 @@ def test_dont_remove_comment_in_line_directives(): - - def test_multiple_line_directives(): - ffi = FFI(backend=FakeBackend()) -- e = py.test.raises(CDefError, ffi.cdef, -+ e = pytest.raises(CDefError, ffi.cdef, - """ #line 5 "foo.c" - extern int xx; - #line 6 "bar.c" -@@ -234,7 +235,7 @@ def test_multiple_line_directives(): - """) - assert str(e.value) == "parse error\nbaz.c:7:14: before: syntax" - # -- e = py.test.raises(CDefError, ffi.cdef, -+ e = pytest.raises(CDefError, ffi.cdef, - """ # 5 "foo.c" - extern int xx; - # 6 "bar.c" -@@ -248,7 +249,7 @@ def test_multiple_line_directives(): - - def test_commented_line_directive(): - ffi = FFI(backend=FakeBackend()) -- e = py.test.raises(CDefError, ffi.cdef, """ -+ e = pytest.raises(CDefError, ffi.cdef, """ - /* - #line 5 "foo.c" - */ -@@ -262,7 +263,7 @@ def test_commented_line_directive(): - """) - # - assert str(e.value) == "parse error\nbar.c:9:14: before: syntax" -- e = py.test.raises(CDefError, ffi.cdef, """ -+ e = pytest.raises(CDefError, ffi.cdef, """ - /* - # 5 "foo.c" - */ -@@ -290,7 +291,7 @@ def test_line_continuation_in_defines(): - - def test_define_not_supported_for_now(): - ffi = FFI(backend=FakeBackend()) -- e = py.test.raises(CDefError, ffi.cdef, '#define FOO "blah"') -+ e = pytest.raises(CDefError, ffi.cdef, '#define FOO "blah"') - assert str(e.value) == ( - 'only supports one of the following syntax:\n' - ' #define FOO ... (literally dot-dot-dot)\n' -@@ -310,7 +311,7 @@ def test_unnamed_struct(): - type_bar = ffi._parser.parse_type("bar_p").totype - assert repr(type_foo) == "" - assert repr(type_bar) == "" -- py.test.raises(VerificationError, type_bar.get_c_name) -+ pytest.raises(VerificationError, type_bar.get_c_name) - assert type_foo.get_c_name() == "foo_t" - - def test_override(): -@@ -318,7 +319,7 @@ def test_override(): - needs_dlopen_none() - C = ffi.dlopen(None) - ffi.cdef("int foo(void);") -- py.test.raises(FFIError, ffi.cdef, "long foo(void);") -+ pytest.raises(FFIError, ffi.cdef, "long foo(void);") - assert C.foo.BType == ', False>' - ffi.cdef("long foo(void);", override=True) - assert C.foo.BType == ', False>' -@@ -326,23 +327,23 @@ def test_override(): - def test_cannot_have_only_variadic_part(): - # this checks that we get a sensible error if we try "int foo(...);" - ffi = FFI() -- e = py.test.raises(CDefError, ffi.cdef, "int foo(...);") -+ e = pytest.raises(CDefError, ffi.cdef, "int foo(...);") - assert str(e.value) == ( - ":1: foo: a function with only '(...)' " - "as argument is not correct C") - - def test_parse_error(): - ffi = FFI() -- e = py.test.raises(CDefError, ffi.cdef, " x y z ") -+ e = pytest.raises(CDefError, ffi.cdef, " x y z ") - assert str(e.value).startswith( - 'cannot parse "x y z"\n:1:') -- e = py.test.raises(CDefError, ffi.cdef, "\n\n\n x y z ") -+ e = pytest.raises(CDefError, ffi.cdef, "\n\n\n x y z ") - assert str(e.value).startswith( - 'cannot parse "x y z"\n:4:') - - def test_error_custom_lineno(): - ffi = FFI() -- e = py.test.raises(CDefError, ffi.cdef, """ -+ e = pytest.raises(CDefError, ffi.cdef, """ - # 42 "foobar" - - a b c d -@@ -351,7 +352,7 @@ def test_error_custom_lineno(): - - def test_cannot_declare_enum_later(): - ffi = FFI() -- e = py.test.raises(NotImplementedError, ffi.cdef, -+ e = pytest.raises(NotImplementedError, ffi.cdef, - "typedef enum foo_e foo_t; enum foo_e { AA, BB };") - assert str(e.value) == ( - "enum foo_e: the '{}' declaration should appear on the " -@@ -359,11 +360,11 @@ def test_cannot_declare_enum_later(): - - def test_unknown_name(): - ffi = FFI() -- e = py.test.raises(CDefError, ffi.cast, "foobarbazunknown", 0) -+ e = pytest.raises(CDefError, ffi.cast, "foobarbazunknown", 0) - assert str(e.value) == "unknown identifier 'foobarbazunknown'" -- e = py.test.raises(CDefError, ffi.cast, "foobarbazunknown*", 0) -+ e = pytest.raises(CDefError, ffi.cast, "foobarbazunknown*", 0) - assert str(e.value).startswith('cannot parse "foobarbazunknown*"') -- e = py.test.raises(CDefError, ffi.cast, "int(*)(foobarbazunknown)", 0) -+ e = pytest.raises(CDefError, ffi.cast, "int(*)(foobarbazunknown)", 0) - assert str(e.value).startswith('cannot parse "int(*)(foobarbazunknown)"') - - def test_redefine_common_type(): -@@ -390,7 +391,7 @@ def test_bool(): - - def test_unknown_argument_type(): - ffi = FFI() -- e = py.test.raises(CDefError, ffi.cdef, "void f(foobarbazzz);") -+ e = pytest.raises(CDefError, ffi.cdef, "void f(foobarbazzz);") - assert str(e.value) == (":1: f arg 1:" - " unknown type 'foobarbazzz' (if you meant" - " to use the old C syntax of giving untyped" -@@ -405,7 +406,7 @@ def test_void_renamed_as_only_arg(): - - def test_WPARAM_on_windows(): - if sys.platform != 'win32': -- py.test.skip("Only for Windows") -+ pytest.skip("Only for Windows") - ffi = FFI() - ffi.cdef("void f(WPARAM);") - # -@@ -572,7 +573,7 @@ def test_extern_python_group(): - - def test_error_invalid_syntax_for_cdef(): - ffi = FFI() -- e = py.test.raises(CDefError, ffi.cdef, 'void foo(void) {}') -+ e = pytest.raises(CDefError, ffi.cdef, 'void foo(void) {}') - assert str(e.value) == (':1: unexpected : ' - 'this construct is valid C but not valid in cdef()') - -diff --git a/testing/cffi0/test_verify.py b/testing/cffi0/test_verify.py -index de1608de..96d752d7 100644 ---- a/testing/cffi0/test_verify.py -+++ b/testing/cffi0/test_verify.py -@@ -1,4 +1,4 @@ --import py, re -+import re - import pytest - import sys, os, math, weakref - from cffi import FFI, VerificationError, VerificationMissing, model, FFIError -@@ -84,10 +84,10 @@ def test_simple_case(): - - def _Wconversion(cdef, source, **kargs): - if sys.platform in ('win32', 'darwin'): -- py.test.skip("needs GCC") -+ pytest.skip("needs GCC") - ffi = FFI() - ffi.cdef(cdef) -- py.test.raises(VerificationError, ffi.verify, source, **kargs) -+ pytest.raises(VerificationError, ffi.verify, source, **kargs) - extra_compile_args_orig = extra_compile_args[:] - extra_compile_args.remove('-Wconversion') - try: -@@ -207,7 +207,7 @@ def test_longdouble_precision(): - assert abs(more_precise - 0.656769) < 0.001 - assert abs(less_precise - 3.99091) < 0.001 - else: -- py.test.skip("don't know the very exact precision of 'long double'") -+ pytest.skip("don't know the very exact precision of 'long double'") - - - all_primitive_types = model.PrimitiveType.ALL_PRIMITIVE_TYPES -@@ -260,7 +260,7 @@ def test_all_integer_and_float_types(): - if sys.version < '3': - assert foo(long(44)) == 45 - assert foo(ffi.cast(typename, 46)) == 47 -- py.test.raises(TypeError, foo, ffi.NULL) -+ pytest.raises(TypeError, foo, ffi.NULL) - # - # check for overflow cases - if all_primitive_types[typename] == 'f': -@@ -269,7 +269,7 @@ def test_all_integer_and_float_types(): - 2**5, 2**10, 2**20, 2**40, 2**80]: - overflows = int(ffi.cast(typename, value)) != value - if overflows: -- py.test.raises(OverflowError, foo, value) -+ pytest.raises(OverflowError, foo, value) - else: - assert foo(value) == value + 1 - -@@ -289,8 +289,8 @@ def test_var_signed_integer_types(): - assert getattr(lib, varname) == max - setattr(lib, varname, min) - assert getattr(lib, varname) == min -- py.test.raises(OverflowError, setattr, lib, varname, max+1) -- py.test.raises(OverflowError, setattr, lib, varname, min-1) -+ pytest.raises(OverflowError, setattr, lib, varname, max+1) -+ pytest.raises(OverflowError, setattr, lib, varname, min-1) - - def test_var_unsigned_integer_types(): - ffi = FFI() -@@ -310,8 +310,8 @@ def test_var_unsigned_integer_types(): - assert getattr(lib, varname) == max - setattr(lib, varname, 0) - assert getattr(lib, varname) == 0 -- py.test.raises(OverflowError, setattr, lib, varname, max+1) -- py.test.raises(OverflowError, setattr, lib, varname, -1) -+ pytest.raises(OverflowError, setattr, lib, varname, max+1) -+ pytest.raises(OverflowError, setattr, lib, varname, -1) - - def test_fn_signed_integer_types(): - ffi = FFI() -@@ -330,8 +330,8 @@ def test_fn_signed_integer_types(): - fn = getattr(lib, fnname) - assert fn(max) == max - assert fn(min) == min -- py.test.raises(OverflowError, fn, max + 1) -- py.test.raises(OverflowError, fn, min - 1) -+ pytest.raises(OverflowError, fn, max + 1) -+ pytest.raises(OverflowError, fn, min - 1) - - def test_fn_unsigned_integer_types(): - ffi = FFI() -@@ -352,16 +352,16 @@ def test_fn_unsigned_integer_types(): - fn = getattr(lib, fnname) - assert fn(max) == max - assert fn(0) == 0 -- py.test.raises(OverflowError, fn, max + 1) -- py.test.raises(OverflowError, fn, -1) -+ pytest.raises(OverflowError, fn, max + 1) -+ pytest.raises(OverflowError, fn, -1) - - def test_char_type(): - ffi = FFI() - ffi.cdef("char foo(char);") - lib = ffi.verify("char foo(char x) { return ++x; }") - assert lib.foo(b"A") == b"B" -- py.test.raises(TypeError, lib.foo, b"bar") -- py.test.raises(TypeError, lib.foo, "bar") -+ pytest.raises(TypeError, lib.foo, b"bar") -+ pytest.raises(TypeError, lib.foo, "bar") - - def test_wchar_type(): - ffi = FFI() -@@ -377,7 +377,7 @@ def test_wchar_type(): - assert lib.foo(uniexample1) == uniexample2 - - def test_char16_char32_type(): -- py.test.skip("XXX test or fully prevent char16_t and char32_t from " -+ pytest.skip("XXX test or fully prevent char16_t and char32_t from " - "working in ffi.verify() mode") - - def test_no_argument(): -@@ -412,11 +412,11 @@ def test_bogus_ptr(): - ffi = FFI() - ffi.cdef("int *foo(int *);") - lib = ffi.verify("int *foo(int *a) { return a; }") -- py.test.raises(TypeError, lib.foo, ffi.new("short *", 42)) -+ pytest.raises(TypeError, lib.foo, ffi.new("short *", 42)) - - - def test_verify_typedefs(): -- py.test.skip("ignored so far") -+ pytest.skip("ignored so far") - types = ['signed char', 'unsigned char', 'int', 'long'] - for cdefed in types: - for real in types: -@@ -425,7 +425,7 @@ def test_verify_typedefs(): - if cdefed == real: - ffi.verify("typedef %s foo_t;" % real) - else: -- py.test.raises(VerificationError, ffi.verify, -+ pytest.raises(VerificationError, ffi.verify, - "typedef %s foo_t;" % real) - - def test_nondecl_struct(): -@@ -441,19 +441,19 @@ def test_ffi_full_struct(): - ffi.verify("struct foo_s { char x; int y; long *z; };") - # - if sys.platform != 'win32': # XXX fixme: only gives warnings -- py.test.raises(VerificationError, ffi.verify, -+ pytest.raises(VerificationError, ffi.verify, - "struct foo_s { char x; int y; int *z; };") - # -- py.test.raises(VerificationError, ffi.verify, -+ pytest.raises(VerificationError, ffi.verify, - "struct foo_s { int y; long *z; };") - # -- e = py.test.raises(VerificationError, ffi.verify, -+ e = pytest.raises(VerificationError, ffi.verify, - "struct foo_s { int y; char x; long *z; };") - assert str(e.value) == ( - "struct foo_s: wrong offset for field 'x'" - " (we have 0, but C compiler says 4)") - # -- e = py.test.raises(VerificationError, ffi.verify, -+ e = pytest.raises(VerificationError, ffi.verify, - "struct foo_s { char x; int y; long *z; char extra; };") - assert str(e.value) == ( - "struct foo_s: wrong total size" -@@ -466,7 +466,7 @@ def test_ffi_full_struct(): - # that replaces what is just padding in our declaration above - ffi.verify("struct foo_s { char x, extra; int y; long *z; };") - # -- e = py.test.raises(VerificationError, ffi.verify, -+ e = pytest.raises(VerificationError, ffi.verify, - "struct foo_s { char x; short pad; short y; long *z; };") - assert str(e.value) == ( - "struct foo_s: wrong size for field 'y'" -@@ -480,9 +480,9 @@ def test_ffi_nonfull_struct(): - ...; - }; - """) -- py.test.raises(VerificationMissing, ffi.sizeof, 'struct foo_s') -- py.test.raises(VerificationMissing, ffi.offsetof, 'struct foo_s', 'x') -- py.test.raises(VerificationMissing, ffi.new, 'struct foo_s *') -+ pytest.raises(VerificationMissing, ffi.sizeof, 'struct foo_s') -+ pytest.raises(VerificationMissing, ffi.offsetof, 'struct foo_s', 'x') -+ pytest.raises(VerificationMissing, ffi.new, 'struct foo_s *') - ffi.verify(""" - struct foo_s { - int a, b, x, c, d, e; -@@ -535,7 +535,7 @@ def test_struct_signedness_ignored(): - - def test_struct_float_vs_int(): - if sys.platform == 'win32': -- py.test.skip("XXX fixme: only gives warnings") -+ pytest.skip("XXX fixme: only gives warnings") - ffi = FFI() - for typename in all_signed_integer_types(ffi): - for real in all_float_types: -@@ -586,7 +586,7 @@ def test_struct_array_guess_length(): - - def test_struct_array_c99_1(): - if sys.platform == 'win32': -- py.test.skip("requires C99") -+ pytest.skip("requires C99") - ffi = FFI() - ffi.cdef("struct foo_s { int x; int a[]; };") - ffi.verify("struct foo_s { int x; int a[]; };") -@@ -609,7 +609,7 @@ def test_struct_array_c99_1(): - - def test_struct_array_c99_2(): - if sys.platform == 'win32': -- py.test.skip("requires C99") -+ pytest.skip("requires C99") - ffi = FFI() - ffi.cdef("struct foo_s { int x; int a[]; ...; };") - ffi.verify("struct foo_s { int x, y; int a[]; };") -@@ -658,7 +658,7 @@ def test_struct_with_bitfield_enum(): - - def test_unsupported_struct_with_bitfield_ellipsis(): - ffi = FFI() -- py.test.raises(NotImplementedError, ffi.cdef, -+ pytest.raises(NotImplementedError, ffi.cdef, - "struct foo_s { int a:2, b:3; ...; };") - - def test_global_constants(): -@@ -705,7 +705,7 @@ def test_global_constants_non_int(): - def test_nonfull_enum(): - ffi = FFI() - ffi.cdef("enum ee { EE1, EE2, EE3, ... \n \t };") -- py.test.raises(VerificationMissing, ffi.cast, 'enum ee', 'EE2') -+ pytest.raises(VerificationMissing, ffi.cast, 'enum ee', 'EE2') - ffi.verify("enum ee { EE1=10, EE2, EE3=-10, EE4 };") - assert ffi.string(ffi.cast('enum ee', 11)) == "EE2" - assert ffi.string(ffi.cast('enum ee', -10)) == "EE3" -@@ -721,8 +721,8 @@ def test_full_enum(): - ffi = FFI() - ffi.cdef("enum ee { EE1, EE2, EE3 };") - ffi.verify("enum ee { EE1, EE2, EE3 };") -- py.test.raises(VerificationError, ffi.verify, "enum ee { EE1, EE2 };") -- e = py.test.raises(VerificationError, ffi.verify, -+ pytest.raises(VerificationError, ffi.verify, "enum ee { EE1, EE2 };") -+ e = pytest.raises(VerificationError, ffi.verify, - "enum ee { EE1, EE3, EE2 };") - assert str(e.value) == 'enum ee: EE2 has the real value 2, not 1' - # extra items cannot be seen and have no bad consequence anyway -@@ -757,14 +757,14 @@ def test_nonfull_anonymous_enum(): - def test_nonfull_enum_syntax2(): - ffi = FFI() - ffi.cdef("enum ee { EE1, EE2=\t..., EE3 };") -- py.test.raises(VerificationMissing, ffi.cast, 'enum ee', 'EE1') -+ pytest.raises(VerificationMissing, ffi.cast, 'enum ee', 'EE1') - ffi.verify("enum ee { EE1=10, EE2, EE3=-10, EE4 };") - assert ffi.string(ffi.cast('enum ee', 11)) == 'EE2' - assert ffi.string(ffi.cast('enum ee', -10)) == 'EE3' - # - ffi = FFI() - ffi.cdef("enum ee { EE1, EE2=\t... };") -- py.test.raises(VerificationMissing, ffi.cast, 'enum ee', 'EE1') -+ pytest.raises(VerificationMissing, ffi.cast, 'enum ee', 'EE1') - ffi.verify("enum ee { EE1=10, EE2, EE3=-10, EE4 };") - assert ffi.string(ffi.cast('enum ee', 11)) == 'EE2' - # -@@ -851,7 +851,7 @@ def test_access_array_variable(length=5): - # work with array instances whose length we know. using a pointer - # instead of an array gives the correct effects. - assert repr(lib.somenumber).startswith(" 2**32: -- # py.test.skip('Segfaults on mips64el') -+ # pytest.skip('Segfaults on mips64el') - # XXX bad abuse of "struct { ...; }". It only works a bit by chance - # anyway. XXX think about something better :-( - ffi = FFI() -@@ -1288,7 +1288,7 @@ def test_take_and_return_partial_structs(): - def test_cannot_name_struct_type(): - ffi = FFI() - ffi.cdef("typedef struct { int x; } **sp; void foo(sp);") -- e = py.test.raises(VerificationError, ffi.verify, -+ e = pytest.raises(VerificationError, ffi.verify, - "typedef struct { int x; } **sp; void foo(sp x) { }") - assert 'in argument of foo: unknown type name' in str(e.value) - -@@ -1300,7 +1300,7 @@ def test_dont_check_unnamable_fields(): - - def test_nested_anonymous_struct_exact(): - if sys.platform == 'win32': -- py.test.skip("nested anonymous struct/union") -+ pytest.skip("nested anonymous struct/union") - ffi = FFI() - ffi.cdef(""" - struct foo_s { struct { int a; char b; }; union { char c, d; }; }; -@@ -1320,15 +1320,15 @@ def test_nested_anonymous_struct_exact(): - - def test_nested_anonymous_struct_exact_error(): - if sys.platform == 'win32': -- py.test.skip("nested anonymous struct/union") -+ pytest.skip("nested anonymous struct/union") - ffi = FFI() - ffi.cdef(""" - struct foo_s { struct { int a; char b; }; union { char c, d; }; }; - """) -- py.test.raises(VerificationError, ffi.verify, """ -+ pytest.raises(VerificationError, ffi.verify, """ - struct foo_s { struct { int a; short b; }; union { char c, d; }; }; - """) -- py.test.raises(VerificationError, ffi.verify, """ -+ pytest.raises(VerificationError, ffi.verify, """ - struct foo_s { struct { int a; char e, b; }; union { char c, d; }; }; - """) - -@@ -1389,7 +1389,7 @@ def test_ffi_union_with_partial_struct_2(): - - def test_ffi_struct_packed(): - if sys.platform == 'win32': -- py.test.skip("needs a GCC extension") -+ pytest.skip("needs a GCC extension") - ffi = FFI() - ffi.cdef("struct foo_s { int b; ...; };") - ffi.verify(""" -@@ -1440,7 +1440,7 @@ def test_bug1(): - - def test_bool(): - if sys.platform == 'win32': -- py.test.skip("_Bool not in MSVC") -+ pytest.skip("_Bool not in MSVC") - ffi = FFI() - ffi.cdef("struct foo_s { _Bool x; };" - "_Bool foo(_Bool); static _Bool (*foop)(_Bool);") -@@ -1464,13 +1464,13 @@ def test_bool(): - assert lib.foop(1) is False - assert lib.foop(True) is False - assert lib.foop(0) is True -- py.test.raises(OverflowError, lib.foop, 42) -- py.test.raises(TypeError, lib.foop, 0.0) -+ pytest.raises(OverflowError, lib.foop, 42) -+ pytest.raises(TypeError, lib.foop, 0.0) - assert lib.foo(1) is False - assert lib.foo(True) is False - assert lib.foo(0) is True -- py.test.raises(OverflowError, lib.foo, 42) -- py.test.raises(TypeError, lib.foo, 0.0) -+ pytest.raises(OverflowError, lib.foo, 42) -+ pytest.raises(TypeError, lib.foo, 0.0) - assert int(ffi.cast("_Bool", long(1))) == 1 - assert int(ffi.cast("_Bool", long(0))) == 0 - assert int(ffi.cast("_Bool", long(-1))) == 1 -@@ -1491,14 +1491,14 @@ def test_bool(): - assert int(ffi.cast("_Bool", f)) == 0 - assert f.seen - # -- py.test.raises(TypeError, ffi.cast, "_Bool", []) -+ pytest.raises(TypeError, ffi.cast, "_Bool", []) - - def test_bool_on_long_double(): - if sys.platform == 'win32': -- py.test.skip("_Bool not in MSVC") -+ pytest.skip("_Bool not in MSVC") - f = 1E-250 - if f == 0.0 or f*f != 0.0: -- py.test.skip("unexpected precision") -+ pytest.skip("unexpected precision") - ffi = FFI() - ffi.cdef("long double square(long double f); _Bool opposite(_Bool);") - lib = ffi.verify("long double square(long double f) { return f*f; }\n" -@@ -1507,12 +1507,12 @@ def test_bool_on_long_double(): - f2 = lib.square(f) - f3 = lib.square(f * 2.0) - if repr(f2) == repr(f3): -- py.test.skip("long double doesn't have enough precision") -+ pytest.skip("long double doesn't have enough precision") - assert float(f0) == float(f2) == float(f3) == 0.0 # too tiny for 'double' - assert int(ffi.cast("_Bool", f2)) == 1 - assert int(ffi.cast("_Bool", f3)) == 1 - assert int(ffi.cast("_Bool", f0)) == 0 -- py.test.raises(TypeError, lib.opposite, f2) -+ pytest.raises(TypeError, lib.opposite, f2) - - def test_cannot_pass_float(): - for basetype in ['char', 'short', 'int', 'long', 'long long']: -@@ -1532,7 +1532,7 @@ def test_cannot_pass_float(): - p.x = 0.0 - assert lib.foo(42) == 0 - assert lib.foo(0) == 1 -- py.test.raises(TypeError, lib.foo, 0.0) -+ pytest.raises(TypeError, lib.foo, 0.0) - - def test_cast_from_int_type_to_bool(): - ffi = FFI() -@@ -1563,18 +1563,18 @@ def test_addressof(): - p = ffi.new("struct foo_s *") - p.point.x = 16 - p.point.y = 9 -- py.test.raises(TypeError, lib.sum_coord, p.point) -+ pytest.raises(TypeError, lib.sum_coord, p.point) - res = lib.sum_coord(ffi.addressof(p.point)) - assert res.x == 25 - assert res.y == 7 - res2 = lib.sum_coord(ffi.addressof(res)) - assert res2.x == 32 - assert res2.y == 18 -- py.test.raises(TypeError, lib.sum_coord, res2) -+ pytest.raises(TypeError, lib.sum_coord, res2) - - def test_callback_in_thread(): - if sys.platform == 'win32': -- py.test.skip("pthread only") -+ pytest.skip("pthread only") - import os, subprocess, imp - arg = os.path.join(os.path.dirname(__file__), 'callback_in_thread.py') - g = subprocess.Popen([sys.executable, arg, -@@ -1610,7 +1610,7 @@ def test_keepalive_ffi(): - - def test_FILE_stored_in_stdout(): - if not sys.platform.startswith('linux') or is_musl: -- py.test.skip("likely, we cannot assign to stdout") -+ pytest.skip("likely, we cannot assign to stdout") - ffi = FFI() - ffi.cdef("int printf(const char *, ...); FILE *setstdout(FILE *);") - lib = ffi.verify(""" -@@ -1682,7 +1682,7 @@ def test_global_array_with_dotdotdot_length(): - def test_bad_global_array_with_dotdotdot_length(): - ffi = FFI() - ffi.cdef("extern int fooarray[...];") -- py.test.raises(VerificationError, ffi.verify, "char fooarray[23];") -+ pytest.raises(VerificationError, ffi.verify, "char fooarray[23];") - - def test_struct_containing_struct(): - ffi = FFI() -@@ -1696,7 +1696,7 @@ def test_struct_containing_struct(): - def test_struct_returned_by_func(): - ffi = FFI() - ffi.cdef("typedef ... foo_t; foo_t myfunc(void);") -- e = py.test.raises(TypeError, ffi.verify, -+ e = pytest.raises(TypeError, ffi.verify, - "typedef struct { int x; } foo_t; " - "foo_t myfunc(void) { foo_t x = { 42 }; return x; }") - assert str(e.value) == ( -@@ -1780,7 +1780,7 @@ def test_enum_bug118(): - continue # enums may always be signed with MSVC - ffi = FFI() - ffi.cdef("enum foo_e { AA=%s };" % c1) -- e = py.test.raises(VerificationError, ffi.verify, -+ e = pytest.raises(VerificationError, ffi.verify, - "enum foo_e { AA=%s%s };" % (c2, c2c)) - assert str(e.value) == ('enum foo_e: AA has the real value %d, not %d' - % (c2, c1)) -@@ -1885,15 +1885,15 @@ def test_passing_string_or_NULL(): - assert lib.seeme1(ffi.NULL) == 1 - assert lib.seeme2([42, 43]) == 0 - assert lib.seeme2(ffi.NULL) == 1 -- py.test.raises(TypeError, lib.seeme1, None) -- py.test.raises(TypeError, lib.seeme2, None) -- py.test.raises(TypeError, lib.seeme1, 0.0) -- py.test.raises(TypeError, lib.seeme2, 0.0) -- py.test.raises(TypeError, lib.seeme1, 0) -- py.test.raises(TypeError, lib.seeme2, 0) -+ pytest.raises(TypeError, lib.seeme1, None) -+ pytest.raises(TypeError, lib.seeme2, None) -+ pytest.raises(TypeError, lib.seeme1, 0.0) -+ pytest.raises(TypeError, lib.seeme2, 0.0) -+ pytest.raises(TypeError, lib.seeme1, 0) -+ pytest.raises(TypeError, lib.seeme2, 0) - zeroL = 99999999999999999999 - zeroL -= 99999999999999999999 -- py.test.raises(TypeError, lib.seeme2, zeroL) -+ pytest.raises(TypeError, lib.seeme2, zeroL) - - def test_typeof_function(): - ffi = FFI() -@@ -2120,7 +2120,7 @@ def test_errno_working_even_with_pypys_jit(): - - def test_getlasterror_working_even_with_pypys_jit(): - if sys.platform != 'win32': -- py.test.skip("win32-only test") -+ pytest.skip("win32-only test") - ffi = FFI() - ffi.cdef("void SetLastError(DWORD);") - lib = ffi.dlopen("Kernel32.dll") -@@ -2167,19 +2167,19 @@ def test_consider_not_implemented_function_type(): - bazptr = ffi.cast("bazfunc_t", 123) - barptr = ffi.cast("barfunc_t", 123) - # assert did not crash so far -- e = py.test.raises(NotImplementedError, fooptr, ffi.new("Data *")) -+ e = pytest.raises(NotImplementedError, fooptr, ffi.new("Data *")) - assert str(e.value) == ( - "ctype 'Data' not supported as argument by libffi. Unions are only " - "supported as argument if the function is 'API mode' and " - "non-variadic (i.e. declared inside ffibuilder.cdef()+" - "ffibuilder.set_source() and not taking a final '...' argument)") -- e = py.test.raises(NotImplementedError, bazptr) -+ e = pytest.raises(NotImplementedError, bazptr) - assert str(e.value) == ( - "ctype 'Data' not supported as return value by libffi. Unions are " - "only supported as return value if the function is 'API mode' and " - "non-variadic (i.e. declared inside ffibuilder.cdef()+" - "ffibuilder.set_source() and not taking a final '...' argument)") -- e = py.test.raises(NotImplementedError, barptr) -+ e = pytest.raises(NotImplementedError, barptr) - assert str(e.value) == ( - "ctype 'MyStr' not supported as return value. It is a struct with " - "bit fields, which libffi does not support. Such structs are only " -@@ -2195,9 +2195,9 @@ def test_verify_extra_arguments(): - - def test_implicit_unicode_on_windows(): - if sys.platform != 'win32': -- py.test.skip("win32-only test") -+ pytest.skip("win32-only test") - ffi = FFI() -- e = py.test.raises(FFIError, ffi.cdef, "int foo(LPTSTR);") -+ e = pytest.raises(FFIError, ffi.cdef, "int foo(LPTSTR);") - assert str(e.value) == ("The Windows type 'LPTSTR' is only available after" - " you call ffi.set_unicode()") - for with_unicode in [True, False]: -@@ -2235,7 +2235,7 @@ def test_define_known_value(): - def test_define_wrong_value(): - ffi = FFI() - ffi.cdef("#define FOO 123") -- e = py.test.raises(VerificationError, ffi.verify, "#define FOO 124") -+ e = pytest.raises(VerificationError, ffi.verify, "#define FOO 124") - assert str(e.value).endswith("FOO has the real value 124, not 123") - - def test_static_const_int_known_value(): -@@ -2247,7 +2247,7 @@ def test_static_const_int_known_value(): - def test_static_const_int_wrong_value(): - ffi = FFI() - ffi.cdef("static const int FOO = 123;") -- e = py.test.raises(VerificationError, ffi.verify, "#define FOO 124") -+ e = pytest.raises(VerificationError, ffi.verify, "#define FOO 124") - assert str(e.value).endswith("FOO has the real value 124, not 123") - - def test_const_struct_global(): -@@ -2261,12 +2261,12 @@ def test_const_struct_global(): - def test_dont_support_int_dotdotdot(): - ffi = FFI() - ffi.cdef("typedef int... t1;") -- e = py.test.raises(VerificationError, ffi.verify, "") -+ e = pytest.raises(VerificationError, ffi.verify, "") - assert str(e.value) == ("feature not supported with ffi.verify(), but only " - "with ffi.set_source(): 'typedef int... t1'") - ffi = FFI() - ffi.cdef("typedef double ... t1;") -- e = py.test.raises(VerificationError, ffi.verify, "") -+ e = pytest.raises(VerificationError, ffi.verify, "") - assert str(e.value) == ("feature not supported with ffi.verify(), but only " - "with ffi.set_source(): 'typedef float... t1'") - -@@ -2326,8 +2326,8 @@ def test_win32_calling_convention_0(): - if sys.platform == 'win32' and sys.maxsize < 2**32: - assert '__stdcall' in str(ffi.typeof(cb2)) - assert '__stdcall' not in str(ffi.typeof(cb1)) -- py.test.raises(TypeError, lib.call1, cb2) -- py.test.raises(TypeError, lib.call2, cb1) -+ pytest.raises(TypeError, lib.call1, cb2) -+ pytest.raises(TypeError, lib.call2, cb1) - else: - assert '__stdcall' not in str(ffi.typeof(cb2)) - assert ffi.typeof(cb2) is ffi.typeof(cb1) -@@ -2450,8 +2450,8 @@ def test_win32_calling_convention_3(): - } - """) - if sys.platform == 'win32' and sys.maxsize < 2**32: -- py.test.raises(TypeError, lib.call1, lib.cb2) -- py.test.raises(TypeError, lib.call2, lib.cb1) -+ pytest.raises(TypeError, lib.call1, lib.cb2) -+ pytest.raises(TypeError, lib.call2, lib.cb1) - pt = lib.call1(lib.cb1) - assert (pt.x, pt.y) == (-9*500*999, 9*500*999) - pt = lib.call2(lib.cb2) -@@ -2459,11 +2459,11 @@ def test_win32_calling_convention_3(): - - def _only_test_on_linux_intel(): - if not sys.platform.startswith('linux'): -- py.test.skip('only running the memory-intensive test on Linux') -+ pytest.skip('only running the memory-intensive test on Linux') - import platform - machine = platform.machine() - if 'x86' not in machine and 'x64' not in machine: -- py.test.skip('only running the memory-intensive test on x86/x64') -+ pytest.skip('only running the memory-intensive test on x86/x64') - - def test_ffi_gc_size_arg(): - # with PyPy's GC, these calls to ffi.gc() would rapidly consume -@@ -2487,7 +2487,7 @@ def test_ffi_gc_size_arg_2(): - # and I found no obvious way to prevent that. So for now, this test - # is skipped on CPython, where it eats all the memory. - if '__pypy__' not in sys.builtin_module_names: -- py.test.skip("find a way to tweak the cyclic GC of CPython") -+ pytest.skip("find a way to tweak the cyclic GC of CPython") - _only_test_on_linux_intel() - ffi = FFI() - ffi.cdef("void *malloc(size_t); void free(void *);") -@@ -2510,7 +2510,7 @@ def test_ffi_gc_size_arg_2(): - def test_ffi_new_with_cycles(): - # still another variant, with ffi.new() - if '__pypy__' not in sys.builtin_module_names: -- py.test.skip("find a way to tweak the cyclic GC of CPython") -+ pytest.skip("find a way to tweak the cyclic GC of CPython") - ffi = FFI() - ffi.cdef("") - lib = ffi.verify("") -diff --git a/testing/cffi0/test_version.py b/testing/cffi0/test_version.py -index facb84c9..dfce94fd 100644 ---- a/testing/cffi0/test_version.py -+++ b/testing/cffi0/test_version.py -@@ -1,9 +1,10 @@ --import py, os, sys -+import os, sys -+import pytest - import cffi, _cffi_backend - - def setup_module(mod): - if '_cffi_backend' in sys.builtin_module_names: -- py.test.skip("this is embedded version") -+ pytest.skip("this is embedded version") - - #BACKEND_VERSIONS = { - # '0.4.2': '0.4', # did not change -diff --git a/testing/cffi0/test_zdistutils.py b/testing/cffi0/test_zdistutils.py -index 35b3d0cd..6f46fa82 100644 ---- a/testing/cffi0/test_zdistutils.py -+++ b/testing/cffi0/test_zdistutils.py -@@ -1,5 +1,5 @@ - import sys, os, imp, math, shutil --import py -+import pytest - from cffi import FFI, FFIError - from cffi.verifier import Verifier, _locate_engine_class, _get_so_suffixes - from cffi.ffiplatform import maybe_relative_path -@@ -204,7 +204,7 @@ class DistUtilsTest(object): - def test_install_and_reload_module(self, targetpackage='', ext_package=''): - KEY = repr(self) - if not hasattr(os, 'fork'): -- py.test.skip("test requires os.fork()") -+ pytest.skip("test requires os.fork()") - - if targetpackage: - udir.ensure(targetpackage, dir=1).ensure('__init__.py') -diff --git a/testing/cffi0/test_zintegration.py b/testing/cffi0/test_zintegration.py -index ce925b8b..d6a02ce0 100644 ---- a/testing/cffi0/test_zintegration.py -+++ b/testing/cffi0/test_zintegration.py -@@ -19,7 +19,7 @@ def create_venv(name): - '-p', os.path.abspath(sys.executable), - str(tmpdir)]) - except OSError as e: -- py.test.skip("Cannot execute virtualenv: %s" % (e,)) -+ pytest.skip("Cannot execute virtualenv: %s" % (e,)) - - site_packages = None - for dirpath, dirnames, filenames in os.walk(str(tmpdir)): -@@ -159,7 +159,7 @@ class TestZIntegration(object): - try: - import setuptools - except ImportError as e: -- py.test.skip(str(e)) -+ pytest.skip(str(e)) - orig_version = setuptools.__version__ - expecting_limited_api = not hasattr(sys, 'gettotalrefcount') - try: -diff --git a/testing/cffi1/test_cffi_binary.py b/testing/cffi1/test_cffi_binary.py -index 45421edb..2fb042ce 100644 ---- a/testing/cffi1/test_cffi_binary.py -+++ b/testing/cffi1/test_cffi_binary.py -@@ -1,12 +1,13 @@ --import py, sys, os -+import sys, os -+import pytest - import _cffi_backend - from testing.support import is_musl - - def test_no_unknown_exported_symbols(): - if not hasattr(_cffi_backend, '__file__'): -- py.test.skip("_cffi_backend module is built-in") -+ pytest.skip("_cffi_backend module is built-in") - if not sys.platform.startswith('linux') or is_musl: -- py.test.skip("linux-only") -+ pytest.skip("linux-only") - g = os.popen("objdump -T '%s'" % _cffi_backend.__file__, 'r') - for line in g: - if not line.startswith('0'): -diff --git a/testing/cffi1/test_commontypes.py b/testing/cffi1/test_commontypes.py -index ea7ffde0..9e7d79e9 100644 ---- a/testing/cffi1/test_commontypes.py -+++ b/testing/cffi1/test_commontypes.py -@@ -1,4 +1,5 @@ --import py, os, cffi, re -+import os, cffi, re -+import pytest - import _cffi_backend - - -@@ -7,7 +8,7 @@ def getlines(): - f = open(os.path.join(os.path.dirname(cffi.__file__), - '..', 'c', 'commontypes.c')) - except IOError: -- py.test.skip("cannot find ../c/commontypes.c") -+ pytest.skip("cannot find ../c/commontypes.c") - lines = [line for line in f.readlines() if line.strip().startswith('EQ(')] - f.close() - return lines -diff --git a/testing/cffi1/test_dlopen.py b/testing/cffi1/test_dlopen.py -index 26a2717d..11681d25 100644 ---- a/testing/cffi1/test_dlopen.py -+++ b/testing/cffi1/test_dlopen.py -@@ -1,4 +1,4 @@ --import py -+import pytest - from cffi import FFI, VerificationError, CDefError - from cffi.recompiler import make_py_source - from testing.udir import udir -@@ -36,7 +36,7 @@ ffi = _cffi_backend.FFI('test_valid_global_constant', - - def test_invalid_global_constant_3(): - ffi = FFI() -- e = py.test.raises(CDefError, ffi.cdef, "#define BB 12.34") -+ e = pytest.raises(CDefError, ffi.cdef, "#define BB 12.34") - assert str(e.value).startswith( - "only supports one of the following syntax:") - -@@ -44,7 +44,7 @@ def test_invalid_dotdotdot_in_macro(): - ffi = FFI() - ffi.cdef("#define FOO ...") - target = udir.join('test_invalid_dotdotdot_in_macro.py') -- e = py.test.raises(VerificationError, make_py_source, ffi, -+ e = pytest.raises(VerificationError, make_py_source, ffi, - 'test_invalid_dotdotdot_in_macro', str(target)) - assert str(e.value) == ("macro FOO: cannot use the syntax '...' in " - "'#define FOO ...' when using the ABI mode") -@@ -169,7 +169,7 @@ def test_no_cross_include(): - ffi = FFI() - ffi.include(baseffi) - target = udir.join('test_no_cross_include.py') -- py.test.raises(VerificationError, make_py_source, -+ pytest.raises(VerificationError, make_py_source, - ffi, 'test_no_cross_include', str(target)) - - def test_array(): -@@ -191,7 +191,7 @@ def test_array_overflow(): - ffi = FFI() - ffi.cdef("typedef int32_t my_array_t[3000000000];") - target = udir.join('test_array_overflow.py') -- py.test.raises(OverflowError, make_py_source, -+ pytest.raises(OverflowError, make_py_source, - ffi, 'test_array_overflow', str(target)) - - def test_global_var(): -diff --git a/testing/cffi1/test_ffi_obj.py b/testing/cffi1/test_ffi_obj.py -index 0d29290f..9085fb84 100644 ---- a/testing/cffi1/test_ffi_obj.py -+++ b/testing/cffi1/test_ffi_obj.py -@@ -1,4 +1,4 @@ --import py, sys -+import sys - import pytest - import _cffi_backend as _cffi1_backend - -@@ -21,7 +21,7 @@ def test_ffi_subclass(): - assert type(foo) is foo.__class__ is FOO - - def test_ffi_no_argument(): -- py.test.raises(TypeError, _cffi1_backend.FFI, 42) -+ pytest.raises(TypeError, _cffi1_backend.FFI, 42) - - def test_ffi_cache_type(): - ffi = _cffi1_backend.FFI() -@@ -68,7 +68,7 @@ def test_ffi_cache_type_globally(): - def test_ffi_invalid(): - ffi = _cffi1_backend.FFI() - # array of 10 times an "int[]" is invalid -- py.test.raises(ValueError, ffi.typeof, "int[10][]") -+ pytest.raises(ValueError, ffi.typeof, "int[10][]") - - def test_ffi_docstrings(): - # check that all methods of the FFI class have a docstring. -@@ -117,7 +117,7 @@ def test_ffi_alignof(): - def test_ffi_sizeof(): - ffi = _cffi1_backend.FFI() - assert ffi.sizeof("int") == 4 -- py.test.raises(ffi.error, ffi.sizeof, "int[]") -+ pytest.raises(ffi.error, ffi.sizeof, "int[]") - assert ffi.sizeof("int[41]") == 41 * 4 - assert ffi.sizeof(ffi.new("int[41]")) == 41 * 4 - assert ffi.sizeof(ffi.new("int[]", 41)) == 41 * 4 -@@ -162,7 +162,7 @@ def test_ffi_callback_onerror(): - assert isinstance(val, TypeError) - assert tb.tb_frame.f_code.co_name == "fn2" - # -- py.test.raises(TypeError, ffi.callback, "int(int)", -+ pytest.raises(TypeError, ffi.callback, "int(int)", - lambda x: x, onerror=42) # <- not callable - - def test_ffi_getctype(): -@@ -208,28 +208,28 @@ def test_ffi_cast(): - ffi = _cffi1_backend.FFI() - assert ffi.cast("int(*)(int)", 0) == ffi.NULL - ffi.callback("int(int)") # side-effect of registering this string -- py.test.raises(ffi.error, ffi.cast, "int(int)", 0) -+ pytest.raises(ffi.error, ffi.cast, "int(int)", 0) - - def test_ffi_invalid_type(): - ffi = _cffi1_backend.FFI() -- e = py.test.raises(ffi.error, ffi.cast, "", 0) -+ e = pytest.raises(ffi.error, ffi.cast, "", 0) - assert str(e.value) == ("identifier expected\n" - "\n" - "^") -- e = py.test.raises(ffi.error, ffi.cast, "struct struct", 0) -+ e = pytest.raises(ffi.error, ffi.cast, "struct struct", 0) - assert str(e.value) == ("struct or union name expected\n" - "struct struct\n" - " ^") -- e = py.test.raises(ffi.error, ffi.cast, "struct never_heard_of_s", 0) -+ e = pytest.raises(ffi.error, ffi.cast, "struct never_heard_of_s", 0) - assert str(e.value) == ("undefined struct/union name\n" - "struct never_heard_of_s\n" - " ^") -- e = py.test.raises(ffi.error, ffi.cast, "\t\n\x01\x1f~\x7f\x80\xff", 0) -+ e = pytest.raises(ffi.error, ffi.cast, "\t\n\x01\x1f~\x7f\x80\xff", 0) - marks = "?" if sys.version_info < (3,) else "??" - assert str(e.value) == ("identifier expected\n" - " ??~?%s%s\n" - " ^" % (marks, marks)) -- e = py.test.raises(ffi.error, ffi.cast, "X" * 600, 0) -+ e = pytest.raises(ffi.error, ffi.cast, "X" * 600, 0) - assert str(e.value) == ("undefined type name") - - def test_ffi_buffer(): -@@ -248,7 +248,7 @@ def test_ffi_from_buffer(): - assert len(c) == 8 - ffi.cast("unsigned short *", c)[1] += 500 - assert list(a) == [10000, 20500, 30000, 40000] -- py.test.raises(TypeError, ffi.from_buffer, a, True) -+ pytest.raises(TypeError, ffi.from_buffer, a, True) - assert c == ffi.from_buffer("char[]", a, True) - assert c == ffi.from_buffer(a, require_writable=True) - # -@@ -265,9 +265,9 @@ def test_ffi_from_buffer(): - assert p[2] == b"c" - # - assert p == ffi.from_buffer(b"abcd", require_writable=False) -- py.test.raises((TypeError, BufferError), ffi.from_buffer, -+ pytest.raises((TypeError, BufferError), ffi.from_buffer, - "char[]", b"abcd", True) -- py.test.raises((TypeError, BufferError), ffi.from_buffer, b"abcd", -+ pytest.raises((TypeError, BufferError), ffi.from_buffer, b"abcd", - require_writable=True) - - def test_memmove(): -@@ -318,7 +318,7 @@ def test_memmove_readonly_readwrite(): - assert list(p) == [ord("a"), ord("b"), ord("c"), 0, 0] - ffi.memmove(p, bytearray(b"ABCDE"), 2) - assert list(p) == [ord("A"), ord("B"), ord("c"), 0, 0] -- py.test.raises((TypeError, BufferError), ffi.memmove, b"abcde", p, 3) -+ pytest.raises((TypeError, BufferError), ffi.memmove, b"abcde", p, 3) - ba = bytearray(b"xxxxx") - ffi.memmove(dest=ba, src=p, n=3) - assert ba == bytearray(b"ABcxx") -@@ -332,7 +332,7 @@ def test_ffi_types(): - - def test_ffi_getwinerror(): - if sys.platform != "win32": -- py.test.skip("for windows") -+ pytest.skip("for windows") - ffi = _cffi1_backend.FFI() - n = (1 << 29) + 42 - code, message = ffi.getwinerror(code=n) -@@ -407,29 +407,29 @@ def test_ffi_new_allocator_3(): - - def test_ffi_new_allocator_4(): - ffi = _cffi1_backend.FFI() -- py.test.raises(TypeError, ffi.new_allocator, free=lambda x: None) -+ pytest.raises(TypeError, ffi.new_allocator, free=lambda x: None) - # - def myalloc2(size): - raise LookupError - alloc2 = ffi.new_allocator(myalloc2) -- py.test.raises(LookupError, alloc2, "int[5]") -+ pytest.raises(LookupError, alloc2, "int[5]") - # - def myalloc3(size): - return 42 - alloc3 = ffi.new_allocator(myalloc3) -- e = py.test.raises(TypeError, alloc3, "int[5]") -+ e = pytest.raises(TypeError, alloc3, "int[5]") - assert str(e.value) == "alloc() must return a cdata object (got int)" - # - def myalloc4(size): - return ffi.cast("int", 42) - alloc4 = ffi.new_allocator(myalloc4) -- e = py.test.raises(TypeError, alloc4, "int[5]") -+ e = pytest.raises(TypeError, alloc4, "int[5]") - assert str(e.value) == "alloc() must return a cdata pointer, not 'int'" - # - def myalloc5(size): - return ffi.NULL - alloc5 = ffi.new_allocator(myalloc5) -- py.test.raises(MemoryError, alloc5, "int[5]") -+ pytest.raises(MemoryError, alloc5, "int[5]") - - def test_bool_issue228(): - ffi = _cffi1_backend.FFI() -@@ -497,7 +497,7 @@ def test_init_once_failure(): - ffi = _cffi1_backend.FFI() - seen = [] - for i in range(5): -- py.test.raises(ValueError, ffi.init_once, do_init, "tag") -+ pytest.raises(ValueError, ffi.init_once, do_init, "tag") - assert seen == [1] * (i + 1) - - def test_init_once_multithread_failure(): -@@ -515,7 +515,7 @@ def test_init_once_multithread_failure(): - seen = [] - for i in range(3): - def f(): -- py.test.raises(ValueError, ffi.init_once, do_init, "tag") -+ pytest.raises(ValueError, ffi.init_once, do_init, "tag") - thread.start_new_thread(f, ()) - i = 0 - while len(seen) < 6: -@@ -533,4 +533,4 @@ def test_unpack(): - - def test_negative_array_size(): - ffi = _cffi1_backend.FFI() -- py.test.raises(ffi.error, ffi.cast, "int[-5]", 0) -+ pytest.raises(ffi.error, ffi.cast, "int[-5]", 0) -diff --git a/testing/cffi1/test_new_ffi_1.py b/testing/cffi1/test_new_ffi_1.py -index 640830b6..c874a362 100644 ---- a/testing/cffi1/test_new_ffi_1.py -+++ b/testing/cffi1/test_new_ffi_1.py -@@ -1,4 +1,3 @@ --import py - import pytest - import platform, imp - import sys, os, ctypes -@@ -153,17 +152,17 @@ class TestNewFFI1: - assert int(q) == int(p) - assert hash(q) == hash(p) - c_decl_ptr = '%s *' % c_decl -- py.test.raises(OverflowError, ffi.new, c_decl_ptr, min - 1) -- py.test.raises(OverflowError, ffi.new, c_decl_ptr, max + 1) -- py.test.raises(OverflowError, ffi.new, c_decl_ptr, long(min - 1)) -- py.test.raises(OverflowError, ffi.new, c_decl_ptr, long(max + 1)) -+ pytest.raises(OverflowError, ffi.new, c_decl_ptr, min - 1) -+ pytest.raises(OverflowError, ffi.new, c_decl_ptr, max + 1) -+ pytest.raises(OverflowError, ffi.new, c_decl_ptr, long(min - 1)) -+ pytest.raises(OverflowError, ffi.new, c_decl_ptr, long(max + 1)) - assert ffi.new(c_decl_ptr, min)[0] == min - assert ffi.new(c_decl_ptr, max)[0] == max - assert ffi.new(c_decl_ptr, long(min))[0] == min - assert ffi.new(c_decl_ptr, long(max))[0] == max - - def test_new_unsupported_type(self): -- e = py.test.raises(TypeError, ffi.new, "int") -+ e = pytest.raises(TypeError, ffi.new, "int") - assert str(e.value) == "expected a pointer or array ctype, got 'int'" - - def test_new_single_integer(self): -@@ -220,7 +219,7 @@ class TestNewFFI1: - with pytest.raises(IndexError): - p[10] - # -- py.test.raises(TypeError, ffi.new, "int[]") -+ pytest.raises(TypeError, ffi.new, "int[]") - # - p = ffi.new("int[]", [-6, -7]) # a list is all the items, like C - assert p[0] == -6 -@@ -232,7 +231,7 @@ class TestNewFFI1: - p = ffi.new("int[]", 0) - with pytest.raises(IndexError): - p[0] -- py.test.raises(ValueError, ffi.new, "int[]", -1) -+ pytest.raises(ValueError, ffi.new, "int[]", -1) - assert repr(p) == "" - - def test_pointer_init(self): -@@ -245,7 +244,7 @@ class TestNewFFI1: - - def test_cannot_cast(self): - a = ffi.new("short int[10]") -- e = py.test.raises(TypeError, ffi.new, "long int **", a) -+ e = pytest.raises(TypeError, ffi.new, "long int **", a) - msg = str(e.value) - assert "'short[10]'" in msg and "'long *'" in msg - -@@ -362,9 +361,9 @@ class TestNewFFI1: - assert not bool(ffi.cast("char", 0)) - assert bool(ffi.cast("char", 1)) - assert bool(ffi.cast("char", 255)) -- py.test.raises(TypeError, ffi.new, "char*", 32) -- py.test.raises(TypeError, ffi.new, "char*", u+"x") -- py.test.raises(TypeError, ffi.new, "char*", b"foo") -+ pytest.raises(TypeError, ffi.new, "char*", 32) -+ pytest.raises(TypeError, ffi.new, "char*", u+"x") -+ pytest.raises(TypeError, ffi.new, "char*", b"foo") - # - p = ffi.new("char[]", [b'a', b'b', b'\x9c']) - assert len(p) == 3 -@@ -383,13 +382,13 @@ class TestNewFFI1: - p = ffi.new("char[2]", b"ab") - assert len(p) == 2 - assert [p[i] for i in range(2)] == [b'a', b'b'] -- py.test.raises(IndexError, ffi.new, "char[2]", b"abc") -+ pytest.raises(IndexError, ffi.new, "char[2]", b"abc") - - def check_wchar_t(self, ffi): - try: - ffi.cast("wchar_t", 0) - except NotImplementedError: -- py.test.skip("NotImplementedError: wchar_t") -+ pytest.skip("NotImplementedError: wchar_t") - - def test_wchar_t(self): - self.check_wchar_t(ffi) -@@ -398,7 +397,7 @@ class TestNewFFI1: - if SIZE_OF_WCHAR > 2: - assert ffi.new("wchar_t*", u+'\U00012345')[0] == u+'\U00012345' - else: -- py.test.raises(TypeError, ffi.new, "wchar_t*", u+'\U00012345') -+ pytest.raises(TypeError, ffi.new, "wchar_t*", u+'\U00012345') - assert ffi.new("wchar_t*")[0] == u+'\x00' - assert int(ffi.cast("wchar_t", 300)) == 300 - assert not bool(ffi.cast("wchar_t", 0)) -@@ -406,8 +405,8 @@ class TestNewFFI1: - assert bool(ffi.cast("wchar_t", 65535)) - if SIZE_OF_WCHAR > 2: - assert bool(ffi.cast("wchar_t", 65536)) -- py.test.raises(TypeError, ffi.new, "wchar_t*", 32) -- py.test.raises(TypeError, ffi.new, "wchar_t*", "foo") -+ pytest.raises(TypeError, ffi.new, "wchar_t*", 32) -+ pytest.raises(TypeError, ffi.new, "wchar_t*", "foo") - # - p = ffi.new("wchar_t[]", [u+'a', u+'b', u+'\u1234']) - assert len(p) == 3 -@@ -442,7 +441,7 @@ class TestNewFFI1: - p = ffi.new("wchar_t[2]", u+"ab") - assert len(p) == 2 - assert [p[i] for i in range(2)] == [u+'a', u+'b'] -- py.test.raises(IndexError, ffi.new, "wchar_t[2]", u+"abc") -+ pytest.raises(IndexError, ffi.new, "wchar_t[2]", u+"abc") - - def test_none_as_null_doesnt_work(self): - p = ffi.new("int*[1]") -@@ -468,8 +467,8 @@ class TestNewFFI1: - # - p = ffi.new("float*", 15.75) - assert p[0] == 15.75 -- py.test.raises(TypeError, int, p) -- py.test.raises(TypeError, float, p) -+ pytest.raises(TypeError, int, p) -+ pytest.raises(TypeError, float, p) - p[0] = 0.0 - assert bool(p) is True - # -@@ -500,14 +499,14 @@ class TestNewFFI1: - assert repr(s) == "" % ( - SIZE_OF_INT + 2 * SIZE_OF_SHORT) - # -- py.test.raises(ValueError, ffi.new, "struct simple*", [1, 2, 3, 4]) -+ pytest.raises(ValueError, ffi.new, "struct simple*", [1, 2, 3, 4]) - - def test_constructor_struct_from_dict(self): - s = ffi.new("struct simple*", {'b': 123, 'c': 456}) - assert s.a == 0 - assert s.b == 123 - assert s.c == 456 -- py.test.raises(KeyError, ffi.new, "struct simple*", {'d': 456}) -+ pytest.raises(KeyError, ffi.new, "struct simple*", {'d': 456}) - - def test_struct_pointer(self): - s = ffi.new("struct simple*") -@@ -520,10 +519,10 @@ class TestNewFFI1: - s[1] - - def test_struct_opaque(self): -- py.test.raises(ffi.error, ffi.new, "struct baz*") -+ pytest.raises(ffi.error, ffi.new, "struct baz*") - # should 'ffi.new("struct baz **") work? it used to, but it was - # not particularly useful... -- py.test.raises(ffi.error, ffi.new, "struct baz**") -+ pytest.raises(ffi.error, ffi.new, "struct baz**") - - def test_pointer_to_struct(self): - s = ffi.new("struct simple *") -@@ -580,18 +579,18 @@ class TestNewFFI1: - SIZE_OF_INT,) - - def test_union_opaque(self): -- py.test.raises(ffi.error, ffi.new, "union baz*") -+ pytest.raises(ffi.error, ffi.new, "union baz*") - # should 'ffi.new("union baz **") work? it used to, but it was - # not particularly useful... -- py.test.raises(ffi.error, ffi.new, "union baz**") -+ pytest.raises(ffi.error, ffi.new, "union baz**") - - def test_union_initializer(self): -- py.test.raises(TypeError, ffi.new, "union init_u*", b'A') -- py.test.raises(TypeError, ffi.new, "union init_u*", 5) -- py.test.raises(ValueError, ffi.new, "union init_u*", [b'A', 5]) -+ pytest.raises(TypeError, ffi.new, "union init_u*", b'A') -+ pytest.raises(TypeError, ffi.new, "union init_u*", 5) -+ pytest.raises(ValueError, ffi.new, "union init_u*", [b'A', 5]) - u = ffi.new("union init_u*", [b'A']) - assert u.a == b'A' -- py.test.raises(TypeError, ffi.new, "union init_u*", [1005]) -+ pytest.raises(TypeError, ffi.new, "union init_u*", [1005]) - u = ffi.new("union init_u*", {'b': 12345}) - assert u.b == 12345 - u = ffi.new("union init_u*", []) -@@ -623,7 +622,7 @@ class TestNewFFI1: - assert str(x) == repr(x) - assert ffi.string(x) == b"x" - assert ffi.string(ffi.new("char*", b"\x00")) == b"" -- py.test.raises(TypeError, ffi.new, "char*", unicode("foo")) -+ pytest.raises(TypeError, ffi.new, "char*", unicode("foo")) - - def test_unicode_from_wchar_pointer(self): - self.check_wchar_t(ffi) -@@ -698,7 +697,7 @@ class TestNewFFI1: - assert s.name == ffi.NULL - - def test_voidp(self): -- py.test.raises(TypeError, ffi.new, "void*") -+ pytest.raises(TypeError, ffi.new, "void*") - p = ffi.new("void **") - assert p[0] == ffi.NULL - a = ffi.new("int[]", [10, 11, 12]) -@@ -706,7 +705,7 @@ class TestNewFFI1: - vp = p[0] - with pytest.raises(TypeError): - vp[0] -- py.test.raises(TypeError, ffi.new, "short **", a) -+ pytest.raises(TypeError, ffi.new, "short **", a) - # - s = ffi.new("struct voidp *") - s.p = a # works -@@ -720,7 +719,7 @@ class TestNewFFI1: - s.r = b # fails - - def test_functionptr_simple(self): -- py.test.raises(TypeError, ffi.callback, "int(*)(int)", 0) -+ pytest.raises(TypeError, ffi.callback, "int(*)(int)", 0) - def cb(n): - return n + 1 - cb.__qualname__ = 'cb' -@@ -992,10 +991,10 @@ class TestNewFFI1: - assert list(a) == [b"h", b"e", b"l", b"l", b"o", b"\0"] - assert list(iter(a)) == [b"h", b"e", b"l", b"l", b"o", b"\0"] - # -- py.test.raises(TypeError, iter, ffi.cast("char *", a)) -- py.test.raises(TypeError, list, ffi.cast("char *", a)) -- py.test.raises(TypeError, iter, ffi.new("int *")) -- py.test.raises(TypeError, list, ffi.new("int *")) -+ pytest.raises(TypeError, iter, ffi.cast("char *", a)) -+ pytest.raises(TypeError, list, ffi.cast("char *", a)) -+ pytest.raises(TypeError, iter, ffi.new("int *")) -+ pytest.raises(TypeError, list, ffi.new("int *")) - - def test_offsetof(self): - # struct abc { int a, b, c; }; -@@ -1006,7 +1005,7 @@ class TestNewFFI1: - def test_offsetof_nested(self): - # struct nesting { struct abc d, e; }; - assert ffi.offsetof("struct nesting", "e") == 12 -- py.test.raises(KeyError, ffi.offsetof, "struct nesting", "e.a") -+ pytest.raises(KeyError, ffi.offsetof, "struct nesting", "e.a") - assert ffi.offsetof("struct nesting", "e", "a") == 12 - assert ffi.offsetof("struct nesting", "e", "b") == 16 - assert ffi.offsetof("struct nesting", "e", "c") == 20 -@@ -1054,7 +1053,7 @@ class TestNewFFI1: - # typedef enum { AA1, BB1, CC1 } foo_e_t; - # typedef struct { foo_e_t f:2; } bfenum_t; - if sys.platform == "win32": -- py.test.skip("enums are not unsigned") -+ pytest.skip("enums are not unsigned") - s = ffi.new("bfenum_t *") - s.f = 2 - assert s.f == 2 -@@ -1154,7 +1153,7 @@ class TestNewFFI1: - try: - b = ffi.buffer(a) - except NotImplementedError as e: -- py.test.skip(str(e)) -+ pytest.skip(str(e)) - content = b[:] - assert len(content) == len(b) == 2 - if sys.byteorder == 'little': -@@ -1172,7 +1171,7 @@ class TestNewFFI1: - try: - b = ffi.buffer(a) - except NotImplementedError as e: -- py.test.skip(str(e)) -+ pytest.skip(str(e)) - content = b[:] - if sys.byteorder == 'little': - assert content.startswith(b'\x64\x00\x00\x00\x65\x00\x00\x00') -@@ -1188,7 +1187,7 @@ class TestNewFFI1: - try: - b = ffi.buffer(a, 1) - except NotImplementedError as e: -- py.test.skip(str(e)) -+ pytest.skip(str(e)) - content = b[:] - assert len(content) == 1 - if sys.byteorder == 'little': -@@ -1206,7 +1205,7 @@ class TestNewFFI1: - try: - ffi.buffer(a1) - except NotImplementedError as e: -- py.test.skip(str(e)) -+ pytest.skip(str(e)) - assert ffi.buffer(a1)[:] == ffi.buffer(a2, 4*10)[:] - - def test_ffi_buffer_with_file(self): -@@ -1217,7 +1216,7 @@ class TestNewFFI1: - try: - ffi.buffer(a, 512) - except NotImplementedError as e: -- py.test.skip(str(e)) -+ pytest.skip(str(e)) - f.write(ffi.buffer(a, 1000 * ffi.sizeof("int"))) - f.seek(0) - assert f.read() == arraytostring(array.array('i', range(1000))) -@@ -1235,7 +1234,7 @@ class TestNewFFI1: - try: - ffi.buffer(a, 512) - except NotImplementedError as e: -- py.test.skip(str(e)) -+ pytest.skip(str(e)) - f.write(ffi.buffer(a, 1000 * ffi.sizeof("int"))) - f.seek(0) - assert f.read() == arraytostring(array.array('i', range(1000))) -@@ -1254,7 +1253,7 @@ class TestNewFFI1: - - def test_struct_containing_array_varsize_workaround(self): - if sys.platform == "win32": -- py.test.skip("array of length 0 not supported") -+ pytest.skip("array of length 0 not supported") - # struct array0 { int len; short data[0]; }; - p = ffi.new("char[]", ffi.sizeof("struct array0") + 7 * SIZE_OF_SHORT) - q = ffi.cast("struct array0 *", p) -@@ -1266,7 +1265,7 @@ class TestNewFFI1: - assert q.data[6] == 15 - - def test_new_struct_containing_array_varsize(self): -- py.test.skip("later?") -+ pytest.skip("later?") - ffi.cdef("struct foo_s { int len; short data[]; };") - p = ffi.new("struct foo_s *", 10) # a single integer is the length - assert p.len == 0 -@@ -1294,14 +1293,14 @@ class TestNewFFI1: - def test_array_of_func_ptr(self): - f = ffi.cast("int(*)(int)", 42) - assert f != ffi.NULL -- py.test.raises(ffi.error, ffi.cast, "int(int)", 42) -- py.test.raises(ffi.error, ffi.new, "int([5])(int)") -+ pytest.raises(ffi.error, ffi.cast, "int(int)", 42) -+ pytest.raises(ffi.error, ffi.new, "int([5])(int)") - a = ffi.new("int(*[5])(int)", [f]) - assert ffi.getctype(ffi.typeof(a)) == "int(*[5])(int)" - assert len(a) == 5 - assert a[0] == f - assert a[1] == ffi.NULL -- py.test.raises(TypeError, ffi.cast, "int(*)(int)[5]", 0) -+ pytest.raises(TypeError, ffi.cast, "int(*)(int)[5]", 0) - # - def cb(n): - return n + 1 -@@ -1322,7 +1321,7 @@ class TestNewFFI1: - assert g(f) == b'B' - - def test_vararg_callback(self): -- py.test.skip("callback with '...'") -+ pytest.skip("callback with '...'") - def cb(i, va_list): - j = ffi.va_arg(va_list, "int") - k = ffi.va_arg(va_list, "long long") -@@ -1349,7 +1348,7 @@ class TestNewFFI1: - - def test_new_ctype(self): - p = ffi.new("int *") -- py.test.raises(TypeError, ffi.new, p) -+ pytest.raises(TypeError, ffi.new, p) - p = ffi.new(ffi.typeof("int *"), 42) - assert p[0] == 42 - -@@ -1540,17 +1539,17 @@ class TestNewFFI1: - assert int(ffi.cast("_Bool", b'\x80')) == 1 - assert ffi.new("_Bool *", False)[0] == 0 - assert ffi.new("_Bool *", 1)[0] == 1 -- py.test.raises(OverflowError, ffi.new, "_Bool *", 2) -- py.test.raises(TypeError, ffi.string, ffi.cast("_Bool", 2)) -+ pytest.raises(OverflowError, ffi.new, "_Bool *", 2) -+ pytest.raises(TypeError, ffi.string, ffi.cast("_Bool", 2)) - - def test_addressof(self): - p = ffi.new("struct ab *") - a = ffi.addressof(p[0]) - assert repr(a).startswith("= 4.0 -- py.test.skip("not available on pypy", allow_module_level=True) -+ pytest.skip("not available on pypy", allow_module_level=True) - except TypeError: - # older pytest -- py.test.skip("not available on pypy") -+ pytest.skip("not available on pypy") - - cffi_dir = os.path.dirname(cffi_opcode.__file__) - -@@ -130,7 +131,7 @@ def parsex(input): - return ' '.join(map(str_if_int, result)) - - def parse_error(input, expected_msg, expected_location): -- e = py.test.raises(ParseError, parse, input) -+ e = pytest.raises(ParseError, parse, input) - assert e.value.args[0] == expected_msg - assert e.value.args[1] == expected_location - -diff --git a/testing/cffi1/test_pkgconfig.py b/testing/cffi1/test_pkgconfig.py -index c725ccac..40e00595 100644 ---- a/testing/cffi1/test_pkgconfig.py -+++ b/testing/cffi1/test_pkgconfig.py -@@ -1,6 +1,6 @@ - import sys - import subprocess --import py -+import pytest - import cffi.pkgconfig as pkgconfig - from cffi import PkgConfigError - -@@ -62,15 +62,15 @@ def test_call(): - pkgconfig.subprocess = mock_subprocess - - mock_subprocess.RESULT = None -- e = py.test.raises(PkgConfigError, pkgconfig.call, "libfoo", "--cflags") -+ e = pytest.raises(PkgConfigError, pkgconfig.call, "libfoo", "--cflags") - assert str(e.value) == "cannot run pkg-config: oops can't run" - - mock_subprocess.RESULT = b"", "Foo error!\n", 1 -- e = py.test.raises(PkgConfigError, pkgconfig.call, "libfoo", "--cflags") -+ e = pytest.raises(PkgConfigError, pkgconfig.call, "libfoo", "--cflags") - assert str(e.value) == "Foo error!" - - mock_subprocess.RESULT = b"abc\\def\n", "", 0 -- e = py.test.raises(PkgConfigError, pkgconfig.call, "libfoo", "--cflags") -+ e = pytest.raises(PkgConfigError, pkgconfig.call, "libfoo", "--cflags") - assert str(e.value).startswith("pkg-config --cflags libfoo returned an " - "unsupported backslash-escaped output:") - -@@ -84,7 +84,7 @@ def test_call(): - - if sys.version_info >= (3,): - mock_subprocess.RESULT = b"\xff\n", "", 0 -- e = py.test.raises(PkgConfigError, pkgconfig.call, -+ e = pytest.raises(PkgConfigError, pkgconfig.call, - "libfoo", "--cflags", encoding="utf-8") - assert str(e.value) == ( - "pkg-config --cflags libfoo returned bytes that cannot be " -diff --git a/testing/cffi1/test_re_python.py b/testing/cffi1/test_re_python.py -index 45dd70c2..fdf083ac 100644 ---- a/testing/cffi1/test_re_python.py -+++ b/testing/cffi1/test_re_python.py -@@ -1,5 +1,5 @@ - import sys, os --import py -+import pytest - from cffi import FFI - from cffi import recompiler, ffiplatform, VerificationMissing - from testing.udir import udir -@@ -117,7 +117,7 @@ def test_dlopen_none(): - import ctypes.util - name = ctypes.util.find_msvcrt() - if name is None: -- py.test.skip("dlopen(None) cannot work on Windows with Python 3") -+ pytest.skip("dlopen(None) cannot work on Windows with Python 3") - lib = ffi.dlopen(name) - assert lib.strlen(b"hello") == 5 - -@@ -130,7 +130,7 @@ def test_dlclose(): - str_extmod = extmod.encode('utf-8') - else: - str_extmod = extmod -- e = py.test.raises(ffi.error, getattr, lib, 'add42') -+ e = pytest.raises(ffi.error, getattr, lib, 'add42') - assert str(e.value) == ( - "library '%s' has been closed" % (str_extmod,)) - ffi.dlclose(lib) # does not raise -@@ -144,7 +144,7 @@ def test_constant_via_lib(): - def test_opaque_struct(): - from re_python_pysrc import ffi - ffi.cast("struct foo_s *", 0) -- py.test.raises(TypeError, ffi.new, "struct foo_s *") -+ pytest.raises(TypeError, ffi.new, "struct foo_s *") - - def test_nonopaque_struct(): - from re_python_pysrc import ffi -@@ -199,13 +199,13 @@ def test_global_const_int(): - from re_python_pysrc import ffi - lib = ffi.dlopen(extmod) - assert lib.globalconst42 == 4321 -- py.test.raises(AttributeError, ffi.addressof, lib, 'globalconst42') -+ pytest.raises(AttributeError, ffi.addressof, lib, 'globalconst42') - - def test_global_const_nonint(): - from re_python_pysrc import ffi - lib = ffi.dlopen(extmod) - assert ffi.string(lib.globalconsthello, 8) == b"hello" -- py.test.raises(AttributeError, ffi.addressof, lib, 'globalconsthello') -+ pytest.raises(AttributeError, ffi.addressof, lib, 'globalconsthello') - - def test_rtld_constants(): - from re_python_pysrc import ffi -@@ -216,16 +216,16 @@ def test_rtld_constants(): - def test_no_such_function_or_global_var(): - from re_python_pysrc import ffi - lib = ffi.dlopen(extmod) -- e = py.test.raises(ffi.error, getattr, lib, 'no_such_function') -+ e = pytest.raises(ffi.error, getattr, lib, 'no_such_function') - assert str(e.value).startswith( - "symbol 'no_such_function' not found in library '") -- e = py.test.raises(ffi.error, getattr, lib, 'no_such_globalvar') -+ e = pytest.raises(ffi.error, getattr, lib, 'no_such_globalvar') - assert str(e.value).startswith( - "symbol 'no_such_globalvar' not found in library '") - - def test_check_version(): - import _cffi_backend -- e = py.test.raises(ImportError, _cffi_backend.FFI, -+ e = pytest.raises(ImportError, _cffi_backend.FFI, - "foobar", _version=0x2594) - assert str(e.value).startswith( - "cffi out-of-line Python module 'foobar' has unknown version") -@@ -234,7 +234,7 @@ def test_partial_enum(): - ffi = FFI() - ffi.cdef("enum foo { A, B, ... };") - ffi.set_source('test_partial_enum', None) -- py.test.raises(VerificationMissing, ffi.emit_python_code, -+ pytest.raises(VerificationMissing, ffi.emit_python_code, - str(tmpdir.join('test_partial_enum.py'))) - - def test_anonymous_union_inside_struct(): -@@ -270,7 +270,7 @@ def test_dlopen_handle(): - import _cffi_backend - from re_python_pysrc import ffi - if sys.platform == 'win32' or is_musl: -- py.test.skip("uses 'dl' explicitly") -+ pytest.skip("uses 'dl' explicitly") - ffi1 = FFI() - ffi1.cdef("""void *dlopen(const char *filename, int flags); - int dlclose(void *handle);""") -diff --git a/testing/cffi1/test_realize_c_type.py b/testing/cffi1/test_realize_c_type.py -index a1f31e66..824beaf3 100644 ---- a/testing/cffi1/test_realize_c_type.py -+++ b/testing/cffi1/test_realize_c_type.py -@@ -1,4 +1,5 @@ --import py, sys -+import sys -+import pytest - from cffi import cffi_opcode - - -@@ -10,7 +11,7 @@ def check(input, expected_output=None, expected_ffi_error=False): - assert isinstance(ct, ffi.CType) - assert ct.cname == (expected_output or input) - else: -- e = py.test.raises(ffi.error, ffi.typeof, input) -+ e = pytest.raises(ffi.error, ffi.typeof, input) - if isinstance(expected_ffi_error, str): - assert str(e.value) == expected_ffi_error - -diff --git a/testing/cffi1/test_recompiler.py b/testing/cffi1/test_recompiler.py -index fdb4d5ab..362a3722 100644 ---- a/testing/cffi1/test_recompiler.py -+++ b/testing/cffi1/test_recompiler.py -@@ -1,5 +1,5 @@ - --import sys, os, py -+import sys, os - import pytest - from cffi import FFI, VerificationError, FFIError, CDefError - from cffi import recompiler -@@ -45,8 +45,8 @@ def verify(ffi, module_name, source, *args, **kwds): - - def test_set_source_no_slashes(): - ffi = FFI() -- py.test.raises(ValueError, ffi.set_source, "abc/def", None) -- py.test.raises(ValueError, ffi.set_source, "abc/def", "C code") -+ pytest.raises(ValueError, ffi.set_source, "abc/def", None) -+ pytest.raises(ValueError, ffi.set_source, "abc/def", "C code") - - - def test_type_table_func(): -@@ -250,7 +250,7 @@ def test_macro_check_value(): - x = getattr(lib, attrname) - assert x == c_got - else: -- e = py.test.raises(ffi.error, getattr, lib, attrname) -+ e = pytest.raises(ffi.error, getattr, lib, attrname) - assert str(e.value) == ( - "the C compiler says '%s' is equal to " - "%s, but the cdef disagrees" % (attrname, c_compiler_msg)) -@@ -268,7 +268,7 @@ def test_check_value_of_static_const(): - ffi.cdef("static const int FOOBAR = 042;") - lib = verify(ffi, 'test_check_value_of_static_const', - "#define FOOBAR (-6912)") -- e = py.test.raises(ffi.error, getattr, lib, 'FOOBAR') -+ e = pytest.raises(ffi.error, getattr, lib, 'FOOBAR') - assert str(e.value) == ( - "the C compiler says 'FOOBAR' is equal to -6912, but the cdef disagrees") - -@@ -341,7 +341,7 @@ def test_verify_struct(): - assert ffi.offsetof("struct foo_s", "b") == 4 - assert ffi.offsetof(u+"struct foo_s", u+"b") == 4 - # -- py.test.raises(TypeError, ffi.addressof, p) -+ pytest.raises(TypeError, ffi.addressof, p) - assert ffi.addressof(p[0]) == p - assert ffi.typeof(ffi.addressof(p[0])) is ffi.typeof("struct foo_s *") - assert ffi.typeof(ffi.addressof(p, "b")) is ffi.typeof("int *") -@@ -352,7 +352,7 @@ def test_verify_exact_field_offset(): - ffi.cdef("""struct foo_s { int b; short a; };""") - lib = verify(ffi, 'test_verify_exact_field_offset', - """struct foo_s { short a; int b; };""") -- e = py.test.raises(ffi.error, ffi.new, "struct foo_s *", []) # lazily -+ e = pytest.raises(ffi.error, ffi.new, "struct foo_s *", []) # lazily - assert str(e.value).startswith( - "struct foo_s: wrong offset for field 'b' (cdef " - 'says 0, but C compiler says 4). fix it or use "...;" ') -@@ -393,7 +393,7 @@ def test_verify_enum(): - def test_duplicate_enum(): - ffi = FFI() - ffi.cdef("enum e1 { A1, ... }; enum e2 { A1, ... };") -- py.test.raises(VerificationError, verify, ffi, 'test_duplicate_enum', -+ pytest.raises(VerificationError, verify, ffi, 'test_duplicate_enum', - "enum e1 { A1 }; enum e2 { B1 };") - - def test_dotdotdot_length_of_array_field(): -@@ -463,7 +463,7 @@ def test_math_sin_type(): - assert ffi.typeof(lib.sin).cname == "double(*)(double)" - # 'x' is another object on lib, made very indirectly - x = type(lib).__dir__.__get__(lib) -- py.test.raises(TypeError, ffi.typeof, x) -+ pytest.raises(TypeError, ffi.typeof, x) - # - # present on built-in functions on CPython; must be emulated on PyPy: - assert lib.sin.__name__ == 'sin' -@@ -567,13 +567,13 @@ def test_module_name_in_package(): - def test_bad_size_of_global_1(): - ffi = FFI() - ffi.cdef("extern short glob;") -- py.test.raises(VerificationError, verify, ffi, -+ pytest.raises(VerificationError, verify, ffi, - "test_bad_size_of_global_1", "long glob;") - - def test_bad_size_of_global_2(): - ffi = FFI() - ffi.cdef("extern int glob[10];") -- py.test.raises(VerificationError, verify, ffi, -+ pytest.raises(VerificationError, verify, ffi, - "test_bad_size_of_global_2", "int glob[9];") - - def test_unspecified_size_of_global_1(): -@@ -737,7 +737,7 @@ def test_include_8(): - ffi.include(ffi1) - ffi.cdef("struct foo_s { int x, y; };") - verify(ffi, "test_include_8", "struct foo_s { int x, y; };") -- e = py.test.raises(NotImplementedError, ffi.new, "struct foo_s *") -+ e = pytest.raises(NotImplementedError, ffi.new, "struct foo_s *") - assert str(e.value) == ( - "'struct foo_s' is opaque in the ffi.include(), but no longer in " - "the ffi doing the include (workaround: don't use ffi.include() but" -@@ -747,7 +747,7 @@ def test_unicode_libraries(): - try: - unicode - except NameError: -- py.test.skip("for python 2.x") -+ pytest.skip("for python 2.x") - # - import math - lib_m = "m" -@@ -848,8 +848,8 @@ def test_address_of_global_var(): - assert ffi.typeof(p) == ffi.typeof("long(*)[2]") - assert p[0] == lib.bottoms - # -- py.test.raises(AttributeError, ffi.addressof, lib, 'unknown_var') -- py.test.raises(AttributeError, ffi.addressof, lib, "FOOBAR") -+ pytest.raises(AttributeError, ffi.addressof, lib, 'unknown_var') -+ pytest.raises(AttributeError, ffi.addressof, lib, "FOOBAR") - - def test_defines__CFFI_(): - # Check that we define the macro _CFFI_ automatically. -@@ -880,13 +880,13 @@ def test_unpack_args(): - lib.foo0() - lib.foo1(42) - lib.foo2(43, 44) -- e1 = py.test.raises(TypeError, lib.foo0, 42) -- e2 = py.test.raises(TypeError, lib.foo0, 43, 44) -- e3 = py.test.raises(TypeError, lib.foo1) -- e4 = py.test.raises(TypeError, lib.foo1, 43, 44) -- e5 = py.test.raises(TypeError, lib.foo2) -- e6 = py.test.raises(TypeError, lib.foo2, 42) -- e7 = py.test.raises(TypeError, lib.foo2, 45, 46, 47) -+ e1 = pytest.raises(TypeError, lib.foo0, 42) -+ e2 = pytest.raises(TypeError, lib.foo0, 43, 44) -+ e3 = pytest.raises(TypeError, lib.foo1) -+ e4 = pytest.raises(TypeError, lib.foo1, 43, 44) -+ e5 = pytest.raises(TypeError, lib.foo2) -+ e6 = pytest.raises(TypeError, lib.foo2, 42) -+ e7 = pytest.raises(TypeError, lib.foo2, 45, 46, 47) - def st1(s): - s = str(s) - if s.startswith("_CFFI_test_unpack_args.Lib."): -@@ -971,7 +971,7 @@ def test_constant_of_unknown_size(): - lib = verify(ffi, 'test_constant_of_unknown_size', - "typedef int opaque_t;" - "const int CONSTANT = 42;") -- e = py.test.raises(ffi.error, getattr, lib, 'CONSTANT') -+ e = pytest.raises(ffi.error, getattr, lib, 'CONSTANT') - assert str(e.value) == ("constant 'CONSTANT' is of " - "type 'opaque_t', whose size is not known") - -@@ -986,10 +986,10 @@ def test_variable_of_unknown_size(): - opaque_t globvar = "hello"; - """) - # can't read or write it at all -- e = py.test.raises(TypeError, getattr, lib, 'globvar') -+ e = pytest.raises(TypeError, getattr, lib, 'globvar') - assert str(e.value) in ["cdata 'opaque_t' is opaque", - "'opaque_t' is opaque or not completed yet"] #pypy -- e = py.test.raises(TypeError, setattr, lib, 'globvar', []) -+ e = pytest.raises(TypeError, setattr, lib, 'globvar', []) - assert str(e.value) in ["'opaque_t' is opaque", - "'opaque_t' is opaque or not completed yet"] #pypy - # but we can get its address -@@ -1132,9 +1132,9 @@ def test_some_integer_type(): - assert lib.foobar(2 ** 15 - 1, [0, 0]) == 2 ** 15 - 1 - assert lib.foobar(10, [20, 31]) == 61 - assert lib.foobar(0, [0, maxulonglong]) == maxulonglong -- py.test.raises(OverflowError, lib.foobar, 2 ** 15, [0, 0]) -- py.test.raises(OverflowError, lib.foobar, -(2 ** 15) - 1, [0, 0]) -- py.test.raises(OverflowError, ffi.new, "mystruct_t *", [0, -1]) -+ pytest.raises(OverflowError, lib.foobar, 2 ** 15, [0, 0]) -+ pytest.raises(OverflowError, lib.foobar, -(2 ** 15) - 1, [0, 0]) -+ pytest.raises(OverflowError, ffi.new, "mystruct_t *", [0, -1]) - assert lib.mu == -20 - assert lib.nu == 20 - -@@ -1160,7 +1160,7 @@ def test_some_float_type(): - - def test_some_float_invalid_1(): - ffi = FFI() -- py.test.raises((FFIError, # with pycparser <= 2.17 -+ pytest.raises((FFIError, # with pycparser <= 2.17 - CDefError), # with pycparser >= 2.18 - ffi.cdef, "typedef long double... foo_t;") - -@@ -1171,7 +1171,7 @@ def test_some_float_invalid_2(): - typedef unsigned long foo_t; - foo_t neg(foo_t x) { return -x; } - """) -- e = py.test.raises(ffi.error, getattr, lib, 'neg') -+ e = pytest.raises(ffi.error, getattr, lib, 'neg') - assert str(e.value) == ("primitive floating-point type with an unexpected " - "size (or not a float type at all)") - -@@ -1185,7 +1185,7 @@ def test_some_float_invalid_3(): - if ffi.sizeof("long double") == ffi.sizeof("double"): - assert lib.neg(12.3) == -12.3 - else: -- e = py.test.raises(ffi.error, getattr, lib, 'neg') -+ e = pytest.raises(ffi.error, getattr, lib, 'neg') - assert str(e.value) == ("primitive floating-point type is " - "'long double', not supported for now with " - "the syntax 'typedef double... xxx;'") -@@ -1267,15 +1267,15 @@ def test_macro_var_callback(): - def get_my_value(): - raise LookupError - lib.get_my_value = get_my_value -- py.test.raises(ffi.error, getattr, lib, 'my_value') -- py.test.raises(ffi.error, setattr, lib, 'my_value', 50) -- py.test.raises(ffi.error, ffi.addressof, lib, 'my_value') -+ pytest.raises(ffi.error, getattr, lib, 'my_value') -+ pytest.raises(ffi.error, setattr, lib, 'my_value', 50) -+ pytest.raises(ffi.error, ffi.addressof, lib, 'my_value') - @ffi.callback("int *(*)(void)") - def get_my_value(): - return "hello" - lib.get_my_value = get_my_value -- py.test.raises(ffi.error, getattr, lib, 'my_value') -- e = py.test.raises(ffi.error, setattr, lib, 'my_value', 50) -+ pytest.raises(ffi.error, getattr, lib, 'my_value') -+ e = pytest.raises(ffi.error, setattr, lib, 'my_value', 50) - assert str(e.value) == "global variable 'my_value' is at address NULL" - - def test_const_fields(): -@@ -1417,8 +1417,8 @@ def test_win32_calling_convention_0(): - if sys.platform == 'win32' and not sys.maxsize > 2**32: - assert '__stdcall' in str(ffi.typeof(cb2)) - assert '__stdcall' not in str(ffi.typeof(cb1)) -- py.test.raises(TypeError, lib.call1, cb2) -- py.test.raises(TypeError, lib.call2, cb1) -+ pytest.raises(TypeError, lib.call1, cb2) -+ pytest.raises(TypeError, lib.call2, cb1) - else: - assert '__stdcall' not in str(ffi.typeof(cb2)) - assert ffi.typeof(cb2) is ffi.typeof(cb1) -@@ -1503,10 +1503,10 @@ def test_win32_calling_convention_2(): - ptr_call1 = ffi.addressof(lib, 'call1') - ptr_call2 = ffi.addressof(lib, 'call2') - if sys.platform == 'win32' and not sys.maxsize > 2**32: -- py.test.raises(TypeError, lib.call1, ffi.addressof(lib, 'cb2')) -- py.test.raises(TypeError, ptr_call1, ffi.addressof(lib, 'cb2')) -- py.test.raises(TypeError, lib.call2, ffi.addressof(lib, 'cb1')) -- py.test.raises(TypeError, ptr_call2, ffi.addressof(lib, 'cb1')) -+ pytest.raises(TypeError, lib.call1, ffi.addressof(lib, 'cb2')) -+ pytest.raises(TypeError, ptr_call1, ffi.addressof(lib, 'cb2')) -+ pytest.raises(TypeError, lib.call2, ffi.addressof(lib, 'cb1')) -+ pytest.raises(TypeError, ptr_call2, ffi.addressof(lib, 'cb1')) - assert lib.call1(ffi.addressof(lib, 'cb1')) == 500*999*2 - assert ptr_call1(ffi.addressof(lib, 'cb1')) == 500*999*2 - assert lib.call2(ffi.addressof(lib, 'cb2')) == -500*999*3 -@@ -1559,10 +1559,10 @@ def test_win32_calling_convention_3(): - ptr_call1 = ffi.addressof(lib, 'call1') - ptr_call2 = ffi.addressof(lib, 'call2') - if sys.platform == 'win32' and not sys.maxsize > 2**32: -- py.test.raises(TypeError, lib.call1, ffi.addressof(lib, 'cb2')) -- py.test.raises(TypeError, ptr_call1, ffi.addressof(lib, 'cb2')) -- py.test.raises(TypeError, lib.call2, ffi.addressof(lib, 'cb1')) -- py.test.raises(TypeError, ptr_call2, ffi.addressof(lib, 'cb1')) -+ pytest.raises(TypeError, lib.call1, ffi.addressof(lib, 'cb2')) -+ pytest.raises(TypeError, ptr_call1, ffi.addressof(lib, 'cb2')) -+ pytest.raises(TypeError, lib.call2, ffi.addressof(lib, 'cb1')) -+ pytest.raises(TypeError, ptr_call2, ffi.addressof(lib, 'cb1')) - pt = lib.call1(ffi.addressof(lib, 'cb1')) - assert (pt.x, pt.y) == (-9*500*999, 9*500*999) - pt = ptr_call1(ffi.addressof(lib, 'cb1')) -@@ -1640,23 +1640,23 @@ def test_extern_python_bogus_name(): - lib = verify(ffi, 'test_extern_python_bogus_name', "int abc;") - def fn(): - pass -- py.test.raises(ffi.error, ffi.def_extern("unknown_name"), fn) -- py.test.raises(ffi.error, ffi.def_extern("abc"), fn) -+ pytest.raises(ffi.error, ffi.def_extern("unknown_name"), fn) -+ pytest.raises(ffi.error, ffi.def_extern("abc"), fn) - assert lib.abc == 0 -- e = py.test.raises(ffi.error, ffi.def_extern("abc"), fn) -+ e = pytest.raises(ffi.error, ffi.def_extern("abc"), fn) - assert str(e.value) == ("ffi.def_extern('abc'): no 'extern \"Python\"' " - "function with this name") -- e = py.test.raises(ffi.error, ffi.def_extern(), fn) -+ e = pytest.raises(ffi.error, ffi.def_extern(), fn) - assert str(e.value) == ("ffi.def_extern('fn'): no 'extern \"Python\"' " - "function with this name") - # -- py.test.raises(TypeError, ffi.def_extern(42), fn) -- py.test.raises((TypeError, AttributeError), ffi.def_extern(), "foo") -+ pytest.raises(TypeError, ffi.def_extern(42), fn) -+ pytest.raises((TypeError, AttributeError), ffi.def_extern(), "foo") - class X: - pass - x = X() - x.__name__ = x -- py.test.raises(TypeError, ffi.def_extern(), x) -+ pytest.raises(TypeError, ffi.def_extern(), x) - - def test_extern_python_bogus_result_type(): - ffi = FFI() -@@ -1755,8 +1755,8 @@ def test_extern_python_long_double(): - def test_extern_python_signature(): - ffi = FFI() - lib = verify(ffi, 'test_extern_python_signature', "") -- py.test.raises(TypeError, ffi.def_extern(425), None) -- py.test.raises(TypeError, ffi.def_extern, 'a', 'b', 'c', 'd') -+ pytest.raises(TypeError, ffi.def_extern(425), None) -+ pytest.raises(TypeError, ffi.def_extern, 'a', 'b', 'c', 'd') - - def test_extern_python_errors(): - ffi = FFI() -@@ -1790,7 +1790,7 @@ def test_extern_python_errors(): - assert tb.tb_frame.f_code.co_name == "bar2" - # - # a case where 'onerror' is not callable -- py.test.raises(TypeError, ffi.def_extern(name='bar', onerror=42), -+ pytest.raises(TypeError, ffi.def_extern(name='bar', onerror=42), - lambda x: x) - - def test_extern_python_stdcall(): -@@ -1996,31 +1996,31 @@ def test_bool_in_cpp_2(): - def test_struct_field_opaque(): - ffi = FFI() - ffi.cdef("struct a { struct b b; };") -- e = py.test.raises(TypeError, verify, -+ e = pytest.raises(TypeError, verify, - ffi, "test_struct_field_opaque", "?") - assert str(e.value) == ("struct a: field 'a.b' is of an opaque" - " type (not declared in cdef())") - ffi = FFI() - ffi.cdef("struct a { struct b b[2]; };") -- e = py.test.raises(TypeError, verify, -+ e = pytest.raises(TypeError, verify, - ffi, "test_struct_field_opaque", "?") - assert str(e.value) == ("struct a: field 'a.b' is of an opaque" - " type (not declared in cdef())") - ffi = FFI() - ffi.cdef("struct a { struct b b[]; };") -- e = py.test.raises(TypeError, verify, -+ e = pytest.raises(TypeError, verify, - ffi, "test_struct_field_opaque", "?") - assert str(e.value) == ("struct a: field 'a.b' is of an opaque" - " type (not declared in cdef())") - - def test_function_arg_opaque(): -- py.test.skip("can currently declare a function with an opaque struct " -+ pytest.skip("can currently declare a function with an opaque struct " - "as argument, but AFAICT it's impossible to call it later") - - def test_function_returns_opaque(): - ffi = FFI() - ffi.cdef("struct a foo(int);") -- e = py.test.raises(TypeError, verify, -+ e = pytest.raises(TypeError, verify, - ffi, "test_function_returns_opaque", "?") - assert str(e.value) == ("function foo: 'struct a' is used as result type," - " but is opaque") -@@ -2045,7 +2045,7 @@ def test_function_returns_partial_struct(): - - def test_function_returns_float_complex(): - if sys.platform == 'win32': -- py.test.skip("MSVC may not support _Complex") -+ pytest.skip("MSVC may not support _Complex") - ffi = FFI() - ffi.cdef("float _Complex f1(float a, float b);"); - lib = verify(ffi, "test_function_returns_float_complex", """ -@@ -2059,7 +2059,7 @@ def test_function_returns_float_complex(): - - def test_function_returns_double_complex(): - if sys.platform == 'win32': -- py.test.skip("MSVC may not support _Complex") -+ pytest.skip("MSVC may not support _Complex") - ffi = FFI() - ffi.cdef("double _Complex f1(double a, double b);"); - lib = verify(ffi, "test_function_returns_double_complex", """ -@@ -2073,7 +2073,7 @@ def test_function_returns_double_complex(): - - def test_function_argument_float_complex(): - if sys.platform == 'win32': -- py.test.skip("MSVC may not support _Complex") -+ pytest.skip("MSVC may not support _Complex") - ffi = FFI() - ffi.cdef("float f1(float _Complex x);"); - lib = verify(ffi, "test_function_argument_float_complex", """ -@@ -2086,7 +2086,7 @@ def test_function_argument_float_complex(): - - def test_function_argument_double_complex(): - if sys.platform == 'win32': -- py.test.skip("MSVC may not support _Complex") -+ pytest.skip("MSVC may not support _Complex") - ffi = FFI() - ffi.cdef("double f1(double _Complex);"); - lib = verify(ffi, "test_function_argument_double_complex", """ -@@ -2119,7 +2119,7 @@ def test_typedef_array_dotdotdot(): - assert ffi.sizeof("mat_t") == 6 * 7 * ffi.sizeof("int") - assert len(ffi.new("mat_t")) == 6 - assert len(ffi.new("mat_t")[3]) == 7 -- py.test.raises(ffi.error, ffi.sizeof, "vmat_t") -+ pytest.raises(ffi.error, ffi.sizeof, "vmat_t") - p = ffi.new("vmat_t", 4) - assert ffi.sizeof(p[3]) == 8 * ffi.sizeof("int") - -@@ -2173,7 +2173,7 @@ def test_call_with_custom_field_pos(): - struct foo g(int a, ...) { return f(); } - """) - assert lib.f().x == 200 -- e = py.test.raises(NotImplementedError, lib.g, 0) -+ e = pytest.raises(NotImplementedError, lib.g, 0) - assert str(e.value) == ( - 'ctype \'struct foo\' not supported as return value. It is a ' - 'struct declared with "...;", but the C calling convention may ' -@@ -2185,7 +2185,7 @@ def test_call_with_custom_field_pos(): - - def test_call_with_nested_anonymous_struct(): - if sys.platform == 'win32': -- py.test.skip("needs a GCC extension") -+ pytest.skip("needs a GCC extension") - ffi = FFI() - ffi.cdef(""" - struct foo { int a; union { int b, c; }; }; -@@ -2203,7 +2203,7 @@ def test_call_with_nested_anonymous_struct(): - struct foo g(int a, ...) { return f(); } - """) - assert lib.f().b == 200 -- e = py.test.raises(NotImplementedError, lib.g, 0) -+ e = pytest.raises(NotImplementedError, lib.g, 0) - assert str(e.value) == ( - 'ctype \'struct foo\' not supported as return value. It is a ' - 'struct declared with "...;", but the C calling convention may ' -@@ -2229,7 +2229,7 @@ def test_call_with_bitfield(): - struct foo g(int a, ...) { return f(); } - """) - assert lib.f().x == 11 -- e = py.test.raises(NotImplementedError, lib.g, 0) -+ e = pytest.raises(NotImplementedError, lib.g, 0) - assert str(e.value) == ( - "ctype 'struct foo' not supported as return value. It is a struct " - "with bit fields, which libffi does not support. Such structs are " -@@ -2239,7 +2239,7 @@ def test_call_with_bitfield(): - - def test_call_with_zero_length_field(): - if sys.platform == 'win32': -- py.test.skip("zero-length field not supported by MSVC") -+ pytest.skip("zero-length field not supported by MSVC") - ffi = FFI() - ffi.cdef(""" - struct foo { int a; int x[0]; }; -@@ -2255,7 +2255,7 @@ def test_call_with_zero_length_field(): - struct foo g(int a, ...) { return f(); } - """) - assert lib.f().a == 42 -- e = py.test.raises(NotImplementedError, lib.g, 0) -+ e = pytest.raises(NotImplementedError, lib.g, 0) - assert str(e.value) == ( - "ctype 'struct foo' not supported as return value. It is a " - "struct with a zero-length array, which libffi does not support." -@@ -2279,7 +2279,7 @@ def test_call_with_union(): - union foo g(int a, ...) { return f(); } - """) - assert lib.f().a == 42 -- e = py.test.raises(NotImplementedError, lib.g, 0) -+ e = pytest.raises(NotImplementedError, lib.g, 0) - assert str(e.value) == ( - "ctype 'union foo' not supported as return value by libffi. " - "Unions are only supported as return value if the function is " -@@ -2288,7 +2288,7 @@ def test_call_with_union(): - - def test_call_with_packed_struct(): - if sys.platform == 'win32': -- py.test.skip("needs a GCC extension") -+ pytest.skip("needs a GCC extension") - ffi = FFI() - ffi.cdef(""" - struct foo { char y; int x; }; -@@ -2308,7 +2308,7 @@ def test_call_with_packed_struct(): - """) - assert ord(lib.f().y) == 40 - assert lib.f().x == 200 -- e = py.test.raises(NotImplementedError, lib.g, 0) -+ e = pytest.raises(NotImplementedError, lib.g, 0) - assert str(e.value) == ( - "ctype 'struct foo' not supported as return value. It is a " - "'packed' structure, with a different layout than expected by libffi." -@@ -2319,12 +2319,12 @@ def test_call_with_packed_struct(): - def test_pack_not_supported(): - ffi = FFI() - ffi.cdef("""struct foo { char y; int x; };""", pack=2) -- py.test.raises(NotImplementedError, verify, -+ pytest.raises(NotImplementedError, verify, - ffi, "test_pack_not_supported", "") - - def test_gcc_visibility_hidden(): - if sys.platform == 'win32': -- py.test.skip("test for gcc/clang") -+ pytest.skip("test for gcc/clang") - ffi = FFI() - ffi.cdef(""" - int f(int); -@@ -2342,7 +2342,7 @@ def test_override_default_definition(): - - def test_char16_char32_type(no_cpp=False): - if no_cpp is False and sys.platform == "win32": -- py.test.skip("aaaaaaa why do modern MSVC compilers still define " -+ pytest.skip("aaaaaaa why do modern MSVC compilers still define " - "a very old __cplusplus value") - ffi = FFI() - ffi.cdef(""" -@@ -2361,9 +2361,9 @@ def test_char16_char32_type(no_cpp=False): - assert lib.foo_2bytes(u+'\u1234') == u+'\u125e' - assert lib.foo_4bytes(u+'\u1234') == u+'\u125e' - assert lib.foo_4bytes(u+'\U00012345') == u+'\U0001236f' -- py.test.raises(TypeError, lib.foo_2bytes, u+'\U00012345') -- py.test.raises(TypeError, lib.foo_2bytes, 1234) -- py.test.raises(TypeError, lib.foo_4bytes, 1234) -+ pytest.raises(TypeError, lib.foo_2bytes, u+'\U00012345') -+ pytest.raises(TypeError, lib.foo_2bytes, 1234) -+ pytest.raises(TypeError, lib.foo_4bytes, 1234) - - def test_char16_char32_plain_c(): - test_char16_char32_type(no_cpp=True) -@@ -2384,7 +2384,7 @@ def test_realize_struct_error(): - lib = verify(ffi, "test_realize_struct_error", """ - typedef int foo_t; struct foo_s { void (*x)(foo_t); }; - """) -- py.test.raises(TypeError, ffi.new, "struct foo_s *") -+ pytest.raises(TypeError, ffi.new, "struct foo_s *") - - def test_from_buffer_struct(): - ffi = FFI() -@@ -2482,7 +2482,7 @@ def test_struct_with_func_with_struct_arg(): - int (* CompareKey)(struct BinaryTree tree); - }; - """) -- py.test.raises(RuntimeError, ffi.new, "struct BinaryTree *") -+ pytest.raises(RuntimeError, ffi.new, "struct BinaryTree *") - - def test_passing_large_list(): - ffi = FFI() -diff --git a/testing/cffi1/test_verify1.py b/testing/cffi1/test_verify1.py -index 45df2b35..6245281b 100644 ---- a/testing/cffi1/test_verify1.py -+++ b/testing/cffi1/test_verify1.py -@@ -1,4 +1,4 @@ --import os, sys, math, py -+import os, sys, math - import pytest - from cffi import FFI, FFIError, VerificationError, VerificationMissing, model - from cffi import CDefError -@@ -63,10 +63,10 @@ def test_simple_case(): - - def _Wconversion(cdef, source, **kargs): - if sys.platform in ('win32', 'darwin'): -- py.test.skip("needs GCC") -+ pytest.skip("needs GCC") - ffi = FFI() - ffi.cdef(cdef) -- py.test.raises(VerificationError, ffi.verify, source, **kargs) -+ pytest.raises(VerificationError, ffi.verify, source, **kargs) - extra_compile_args_orig = extra_compile_args[:] - extra_compile_args.remove('-Wconversion') - try: -@@ -186,7 +186,7 @@ def test_longdouble_precision(): - assert abs(more_precise - 0.656769) < 0.001 - assert abs(less_precise - 3.99091) < 0.001 - else: -- py.test.skip("don't know the very exact precision of 'long double'") -+ pytest.skip("don't know the very exact precision of 'long double'") - - - all_primitive_types = model.PrimitiveType.ALL_PRIMITIVE_TYPES -@@ -239,7 +239,7 @@ def test_all_integer_and_float_types(): - if sys.version < '3': - assert foo(long(44)) == 45 - assert foo(ffi.cast(typename, 46)) == 47 -- py.test.raises(TypeError, foo, ffi.NULL) -+ pytest.raises(TypeError, foo, ffi.NULL) - # - # check for overflow cases - if all_primitive_types[typename] == 'f': -@@ -248,7 +248,7 @@ def test_all_integer_and_float_types(): - 2**5, 2**10, 2**20, 2**40, 2**80]: - overflows = int(ffi.cast(typename, value)) != value - if overflows: -- py.test.raises(OverflowError, foo, value) -+ pytest.raises(OverflowError, foo, value) - else: - assert foo(value) == value + 1 - -@@ -268,8 +268,8 @@ def test_var_signed_integer_types(): - assert getattr(lib, varname) == max - setattr(lib, varname, min) - assert getattr(lib, varname) == min -- py.test.raises(OverflowError, setattr, lib, varname, max+1) -- py.test.raises(OverflowError, setattr, lib, varname, min-1) -+ pytest.raises(OverflowError, setattr, lib, varname, max+1) -+ pytest.raises(OverflowError, setattr, lib, varname, min-1) - - def test_var_unsigned_integer_types(): - ffi = FFI() -@@ -289,8 +289,8 @@ def test_var_unsigned_integer_types(): - assert getattr(lib, varname) == max - setattr(lib, varname, 0) - assert getattr(lib, varname) == 0 -- py.test.raises(OverflowError, setattr, lib, varname, max+1) -- py.test.raises(OverflowError, setattr, lib, varname, -1) -+ pytest.raises(OverflowError, setattr, lib, varname, max+1) -+ pytest.raises(OverflowError, setattr, lib, varname, -1) - - def test_fn_signed_integer_types(): - ffi = FFI() -@@ -309,8 +309,8 @@ def test_fn_signed_integer_types(): - fn = getattr(lib, fnname) - assert fn(max) == max - assert fn(min) == min -- py.test.raises(OverflowError, fn, max + 1) -- py.test.raises(OverflowError, fn, min - 1) -+ pytest.raises(OverflowError, fn, max + 1) -+ pytest.raises(OverflowError, fn, min - 1) - - def test_fn_unsigned_integer_types(): - ffi = FFI() -@@ -331,16 +331,16 @@ def test_fn_unsigned_integer_types(): - fn = getattr(lib, fnname) - assert fn(max) == max - assert fn(0) == 0 -- py.test.raises(OverflowError, fn, max + 1) -- py.test.raises(OverflowError, fn, -1) -+ pytest.raises(OverflowError, fn, max + 1) -+ pytest.raises(OverflowError, fn, -1) - - def test_char_type(): - ffi = FFI() - ffi.cdef("char foo(char);") - lib = ffi.verify("char foo(char x) { return ++x; }") - assert lib.foo(b"A") == b"B" -- py.test.raises(TypeError, lib.foo, b"bar") -- py.test.raises(TypeError, lib.foo, "bar") -+ pytest.raises(TypeError, lib.foo, b"bar") -+ pytest.raises(TypeError, lib.foo, "bar") - - def test_wchar_type(): - ffi = FFI() -@@ -387,11 +387,11 @@ def test_bogus_ptr(): - ffi = FFI() - ffi.cdef("int *foo(int *);") - lib = ffi.verify("int *foo(int *a) { return a; }") -- py.test.raises(TypeError, lib.foo, ffi.new("short *", 42)) -+ pytest.raises(TypeError, lib.foo, ffi.new("short *", 42)) - - - def test_verify_typedefs(): -- py.test.skip("ignored so far") -+ pytest.skip("ignored so far") - types = ['signed char', 'unsigned char', 'int', 'long'] - for cdefed in types: - for real in types: -@@ -400,7 +400,7 @@ def test_verify_typedefs(): - if cdefed == real: - ffi.verify("typedef %s foo_t;" % real) - else: -- py.test.raises(VerificationError, ffi.verify, -+ pytest.raises(VerificationError, ffi.verify, - "typedef %s foo_t;" % real) - - def test_nondecl_struct(): -@@ -420,19 +420,19 @@ def test_ffi_full_struct(): - check("struct foo_s { char x; int y; long *z; };") - # - if sys.platform != 'win32': # XXX fixme: only gives warnings -- py.test.raises(VerificationError, check, -+ pytest.raises(VerificationError, check, - "struct foo_s { char x; int y; int *z; };") - # -- py.test.raises(VerificationError, check, -+ pytest.raises(VerificationError, check, - "struct foo_s { int y; long *z; };") # cdef'ed field x is missing - # -- e = py.test.raises(FFI.error, check, -+ e = pytest.raises(FFI.error, check, - "struct foo_s { int y; char x; long *z; };") - assert str(e.value).startswith( - "struct foo_s: wrong offset for field 'x'" - " (cdef says 0, but C compiler says 4)") - # -- e = py.test.raises(FFI.error, check, -+ e = pytest.raises(FFI.error, check, - "struct foo_s { char x; int y; long *z; char extra; };") - assert str(e.value).startswith( - "struct foo_s: wrong total size" -@@ -445,7 +445,7 @@ def test_ffi_full_struct(): - # that replaces what is just padding in our declaration above - check("struct foo_s { char x, extra; int y; long *z; };") - # -- e = py.test.raises(FFI.error, check, -+ e = pytest.raises(FFI.error, check, - "struct foo_s { char x; short pad; short y; long *z; };") - assert str(e.value).startswith( - "struct foo_s: wrong size for field 'y'" -@@ -459,9 +459,9 @@ def test_ffi_nonfull_struct(): - ...; - }; - """) -- py.test.raises(VerificationMissing, ffi.sizeof, 'struct foo_s') -- py.test.raises(VerificationMissing, ffi.offsetof, 'struct foo_s', 'x') -- py.test.raises(VerificationMissing, ffi.new, 'struct foo_s *') -+ pytest.raises(VerificationMissing, ffi.sizeof, 'struct foo_s') -+ pytest.raises(VerificationMissing, ffi.offsetof, 'struct foo_s', 'x') -+ pytest.raises(VerificationMissing, ffi.new, 'struct foo_s *') - ffi.verify(""" - struct foo_s { - int a, b, x, c, d, e; -@@ -515,7 +515,7 @@ def test_struct_signedness_ignored(): - - def test_struct_float_vs_int(): - if sys.platform == 'win32': -- py.test.skip("XXX fixme: only gives warnings") -+ pytest.skip("XXX fixme: only gives warnings") - ffi = FFI() - for typename in all_signed_integer_types(ffi): - for real in all_float_types: -@@ -566,7 +566,7 @@ def test_struct_array_guess_length(): - - def test_struct_array_c99_1(): - if sys.platform == 'win32': -- py.test.skip("requires C99") -+ pytest.skip("requires C99") - ffi = FFI() - ffi.cdef("struct foo_s { int x; int a[]; };") - ffi.verify("struct foo_s { int x; int a[]; };") -@@ -589,7 +589,7 @@ def test_struct_array_c99_1(): - - def test_struct_array_c99_2(): - if sys.platform == 'win32': -- py.test.skip("requires C99") -+ pytest.skip("requires C99") - ffi = FFI() - ffi.cdef("struct foo_s { int x; int a[]; ...; };") - ffi.verify("struct foo_s { int x, y; int a[]; };") -@@ -644,7 +644,7 @@ def test_struct_with_bitfield_enum(): - - def test_unsupported_struct_with_bitfield_ellipsis(): - ffi = FFI() -- py.test.raises(NotImplementedError, ffi.cdef, -+ pytest.raises(NotImplementedError, ffi.cdef, - "struct foo_s { int a:2, b:3; ...; };") - - def test_global_constants(): -@@ -691,7 +691,7 @@ def test_global_constants_non_int(): - def test_nonfull_enum(): - ffi = FFI() - ffi.cdef("enum ee { EE1, EE2, EE3, ... \n \t };") -- py.test.raises(VerificationMissing, ffi.cast, 'enum ee', 'EE2') -+ pytest.raises(VerificationMissing, ffi.cast, 'enum ee', 'EE2') - ffi.verify("enum ee { EE1=10, EE2, EE3=-10, EE4 };") - assert ffi.string(ffi.cast('enum ee', 11)) == "EE2" - assert ffi.string(ffi.cast('enum ee', -10)) == "EE3" -@@ -733,14 +733,14 @@ def test_nonfull_anonymous_enum(): - def test_nonfull_enum_syntax2(): - ffi = FFI() - ffi.cdef("enum ee { EE1, EE2=\t..., EE3 };") -- py.test.raises(VerificationMissing, ffi.cast, 'enum ee', 'EE1') -+ pytest.raises(VerificationMissing, ffi.cast, 'enum ee', 'EE1') - ffi.verify("enum ee { EE1=10, EE2, EE3=-10, EE4 };") - assert ffi.string(ffi.cast('enum ee', 11)) == 'EE2' - assert ffi.string(ffi.cast('enum ee', -10)) == 'EE3' - # - ffi = FFI() - ffi.cdef("enum ee { EE1, EE2=\t... };") -- py.test.raises(VerificationMissing, ffi.cast, 'enum ee', 'EE1') -+ pytest.raises(VerificationMissing, ffi.cast, 'enum ee', 'EE1') - ffi.verify("enum ee { EE1=10, EE2, EE3=-10, EE4 };") - assert ffi.string(ffi.cast('enum ee', 11)) == 'EE2' - # -@@ -822,7 +822,7 @@ def test_access_array_variable(length=5): - # work with array instances whose length we know. using a pointer - # instead of an array gives the correct effects. - assert repr(lib.somenumber).startswith(" 2**32: -- # py.test.skip('Segfaults on mips64el') -+ # pytest.skip('Segfaults on mips64el') - # XXX bad abuse of "struct { ...; }". It only works a bit by chance - # anyway. XXX think about something better :-( - ffi = FFI() -@@ -1252,7 +1252,7 @@ def test_take_and_return_partial_structs(): - def test_cannot_name_struct_type(): - ffi = FFI() - ffi.cdef("typedef struct { int x; } **sp; void foo(sp);") -- e = py.test.raises(VerificationError, ffi.verify, -+ e = pytest.raises(VerificationError, ffi.verify, - "typedef struct { int x; } **sp; void foo(sp x) { }") - assert 'in argument of foo: unknown type name' in str(e.value) - -@@ -1264,7 +1264,7 @@ def test_dont_check_unnamable_fields(): - - def test_nested_anonymous_struct_exact(): - if sys.platform == 'win32': -- py.test.skip("nested anonymous struct/union") -+ pytest.skip("nested anonymous struct/union") - ffi = FFI() - ffi.cdef(""" - struct foo_s { struct { int a; char b; }; union { char c, d; }; }; -@@ -1286,16 +1286,16 @@ def test_nested_anonymous_struct_exact(): - - def test_nested_anonymous_struct_exact_error(): - if sys.platform == 'win32': -- py.test.skip("nested anonymous struct/union") -+ pytest.skip("nested anonymous struct/union") - ffi = FFI() - ffi.cdef(""" - struct foo_s { struct { int a; char b; }; union { char c, d; }; }; - """) -- py.test.raises(VerificationError, ffi.verify, """ -+ pytest.raises(VerificationError, ffi.verify, """ - struct foo_s { struct { int a; short b; }; union { char c, d; }; }; - """) - # works fine now -- #py.test.raises(VerificationError, ffi.verify, """ -+ #pytest.raises(VerificationError, ffi.verify, """ - # struct foo_s { struct { int a; char e, b; }; union { char c, d; }; }; - #""") - -@@ -1356,7 +1356,7 @@ def test_ffi_union_with_partial_struct_2(): - - def test_ffi_struct_packed(): - if sys.platform == 'win32': -- py.test.skip("needs a GCC extension") -+ pytest.skip("needs a GCC extension") - ffi = FFI() - ffi.cdef("struct foo_s { int b; ...; };") - ffi.verify(""" -@@ -1377,7 +1377,7 @@ def test_tmpdir(): - assert lib.foo(100) == 142 - - def test_relative_to(): -- py.test.skip("not available") -+ pytest.skip("not available") - import tempfile, os - from testing.udir import udir - tmpdir = tempfile.mkdtemp(dir=str(udir)) -@@ -1408,7 +1408,7 @@ def test_bug1(): - - def test_bool(): - if sys.platform == 'win32': -- py.test.skip("_Bool not in MSVC") -+ pytest.skip("_Bool not in MSVC") - ffi = FFI() - ffi.cdef("struct foo_s { _Bool x; };" - "_Bool foo(_Bool); static _Bool (*foop)(_Bool);") -@@ -1432,13 +1432,13 @@ def test_bool(): - assert lib.foop(1) is False - assert lib.foop(True) is False - assert lib.foop(0) is True -- py.test.raises(OverflowError, lib.foop, 42) -- py.test.raises(TypeError, lib.foop, 0.0) -+ pytest.raises(OverflowError, lib.foop, 42) -+ pytest.raises(TypeError, lib.foop, 0.0) - assert lib.foo(1) is False - assert lib.foo(True) is False - assert lib.foo(0) is True -- py.test.raises(OverflowError, lib.foo, 42) -- py.test.raises(TypeError, lib.foo, 0.0) -+ pytest.raises(OverflowError, lib.foo, 42) -+ pytest.raises(TypeError, lib.foo, 0.0) - assert int(ffi.cast("_Bool", long(1))) == 1 - assert int(ffi.cast("_Bool", long(0))) == 0 - assert int(ffi.cast("_Bool", long(-1))) == 1 -@@ -1459,14 +1459,14 @@ def test_bool(): - assert int(ffi.cast("_Bool", f)) == 0 - assert f.seen - # -- py.test.raises(TypeError, ffi.cast, "_Bool", []) -+ pytest.raises(TypeError, ffi.cast, "_Bool", []) - - def test_bool_on_long_double(): - if sys.platform == 'win32': -- py.test.skip("_Bool not in MSVC") -+ pytest.skip("_Bool not in MSVC") - f = 1E-250 - if f == 0.0 or f*f != 0.0: -- py.test.skip("unexpected precision") -+ pytest.skip("unexpected precision") - ffi = FFI() - ffi.cdef("long double square(long double f); _Bool opposite(_Bool);") - lib = ffi.verify("long double square(long double f) { return f*f; }\n" -@@ -1475,12 +1475,12 @@ def test_bool_on_long_double(): - f2 = lib.square(f) - f3 = lib.square(f * 2.0) - if repr(f2) == repr(f3): -- py.test.skip("long double doesn't have enough precision") -+ pytest.skip("long double doesn't have enough precision") - assert float(f0) == float(f2) == float(f3) == 0.0 # too tiny for 'double' - assert int(ffi.cast("_Bool", f2)) == 1 - assert int(ffi.cast("_Bool", f3)) == 1 - assert int(ffi.cast("_Bool", f0)) == 0 -- py.test.raises(TypeError, lib.opposite, f2) -+ pytest.raises(TypeError, lib.opposite, f2) - - def test_cannot_pass_float(): - for basetype in ['char', 'short', 'int', 'long', 'long long']: -@@ -1500,7 +1500,7 @@ def test_cannot_pass_float(): - p.x = 0.0 - assert lib.foo(42) == 0 - assert lib.foo(0) == 1 -- py.test.raises(TypeError, lib.foo, 0.0) -+ pytest.raises(TypeError, lib.foo, 0.0) - - def test_addressof(): - ffi = FFI() -@@ -1522,19 +1522,19 @@ def test_addressof(): - p = ffi.new("struct foo_s *") - p.point.x = 16 - p.point.y = 9 -- py.test.raises(TypeError, lib.sum_coord, p.point) -+ pytest.raises(TypeError, lib.sum_coord, p.point) - res = lib.sum_coord(ffi.addressof(p.point)) - assert res.x == 25 - assert res.y == 7 - res2 = lib.sum_coord(ffi.addressof(res)) - assert res2.x == 32 - assert res2.y == 18 -- py.test.raises(TypeError, lib.sum_coord, res2) -+ pytest.raises(TypeError, lib.sum_coord, res2) - - def test_callback_in_thread(): -- py.test.xfail("adapt or remove") -+ pytest.xfail("adapt or remove") - if sys.platform == 'win32': -- py.test.skip("pthread only") -+ pytest.skip("pthread only") - import os, subprocess, imp - arg = os.path.join(os.path.dirname(__file__), 'callback_in_thread.py') - g = subprocess.Popen([sys.executable, arg, -@@ -1543,7 +1543,7 @@ def test_callback_in_thread(): - assert result == 0 - - def test_keepalive_lib(): -- py.test.xfail("adapt or remove") -+ pytest.xfail("adapt or remove") - ffi = FFI() - ffi.cdef("int foobar(void);") - lib = ffi.verify("int foobar(void) { return 42; }") -@@ -1557,7 +1557,7 @@ def test_keepalive_lib(): - assert func() == 42 - - def test_keepalive_ffi(): -- py.test.xfail("adapt or remove") -+ pytest.xfail("adapt or remove") - ffi = FFI() - ffi.cdef("int foobar(void);") - lib = ffi.verify("int foobar(void) { return 42; }") -@@ -1572,7 +1572,7 @@ def test_keepalive_ffi(): - - def test_FILE_stored_in_stdout(): - if not sys.platform.startswith('linux') or is_musl: -- py.test.skip("likely, we cannot assign to stdout") -+ pytest.skip("likely, we cannot assign to stdout") - ffi = FFI() - ffi.cdef("int printf(const char *, ...); FILE *setstdout(FILE *);") - lib = ffi.verify(""" -@@ -1642,11 +1642,11 @@ def test_global_array_with_dotdotdot_length(): - assert repr(lib.fooarray).startswith("= 2.18 - ffi.cdef, """typedef void... foo_t;""") - # - ffi.cdef("typedef int... foo_t;") -- py.test.raises(VerificationError, ffi.verify, "typedef float foo_t;") -+ pytest.raises(VerificationError, ffi.verify, "typedef float foo_t;") - - def test_windows_dllimport_data(): - if sys.platform != 'win32': -- py.test.skip("Windows only") -+ pytest.skip("Windows only") - from testing.udir import udir - tmpfile = udir.join('dllimport_data.c') - tmpfile.write('int my_value = 42;\n') -@@ -2278,7 +2278,7 @@ def test_share_FILE(): - - def test_win_common_types(): - if sys.platform != 'win32': -- py.test.skip("Windows only") -+ pytest.skip("Windows only") - ffi = FFI() - ffi.set_unicode(True) - ffi.verify("") -@@ -2292,11 +2292,11 @@ def test_win_common_types(): - - def _only_test_on_linux_intel(): - if not sys.platform.startswith('linux'): -- py.test.skip('only running the memory-intensive test on Linux') -+ pytest.skip('only running the memory-intensive test on Linux') - import platform - machine = platform.machine() - if 'x86' not in machine and 'x64' not in machine: -- py.test.skip('only running the memory-intensive test on x86/x64') -+ pytest.skip('only running the memory-intensive test on x86/x64') - - def test_ffi_gc_size_arg(): - _only_test_on_linux_intel() -@@ -2320,7 +2320,7 @@ def test_ffi_gc_size_arg_2(): - # and I found no obvious way to prevent that. So for now, this test - # is skipped on CPython, where it eats all the memory. - if '__pypy__' not in sys.builtin_module_names: -- py.test.skip("find a way to tweak the cyclic GC of CPython") -+ pytest.skip("find a way to tweak the cyclic GC of CPython") - _only_test_on_linux_intel() - ffi = FFI() - ffi.cdef("void *malloc(size_t); void free(void *);") -@@ -2343,7 +2343,7 @@ def test_ffi_gc_size_arg_2(): - def test_ffi_new_with_cycles(): - # still another variant, with ffi.new() - if '__pypy__' not in sys.builtin_module_names: -- py.test.skip("find a way to tweak the cyclic GC of CPython") -+ pytest.skip("find a way to tweak the cyclic GC of CPython") - ffi = FFI() - ffi.cdef("") - lib = ffi.verify("") -diff --git a/testing/cffi1/test_zdist.py b/testing/cffi1/test_zdist.py -index efc1d869..58d5bc8d 100644 ---- a/testing/cffi1/test_zdist.py -+++ b/testing/cffi1/test_zdist.py -@@ -1,4 +1,5 @@ --import sys, os, py -+import sys, os -+import pytest - import subprocess - import cffi - from testing.udir import udir -@@ -56,7 +57,7 @@ class TestDist(object): - try: - import setuptools - except ImportError: -- py.test.skip("setuptools not found") -+ pytest.skip("setuptools not found") - if os.path.exists(os.path.join(self.rootdir, 'setup.py')): - self.run(['setup.py', 'egg_info'], cwd=self.rootdir) - TestDist._setuptools_ready = True -@@ -115,7 +116,7 @@ class TestDist(object): - def test_abi_emit_python_code_2(self): - ffi = cffi.FFI() - ffi.set_source("package_name_1.mymod", None) -- py.test.raises(IOError, ffi.emit_python_code, 'unexisting/xyz.py') -+ pytest.raises(IOError, ffi.emit_python_code, 'unexisting/xyz.py') - - @from_outside - def test_abi_emit_python_code_3(self): -@@ -162,7 +163,7 @@ class TestDist(object): - def test_api_emit_c_code_2(self): - ffi = cffi.FFI() - ffi.set_source("package_name_1.mymod", "/*code would be here*/") -- py.test.raises(IOError, ffi.emit_c_code, 'unexisting/xyz.c') -+ pytest.raises(IOError, ffi.emit_c_code, 'unexisting/xyz.c') - - @from_outside - def test_api_emit_c_code_3(self): -diff --git a/testing/embedding/test_basic.py b/testing/embedding/test_basic.py -index b29afd2b..6743e1a4 100644 ---- a/testing/embedding/test_basic.py -+++ b/testing/embedding/test_basic.py -@@ -1,6 +1,6 @@ --import py - import sys, os, re - import shutil, subprocess, time -+import pytest - from testing.udir import udir - import cffi - -@@ -22,7 +22,7 @@ def check_lib_python_found(tmpdir): - else: - _link_error = None - if _link_error: -- py.test.skip(str(_link_error)) -+ pytest.skip(str(_link_error)) - - - def prefix_pythonpath(): -diff --git a/testing/support.py b/testing/support.py -index a65375e0..f0677194 100644 ---- a/testing/support.py -+++ b/testing/support.py -@@ -49,8 +49,8 @@ class FdWriteCapture(object): - - def __init__(self, capture_fd=2): # stderr by default - if sys.platform == 'win32': -- import py -- py.test.skip("seems not to work, too bad") -+ import pytest -+ pytest.skip("seems not to work, too bad") - self.capture_fd = capture_fd - - def __enter__(self): --- -GitLab - diff --git a/116.patch b/116.patch deleted file mode 100644 index 81bc09e..0000000 --- a/116.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 9c7d865e17ec16a847090a3e0d1498b698b99756 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= -Date: Mon, 14 Nov 2022 12:30:12 +0100 -Subject: [PATCH 1/2] Drop py.code usage from tests, no longer depend on the - deprecated py package - ---HG-- -branch : py.code ---- - README.md | 2 +- - requirements.txt | 1 - - testing/cffi0/test_zintegration.py | 3 ++- - testing/cffi1/test_dlopen_unicode_literals.py | 4 ++-- - 4 files changed, 5 insertions(+), 5 deletions(-) - -diff --git a/README.md b/README.md -index b4b84884..d39d88da 100644 ---- a/README.md -+++ b/README.md -@@ -30,7 +30,7 @@ Testing/development tips - - To run tests under CPython, run:: - -- pip install pytest py # if you don't have pytest and py already -+ pip install pytest # if you don't have pytest already - pip install pycparser - python setup.py build_ext -f -i - pytest c/ testing/ -diff --git a/requirements.txt b/requirements.txt -index 881a093f..a97f0282 100644 ---- a/requirements.txt -+++ b/requirements.txt -@@ -1,3 +1,2 @@ - pycparser - pytest --py -diff --git a/testing/cffi0/test_zintegration.py b/testing/cffi0/test_zintegration.py -index d6a02ce0..ca2d4642 100644 ---- a/testing/cffi0/test_zintegration.py -+++ b/testing/cffi0/test_zintegration.py -@@ -1,5 +1,6 @@ - import py, os, sys, shutil - import subprocess -+import textwrap - from testing.udir import udir - import pytest - -@@ -66,7 +67,7 @@ def really_run_setup_and_program(dirname, venv_dir_and_paths, python_snippet): - remove(os.path.join(basedir, '__pycache__')) - olddir = os.getcwd() - python_f = udir.join('x.py') -- python_f.write(py.code.Source(python_snippet)) -+ python_f.write(textwrap.dedent(python_snippet)) - try: - os.chdir(str(SNIPPET_DIR.join(dirname))) - if os.name == 'nt': -diff --git a/testing/cffi1/test_dlopen_unicode_literals.py b/testing/cffi1/test_dlopen_unicode_literals.py -index e792866e..dc955a57 100644 ---- a/testing/cffi1/test_dlopen_unicode_literals.py -+++ b/testing/cffi1/test_dlopen_unicode_literals.py -@@ -1,4 +1,4 @@ --import py, os -+import os - - s = """from __future__ import unicode_literals - """ -@@ -6,4 +6,4 @@ s = """from __future__ import unicode_literals - with open(os.path.join(os.path.dirname(__file__), 'test_dlopen.py')) as f: - s += f.read() - --exec(py.code.compile(s)) -+exec(compile(s, filename='test_dlopen.py', mode='exec')) --- -GitLab - - -From 4c1551037965864cfe5494647af014e2390d077c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= -Date: Mon, 14 Nov 2022 13:12:31 +0100 -Subject: [PATCH 2/2] Make the space count consistent with the past - ---HG-- -branch : py.code ---- - README.md | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/README.md b/README.md -index d39d88da..21c82b84 100644 ---- a/README.md -+++ b/README.md -@@ -30,7 +30,7 @@ Testing/development tips - - To run tests under CPython, run:: - -- pip install pytest # if you don't have pytest already -+ pip install pytest # if you don't have pytest already - pip install pycparser - python setup.py build_ext -f -i - pytest c/ testing/ --- -GitLab - diff --git a/482f0af.patch b/482f0af.patch deleted file mode 100644 index e17803f..0000000 --- a/482f0af.patch +++ /dev/null @@ -1,315 +0,0 @@ -From 482f0af7e188755ec50e278ee9862e85aa3bf2fc Mon Sep 17 00:00:00 2001 -From: Armin Rigo -Date: Thu, 8 Jun 2023 16:14:19 +0200 -Subject: [PATCH] Python 3.12 compatibility, step 1 - ---- - cffi/_imp_emulation.py | 83 ++++++++++++++++++++++++++++++++ - cffi/vengine_cpy.py | 3 +- - setup.py | 2 + - testing/cffi0/test_verify.py | 3 +- - testing/cffi0/test_zdistutils.py | 7 +-- - testing/cffi1/test_new_ffi_1.py | 10 ++-- - testing/cffi1/test_verify1.py | 3 +- - testing/cffi1/test_zdist.py | 9 ++-- - testing/support.py | 8 +-- - 9 files changed, 108 insertions(+), 20 deletions(-) - create mode 100644 cffi/_imp_emulation.py - -diff --git a/cffi/_imp_emulation.py b/cffi/_imp_emulation.py -new file mode 100644 -index 00000000..136abddd ---- /dev/null -+++ b/cffi/_imp_emulation.py -@@ -0,0 +1,83 @@ -+ -+try: -+ # this works on Python < 3.12 -+ from imp import * -+ -+except ImportError: -+ # this is a limited emulation for Python >= 3.12. -+ # Note that this is used only for tests or for the old ffi.verify(). -+ # This is copied from the source code of Python 3.11. -+ -+ from _imp import (acquire_lock, release_lock, -+ is_builtin, is_frozen) -+ -+ from importlib._bootstrap import _load -+ -+ from importlib import machinery -+ import os -+ import sys -+ import tokenize -+ -+ SEARCH_ERROR = 0 -+ PY_SOURCE = 1 -+ PY_COMPILED = 2 -+ C_EXTENSION = 3 -+ PY_RESOURCE = 4 -+ PKG_DIRECTORY = 5 -+ C_BUILTIN = 6 -+ PY_FROZEN = 7 -+ PY_CODERESOURCE = 8 -+ IMP_HOOK = 9 -+ -+ def get_suffixes(): -+ extensions = [(s, 'rb', C_EXTENSION) -+ for s in machinery.EXTENSION_SUFFIXES] -+ source = [(s, 'r', PY_SOURCE) for s in machinery.SOURCE_SUFFIXES] -+ bytecode = [(s, 'rb', PY_COMPILED) for s in machinery.BYTECODE_SUFFIXES] -+ return extensions + source + bytecode -+ -+ def find_module(name, path=None): -+ if not isinstance(name, str): -+ raise TypeError("'name' must be a str, not {}".format(type(name))) -+ elif not isinstance(path, (type(None), list)): -+ # Backwards-compatibility -+ raise RuntimeError("'path' must be None or a list, " -+ "not {}".format(type(path))) -+ -+ if path is None: -+ if is_builtin(name): -+ return None, None, ('', '', C_BUILTIN) -+ elif is_frozen(name): -+ return None, None, ('', '', PY_FROZEN) -+ else: -+ path = sys.path -+ -+ for entry in path: -+ package_directory = os.path.join(entry, name) -+ for suffix in ['.py', machinery.BYTECODE_SUFFIXES[0]]: -+ package_file_name = '__init__' + suffix -+ file_path = os.path.join(package_directory, package_file_name) -+ if os.path.isfile(file_path): -+ return None, package_directory, ('', '', PKG_DIRECTORY) -+ for suffix, mode, type_ in get_suffixes(): -+ file_name = name + suffix -+ file_path = os.path.join(entry, file_name) -+ if os.path.isfile(file_path): -+ break -+ else: -+ continue -+ break # Break out of outer loop when breaking out of inner loop. -+ else: -+ raise ImportError(name, name=name) -+ -+ encoding = None -+ if 'b' not in mode: -+ with open(file_path, 'rb') as file: -+ encoding = tokenize.detect_encoding(file.readline)[0] -+ file = open(file_path, mode, encoding=encoding) -+ return file, file_path, (suffix, mode, type_) -+ -+ def load_dynamic(name, path, file=None): -+ loader = machinery.ExtensionFileLoader(name, path) -+ spec = machinery.ModuleSpec(name=name, loader=loader, origin=path) -+ return _load(spec) -diff --git a/cffi/vengine_cpy.py b/cffi/vengine_cpy.py -index 6de0df0e..49727d36 100644 ---- a/cffi/vengine_cpy.py -+++ b/cffi/vengine_cpy.py -@@ -1,9 +1,10 @@ - # - # DEPRECATED: implementation for ffi.verify() - # --import sys, imp -+import sys - from . import model - from .error import VerificationError -+from . import _imp_emulation as imp - - - class VCPythonEngine(object): -diff --git a/setup.py b/setup.py -index 7fd8f46d..99ab397e 100644 ---- a/setup.py -+++ b/setup.py -@@ -65,6 +65,8 @@ def no_working_compiler_found(): - no_compiler_found = True - - def get_config(): -+ if sys.version_info >= (3, 12): -+ import setuptools # makes 'distutils' available - from distutils.core import Distribution - from distutils.sysconfig import get_config_vars - get_config_vars() # workaround for a bug of distutils, e.g. on OS/X -diff --git a/testing/cffi0/test_verify.py b/testing/cffi0/test_verify.py -index 96d752d7..31fcc6dd 100644 ---- a/testing/cffi0/test_verify.py -+++ b/testing/cffi0/test_verify.py -@@ -1575,7 +1575,8 @@ def test_addressof(): - def test_callback_in_thread(): - if sys.platform == 'win32': - pytest.skip("pthread only") -- import os, subprocess, imp -+ import os, subprocess -+ from cffi import _imp_emulation as imp - arg = os.path.join(os.path.dirname(__file__), 'callback_in_thread.py') - g = subprocess.Popen([sys.executable, arg, - os.path.dirname(imp.find_module('cffi')[1])]) -diff --git a/testing/cffi0/test_zdistutils.py b/testing/cffi0/test_zdistutils.py -index 6f46fa82..08c432c7 100644 ---- a/testing/cffi0/test_zdistutils.py -+++ b/testing/cffi0/test_zdistutils.py -@@ -1,9 +1,10 @@ --import sys, os, imp, math, shutil -+import sys, os, math, shutil - import pytest - from cffi import FFI, FFIError - from cffi.verifier import Verifier, _locate_engine_class, _get_so_suffixes - from cffi.ffiplatform import maybe_relative_path - from testing.udir import udir -+from testing.support import load_dynamic - - - class DistUtilsTest(object): -@@ -80,7 +81,7 @@ class DistUtilsTest(object): - v.compile_module() - assert v.get_module_name().startswith('_cffi_') - if v.generates_python_module(): -- mod = imp.load_dynamic(v.get_module_name(), v.modulefilename) -+ mod = load_dynamic(v.get_module_name(), v.modulefilename) - assert hasattr(mod, '_cffi_setup') - - def test_compile_module_explicit_filename(self): -@@ -95,7 +96,7 @@ class DistUtilsTest(object): - assert filename == v.modulefilename - assert v.get_module_name() == basename - if v.generates_python_module(): -- mod = imp.load_dynamic(v.get_module_name(), v.modulefilename) -+ mod = load_dynamic(v.get_module_name(), v.modulefilename) - assert hasattr(mod, '_cffi_setup') - - def test_name_from_checksum_of_cdef(self): -diff --git a/testing/cffi1/test_new_ffi_1.py b/testing/cffi1/test_new_ffi_1.py -index c874a362..a461176c 100644 ---- a/testing/cffi1/test_new_ffi_1.py -+++ b/testing/cffi1/test_new_ffi_1.py -@@ -1,5 +1,5 @@ - import pytest --import platform, imp -+import platform - import sys, os, ctypes - import cffi - from testing.udir import udir -@@ -91,7 +91,7 @@ def setup_module(): - - outputfilename = recompile(ffi1, "test_new_ffi_1", CCODE, - tmpdir=str(udir)) -- module = imp.load_dynamic("test_new_ffi_1", outputfilename) -+ module = load_dynamic("test_new_ffi_1", outputfilename) - ffi = module.ffi - construction_params = (ffi1, CCODE) - -@@ -1619,7 +1619,7 @@ class TestNewFFI1: - ffi2 = cffi.FFI(); ffi2.cdef(CDEF2) - outputfilename = recompile(ffi2, "test_multiple_independent_structs", - CDEF2, tmpdir=str(udir)) -- module = imp.load_dynamic("test_multiple_independent_structs", -+ module = load_dynamic("test_multiple_independent_structs", - outputfilename) - ffi1 = module.ffi - foo1 = ffi1.new("struct ab *", [10]) -@@ -1635,7 +1635,7 @@ class TestNewFFI1: - outputfilename = recompile(ffi2, - "test_include_struct_union_enum_typedef", - CCODE, tmpdir=str(udir)) -- module = imp.load_dynamic("test_include_struct_union_enum_typedef", -+ module = load_dynamic("test_include_struct_union_enum_typedef", - outputfilename) - ffi2 = module.ffi - # -@@ -1783,7 +1783,7 @@ class TestNewFFI1: - "int myfunc(int x) { return x + 1; }\n" - "int myvar = -5;\n" - "#define MYFOO 42", tmpdir=str(udir)) -- imp.load_dynamic("_test_import_from_lib", outputfilename) -+ load_dynamic("_test_import_from_lib", outputfilename) - from _test_import_from_lib.lib import myfunc, myvar, MYFOO - assert MYFOO == 42 - assert myfunc(43) == 44 -diff --git a/testing/cffi1/test_verify1.py b/testing/cffi1/test_verify1.py -index 6245281b..f1a5fa14 100644 ---- a/testing/cffi1/test_verify1.py -+++ b/testing/cffi1/test_verify1.py -@@ -1535,7 +1535,8 @@ def test_callback_in_thread(): - pytest.xfail("adapt or remove") - if sys.platform == 'win32': - pytest.skip("pthread only") -- import os, subprocess, imp -+ import os, subprocess -+ from cffi import _imp_emulation as imp - arg = os.path.join(os.path.dirname(__file__), 'callback_in_thread.py') - g = subprocess.Popen([sys.executable, arg, - os.path.dirname(imp.find_module('cffi')[1])]) -diff --git a/testing/cffi1/test_zdist.py b/testing/cffi1/test_zdist.py -index 58d5bc8d..b1013da1 100644 ---- a/testing/cffi1/test_zdist.py -+++ b/testing/cffi1/test_zdist.py -@@ -41,11 +41,10 @@ class TestDist(object): - tmp_home = mkdtemp() - assert tmp_home != None, "cannot create temporary homedir" - env['HOME'] = tmp_home -+ pathlist = sys.path[:] - if cwd is None: -- newpath = self.rootdir -- if 'PYTHONPATH' in env: -- newpath += os.pathsep + env['PYTHONPATH'] -- env['PYTHONPATH'] = newpath -+ pathlist.insert(0, self.rootdir) -+ env['PYTHONPATH'] = os.pathsep.join(pathlist) - try: - subprocess.check_call([self.executable] + args, cwd=cwd, env=env) - finally: -@@ -291,7 +290,7 @@ class TestDist(object): - f.write("""if 1: - # https://bugs.python.org/issue23246 - import sys -- if sys.platform == 'win32': -+ if sys.platform == 'win32' or sys.version_info >= (3, 12): - try: - import setuptools - except ImportError: -diff --git a/testing/support.py b/testing/support.py -index f0677194..666c351b 100644 ---- a/testing/support.py -+++ b/testing/support.py -@@ -1,7 +1,8 @@ - import sys, os -+from cffi._imp_emulation import load_dynamic - - if sys.version_info < (3,): -- __all__ = ['u', 'arraytostring'] -+ __all__ = ['u', 'arraytostring', 'load_dynamic'] - - class U(object): - def __add__(self, other): -@@ -16,7 +17,7 @@ if sys.version_info < (3,): - return a.tostring() - - else: -- __all__ = ['u', 'unicode', 'long', 'arraytostring'] -+ __all__ = ['u', 'unicode', 'long', 'arraytostring', 'load_dynamic'] - u = "" - unicode = str - long = int -@@ -72,14 +73,13 @@ class FdWriteCapture(object): - return self._value - - def _verify(ffi, module_name, preamble, *args, **kwds): -- import imp - from cffi.recompiler import recompile - from .udir import udir - assert module_name not in sys.modules, "module name conflict: %r" % ( - module_name,) - kwds.setdefault('tmpdir', str(udir)) - outputfilename = recompile(ffi, module_name, preamble, *args, **kwds) -- module = imp.load_dynamic(module_name, outputfilename) -+ module = load_dynamic(module_name, outputfilename) - # - # hack hack hack: copy all *bound methods* from module.ffi back to the - # ffi instance. Then calls like ffi.new() will invoke module.ffi.new(). --- -GitLab - diff --git a/69660bd.patch b/69660bd.patch deleted file mode 100644 index e44b51b..0000000 --- a/69660bd.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 69660bdf6544338edd524b73004b7accfa464c68 Mon Sep 17 00:00:00 2001 -From: Armin Rigo -Date: Thu, 8 Jun 2023 19:02:08 +0200 -Subject: [PATCH] gah - ---- - c/misc_thread_common.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/c/misc_thread_common.h b/c/misc_thread_common.h -index 9e9a818d..ead9c83c 100644 ---- a/c/misc_thread_common.h -+++ b/c/misc_thread_common.h -@@ -166,7 +166,7 @@ thread_canary_free_zombies(void) - break; - PyThreadState_Clear(tstate); /* calls thread_canary_dealloc on 'ob', - but now ob->zombie_next == NULL. */ --#if PY_HEX_VERSION >= 0x030C0000 -+#if PY_VERSION_HEX >= 0x030C0000 - /* this might be a bug introduced in 3.12, or just me abusing the - API around there. The issue is that PyThreadState_Delete() - called on a random old tstate will clear the *current* thread --- -GitLab - diff --git a/814c55e.patch b/814c55e.patch deleted file mode 100644 index 3204aef..0000000 --- a/814c55e.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 814c55ebf46da49cdb0733756b9568486c682d03 Mon Sep 17 00:00:00 2001 -From: Armin Rigo -Date: Thu, 8 Jun 2023 19:18:37 +0200 -Subject: [PATCH] fix for multiple embedded modules loaded in parallel from - multiple threads - ---- - cffi/_embedding.h | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) - -diff --git a/cffi/_embedding.h b/cffi/_embedding.h -index 265630ea..c5eaf889 100644 ---- a/cffi/_embedding.h -+++ b/cffi/_embedding.h -@@ -321,10 +321,11 @@ static int _cffi_carefully_make_gil(void) - int old_value, locked_value = -42; - assert(!(PyCapsule_Type.tp_flags & Py_TPFLAGS_HAVE_VERSION_TAG)); - # else -- static PyBufferProcs empty_buffer_procs; -+ static struct ebp_s { PyBufferProcs buf; int mark; } empty_buffer_procs; -+ empty_buffer_procs.mark = -42; - PyBufferProcs *volatile *lock = (PyBufferProcs *volatile *) - &PyCapsule_Type.tp_as_buffer; -- PyBufferProcs *old_value, *locked_value = &empty_buffer_procs; -+ PyBufferProcs *old_value, *locked_value = &empty_buffer_procs.buf; - # endif - - while (1) { /* spin loop */ -@@ -334,7 +335,13 @@ static int _cffi_carefully_make_gil(void) - break; - } - else { -+# if PY_VERSION_HEX < 0x030C0000 - assert(old_value == locked_value); -+# else -+ /* The pointer should point to a possibly different -+ empty_buffer_procs from another C extension module */ -+ assert(((struct ebp_s *)old_value)->mark == -42); -+# endif - /* should ideally do a spin loop instruction here, but - hard to do it portably and doesn't really matter I - think: PyEval_InitThreads() should be very fast, and --- -GitLab - diff --git a/87f514b.patch b/87f514b.patch deleted file mode 100644 index 02ea57b..0000000 --- a/87f514b.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 87f514b8a4fc6b29df8febf1176ad846007a5b56 Mon Sep 17 00:00:00 2001 -From: Armin Rigo -Date: Thu, 8 Jun 2023 18:34:20 +0200 -Subject: [PATCH] Fix for what may be a CPython 3.12 bug, or just me abusing - the API - ---- - c/misc_thread_common.h | 19 +++++++++++++++++++ - 1 file changed, 19 insertions(+) - -diff --git a/c/misc_thread_common.h b/c/misc_thread_common.h -index 66e28354..9e9a818d 100644 ---- a/c/misc_thread_common.h -+++ b/c/misc_thread_common.h -@@ -102,6 +102,7 @@ thread_canary_dealloc(ThreadCanaryObj *ob) - 'local_thread_canary' accesses need to be protected with - the TLS_ZOM_LOCK. - */ -+ //fprintf(stderr, "entering dealloc(%p)\n", ob); - TLS_ZOM_LOCK(); - if (ob->zombie_next != NULL) { - //fprintf(stderr, "thread_canary_dealloc(%p): ZOMBIE\n", ob); -@@ -136,6 +137,7 @@ thread_canary_make_zombie(ThreadCanaryObj *ob) - ob->zombie_prev = last; - last->zombie_next = ob; - cffi_zombie_head.zombie_prev = ob; -+ //fprintf(stderr, "thread_canary_make_zombie(%p) DONE\n", ob); - } - - static void -@@ -164,6 +166,15 @@ thread_canary_free_zombies(void) - break; - PyThreadState_Clear(tstate); /* calls thread_canary_dealloc on 'ob', - but now ob->zombie_next == NULL. */ -+#if PY_HEX_VERSION >= 0x030C0000 -+ /* this might be a bug introduced in 3.12, or just me abusing the -+ API around there. The issue is that PyThreadState_Delete() -+ called on a random old tstate will clear the *current* thread -+ notion of what PyGILState_GetThisThreadState() should be, at -+ least if the internal 'bound_gilstate' flag is set in the old -+ tstate. Workaround: clear that flag. */ -+ tstate->_status.bound_gilstate = 0; -+#endif - PyThreadState_Delete(tstate); - //fprintf(stderr, "thread_canary_free_zombie: cleared and deleted tstate=%p\n", tstate); - } -@@ -213,9 +224,11 @@ thread_canary_register(PyThreadState *tstate) - tstate->gilstate_counter++; - /* ^^^ this means 'tstate' will never be automatically freed by - PyGILState_Release() */ -+ //fprintf(stderr, "CANARY: ready, tstate=%p, tls=%p, canary=%p\n", tstate, tls, canary); - return; - - ignore_error: -+ //fprintf(stderr, "CANARY: IGNORED ERROR\n"); - PyErr_Clear(); - } - -@@ -334,6 +347,7 @@ static PyGILState_STATE gil_ensure(void) - */ - PyGILState_STATE result; - PyThreadState *ts = PyGILState_GetThisThreadState(); -+ //fprintf(stderr, "%p: gil_ensure(), tstate=%p, tls=%p\n", get_cffi_tls(), ts, get_cffi_tls()); - - if (ts != NULL) { - ts->gilstate_counter++; -@@ -341,9 +355,11 @@ static PyGILState_STATE gil_ensure(void) - /* common case: 'ts' is our non-current thread state and - we have to make it current and acquire the GIL */ - PyEval_RestoreThread(ts); -+ //fprintf(stderr, "%p: gil_ensure(), tstate=%p MADE CURRENT\n", get_cffi_tls(), ts); - return PyGILState_UNLOCKED; - } - else { -+ //fprintf(stderr, "%p: gil_ensure(), tstate=%p ALREADY CURRENT\n", get_cffi_tls(), ts); - return PyGILState_LOCKED; - } - } -@@ -353,6 +369,7 @@ static PyGILState_STATE gil_ensure(void) - assert(result == PyGILState_UNLOCKED); - - ts = PyGILState_GetThisThreadState(); -+ //fprintf(stderr, "%p: gil_ensure(), made a new tstate=%p\n", get_cffi_tls(), ts); - assert(ts != NULL); - assert(ts == get_current_ts()); - assert(ts->gilstate_counter >= 1); -@@ -361,11 +378,13 @@ static PyGILState_STATE gil_ensure(void) - thread really shuts down */ - thread_canary_register(ts); - -+ assert(ts == PyGILState_GetThisThreadState()); - return result; - } - } - - static void gil_release(PyGILState_STATE oldstate) - { -+ //fprintf(stderr, "%p: gil_release(%d), tls=%p\n", get_cffi_tls(), (int)oldstate, get_cffi_tls()); - PyGILState_Release(oldstate); - } --- -GitLab - diff --git a/c3593e4.patch b/c3593e4.patch deleted file mode 100644 index 91a415d..0000000 --- a/c3593e4.patch +++ /dev/null @@ -1,54 +0,0 @@ -From c3593e41b9aaf8d8bfce2c97fa6bfbd8a54e8974 Mon Sep 17 00:00:00 2001 -From: Armin Rigo -Date: Thu, 8 Jun 2023 16:57:32 +0200 -Subject: [PATCH] step 2: partially fix embedding for 3.12 - ---- - cffi/_embedding.h | 19 +++++++++++++++++-- - 1 file changed, 17 insertions(+), 2 deletions(-) - -diff --git a/cffi/_embedding.h b/cffi/_embedding.h -index 8e8df882..265630ea 100644 ---- a/cffi/_embedding.h -+++ b/cffi/_embedding.h -@@ -283,6 +283,15 @@ static int _cffi_carefully_make_gil(void) - Python < 3.8 because someone might use a mixture of cffi - embedded modules, some of which were compiled before this file - changed. -+ -+ In Python >= 3.12, this stopped working because that particular -+ tp_version_tag gets modified during interpreter startup. It's -+ arguably a bad idea before 3.12 too, but again we can't change -+ that because someone might use a mixture of cffi embedded -+ modules, and no-one reported a bug so far. In Python >= 3.12 -+ we go instead for PyCapsuleType.tp_as_buffer, which is supposed -+ to always be NULL. We write to it temporarily a pointer to -+ a struct full of NULLs, which is semantically the same. - */ - - #ifdef WITH_THREAD -@@ -307,13 +316,19 @@ static int _cffi_carefully_make_gil(void) - } - } - # else -+# if PY_VERSION_HEX < 0x030C0000 - int volatile *lock = (int volatile *)&PyCapsule_Type.tp_version_tag; -- int old_value, locked_value; -+ int old_value, locked_value = -42; - assert(!(PyCapsule_Type.tp_flags & Py_TPFLAGS_HAVE_VERSION_TAG)); -+# else -+ static PyBufferProcs empty_buffer_procs; -+ PyBufferProcs *volatile *lock = (PyBufferProcs *volatile *) -+ &PyCapsule_Type.tp_as_buffer; -+ PyBufferProcs *old_value, *locked_value = &empty_buffer_procs; -+# endif - - while (1) { /* spin loop */ - old_value = *lock; -- locked_value = -42; - if (old_value == 0) { - if (cffi_compare_and_swap(lock, old_value, locked_value)) - break; --- -GitLab - diff --git a/python-cffi.spec b/python-cffi.spec index 3f89362..79e5db3 100644 --- a/python-cffi.spec +++ b/python-cffi.spec @@ -1,27 +1,15 @@ Name: python-cffi -Version: 1.15.1 +Version: 1.16.0 Release: %autorelease Summary: Foreign Function Interface for Python to call C code -# Patch 482f0af has bits copied from CPython (PSF-2.0) +# cffi is MIT +# cffi/_imp_emulation.py has bits copied from CPython (PSF-2.0) License: MIT AND PSF-2.0 -URL: https://cffi.readthedocs.org/ -Source: https://foss.heptapod.net/pypy/cffi/-/archive/v%{version}/cffi-v%{version}.tar.bz2 - -# Adjust tests for a last minute Python 3.11 change in the traceback format -Patch: https://foss.heptapod.net/pypy/cffi/-/merge_requests/113.patch - -# Drop usage of the deprecated py.test package -Patch: https://foss.heptapod.net/pypy/cffi/-/merge_requests/115.patch -# Drop usage of the deprecated py.code package -Patch: https://foss.heptapod.net/pypy/cffi/-/merge_requests/116.patch -# Python 3.12 compatibility -Patch: https://foss.heptapod.net/pypy/cffi/-/commit/482f0af.patch -Patch: https://foss.heptapod.net/pypy/cffi/-/commit/c3593e4.patch -Patch: https://foss.heptapod.net/pypy/cffi/-/commit/87f514b.patch -Patch: https://foss.heptapod.net/pypy/cffi/-/commit/69660bd.patch -Patch: https://foss.heptapod.net/pypy/cffi/-/commit/814c55e.patch +URL: https://github.com/python-cffi/cffi +Source: %{url}/archive/v%{version}/cffi-%{version}.tar.gz BuildRequires: python3-devel +BuildRequires: python3-pytest BuildRequires: make BuildRequires: libffi-devel BuildRequires: gcc @@ -54,11 +42,11 @@ Documentation for CFFI, the Foreign Function Interface for Python. %prep -%autosetup -p1 -n cffi-v%{version} +%autosetup -p1 -n cffi-%{version} %generate_buildrequires -%pyproject_buildrequires requirements.txt +%pyproject_buildrequires %build diff --git a/sources b/sources index f43fc6c..44dac8e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (cffi-v1.15.1.tar.bz2) = 4505c1e3206b66fbdf06ba39be6daac14a35f7148cef3156bb2015792cb59c004ea13fe7c7514feb35ecc5e7526a88fc0b3036ae84fd146a0a3b55bc676e8e51 +SHA512 (cffi-1.16.0.tar.gz) = 2115f4d2431f36b18494182d2abb378a750c970dfdf083cfc287b004e52830efe703f07f71a17c89060b47eaa3b52e7b2390017d1980eb39695bdaf31bac3bb5