summaryrefslogtreecommitdiff
path: root/tests/test_plugin.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_plugin.py')
-rw-r--r--tests/test_plugin.py225
1 files changed, 184 insertions, 41 deletions
diff --git a/tests/test_plugin.py b/tests/test_plugin.py
index 33c3855b..2bebd4af 100644
--- a/tests/test_plugin.py
+++ b/tests/test_plugin.py
@@ -21,30 +21,58 @@ class Plugin:
self.reset_counters()
def reset_counters(self):
- self.called_pph = 0
+ self.called_postparsing = 0
+ self.called_precmd = 0
def prepost_hook_one(self):
+ "Method used for preloop or postloop hooks"
self.poutput("one")
def prepost_hook_two(self):
+ "Another method used for preloop or postloop hooks"
self.poutput("two")
- def pph(self, statement: cmd2.Statement) -> Tuple[bool, cmd2.Statement]:
- self.called_pph += 1
+ def postparse_hook(self, statement: cmd2.Statement) -> Tuple[bool, cmd2.Statement]:
+ "A postparsing hook"
+ self.called_postparsing += 1
return False, statement
- def pph_stop(self, statement: cmd2.Statement) -> Tuple[bool, cmd2.Statement]:
- self.called_pph += 1
+ def postparse_hook_stop(self, statement: cmd2.Statement) -> Tuple[bool, cmd2.Statement]:
+ "A postparsing hook with requests application exit"
+ self.called_postparsing += 1
return True, statement
- def pph_emptystatement(self, statement: cmd2.Statement) -> Tuple[bool, cmd2.Statement]:
- self.called_pph += 1
+ def postparse_hook_emptystatement(self, statement: cmd2.Statement) -> Tuple[bool, cmd2.Statement]:
+ "A postparsing hook with raises an EmptyStatement exception"
+ self.called_postparsing += 1
raise cmd2.EmptyStatement
- def pph_exception(self, statement: cmd2.Statement) -> Tuple[bool, cmd2.Statement]:
- self.called_pph += 1
+ def postparse_hook_exception(self, statement: cmd2.Statement) -> Tuple[bool, cmd2.Statement]:
+ "A postparsing hook which raises an exception"
+ self.called_postparsing += 1
raise ValueError
+ def precmd(self, statement: cmd2.Statement) -> cmd2.Statement:
+ "Override cmd.Cmd method"
+ self.called_precmd += 1
+ return statement
+
+ def precmd_hook(self, statement: cmd2.Statement) -> cmd2.Statement:
+ "A precommand hook"
+ self.called_precmd += 1
+ return statement
+
+ def precmd_hook_emptystatement(self, statement: cmd2.Statement) -> cmd2.Statement:
+ "A precommand hook which raises an EmptyStatement exception"
+ self.called_precmd += 1
+ raise cmd2.EmptyStatement
+
+ def precmd_hook_exception(self, statement: cmd2.Statement) -> cmd2.Statement:
+ "A precommand hook which raises an exception"
+ self.called_precmd += 1
+ raise ValueError
+
+
class PluggedApp(Plugin, cmd2.Cmd):
"A sample app with a plugin mixed in"
def __init__(self, *args, **kwargs):
@@ -56,7 +84,7 @@ class PluggedApp(Plugin, cmd2.Cmd):
###
#
-# test hooks
+# test pre and postloop hooks
#
###
def test_preloop_hook(capsys):
@@ -101,133 +129,248 @@ def test_postloop_hooks(capsys):
assert out == 'hello\none\ntwo\n'
assert not err
+###
+#
+# test postparsing hooks
+#
+###
def test_postparsing_hook(capsys):
app = PluggedApp()
app.onecmd_plus_hooks('say hello')
out, err = capsys.readouterr()
assert out == 'hello\n'
assert not err
- assert not app.called_pph
+ assert not app.called_postparsing
app.reset_counters()
- app.register_postparsing_hook(app.pph)
+ app.register_postparsing_hook(app.postparse_hook)
app.onecmd_plus_hooks('say hello')
out, err = capsys.readouterr()
assert out == 'hello\n'
assert not err
- assert app.called_pph == 1
+ assert app.called_postparsing == 1
- # register the function again, so it should be called
- # twice
+ # register the function again, so it should be called twice
app.reset_counters()
- app.register_postparsing_hook(app.pph)
+ app.register_postparsing_hook(app.postparse_hook)
app.onecmd_plus_hooks('say hello')
out, err = capsys.readouterr()
assert out == 'hello\n'
assert not err
- assert app.called_pph == 2
+ assert app.called_postparsing == 2
def test_postparsing_hook_stop_first(capsys):
app = PluggedApp()
- app.register_postparsing_hook(app.pph_stop)
+ app.register_postparsing_hook(app.postparse_hook_stop)
stop = app.onecmd_plus_hooks('say hello')
- assert app.called_pph == 1
+ assert app.called_postparsing == 1
assert stop
# register another function but it shouldn't be called
app.reset_counters()
- app.register_postparsing_hook(app.pph)
+ app.register_postparsing_hook(app.postparse_hook)
stop = app.onecmd_plus_hooks('say hello')
- assert app.called_pph == 1
+ assert app.called_postparsing == 1
assert stop
def test_postparsing_hook_stop_second(capsys):
app = PluggedApp()
- app.register_postparsing_hook(app.pph)
+ app.register_postparsing_hook(app.postparse_hook)
stop = app.onecmd_plus_hooks('say hello')
- assert app.called_pph == 1
+ assert app.called_postparsing == 1
assert not stop
# register another function and make sure it gets called
app.reset_counters()
- app.register_postparsing_hook(app.pph_stop)
+ app.register_postparsing_hook(app.postparse_hook_stop)
stop = app.onecmd_plus_hooks('say hello')
- assert app.called_pph == 2
+ assert app.called_postparsing == 2
assert stop
# register a third function which shouldn't be called
app.reset_counters()
- app.register_postparsing_hook(app.pph)
+ app.register_postparsing_hook(app.postparse_hook)
stop = app.onecmd_plus_hooks('say hello')
- assert app.called_pph == 2
+ assert app.called_postparsing == 2
assert stop
def test_postparsing_hook_emptystatement_first(capsys):
app = PluggedApp()
- app.register_postparsing_hook(app.pph_emptystatement)
+ app.register_postparsing_hook(app.postparse_hook_emptystatement)
stop = app.onecmd_plus_hooks('say hello')
out, err = capsys.readouterr()
assert not stop
assert not out
assert not err
- assert app.called_pph == 1
+ assert app.called_postparsing == 1
# register another function but it shouldn't be called
app.reset_counters()
- stop = app.register_postparsing_hook(app.pph)
+ stop = app.register_postparsing_hook(app.postparse_hook)
app.onecmd_plus_hooks('say hello')
out, err = capsys.readouterr()
assert not stop
assert not out
assert not err
- assert app.called_pph == 1
+ assert app.called_postparsing == 1
def test_postparsing_hook_emptystatement_second(capsys):
app = PluggedApp()
- app.register_postparsing_hook(app.pph)
+ app.register_postparsing_hook(app.postparse_hook)
stop = app.onecmd_plus_hooks('say hello')
out, err = capsys.readouterr()
assert not stop
assert out == 'hello\n'
assert not err
- assert app.called_pph == 1
+ assert app.called_postparsing == 1
# register another function and make sure it gets called
app.reset_counters()
- app.register_postparsing_hook(app.pph_emptystatement)
+ app.register_postparsing_hook(app.postparse_hook_emptystatement)
stop = app.onecmd_plus_hooks('say hello')
out, err = capsys.readouterr()
assert not stop
assert not out
assert not err
- assert app.called_pph == 2
+ assert app.called_postparsing == 2
# register a third function which shouldn't be called
app.reset_counters()
- app.register_postparsing_hook(app.pph)
+ app.register_postparsing_hook(app.postparse_hook)
stop = app.onecmd_plus_hooks('say hello')
out, err = capsys.readouterr()
assert not stop
assert not out
assert not err
- assert app.called_pph == 2
+ assert app.called_postparsing == 2
def test_postparsing_hook_exception(capsys):
app = PluggedApp()
- app.register_postparsing_hook(app.pph_exception)
+ app.register_postparsing_hook(app.postparse_hook_exception)
stop = app.onecmd_plus_hooks('say hello')
out, err = capsys.readouterr()
assert not stop
assert not out
assert err
- assert app.called_pph == 1
+ assert app.called_postparsing == 1
# register another function, but it shouldn't be called
app.reset_counters()
- stop = app.register_postparsing_hook(app.pph)
+ stop = app.register_postparsing_hook(app.postparse_hook)
app.onecmd_plus_hooks('say hello')
out, err = capsys.readouterr()
assert not stop
assert not out
assert err
- assert app.called_pph == 1
+ assert app.called_postparsing == 1
+
+###
+#
+# test precmd hooks
+#
+#####
+def test_precmd_hook(capsys):
+ app = PluggedApp()
+ app.onecmd_plus_hooks('say hello')
+ out, err = capsys.readouterr()
+ assert out == 'hello\n'
+ assert not err
+ # without registering any hooks, precmd() should be called
+ assert app.called_precmd == 1
+
+ app.reset_counters()
+ app.register_precmd_hook(app.precmd_hook)
+ app.onecmd_plus_hooks('say hello')
+ out, err = capsys.readouterr()
+ assert out == 'hello\n'
+ assert not err
+ # with one hook registered, we should get precmd() and the hook
+ assert app.called_precmd == 2
+
+ # register the function again, so it should be called twice
+ app.reset_counters()
+ app.register_precmd_hook(app.precmd_hook)
+ app.onecmd_plus_hooks('say hello')
+ out, err = capsys.readouterr()
+ assert out == 'hello\n'
+ assert not err
+ # with two hooks registered, we should get precmd() and both hooks
+ assert app.called_precmd == 3
+
+def test_precmd_hook_emptystatement_first(capsys):
+ app = PluggedApp()
+ app.register_precmd_hook(app.precmd_hook_emptystatement)
+ stop = app.onecmd_plus_hooks('say hello')
+ out, err = capsys.readouterr()
+ assert not stop
+ assert not out
+ assert not err
+ # since the registered hooks are called before precmd(), if a registered
+ # hook throws an exception, precmd() is never called
+ assert app.called_precmd == 1
+
+ # register another function but it shouldn't be called
+ app.reset_counters()
+ stop = app.register_precmd_hook(app.precmd_hook)
+ app.onecmd_plus_hooks('say hello')
+ out, err = capsys.readouterr()
+ assert not stop
+ assert not out
+ assert not err
+ # the exception raised by the first hook should prevent the second
+ # hook from being called, and it also prevents precmd() from being
+ # called
+ assert app.called_precmd == 1
+
+def test_precmd_hook_emptystatement_second(capsys):
+ app = PluggedApp()
+ app.register_precmd_hook(app.precmd_hook)
+ stop = app.onecmd_plus_hooks('say hello')
+ out, err = capsys.readouterr()
+ assert not stop
+ assert out == 'hello\n'
+ assert not err
+ # with one hook registered, we should get precmd() and the hook
+ assert app.called_precmd == 2
+
+ # register another function and make sure it gets called
+ app.reset_counters()
+ app.register_precmd_hook(app.precmd_hook_emptystatement)
+ stop = app.onecmd_plus_hooks('say hello')
+ out, err = capsys.readouterr()
+ assert not stop
+ assert not out
+ assert not err
+ # since the registered hooks are called before precmd(), if a registered
+ # hook throws an exception, precmd() is never called
+ assert app.called_precmd == 2
+
+ # register a third function which shouldn't be called
+ app.reset_counters()
+ app.register_precmd_hook(app.precmd_hook)
+ stop = app.onecmd_plus_hooks('say hello')
+ out, err = capsys.readouterr()
+ assert not stop
+ assert not out
+ assert not err
+ # the exception raised by the second hook should prevent the third
+ # hook from being called. since the registered hooks are called before precmd(),
+ # if a registered hook throws an exception, precmd() is never called
+ assert app.called_precmd == 2
+
+###
+#
+# test postcmd hooks
+#
+####
+def test_postcmd(capsys):
+ pass
+
+##
+#
+# command finalization
+#
+###
+def test_cmdfinalization(capsys):
+ pass
+