summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rwxr-xr-xtests/test_cmd2.py17
-rw-r--r--tests/test_plugin.py22
2 files changed, 36 insertions, 3 deletions
diff --git a/tests/test_cmd2.py b/tests/test_cmd2.py
index 0c3333c1..b4b13945 100755
--- a/tests/test_cmd2.py
+++ b/tests/test_cmd2.py
@@ -534,7 +534,7 @@ def test_in_script(request):
def test_system_exit_in_command(base_app, capsys):
- """Test raising SystemExit from a command"""
+ """Test raising SystemExit in a command"""
import types
def do_system_exit(self, _):
@@ -546,6 +546,21 @@ def test_system_exit_in_command(base_app, capsys):
assert stop
+def test_passthrough_exception_in_command(base_app):
+ """Test raising a PassThroughException in a command"""
+ import types
+
+ def do_passthrough(self, _):
+ wrapped_ex = OSError("Pass me up")
+ raise exceptions.PassThroughException(wrapped_ex=wrapped_ex)
+
+ setattr(base_app, 'do_passthrough', types.MethodType(do_passthrough, base_app))
+
+ with pytest.raises(OSError) as excinfo:
+ base_app.onecmd_plus_hooks('passthrough')
+ assert 'Pass me up' in str(excinfo.value)
+
+
def test_output_redirection(base_app):
fd, filename = tempfile.mkstemp(prefix='cmd2_test', suffix='.txt')
os.close(fd)
diff --git a/tests/test_plugin.py b/tests/test_plugin.py
index 97c046a2..1e12d655 100644
--- a/tests/test_plugin.py
+++ b/tests/test_plugin.py
@@ -238,6 +238,14 @@ class Plugin:
self.called_cmdfinalization += 1
raise KeyboardInterrupt
+ def cmdfinalization_hook_passthrough_exception(
+ self, data: cmd2.plugin.CommandFinalizationData
+ ) -> cmd2.plugin.CommandFinalizationData:
+ """A command finalization hook which raises a PassThroughException"""
+ self.called_cmdfinalization += 1
+ wrapped_ex = OSError("Pass me up")
+ raise exceptions.PassThroughException(wrapped_ex=wrapped_ex)
+
def cmdfinalization_hook_not_enough_parameters(self) -> plugin.CommandFinalizationData:
"""A command finalization hook with no parameters."""
pass
@@ -916,7 +924,7 @@ def test_cmdfinalization_hook_exception(capsys):
assert app.called_cmdfinalization == 1
-def test_cmdfinalization_hook_system_exit(capsys):
+def test_cmdfinalization_hook_system_exit():
app = PluggedApp()
app.register_cmdfinalization_hook(app.cmdfinalization_hook_system_exit)
stop = app.onecmd_plus_hooks('say hello')
@@ -924,7 +932,7 @@ def test_cmdfinalization_hook_system_exit(capsys):
assert app.called_cmdfinalization == 1
-def test_cmdfinalization_hook_keyboard_interrupt(capsys):
+def test_cmdfinalization_hook_keyboard_interrupt():
app = PluggedApp()
app.register_cmdfinalization_hook(app.cmdfinalization_hook_keyboard_interrupt)
@@ -947,6 +955,16 @@ def test_cmdfinalization_hook_keyboard_interrupt(capsys):
assert app.called_cmdfinalization == 1
+def test_cmdfinalization_hook_passthrough_exception():
+ app = PluggedApp()
+ app.register_cmdfinalization_hook(app.cmdfinalization_hook_passthrough_exception)
+
+ with pytest.raises(OSError) as excinfo:
+ app.onecmd_plus_hooks('say hello')
+ assert 'Pass me up' in str(excinfo.value)
+ assert app.called_cmdfinalization == 1
+
+
def test_skip_postcmd_hooks(capsys):
app = PluggedApp()
app.register_postcmd_hook(app.postcmd_hook)