mirror of
https://github.com/python/cpython.git
synced 2024-12-12 03:04:15 +08:00
#11732: add a new suppress_crash_popup() context manager to test.support.
This commit is contained in:
parent
884f0585a4
commit
25a404520d
@ -405,6 +405,13 @@ The :mod:`test.support` module defines the following functions:
|
|||||||
A decorator for running tests that require support for symbolic links.
|
A decorator for running tests that require support for symbolic links.
|
||||||
|
|
||||||
|
|
||||||
|
.. function:: suppress_crash_popup()
|
||||||
|
|
||||||
|
A context manager that disables Windows Error Reporting dialogs using
|
||||||
|
`SetErrorMode <http://msdn.microsoft.com/en-us/library/windows/desktop/ms680621%28v=vs.85%29.aspx>`_.
|
||||||
|
On other platforms it's a no-op.
|
||||||
|
|
||||||
|
|
||||||
.. decorator:: anticipate_failure(condition)
|
.. decorator:: anticipate_failure(condition)
|
||||||
|
|
||||||
A decorator to conditionally mark tests with
|
A decorator to conditionally mark tests with
|
||||||
|
@ -71,7 +71,7 @@ __all__ = [
|
|||||||
"TestHandler", "Matcher", "can_symlink", "skip_unless_symlink",
|
"TestHandler", "Matcher", "can_symlink", "skip_unless_symlink",
|
||||||
"skip_unless_xattr", "import_fresh_module", "requires_zlib",
|
"skip_unless_xattr", "import_fresh_module", "requires_zlib",
|
||||||
"PIPE_MAX_SIZE", "failfast", "anticipate_failure", "run_with_tz",
|
"PIPE_MAX_SIZE", "failfast", "anticipate_failure", "run_with_tz",
|
||||||
"requires_bz2", "requires_lzma"
|
"requires_bz2", "requires_lzma", "suppress_crash_popup",
|
||||||
]
|
]
|
||||||
|
|
||||||
class Error(Exception):
|
class Error(Exception):
|
||||||
@ -1905,6 +1905,28 @@ def skip_unless_xattr(test):
|
|||||||
msg = "no non-broken extended attribute support"
|
msg = "no non-broken extended attribute support"
|
||||||
return test if ok else unittest.skip(msg)(test)
|
return test if ok else unittest.skip(msg)(test)
|
||||||
|
|
||||||
|
|
||||||
|
if sys.platform.startswith('win'):
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def suppress_crash_popup():
|
||||||
|
"""Disable Windows Error Reporting dialogs using SetErrorMode."""
|
||||||
|
# see http://msdn.microsoft.com/en-us/library/windows/desktop/ms680621%28v=vs.85%29.aspx
|
||||||
|
import ctypes
|
||||||
|
k32 = ctypes.windll.kernel32
|
||||||
|
old_error_mode = k32.GetErrorMode()
|
||||||
|
SEM_NOGPFAULTERRORBOX = 0x02
|
||||||
|
k32.SetErrorMode(old_error_mode | SEM_NOGPFAULTERRORBOX)
|
||||||
|
try:
|
||||||
|
yield
|
||||||
|
finally:
|
||||||
|
k32.SetErrorMode(old_error_mode)
|
||||||
|
else:
|
||||||
|
# this is a no-op for other platforms
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def suppress_crash_popup():
|
||||||
|
yield
|
||||||
|
|
||||||
|
|
||||||
def patch(test_instance, object_to_patch, attr_name, new_value):
|
def patch(test_instance, object_to_patch, attr_name, new_value):
|
||||||
"""Override 'object_to_patch'.'attr_name' with 'new_value'.
|
"""Override 'object_to_patch'.'attr_name' with 'new_value'.
|
||||||
|
|
||||||
|
@ -44,7 +44,8 @@ class CAPITest(unittest.TestCase):
|
|||||||
|
|
||||||
@unittest.skipUnless(threading, 'Threading required for this test.')
|
@unittest.skipUnless(threading, 'Threading required for this test.')
|
||||||
def test_no_FatalError_infinite_loop(self):
|
def test_no_FatalError_infinite_loop(self):
|
||||||
p = subprocess.Popen([sys.executable, "-c",
|
with support.suppress_crash_popup():
|
||||||
|
p = subprocess.Popen([sys.executable, "-c",
|
||||||
'import _testcapi;'
|
'import _testcapi;'
|
||||||
'_testcapi.crash_no_current_thread()'],
|
'_testcapi.crash_no_current_thread()'],
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
|
@ -101,7 +101,8 @@ class FaultHandlerTests(unittest.TestCase):
|
|||||||
header=re.escape(header))
|
header=re.escape(header))
|
||||||
if other_regex:
|
if other_regex:
|
||||||
regex += '|' + other_regex
|
regex += '|' + other_regex
|
||||||
output, exitcode = self.get_output(code, filename)
|
with support.suppress_crash_popup():
|
||||||
|
output, exitcode = self.get_output(code, filename)
|
||||||
output = '\n'.join(output)
|
output = '\n'.join(output)
|
||||||
self.assertRegex(output, regex)
|
self.assertRegex(output, regex)
|
||||||
self.assertNotEqual(exitcode, 0)
|
self.assertNotEqual(exitcode, 0)
|
||||||
@ -229,7 +230,8 @@ faulthandler.disable()
|
|||||||
faulthandler._read_null()
|
faulthandler._read_null()
|
||||||
""".strip()
|
""".strip()
|
||||||
not_expected = 'Fatal Python error'
|
not_expected = 'Fatal Python error'
|
||||||
stderr, exitcode = self.get_output(code)
|
with support.suppress_crash_popup():
|
||||||
|
stderr, exitcode = self.get_output(code)
|
||||||
stder = '\n'.join(stderr)
|
stder = '\n'.join(stderr)
|
||||||
self.assertTrue(not_expected not in stderr,
|
self.assertTrue(not_expected not in stderr,
|
||||||
"%r is present in %r" % (not_expected, stderr))
|
"%r is present in %r" % (not_expected, stderr))
|
||||||
|
@ -640,6 +640,10 @@ Library
|
|||||||
Tests
|
Tests
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
- Issue #11732: add a new suppress_crash_popup() context manager to test.support
|
||||||
|
that disables crash popups on Windows and use it in test_faulthandler and
|
||||||
|
test_ctypes.
|
||||||
|
|
||||||
- Issue #13898: test_ssl no longer prints a spurious stack trace on Ubuntu.
|
- Issue #13898: test_ssl no longer prints a spurious stack trace on Ubuntu.
|
||||||
|
|
||||||
- Issue #17249: convert a test in test_capi to use unittest and reap threads.
|
- Issue #17249: convert a test in test_capi to use unittest and reap threads.
|
||||||
|
Loading…
Reference in New Issue
Block a user