diff options
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/test_cmd2.py | 17 | ||||
-rw-r--r-- | tests/test_plugin.py | 22 |
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) |