summaryrefslogtreecommitdiff
path: root/tests/test_cmd2.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_cmd2.py')
-rw-r--r--tests/test_cmd2.py187
1 files changed, 187 insertions, 0 deletions
diff --git a/tests/test_cmd2.py b/tests/test_cmd2.py
new file mode 100644
index 00000000..8435ac1a
--- /dev/null
+++ b/tests/test_cmd2.py
@@ -0,0 +1,187 @@
+#
+# Cmd2 unit/functional testing
+#
+# Copyright 2016 Federico Ceratto <federico.ceratto@gmail.com>
+# Released under MIT license, see LICENSE file
+
+import mock
+import pytest
+
+from conftest import run_cmd, _normalize
+import cmd2
+
+try:
+ from StringIO import StringIO
+except ImportError:
+ from io import StringIO
+
+
+def test_ver():
+ assert cmd2.__version__ == '0.6.9a'
+
+
+def test_base_help(base_app):
+ out = run_cmd(base_app, 'help')
+ expected = _normalize("""
+Documented commands (type help <topic>):
+========================================
+_load ed history list py save shortcuts
+_relative_load edit l load r set show
+cmdenvironment hi li pause run shell
+
+Undocumented commands:
+======================
+EOF eof exit help q quit
+""")
+ assert out == expected
+
+
+def test_base_help_history(base_app):
+ out = run_cmd(base_app, 'help history')
+ expected = _normalize("""
+history [arg]: lists past commands issued
+
+ | no arg: list all
+ | arg is integer: list one history item, by index
+ | arg is string: string search
+ | arg is /enclosed in forward-slashes/: regular expression search
+
+Usage: history [options] (limit on which commands to include)
+
+Options:
+ -h, --help show this help message and exit
+ -s, --script Script format; no separation lines
+""")
+ assert out == expected
+
+
+def test_base_shortcuts(base_app):
+ out = run_cmd(base_app, 'shortcuts')
+ expected = _normalize("""
+Single-key shortcuts for other commands:
+!: shell
+?: help
+@: load
+@@: _relative_load
+""")
+ assert out == expected
+
+
+def notest_base_(base_app):
+ out = run_cmd(base_app, 'shortcuts')
+ expected = _normalize("""
+""")
+ assert out == expected
+
+
+def test_base_show(base_app):
+ out = run_cmd(base_app, 'show')
+ expected = _normalize("""
+abbrev: True
+case_insensitive: True
+colors: True
+continuation_prompt: >
+debug: False
+default_file_name: command.txt
+echo: False
+feedback_to_output: False
+prompt: (Cmd)
+quiet: False
+timing: False
+""")
+ # ignore "editor: vi" (could be others)
+ out = [l for l in out if not l.startswith('editor: ')]
+ assert out == expected
+
+
+def test_base_set(base_app):
+ out = run_cmd(base_app, 'set quiet True')
+ expected = _normalize("""
+quiet - was: False
+now: True
+""")
+ assert out == expected
+
+ out = run_cmd(base_app, 'show quiet')
+ assert out == ['quiet: True']
+
+
+def test_base_set_not_supported(base_app):
+ out = run_cmd(base_app, 'set qqq True')
+ assert out == []
+ # TODO: check stderr
+
+
+def test_base_shell(base_app, monkeypatch):
+ m = mock.Mock()
+ monkeypatch.setattr("os.system", m)
+ out = run_cmd(base_app, 'shell echo a')
+ assert out == []
+ assert m.called
+ m.assert_called_with('echo a')
+
+
+def test_base_py(base_app):
+ out = run_cmd(base_app, 'py qqq=3')
+ assert out == []
+ out = run_cmd(base_app, 'py print qqq')
+ assert out == []
+ # TODO: check stderr
+
+
+def test_base_error(base_app):
+ out = run_cmd(base_app, 'meow')
+ assert out == ["*** Unknown syntax: meow"]
+
+
+def test_base_history(base_app):
+ run_cmd(base_app, 'help')
+ run_cmd(base_app, 'shortcuts')
+ out = run_cmd(base_app, 'history')
+ expected = _normalize("""
+-------------------------[1]
+help
+-------------------------[2]
+shortcuts
+""")
+ assert out == expected
+
+ out = run_cmd(base_app, 'history he')
+ expected = _normalize("""
+-------------------------[1]
+help
+""")
+ assert out == expected
+
+ out = run_cmd(base_app, 'history sh')
+ expected = _normalize("""
+-------------------------[2]
+shortcuts
+""")
+ assert out == expected
+
+
+def test_base_list(base_app):
+ run_cmd(base_app, 'help')
+ run_cmd(base_app, 'shortcuts')
+ out = run_cmd(base_app, 'list')
+ expected = _normalize("""
+-------------------------[2]
+shortcuts
+""")
+ assert out == expected
+
+
+@pytest.mark.xfail
+def test_base_load(base_app):
+ base_app.read_file_or_url = mock.Mock(
+ return_value=StringIO('set quiet True\n')
+ )
+ out = run_cmd(base_app, 'load myfname')
+ expected = _normalize("""
+quiet - was: False
+now: True
+""")
+ assert out == expected
+
+