derive Exit from KeyboardInterrupt to simplify exception catching
--HG-- branch : trunk
This commit is contained in:
parent
4bc352cc7d
commit
30e04b1ec6
|
@ -36,11 +36,11 @@ class ExceptionFailure(Failed):
|
|||
self.expr = expr
|
||||
self.expected = expected
|
||||
|
||||
class Exit(Exception):
|
||||
class Exit(KeyboardInterrupt):
|
||||
""" for immediate program exits without tracebacks and reporter/summary. """
|
||||
def __init__(self, msg="unknown reason"):
|
||||
self.msg = msg
|
||||
Exception.__init__(self, msg)
|
||||
KeyboardInterrupt.__init__(self, msg)
|
||||
|
||||
# exposed helper methods
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
import py
|
||||
|
||||
from py.__.test.outcome import Exit, Skipped
|
||||
from py.__.test.outcome import Skipped
|
||||
|
||||
def basic_run_report(item, pdb=None):
|
||||
""" return report about setting up and running a test item. """
|
||||
|
@ -28,7 +28,7 @@ def basic_run_report(item, pdb=None):
|
|||
when = "execute"
|
||||
finally:
|
||||
outerr = capture.reset()
|
||||
except (Exit, KeyboardInterrupt):
|
||||
except KeyboardInterrupt:
|
||||
raise
|
||||
except:
|
||||
excinfo = py.code.ExceptionInfo()
|
||||
|
@ -48,7 +48,7 @@ def basic_collect_report(collector):
|
|||
res = collector._memocollect()
|
||||
finally:
|
||||
outerr = capture.reset()
|
||||
except (Exit, KeyboardInterrupt):
|
||||
except KeyboardInterrupt:
|
||||
raise
|
||||
except:
|
||||
excinfo = py.code.ExceptionInfo()
|
||||
|
@ -62,7 +62,7 @@ def forked_run_report(item, pdb=None):
|
|||
def runforked():
|
||||
try:
|
||||
testrep = basic_run_report(item)
|
||||
except (KeyboardInterrupt, Exit):
|
||||
except KeyboardInterrupt:
|
||||
py.std.os._exit(EXITSTATUS_TESTEXIT)
|
||||
return ipickle.dumps(testrep)
|
||||
|
||||
|
@ -72,7 +72,7 @@ def forked_run_report(item, pdb=None):
|
|||
return ipickle.loads(result.retval)
|
||||
else:
|
||||
if result.exitstatus == EXITSTATUS_TESTEXIT:
|
||||
raise Exit("forked test item %s raised Exit" %(item,))
|
||||
py.test.exit("forked test item %s raised Exit" %(item,))
|
||||
return report_process_crash(item, result)
|
||||
|
||||
def report_process_crash(item, result):
|
||||
|
|
|
@ -76,6 +76,13 @@ def test_importorskip():
|
|||
print py.code.ExceptionInfo()
|
||||
py.test.fail("spurious skip")
|
||||
|
||||
def test_pytest_exit():
|
||||
try:
|
||||
py.test.exit("hello")
|
||||
except:
|
||||
excinfo = py.code.ExceptionInfo()
|
||||
assert excinfo.errisinstance(KeyboardInterrupt)
|
||||
|
||||
def test_pytest_mark_getattr():
|
||||
from py.__.test.outcome import mark
|
||||
def f(): pass
|
||||
|
|
Loading…
Reference in New Issue