summaryrefslogtreecommitdiff
path: root/tests/test_cmd2.py
diff options
context:
space:
mode:
authorTodd Leonhardt <todd.leonhardt@gmail.com>2018-07-12 10:09:14 -0400
committerGitHub <noreply@github.com>2018-07-12 10:09:14 -0400
commit4fbe263ae6cb3bfac461cab6daf92364b1620e5f (patch)
tree2109d0d318ead59b2c2e658d0aa0b5e717902e82 /tests/test_cmd2.py
parent5d2133ae8e67435d1f2af17cd80d0490c0ba0f82 (diff)
parent87ab9c8a86d51966fee94f53a1b136d231d764e5 (diff)
downloadcmd2-git-4fbe263ae6cb3bfac461cab6daf92364b1620e5f.tar.gz
Merge pull request #468 from python-cmd2/hist_tests
Added unit tests for persistent history file
Diffstat (limited to 'tests/test_cmd2.py')
-rw-r--r--tests/test_cmd2.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/test_cmd2.py b/tests/test_cmd2.py
index e5dd3baa..25d1db3f 100644
--- a/tests/test_cmd2.py
+++ b/tests/test_cmd2.py
@@ -1825,3 +1825,74 @@ def test_onecmd_raw_str_quit(base_app):
assert stop
assert out == ''
+
+@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