1
0
mirror of https://github.com/nvbn/thefuck.git synced 2024-10-06 02:41:10 +01:00
thefuck/tests/test_ui.py

109 lines
3.8 KiB
Python
Raw Normal View History

2015-07-29 13:22:24 +01:00
# -*- encoding: utf-8 -*-
2015-07-28 20:04:27 +01:00
import pytest
from itertools import islice
from thefuck import ui
from thefuck.types import CorrectedCommand
from thefuck import const
2015-07-28 20:04:27 +01:00
@pytest.fixture
def patch_get_key(monkeypatch):
2015-07-28 20:04:27 +01:00
def patch(vals):
vals = iter(vals)
monkeypatch.setattr('thefuck.ui.get_key', lambda: next(vals))
2015-07-28 20:04:27 +01:00
return patch
def test_read_actions(patch_get_key):
patch_get_key([
# Enter:
'\n',
# Enter:
'\r',
# Ignored:
'x', 'y',
# Up:
const.KEY_UP, 'k',
# Down:
const.KEY_DOWN, 'j',
# Ctrl+C:
const.KEY_CTRL_C, 'q'])
assert (list(islice(ui.read_actions(), 8))
== [const.ACTION_SELECT, const.ACTION_SELECT,
const.ACTION_PREVIOUS, const.ACTION_PREVIOUS,
const.ACTION_NEXT, const.ACTION_NEXT,
const.ACTION_ABORT, const.ACTION_ABORT])
2015-07-28 20:04:27 +01:00
def test_command_selector():
selector = ui.CommandSelector(iter([1, 2, 3]))
2015-07-28 20:04:27 +01:00
assert selector.value == 1
selector.next()
assert selector.value == 2
selector.next()
assert selector.value == 3
selector.next()
assert selector.value == 1
selector.previous()
assert selector.value == 3
2015-09-07 10:12:16 +01:00
@pytest.mark.usefixtures('no_colors')
2015-07-28 20:04:27 +01:00
class TestSelectCommand(object):
@pytest.fixture
2015-09-07 10:12:16 +01:00
def commands_with_side_effect(self):
return [CorrectedCommand('ls', lambda *_: None, 100),
CorrectedCommand('cd', lambda *_: None, 100)]
2015-07-28 20:04:27 +01:00
@pytest.fixture
2015-09-07 10:12:16 +01:00
def commands(self):
return [CorrectedCommand('ls', None, 100),
CorrectedCommand('cd', None, 100)]
2015-07-28 20:04:27 +01:00
def test_without_commands(self, capsys):
assert ui.select_command(iter([])) is None
assert capsys.readouterr() == ('', 'No fucks given\n')
2015-07-28 20:04:27 +01:00
2015-09-07 10:12:16 +01:00
def test_without_confirmation(self, capsys, commands, settings):
settings.require_confirmation = False
assert ui.select_command(iter(commands)) == commands[0]
2017-08-26 05:16:51 +01:00
assert capsys.readouterr() == ('', const.USER_COMMAND_MARK + 'ls\n')
2015-07-28 20:04:27 +01:00
2015-09-07 10:12:16 +01:00
def test_without_confirmation_with_side_effects(
self, capsys, commands_with_side_effect, settings):
settings.require_confirmation = False
assert (ui.select_command(iter(commands_with_side_effect))
== commands_with_side_effect[0])
2017-08-26 05:16:51 +01:00
assert capsys.readouterr() == ('', const.USER_COMMAND_MARK + 'ls (+side effect)\n')
2015-07-28 20:04:27 +01:00
def test_with_confirmation(self, capsys, patch_get_key, commands):
patch_get_key(['\n'])
assert ui.select_command(iter(commands)) == commands[0]
2017-08-26 05:16:51 +01:00
assert capsys.readouterr() == (
'', const.USER_COMMAND_MARK + u'\x1b[1K\rls [enter/↑/↓/ctrl+c]\n')
2015-07-28 20:04:27 +01:00
def test_with_confirmation_abort(self, capsys, patch_get_key, commands):
patch_get_key([const.KEY_CTRL_C])
assert ui.select_command(iter(commands)) is None
2017-08-26 05:16:51 +01:00
assert capsys.readouterr() == (
'', const.USER_COMMAND_MARK + u'\x1b[1K\rls [enter/↑/↓/ctrl+c]\nAborted\n')
2015-07-28 20:04:27 +01:00
def test_with_confirmation_with_side_effct(self, capsys, patch_get_key,
2015-07-28 20:04:27 +01:00
commands_with_side_effect):
patch_get_key(['\n'])
assert (ui.select_command(iter(commands_with_side_effect))
== commands_with_side_effect[0])
2017-08-26 05:16:51 +01:00
assert capsys.readouterr() == (
'', const.USER_COMMAND_MARK + u'\x1b[1K\rls (+side effect) [enter/↑/↓/ctrl+c]\n')
2015-07-28 20:04:27 +01:00
def test_with_confirmation_select_second(self, capsys, patch_get_key, commands):
patch_get_key([const.KEY_DOWN, '\n'])
assert ui.select_command(iter(commands)) == commands[1]
2017-08-26 05:16:51 +01:00
stderr = (
u'{mark}\x1b[1K\rls [enter/↑/↓/ctrl+c]'
u'{mark}\x1b[1K\rcd [enter/↑/↓/ctrl+c]\n'
).format(mark=const.USER_COMMAND_MARK)
assert capsys.readouterr() == ('', stderr)