From 615c2a47375bfebc388652691d7641ad610e183f Mon Sep 17 00:00:00 2001 From: Eli Bendersky Date: Sat, 24 Jan 2026 08:42:49 -0800 Subject: [PATCH 1/2] Make test_parsing more resilient to changes in pycparser Several tests expect precise error messages from pycparser, which pycparser doesn't guarantee. While testing CFFI with pycparser 3.0, some tests needed to be made more resilient. I've used the .startswith() approach already used in this file, instead of exact string matching. Ref #223 --- testing/cffi0/test_parsing.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/testing/cffi0/test_parsing.py b/testing/cffi0/test_parsing.py index 8d4dd016..d0f466bd 100644 --- a/testing/cffi0/test_parsing.py +++ b/testing/cffi0/test_parsing.py @@ -197,7 +197,7 @@ def test_dont_remove_comment_in_line_directives(): some syntax error here """) - assert str(e.value) == "parse error\nbaz.c:9:14: before: syntax" + assert str(e.value).startswith("parse error\nbaz.c:9:") # e = pytest.raises(CDefError, ffi.cdef, """ #line 7 "foo//bar.c" @@ -205,21 +205,21 @@ def test_dont_remove_comment_in_line_directives(): some syntax error here """) # - assert str(e.value) == "parse error\nfoo//bar.c:8:14: before: syntax" + assert str(e.value).startswith("parse error\nfoo//bar.c:8:") ffi = FFI(backend=FakeBackend()) 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" + assert str(e.value).startswith("parse error\nbaz.c:9:") # e = pytest.raises(CDefError, ffi.cdef, """ # 7 "foo//bar.c" some syntax error here """) - assert str(e.value) == "parse error\nfoo//bar.c:8:14: before: syntax" + assert str(e.value).startswith("parse error\nfoo//bar.c:8:") def test_multiple_line_directives(): ffi = FFI(backend=FakeBackend()) @@ -233,7 +233,7 @@ def test_multiple_line_directives(): #line 8 "yadda.c" extern int zz; """) - assert str(e.value) == "parse error\nbaz.c:7:14: before: syntax" + assert str(e.value).startswith("parse error\nbaz.c:7:") # e = pytest.raises(CDefError, ffi.cdef, """ # 5 "foo.c" @@ -245,7 +245,7 @@ def test_multiple_line_directives(): # 8 "yadda.c" extern int zz; """) - assert str(e.value) == "parse error\nbaz.c:7:14: before: syntax" + assert str(e.value).startswith("parse error\nbaz.c:7:") def test_commented_line_directive(): ffi = FFI(backend=FakeBackend()) @@ -262,7 +262,7 @@ def test_commented_line_directive(): some syntax error """) # - assert str(e.value) == "parse error\nbar.c:9:14: before: syntax" + assert str(e.value).startswith("parse error\nbar.c:9:") e = pytest.raises(CDefError, ffi.cdef, """ /* # 5 "foo.c" @@ -275,7 +275,7 @@ def test_commented_line_directive(): */ some syntax error """) - assert str(e.value) == "parse error\nbar.c:9:14: before: syntax" + assert str(e.value).startswith("parse error\nbar.c:9:") def test_line_continuation_in_defines(): ffi = FFI(backend=FakeBackend()) @@ -365,7 +365,7 @@ def test_unknown_name(): e = pytest.raises(CDefError, ffi.cast, "foobarbazunknown*", 0) assert str(e.value).startswith('cannot parse "foobarbazunknown*"') e = pytest.raises(CDefError, ffi.cast, "int(*)(foobarbazunknown)", 0) - assert str(e.value).startswith('cannot parse "int(*)(foobarbazunknown)"') + assert str(e.value).startswith("in expression arg 1: unknown type 'foobarbazunknown'") def test_redefine_common_type(): prefix = "" if sys.version_info < (3,) else "b" From 02d4417c84229d2eab426b9ab755ac1c435a333e Mon Sep 17 00:00:00 2001 From: Eli Bendersky Date: Sat, 24 Jan 2026 14:51:01 -0800 Subject: [PATCH 2/2] Loosen error message assertion even more --- testing/cffi0/test_parsing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/cffi0/test_parsing.py b/testing/cffi0/test_parsing.py index d0f466bd..3e47bcdd 100644 --- a/testing/cffi0/test_parsing.py +++ b/testing/cffi0/test_parsing.py @@ -365,7 +365,7 @@ def test_unknown_name(): e = pytest.raises(CDefError, ffi.cast, "foobarbazunknown*", 0) assert str(e.value).startswith('cannot parse "foobarbazunknown*"') e = pytest.raises(CDefError, ffi.cast, "int(*)(foobarbazunknown)", 0) - assert str(e.value).startswith("in expression arg 1: unknown type 'foobarbazunknown'") + assert 'foobarbazunknown' in str(e.value) def test_redefine_common_type(): prefix = "" if sys.version_info < (3,) else "b"