diff --git a/IPython/frontend/terminal/tests/test_interactivshell.py b/IPython/frontend/terminal/tests/test_interactivshell.py new file mode 100644 index 0000000..0578b94 --- /dev/null +++ b/IPython/frontend/terminal/tests/test_interactivshell.py @@ -0,0 +1,123 @@ +# -*- coding: utf-8 -*- +"""Tests for the key interactiveshell module. + +Authors +------- +* Julian Taylor +""" +#----------------------------------------------------------------------------- +# Copyright (C) 2011 The IPython Development Team +# +# Distributed under the terms of the BSD License. The full license is in +# the file COPYING, distributed as part of this software. +#----------------------------------------------------------------------------- + +#----------------------------------------------------------------------------- +# Imports +#----------------------------------------------------------------------------- +# stdlib +import unittest + +from IPython.testing.decorators import skipif + +class InteractiveShellTestCase(unittest.TestCase): + def rl_hist_entries(self, rl, n): + """Get last n readline history entries as a list""" + return [rl.get_history_item(rl.get_current_history_length() - x) + for x in range(n - 1, -1, -1)] + + def test_runs_without_rl(self): + """Test that function does not throw without readline""" + ip = get_ipython() + ip.has_readline = False + ip.readline = None + ip._replace_rlhist_multiline(u'source') + + @skipif(not get_ipython().has_readline, 'no readline') + def test_replace_multiline_hist_disabled(self): + """Test that multiline replace does nothing if disabled""" + ip = get_ipython() + ip.multiline_history = False + + ghist = [u'line1', u'line2'] + for h in ghist: + ip.readline.add_history(h) + ip.hlen_before_cell = ip.readline.get_current_history_length() + ip._replace_rlhist_multiline(u'sourc€\nsource2') + + self.assertEquals(ip.readline.get_current_history_length(), + ip.hlen_before_cell) + hist = self.rl_hist_entries(ip.readline, 2) + self.assertEquals(hist, ghist) + + @skipif(not get_ipython().has_readline, 'no readline') + def test_replace_multiline_hist_adds(self): + """Test that multiline replace function adds history""" + ip = get_ipython() + + ip.hlen_before_cell = ip.readline.get_current_history_length() + ip._replace_rlhist_multiline(u'sourc€') + + self.assertEquals(ip.hlen_before_cell, + ip.readline.get_current_history_length()) + + @skipif(not get_ipython().has_readline, 'no readline') + def test_replace_multiline_hist_keeps_history(self): + """Test that multiline replace does not delete history""" + ip = get_ipython() + ip.multiline_history = True + + ghist = [u'line1', u'line2'] + for h in ghist: + ip.readline.add_history(h) + + #start cell + ip.hlen_before_cell = ip.readline.get_current_history_length() + ip._replace_rlhist_multiline(u'sourc€\nsource2') + + self.assertEquals(ip.readline.get_current_history_length(), + ip.hlen_before_cell) + hist = self.rl_hist_entries(ip.readline, 3) + self.assertEquals(hist, ghist + ['sourc€\nsource2']) + + @skipif(not get_ipython().has_readline, 'no readline') + def test_replace_multiline_hist_replaces(self): + """Test that multiline entries are replaced""" + ip = get_ipython() + ip.multiline_history = True + + ip.readline.add_history(u'line0') + #start cell + ip.hlen_before_cell = ip.readline.get_current_history_length() + ip.readline.add_history('l€ne1') + ip.readline.add_history('line2') + #replace cell with single line + ip._replace_rlhist_multiline(u'l€ne1\nline2') + + self.assertEquals(ip.readline.get_current_history_length(), + ip.hlen_before_cell) + hist = self.rl_hist_entries(ip.readline, 2) + self.assertEquals(hist, [u'line0', 'l€ne1\nline2']) + + @skipif(not get_ipython().has_readline, 'no readline') + def test_replace_multiline_hist_replaces_twice(self): + """Test that multiline entries are replaced twice""" + ip = get_ipython() + ip.multiline_history = True + + ip.readline.add_history(u'line0') + #start cell + ip.hlen_before_cell = ip.readline.get_current_history_length() + ip.readline.add_history('l€ne1') + ip.readline.add_history('line2') + #replace cell with single line + ip._replace_rlhist_multiline(u'l€ne1\nline2') + ip.readline.add_history('l€ne3') + ip.readline.add_history('line4') + #replace cell with single line + ip._replace_rlhist_multiline(u'l€ne3\nline4') + + self.assertEquals(ip.readline.get_current_history_length(), + ip.hlen_before_cell) + hist = self.rl_hist_entries(ip.readline, 3) + self.assertEquals(hist, ['line0', 'l€ne1\nline2', 'l€ne3\nline4'])