Skip to content

Commit 4fbe263

Browse files
authored
Merge pull request #468 from python-cmd2/hist_tests
Added unit tests for persistent history file
2 parents 5d2133a + 87ab9c8 commit 4fbe263

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

tests/test_cmd2.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1825,3 +1825,74 @@ def test_onecmd_raw_str_quit(base_app):
18251825
assert stop
18261826
assert out == ''
18271827

1828+
1829+
@pytest.fixture(scope="session")
1830+
def hist_file():
1831+
fd, filename = tempfile.mkstemp(prefix='hist_file', suffix='.txt')
1832+
os.close(fd)
1833+
yield filename
1834+
# teardown code
1835+
try:
1836+
os.remove(filename)
1837+
except FileNotFoundError:
1838+
pass
1839+
1840+
def test_existing_history_file(hist_file, capsys):
1841+
import atexit
1842+
import readline
1843+
1844+
# Create the history file before making cmd2 app
1845+
with open(hist_file, 'w'):
1846+
pass
1847+
1848+
# Create a new cmd2 app
1849+
app = cmd2.Cmd(persistent_history_file=hist_file)
1850+
out, err = capsys.readouterr()
1851+
1852+
# Make sure there were no errors
1853+
assert err == ''
1854+
1855+
# Unregister the call to write_history_file that cmd2 did
1856+
atexit.unregister(readline.write_history_file)
1857+
1858+
# Remove created history file
1859+
os.remove(hist_file)
1860+
1861+
1862+
def test_new_history_file(hist_file, capsys):
1863+
import atexit
1864+
import readline
1865+
1866+
# Remove any existing history file
1867+
try:
1868+
os.remove(hist_file)
1869+
except OSError:
1870+
pass
1871+
1872+
# Create a new cmd2 app
1873+
app = cmd2.Cmd(persistent_history_file=hist_file)
1874+
out, err = capsys.readouterr()
1875+
1876+
# Make sure there were no errors
1877+
assert err == ''
1878+
1879+
# Unregister the call to write_history_file that cmd2 did
1880+
atexit.unregister(readline.write_history_file)
1881+
1882+
# Remove created history file
1883+
os.remove(hist_file)
1884+
1885+
def test_bad_history_file_path(capsys, request):
1886+
# Use a directory path as the history file
1887+
test_dir = os.path.dirname(request.module.__file__)
1888+
1889+
# Create a new cmd2 app
1890+
app = cmd2.Cmd(persistent_history_file=test_dir)
1891+
out, err = capsys.readouterr()
1892+
1893+
if sys.platform == 'win32':
1894+
# pyreadline masks the read exception. Therefore the bad path error occurs when trying to write the file.
1895+
assert 'readline cannot write' in err
1896+
else:
1897+
# GNU readline raises an exception upon trying to read the directory as a file
1898+
assert 'readline cannot read' in err

0 commit comments

Comments
 (0)