diff options
author | Todd Leonhardt <todd.leonhardt@gmail.com> | 2018-06-06 23:35:28 -0400 |
---|---|---|
committer | Todd Leonhardt <todd.leonhardt@gmail.com> | 2018-06-06 23:35:28 -0400 |
commit | e7367b692bad892f27c0dd7ad04e6aa3c9f56230 (patch) | |
tree | 8e318c476b33257671e2053c9f4684cfe8a70fe8 /tests/test_transcript.py | |
parent | 794414745f7c28c4c96300117ce9a57c38d4d5b5 (diff) | |
download | cmd2-git-e7367b692bad892f27c0dd7ad04e6aa3c9f56230.tar.gz |
Fixed a couple potential crashes on opening files
Fixed crashes that occur when attempting to open a file in a non-existent directory or a when the filename is too long.
Specifically fixed this when redirecting output to a file and when saving a transcript based on the history.
Also added a couple unit tests related to the fixes.
Diffstat (limited to 'tests/test_transcript.py')
-rw-r--r-- | tests/test_transcript.py | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/test_transcript.py b/tests/test_transcript.py index 302d80c8..3caf6a37 100644 --- a/tests/test_transcript.py +++ b/tests/test_transcript.py @@ -154,6 +154,32 @@ this is a \/multiline\/ command assert transcript == expected +def test_history_transcript_bad_filename(request, capsys): + app = CmdLineApp() + app.stdout = StdOut() + run_cmd(app, 'orate this is\na /multiline/\ncommand;\n') + run_cmd(app, 'speak /tmp/file.txt is not a regex') + + expected = r"""(Cmd) orate this is +> a /multiline/ +> command; +this is a \/multiline\/ command +(Cmd) speak /tmp/file.txt is not a regex +\/tmp\/file.txt is not a regex +""" + + # make a tmp file + history_fname = '~/fakedir/this_does_not_exist.txt' + + # tell the history command to create a transcript + run_cmd(app, 'history -t "{}"'.format(history_fname)) + + # read in the transcript created by the history command + with pytest.raises(FileNotFoundError): + with open(history_fname) as f: + transcript = f.read() + assert transcript == expected + @pytest.mark.parametrize('expected, transformed', [ # strings with zero or one slash or with escaped slashes means no regular # expression present, so the result should just be what re.escape returns. |