diff options
Diffstat (limited to 'tests/test_history.py')
-rw-r--r-- | tests/test_history.py | 117 |
1 files changed, 116 insertions, 1 deletions
diff --git a/tests/test_history.py b/tests/test_history.py index 98d72512..32b507ce 100644 --- a/tests/test_history.py +++ b/tests/test_history.py @@ -5,6 +5,7 @@ Test history functions of cmd2 """ import tempfile import os +import sys import pytest @@ -17,7 +18,35 @@ except ImportError: import cmd2 from cmd2 import clipboard from cmd2 import utils -from .conftest import run_cmd, normalize +from .conftest import run_cmd, normalize, HELP_HISTORY + + +def test_base_help_history(base_app): + out = run_cmd(base_app, 'help history') + assert out == normalize(HELP_HISTORY) + +def test_exclude_from_history(base_app, monkeypatch): + # Mock out the os.system call so we don't actually open an editor + m = mock.MagicMock(name='system') + monkeypatch.setattr("os.system", m) + + # Run edit command + run_cmd(base_app, 'edit') + + # Run history command + run_cmd(base_app, 'history') + + # Verify that the history is empty + out = run_cmd(base_app, 'history') + assert out == [] + + # Now run a command which isn't excluded from the history + run_cmd(base_app, 'help') + # And verify we have a history now ... + out = run_cmd(base_app, 'history') + expected = normalize(""" 1 help""") + assert out == expected + @pytest.fixture def hist(): @@ -264,3 +293,89 @@ def test_history_script_expanded(base_app): output = run_cmd(base_app, 'history -sx') expected = ['alias create s shortcuts', 'shortcuts'] assert output == expected + + +##### +# +# readline tests +# +##### +def test_readline_remove_history_item(base_app): + from cmd2.rl_utils import readline + assert readline.get_current_history_length() == 0 + readline.add_history('this is a test') + assert readline.get_current_history_length() == 1 + readline.remove_history_item(0) + assert readline.get_current_history_length() == 0 + + +@pytest.fixture(scope="session") +def hist_file(): + fd, filename = tempfile.mkstemp(prefix='hist_file', suffix='.txt') + os.close(fd) + yield filename + # teardown code + try: + os.remove(filename) + except FileNotFoundError: + pass + +def test_existing_history_file(hist_file, capsys): + import atexit + import readline + + # Create the history file before making cmd2 app + with open(hist_file, 'w'): + pass + + # Create a new cmd2 app + app = cmd2.Cmd(persistent_history_file=hist_file) + out, err = capsys.readouterr() + + # Make sure there were no errors + assert err == '' + + # Unregister the call to write_history_file that cmd2 did + atexit.unregister(readline.write_history_file) + + # Remove created history file + os.remove(hist_file) + +def test_new_history_file(hist_file, capsys): + import atexit + import readline + + # Remove any existing history file + try: + os.remove(hist_file) + except OSError: + pass + + # Create a new cmd2 app + app = cmd2.Cmd(persistent_history_file=hist_file) + out, err = capsys.readouterr() + + # Make sure there were no errors + assert err == '' + + # Unregister the call to write_history_file that cmd2 did + atexit.unregister(readline.write_history_file) + + # Remove created history file + os.remove(hist_file) + +def test_bad_history_file_path(capsys, request): + # Use a directory path as the history file + test_dir = os.path.dirname(request.module.__file__) + + # Create a new cmd2 app + app = cmd2.Cmd(persistent_history_file=test_dir) + out, err = capsys.readouterr() + + if sys.platform == 'win32': + # pyreadline masks the read exception. Therefore the bad path error occurs when trying to write the file. + assert 'readline cannot write' in err + else: + # GNU readline raises an exception upon trying to read the directory as a file + assert 'readline cannot read' in err + |