diff options
author | Ezio Melotti <ezio.melotti@gmail.com> | 2013-03-05 18:26:17 (GMT) |
---|---|---|
committer | Ezio Melotti <ezio.melotti@gmail.com> | 2013-03-05 18:26:17 (GMT) |
commit | 25a404520da6c2560690e457404ea36f4aaa9344 (patch) | |
tree | 1148a86f226fa7edf326180cac3e94558ce4481f /Lib/test/support.py | |
parent | 884f0585a40d2e3203ee0512aa2f5a39ce660556 (diff) | |
download | cpython-25a404520da6c2560690e457404ea36f4aaa9344.zip cpython-25a404520da6c2560690e457404ea36f4aaa9344.tar.gz cpython-25a404520da6c2560690e457404ea36f4aaa9344.tar.bz2 |
#11732: add a new suppress_crash_popup() context manager to test.support.
Diffstat (limited to 'Lib/test/support.py')
-rw-r--r-- | Lib/test/support.py | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/Lib/test/support.py b/Lib/test/support.py index d89e172..ba1206c 100644 --- a/Lib/test/support.py +++ b/Lib/test/support.py @@ -71,7 +71,7 @@ __all__ = [ "TestHandler", "Matcher", "can_symlink", "skip_unless_symlink", "skip_unless_xattr", "import_fresh_module", "requires_zlib", "PIPE_MAX_SIZE", "failfast", "anticipate_failure", "run_with_tz", - "requires_bz2", "requires_lzma" + "requires_bz2", "requires_lzma", "suppress_crash_popup", ] class Error(Exception): @@ -1905,6 +1905,28 @@ def skip_unless_xattr(test): msg = "no non-broken extended attribute support" 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): """Override 'object_to_patch'.'attr_name' with 'new_value'. |