summaryrefslogtreecommitdiff
path: root/tests/test_submenu.py
diff options
context:
space:
mode:
authorTodd Leonhardt <todd.leonhardt@gmail.com>2018-02-07 21:37:37 -0500
committerTodd Leonhardt <todd.leonhardt@gmail.com>2018-02-07 21:37:37 -0500
commit73a03c90e9d0e209e36162047061222e09b8a7c7 (patch)
treea97eea32738c6b713d47749e42094392eaf519ba /tests/test_submenu.py
parent5f9f6ac9557e4ef9eda8247b5c0592e3e5954619 (diff)
downloadcmd2-git-73a03c90e9d0e209e36162047061222e09b8a7c7.tar.gz
Attempt to fix unit tests
Diffstat (limited to 'tests/test_submenu.py')
-rw-r--r--tests/test_submenu.py86
1 files changed, 55 insertions, 31 deletions
diff --git a/tests/test_submenu.py b/tests/test_submenu.py
index da3dcf4d..43e4b9d9 100644
--- a/tests/test_submenu.py
+++ b/tests/test_submenu.py
@@ -5,7 +5,7 @@ Cmd2 testing for argument parsing
import pytest
import cmd2
-from conftest import run_cmd, StdOut
+from conftest import run_cmd, StdOut, normalize
class SecondLevel(cmd2.Cmd):
@@ -16,19 +16,19 @@ class SecondLevel(cmd2.Cmd):
self.top_level_attr = None
def do_say(self, line):
- self.stdout.write("You called a command in SecondLevel with '%s'. " % line)
+ self.poutput("You called a command in SecondLevel with '%s'. " % line)
def help_say(self):
- self.stdout.write("This is a second level menu. Options are qwe, asd, zxc")
+ self.poutput("This is a second level menu. Options are qwe, asd, zxc")
def complete_say(self, text, line, begidx, endidx):
return [s for s in ['qwe', 'asd', 'zxc'] if s.startswith(text)]
def do_get_top_level_attr(self, line):
- self.stdout.write(str(self.top_level_attr))
+ self.poutput(str(self.top_level_attr))
def do_get_prompt(self, line):
- self.stdout.write(self.prompt)
+ self.poutput(self.prompt)
second_level_cmd = SecondLevel()
@@ -47,10 +47,10 @@ class SubmenuApp(cmd2.Cmd):
self.top_level_attr = 123456789
def do_say(self, line):
- self.stdout.write("You called a command in TopLevel with '%s'. " % line)
+ self.poutput("You called a command in TopLevel with '%s'. " % line)
def help_say(self):
- self.stdout.write("This is a top level submenu. Options are qwe, asd, zxc")
+ self.poutput("This is a top level submenu. Options are qwe, asd, zxc")
def complete_say(self, text, line, begidx, endidx):
return [s for s in ['qwe', 'asd', 'zxc'] if s.startswith(text)]
@@ -59,49 +59,73 @@ class SubmenuApp(cmd2.Cmd):
@pytest.fixture
def submenu_app():
app = SubmenuApp()
- second_level_cmd.stdout = app.stdout = StdOut()
+ app.stdout = StdOut()
+ second_level_cmd.stdout = StdOut()
return app
+def run_submenu_cmd(app, cmd):
+ """ Clear StdOut buffers, run the command, extract the buffer contents."""
+ app.stdout.clear()
+ second_level_cmd.stdout.clear()
+ app.onecmd_plus_hooks(cmd)
+ out1 = app.stdout.buffer
+ out2 = second_level_cmd.stdout.buffer
+ app.stdout.clear()
+ second_level_cmd.stdout.clear()
+ return normalize(out1), normalize(out2)
-def test_second_say_from_top_level(submenu_app):
+
+def test_submenu_say_from_top_level(submenu_app):
line = 'testing'
- out = run_cmd(submenu_app, 'second say ' + line)
- assert out == ["You called a command in SecondLevel with '%s'." % line]
+ out1, out2 = run_submenu_cmd(submenu_app, 'say ' + line)
+ assert len(out1) == 1
+ assert len(out2) == 0
+ assert out1[0] == "You called a command in TopLevel with {!r}.".format(line)
+
+def test_submenu_second_say_from_top_level(submenu_app):
+ line = 'testing'
+ out1, out2 = run_submenu_cmd(submenu_app, 'second say ' + line)
+
+ # No output expected from the top level
+ assert out1 == []
+ # Output expected from the second level
+ assert len(out2) == 1
+ assert out2[0] == "You called a command in SecondLevel with {!r}.".format(line)
-def test_say_from_second_level():
+def test_submenu_say_from_second_level():
line = 'testing'
out = run_cmd(second_level_cmd, 'say ' + line)
assert out == ["You called a command in SecondLevel with '%s'." % line]
-def test_help_second_say_from_top_level(submenu_app):
- out = run_cmd(submenu_app, 'help second say')
- assert out == ["This is a second level menu. Options are qwe, asd, zxc"]
+def test_submenu_help_second_say_from_top_level(submenu_app):
+ out1, out2 = run_submenu_cmd(submenu_app, 'help second say')
+ # No output expected from the top level
+ assert out1 == []
+
+ # Output expected from the second level
+ assert out2 == ["This is a second level menu. Options are qwe, asd, zxc"]
-def test_help_say_from_second_level():
+def test_submenu_help_say_from_second_level():
out = run_cmd(second_level_cmd, 'help say')
assert out == ["This is a second level menu. Options are qwe, asd, zxc"]
-def test_help_second(submenu_app):
- out = run_cmd(submenu_app, 'help second')
- out2 = run_cmd(second_level_cmd, 'help')
- assert out == out2
-
-
-def test_from_top_help_second_say(submenu_app):
- out = run_cmd(submenu_app, 'help second say')
- out2 = run_cmd(second_level_cmd, 'help say')
- assert out == out2
+def test_submenu_help_second(submenu_app):
+ out1, out2 = run_submenu_cmd(submenu_app, 'help second')
+ out3 = run_cmd(second_level_cmd, 'help')
+ assert out2 == out3
-def test_shared_attribute(submenu_app):
- out = run_cmd(submenu_app, 'second get_top_level_attr')
- assert out == [str(submenu_app.top_level_attr)]
+def test_submenu_from_top_help_second_say(submenu_app):
+ out1, out2 = run_submenu_cmd(submenu_app, 'help second say')
+ out3 = run_cmd(second_level_cmd, 'help say')
+ assert out2 == out3
-if __name__ == '__main__':
+def test_submenu_shared_attribute(submenu_app):
+ out1, out2 = run_submenu_cmd(submenu_app, 'second get_top_level_attr')
+ assert out2 == [str(submenu_app.top_level_attr)]
- pytest.main('test_submenu.py -v') \ No newline at end of file