aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2019-12-12 15:12:37 +0100
committerGitHub <noreply@github.com>2019-12-12 15:12:37 +0100
commita58b8c9cdbfea7bb77d36e646ce14e6f4f1d64f3 (patch)
treef7ed8885641f1d4623c932f05a0531bec8c119d8 /test
parentd62835f6cd62cd0445c029f67e82afe32a82814a (diff)
parentd42e8b2fe6cad23d3aca38823439a39d33adc8cb (diff)
downloadmitmproxy-a58b8c9cdbfea7bb77d36e646ce14e6f4f1d64f3.tar.gz
mitmproxy-a58b8c9cdbfea7bb77d36e646ce14e6f4f1d64f3.tar.bz2
mitmproxy-a58b8c9cdbfea7bb77d36e646ce14e6f4f1d64f3.zip
Merge pull request #3724 from typoon/command-history-file
Save user executed commands to a history file
Diffstat (limited to 'test')
-rw-r--r--test/mitmproxy/addons/test_command_history.py265
-rw-r--r--test/mitmproxy/tools/console/test_commander.py405
2 files changed, 507 insertions, 163 deletions
diff --git a/test/mitmproxy/addons/test_command_history.py b/test/mitmproxy/addons/test_command_history.py
new file mode 100644
index 00000000..df20fba7
--- /dev/null
+++ b/test/mitmproxy/addons/test_command_history.py
@@ -0,0 +1,265 @@
+import os
+
+from mitmproxy.addons import command_history
+from mitmproxy.test import taddons
+
+
+class TestCommandHistory:
+ def test_load_from_file(self, tmpdir):
+ commands = ['cmd1', 'cmd2', 'cmd3']
+ with open(tmpdir.join('command_history'), 'w') as f:
+ f.write("\n".join(commands))
+
+ ch = command_history.CommandHistory()
+ with taddons.context(ch) as tctx:
+ tctx.options.confdir = str(tmpdir)
+ assert ch.history == commands
+
+ def test_add_command(self):
+ history = command_history.CommandHistory()
+
+ history.add_command('cmd1')
+ history.add_command('cmd2')
+
+ assert history.history == ['cmd1', 'cmd2']
+
+ history.add_command('')
+ assert history.history == ['cmd1', 'cmd2']
+
+ def test_get_next_and_prev(self, tmpdir):
+ ch = command_history.CommandHistory()
+
+ with taddons.context(ch) as tctx:
+ tctx.options.confdir = str(tmpdir)
+
+ ch.add_command('cmd1')
+
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+
+ ch.add_command('cmd2')
+
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+ assert ch.get_prev() == 'cmd2'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_next() == 'cmd2'
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+
+ ch.add_command('cmd3')
+
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+ assert ch.get_prev() == 'cmd3'
+ assert ch.get_prev() == 'cmd2'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_next() == 'cmd2'
+ assert ch.get_next() == 'cmd3'
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+ assert ch.get_prev() == 'cmd3'
+ assert ch.get_prev() == 'cmd2'
+
+ ch.add_command('cmd4')
+
+ assert ch.get_prev() == 'cmd4'
+ assert ch.get_prev() == 'cmd3'
+ assert ch.get_prev() == 'cmd2'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_next() == 'cmd2'
+ assert ch.get_next() == 'cmd3'
+ assert ch.get_next() == 'cmd4'
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+
+ ch.add_command('cmd5')
+ ch.add_command('cmd6')
+
+ assert ch.get_next() == ''
+ assert ch.get_prev() == 'cmd6'
+ assert ch.get_prev() == 'cmd5'
+ assert ch.get_prev() == 'cmd4'
+ assert ch.get_next() == 'cmd5'
+ assert ch.get_prev() == 'cmd4'
+ assert ch.get_prev() == 'cmd3'
+ assert ch.get_prev() == 'cmd2'
+ assert ch.get_next() == 'cmd3'
+ assert ch.get_prev() == 'cmd2'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_next() == 'cmd2'
+ assert ch.get_next() == 'cmd3'
+ assert ch.get_next() == 'cmd4'
+ assert ch.get_next() == 'cmd5'
+ assert ch.get_next() == 'cmd6'
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+
+ ch.clear_history()
+
+ def test_clear(self, tmpdir):
+ ch = command_history.CommandHistory()
+
+ with taddons.context(ch) as tctx:
+ tctx.options.confdir = str(tmpdir)
+ ch.add_command('cmd1')
+ ch.add_command('cmd2')
+ ch.clear_history()
+
+ saved_commands = ch.get_history()
+ assert saved_commands == []
+
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+ assert ch.get_prev() == ''
+ assert ch.get_prev() == ''
+
+ ch.clear_history()
+
+ def test_filter(self, tmpdir):
+ ch = command_history.CommandHistory()
+
+ with taddons.context(ch) as tctx:
+ tctx.options.confdir = str(tmpdir)
+
+ ch.add_command('cmd1')
+ ch.add_command('cmd2')
+ ch.add_command('abc')
+ ch.set_filter('c')
+
+ assert ch.get_next() == 'c'
+ assert ch.get_next() == 'c'
+ assert ch.get_prev() == 'cmd2'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_next() == 'cmd2'
+ assert ch.get_next() == 'c'
+ assert ch.get_next() == 'c'
+
+ ch.set_filter('')
+
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+ assert ch.get_prev() == 'abc'
+ assert ch.get_prev() == 'cmd2'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_prev() == 'cmd1'
+ assert ch.get_next() == 'cmd2'
+ assert ch.get_next() == 'abc'
+ assert ch.get_next() == ''
+ assert ch.get_next() == ''
+
+ ch.clear_history()
+
+ def test_multiple_instances(self, tmpdir):
+ ch = command_history.CommandHistory()
+ with taddons.context(ch) as tctx:
+ tctx.options.confdir = str(tmpdir)
+
+ instances = [
+ command_history.CommandHistory(),
+ command_history.CommandHistory(),
+ command_history.CommandHistory()
+ ]
+
+ for i in instances:
+ i.configure('command_history')
+ saved_commands = i.get_history()
+ assert saved_commands == []
+
+ instances[0].add_command('cmd1')
+ saved_commands = instances[0].get_history()
+ assert saved_commands == ['cmd1']
+
+ # These instances haven't yet added a new command, so they haven't
+ # yet reloaded their commands from the command file.
+ # This is expected, because if the user is filtering a command on
+ # another window, we don't want to interfere with that
+ saved_commands = instances[1].get_history()
+ assert saved_commands == []
+ saved_commands = instances[2].get_history()
+ assert saved_commands == []
+
+ # Since the second instanced added a new command, its list of
+ # saved commands has been updated to have the commands from the
+ # first instance + its own commands
+ instances[1].add_command('cmd2')
+ saved_commands = instances[1].get_history()
+ assert saved_commands == ['cmd2']
+
+ saved_commands = instances[0].get_history()
+ assert saved_commands == ['cmd1']
+
+ # Third instance is still empty as it has not yet ran any command
+ saved_commands = instances[2].get_history()
+ assert saved_commands == []
+
+ instances[2].add_command('cmd3')
+ saved_commands = instances[2].get_history()
+ assert saved_commands == ['cmd3']
+
+ instances[0].add_command('cmd4')
+ saved_commands = instances[0].get_history()
+ assert saved_commands == ['cmd1', 'cmd4']
+
+ instances.append(command_history.CommandHistory())
+ instances[3].configure('command_history')
+ saved_commands = instances[3].get_history()
+ assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4']
+
+ instances[0].add_command('cmd_before_close')
+ instances.pop(0).done()
+
+ saved_commands = instances[0].get_history()
+ assert saved_commands == ['cmd2']
+
+ instances[0].add_command('new_cmd')
+ saved_commands = instances[0].get_history()
+ assert saved_commands == ['cmd2', 'new_cmd']
+
+ instances.pop(0).done()
+ instances.pop(0).done()
+ instances.pop(0).done()
+
+ _path = os.path.join(tctx.options.confdir, 'command_history')
+ lines = open(_path, 'r').readlines()
+ saved_commands = [cmd.strip() for cmd in lines]
+ assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4', 'cmd_before_close', 'new_cmd']
+
+ instances = [
+ command_history.CommandHistory(),
+ command_history.CommandHistory()
+ ]
+
+ for i in instances:
+ i.configure('command_history')
+ i.clear_history()
+ saved_commands = i.get_history()
+ assert saved_commands == []
+
+ instances[0].add_command('cmd1')
+ instances[0].add_command('cmd2')
+ instances[1].add_command('cmd3')
+ instances[1].add_command('cmd4')
+ instances[1].add_command('cmd5')
+
+ saved_commands = instances[1].get_history()
+ assert saved_commands == ['cmd3', 'cmd4', 'cmd5']
+
+ instances.pop().done()
+ instances.pop().done()
+
+ _path = os.path.join(tctx.options.confdir, 'command_history')
+ lines = open(_path, 'r').readlines()
+ saved_commands = [cmd.strip() for cmd in lines]
+ assert saved_commands == ['cmd1', 'cmd2', 'cmd3', 'cmd4', 'cmd5']
diff --git a/test/mitmproxy/tools/console/test_commander.py b/test/mitmproxy/tools/console/test_commander.py
index a77be043..839f81e5 100644
--- a/test/mitmproxy/tools/console/test_commander.py
+++ b/test/mitmproxy/tools/console/test_commander.py
@@ -1,9 +1,30 @@
import pytest
+from mitmproxy import options
+from mitmproxy.addons import command_history
from mitmproxy.test import taddons
from mitmproxy.tools.console.commander import commander
+@pytest.fixture(autouse=True)
+def tctx(tmpdir):
+ # This runs before each test
+ dir_name = tmpdir.mkdir('mitmproxy').dirname
+ confdir = dir_name
+
+ opts = options.Options()
+ opts.set(*[f"confdir={confdir}"])
+ tctx = taddons.context(options=opts)
+ ch = command_history.CommandHistory()
+ tctx.master.addons.add(ch)
+ ch.configure('command_history')
+
+ yield tctx
+
+ # This runs after each test
+ ch.clear_history()
+
+
class TestListCompleter:
def test_cycle(self):
tests = [
@@ -23,178 +44,237 @@ class TestListCompleter:
["b", "ba", "bb", "b"]
],
]
- for start, options, cycle in tests:
- c = commander.ListCompleter(start, options)
+ for start, opts, cycle in tests:
+ c = commander.ListCompleter(start, opts)
for expected in cycle:
assert c.cycle() == expected
class TestCommandEdit:
- def test_open_command_bar(self):
- with taddons.context() as tctx:
- history = commander.CommandHistory(tctx.master, size=3)
- edit = commander.CommandEdit(tctx.master, '', history)
- try:
- edit.update()
- except IndexError:
- pytest.faied("Unexpected IndexError")
+ def test_open_command_bar(self, tctx):
+ edit = commander.CommandEdit(tctx.master, '')
- def test_insert(self):
- with taddons.context() as tctx:
- history = commander.CommandHistory(tctx.master, size=3)
- edit = commander.CommandEdit(tctx.master, '', history)
- edit.keypress(1, 'a')
- assert edit.get_edit_text() == 'a'
-
- # Don't let users type a space before starting a command
- # as a usability feature
- history = commander.CommandHistory(tctx.master, size=3)
- edit = commander.CommandEdit(tctx.master, '', history)
- edit.keypress(1, ' ')
- assert edit.get_edit_text() == ''
+ try:
+ edit.update()
+ except IndexError:
+ pytest.faied("Unexpected IndexError")
- def test_backspace(self):
- with taddons.context() as tctx:
- history = commander.CommandHistory(tctx.master, size=3)
- edit = commander.CommandEdit(tctx.master, '', history)
- edit.keypress(1, 'a')
- edit.keypress(1, 'b')
- assert edit.get_edit_text() == 'ab'
- edit.keypress(1, 'backspace')
- assert edit.get_edit_text() == 'a'
+ def test_insert(self, tctx):
+ edit = commander.CommandEdit(tctx.master, '')
+ edit.keypress(1, 'a')
+ assert edit.get_edit_text() == 'a'
- def test_left(self):
- with taddons.context() as tctx:
- history = commander.CommandHistory(tctx.master, size=3)
- edit = commander.CommandEdit(tctx.master, '', history)
- edit.keypress(1, 'a')
- assert edit.cbuf.cursor == 1
- edit.keypress(1, 'left')
- assert edit.cbuf.cursor == 0
+ # Don't let users type a space before starting a command
+ # as a usability feature
+ edit = commander.CommandEdit(tctx.master, '')
+ edit.keypress(1, ' ')
+ assert edit.get_edit_text() == ''
- # Do it again to make sure it won't go negative
- edit.keypress(1, 'left')
- assert edit.cbuf.cursor == 0
+ def test_backspace(self, tctx):
+ edit = commander.CommandEdit(tctx.master, '')
- def test_right(self):
- with taddons.context() as tctx:
- history = commander.CommandHistory(tctx.master, size=3)
- edit = commander.CommandEdit(tctx.master, '', history)
- edit.keypress(1, 'a')
- assert edit.cbuf.cursor == 1
-
- # Make sure cursor won't go past the text
- edit.keypress(1, 'right')
- assert edit.cbuf.cursor == 1
-
- # Make sure cursor goes left and then back right
- edit.keypress(1, 'left')
- assert edit.cbuf.cursor == 0
- edit.keypress(1, 'right')
- assert edit.cbuf.cursor == 1
-
- def test_up_and_down(self):
- with taddons.context() as tctx:
- history = commander.CommandHistory(tctx.master, size=3)
- edit = commander.CommandEdit(tctx.master, '', history)
-
- buf = commander.CommandBuffer(tctx.master, 'cmd1')
- history.add_command(buf)
- buf = commander.CommandBuffer(tctx.master, 'cmd2')
- history.add_command(buf)
-
- edit.keypress(1, 'up')
- assert edit.get_edit_text() == 'cmd2'
- edit.keypress(1, 'up')
- assert edit.get_edit_text() == 'cmd1'
- edit.keypress(1, 'up')
- assert edit.get_edit_text() == 'cmd1'
-
- history = commander.CommandHistory(tctx.master, size=5)
- edit = commander.CommandEdit(tctx.master, '', history)
- edit.keypress(1, 'a')
- edit.keypress(1, 'b')
- edit.keypress(1, 'c')
- assert edit.get_edit_text() == 'abc'
- edit.keypress(1, 'up')
- assert edit.get_edit_text() == ''
- edit.keypress(1, 'down')
- assert edit.get_edit_text() == 'abc'
- edit.keypress(1, 'down')
- assert edit.get_edit_text() == 'abc'
-
- history = commander.CommandHistory(tctx.master, size=5)
- edit = commander.CommandEdit(tctx.master, '', history)
- buf = commander.CommandBuffer(tctx.master, 'cmd3')
- history.add_command(buf)
- edit.keypress(1, 'z')
- edit.keypress(1, 'up')
- assert edit.get_edit_text() == 'cmd3'
- edit.keypress(1, 'down')
- assert edit.get_edit_text() == 'z'
-
-
-class TestCommandHistory:
- def fill_history(self, commands):
- with taddons.context() as tctx:
- history = commander.CommandHistory(tctx.master, size=3)
- for c in commands:
- cbuf = commander.CommandBuffer(tctx.master, c)
- history.add_command(cbuf)
- return history, tctx.master
-
- def test_add_command(self):
- commands = ["command1", "command2"]
- history, tctx_master = self.fill_history(commands)
-
- saved_commands = [buf.text for buf in history.saved_commands]
- assert saved_commands == [""] + commands
-
- # The history size is only 3. So, we forget the first
- # one command, when adding fourth command
- cbuf = commander.CommandBuffer(tctx_master, "command3")
- history.add_command(cbuf)
- saved_commands = [buf.text for buf in history.saved_commands]
- assert saved_commands == commands + ["command3"]
-
- # Commands with the same text are not repeated in the history one by one
- history.add_command(cbuf)
- saved_commands = [buf.text for buf in history.saved_commands]
- assert saved_commands == commands + ["command3"]
-
- # adding command in execution mode sets index at the beginning of the history
- # and replace the last command buffer if it is empty or has the same text
- cbuf = commander.CommandBuffer(tctx_master, "")
- history.add_command(cbuf)
- history.index = 0
- cbuf = commander.CommandBuffer(tctx_master, "command4")
- history.add_command(cbuf, True)
- assert history.index == history.last_index
- saved_commands = [buf.text for buf in history.saved_commands]
- assert saved_commands == ["command2", "command3", "command4"]
-
- def test_get_next(self):
- commands = ["command1", "command2"]
- history, tctx_master = self.fill_history(commands)
-
- history.index = -1
- expected_items = ["", "command1", "command2"]
- for i in range(3):
- assert history.get_next().text == expected_items[i]
- # We are at the last item of the history
- assert history.get_next() is None
-
- def test_get_prev(self):
- commands = ["command1", "command2"]
- history, tctx_master = self.fill_history(commands)
-
- expected_items = ["command2", "command1", ""]
- history.index = history.last_index + 1
- for i in range(3):
- assert history.get_prev().text == expected_items[i]
- # We are at the first item of the history
- assert history.get_prev() is None
+ edit.keypress(1, 'a')
+ edit.keypress(1, 'b')
+ assert edit.get_edit_text() == 'ab'
+
+ edit.keypress(1, 'backspace')
+ assert edit.get_edit_text() == 'a'
+
+ def test_left(self, tctx):
+ edit = commander.CommandEdit(tctx.master, '')
+
+ edit.keypress(1, 'a')
+ assert edit.cbuf.cursor == 1
+
+ edit.keypress(1, 'left')
+ assert edit.cbuf.cursor == 0
+
+ # Do it again to make sure it won't go negative
+ edit.keypress(1, 'left')
+ assert edit.cbuf.cursor == 0
+
+ def test_right(self, tctx):
+ edit = commander.CommandEdit(tctx.master, '')
+
+ edit.keypress(1, 'a')
+ assert edit.cbuf.cursor == 1
+
+ # Make sure cursor won't go past the text
+ edit.keypress(1, 'right')
+ assert edit.cbuf.cursor == 1
+
+ # Make sure cursor goes left and then back right
+ edit.keypress(1, 'left')
+ assert edit.cbuf.cursor == 0
+
+ edit.keypress(1, 'right')
+ assert edit.cbuf.cursor == 1
+
+ def test_up_and_down(self, tctx):
+ edit = commander.CommandEdit(tctx.master, '')
+
+ tctx.master.commands.execute('commands.history.clear')
+ tctx.master.commands.execute('commands.history.add "cmd1"')
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd1'
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd1'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == ''
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == ''
+
+ edit = commander.CommandEdit(tctx.master, '')
+
+ tctx.master.commands.execute('commands.history.clear')
+ tctx.master.commands.execute('commands.history.add "cmd1"')
+ tctx.master.commands.execute('commands.history.add "cmd2"')
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd2'
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd1'
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd1'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == 'cmd2'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == ''
+
+ edit.keypress(1, 'a')
+ edit.keypress(1, 'b')
+ edit.keypress(1, 'c')
+ assert edit.get_edit_text() == 'abc'
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'abc'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == 'abc'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == 'abc'
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'abc'
+
+ edit = commander.CommandEdit(tctx.master, '')
+ tctx.master.commands.execute('commands.history.add "cmd3"')
+
+ edit.keypress(1, 'z')
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'z'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == 'z'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == 'z'
+
+ edit.keypress(1, 'backspace')
+ assert edit.get_edit_text() == ''
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd3'
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd2'
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd1'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == 'cmd2'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == 'cmd3'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == ''
+
+ edit.keypress(1, 'c')
+ assert edit.get_edit_text() == 'c'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == ''
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd3'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == ''
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd3'
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd2'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == 'cmd3'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == ''
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == ''
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd3'
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd2'
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd1'
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd1'
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd1'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == 'cmd2'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == 'cmd3'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == ''
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == ''
+
+ edit.keypress(1, 'backspace')
+ assert edit.get_edit_text() == ''
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd3'
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd2'
+
+ edit.keypress(1, 'up')
+ assert edit.get_edit_text() == 'cmd1'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == 'cmd2'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == 'cmd3'
+
+ edit.keypress(1, 'down')
+ assert edit.get_edit_text() == ''
class TestCommandBuffer:
@@ -255,8 +335,7 @@ class TestCommandBuffer:
cb.cursor = len(cb.text)
cb.cycle_completion()
- ch = commander.CommandHistory(tctx.master, 30)
- ce = commander.CommandEdit(tctx.master, "se", ch)
+ ce = commander.CommandEdit(tctx.master, "se")
ce.keypress(1, 'tab')
ce.update()
ret = ce.cbuf.render()