Skip to content

Commit b5b4fbe

Browse files
committed
Validate stderr in cpyext tests
1 parent 76fb359 commit b5b4fbe

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

graalpython/com.oracle.graal.python.test/src/tests/cpyext/__init__.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939

4040
import sys
4141
import os
42+
from io import StringIO
43+
4244
from importlib import invalidate_caches
4345
from string import Formatter
4446
__dir__ = __file__.rpartition("/")[0]
@@ -289,7 +291,7 @@ def file_not_empty(path):
289291

290292
class CPyExtFunction():
291293

292-
def __init__(self, pfunc, parameters, template=c_template, cmpfunc=None, **kwargs):
294+
def __init__(self, pfunc, parameters, template=c_template, cmpfunc=None, stderr_validator=None, **kwargs):
293295
self.template = template
294296
self.pfunc = pfunc
295297
self.parameters = parameters
@@ -306,6 +308,7 @@ def __init__(self, pfunc, parameters, template=c_template, cmpfunc=None, **kwarg
306308
kwargs["resultspec"] = kwargs["resultspec"] if "resultspec" in kwargs else "O"
307309
self.formatargs = kwargs
308310
self.cmpfunc = cmpfunc or self.do_compare
311+
self.stderr_validator = stderr_validator
309312

310313
def do_compare(self, x, y):
311314
if isinstance(x, BaseException):
@@ -359,11 +362,18 @@ def test(self):
359362
cargs = self.parameters()
360363
pargs = self.parameters()
361364
for i in range(len(cargs)):
362-
cresult = presult = None
365+
real_stderr = sys.stderr
366+
sys.stderr = StringIO()
363367
try:
364368
cresult = ctest(cargs[i])
365369
except BaseException as e:
366370
cresult = e
371+
else:
372+
if self.stderr_validator:
373+
s = sys.stderr.getvalue()
374+
assert self.stderr_validator(cargs[i], s), f"captured stderr didn't match expectations. Stderr: {s}"
375+
finally:
376+
sys.stderr = real_stderr
367377
try:
368378
presult = self.pfunc(pargs[i])
369379
except BaseException as e:

graalpython/com.oracle.graal.python.test/src/tests/cpyext/test_err.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ def compile_module(self, name):
213213
argspec='i',
214214
arguments=["int n"],
215215
callfunction="wrap_PyErr_PrintEx",
216+
stderr_validator=lambda args, stderr: 'unknown key whatsoever' in stderr and 'Traceback' not in stderr,
216217
cmpfunc=unhandled_error_compare
217218
)
218219

@@ -352,6 +353,7 @@ def compile_module(self, name):
352353
PyErr_WriteUnraisable(object);
353354
}""",
354355
callfunction="wrap_PyErr_WriteUnraisable",
356+
stderr_validator=lambda args, stderr: 'unraisable exception' in stderr,
355357
cmpfunc=unhandled_error_compare
356358
)
357359

0 commit comments

Comments
 (0)