1import pytest
2from mock import patch
3from thefuck.rules import pacman
4from thefuck.rules.pacman import match, get_new_command
5from thefuck.types import Command
6
7
8pacman_cmd = getattr(pacman, 'pacman', 'pacman')
9
10PKGFILE_OUTPUT_SUDO = 'core/sudo 1.8.13-13/usr/bin/sudo'
11PKGFILE_OUTPUT_CONVERT = 'extra/imagemagick 6.9.1.0-1\t/usr/bin/convert'
…lines 12–16 unchanged (5 lines)
17extra/vim-python3 7.4.712-1 \t/usr/bin/vim'''
18
19
20@pytest.mark.skipif(not getattr(pacman, 'enabled_by_default', True),
21 reason='Skip if pacman is not available')
22@pytest.mark.parametrize('command', [
23 Command('vim', 'vim: command not found'),
24 Command('sudo vim', 'sudo: vim: command not found')])
25def test_match(command):
26 assert match(command)
27
28
29@pytest.mark.parametrize('command, return_value', [
30 (Command('vim', 'vim: command not found'), PKGFILE_OUTPUT_VIM),
31 (Command('sudo vim', 'sudo: vim: command not found'), PKGFILE_OUTPUT_VIM)])
32@patch('thefuck.specific.archlinux.subprocess')
33@patch.multiple(pacman, create=True, pacman=pacman_cmd)
34def test_match_mocked(subp_mock, command, return_value):
35 subp_mock.check_output.return_value = return_value
36 assert match(command)
37
38
39@pytest.mark.parametrize('command', [
40 Command('vim', ''), Command('', ''),
41 Command('sudo vim', ''), Command('', '')])
42def test_not_match(command):
43 assert not match(command)
44
45
46sudo_vim_possibilities = ['{} -S extra/gvim && sudo vim',
47 '{} -S extra/gvim-python3 && sudo vim',
…lines 48–57 unchanged (10 lines)
58vim_possibilities = [s.format(pacman_cmd) for s in vim_possibilities]
59
60
61@pytest.mark.skipif(not getattr(pacman, 'enabled_by_default', True),
62 reason='Skip if pacman is not available')
63@pytest.mark.parametrize('command, new_command', [
64 (Command('vim', ''), vim_possibilities),
65 (Command('sudo vim', ''), sudo_vim_possibilities),
66 (Command('convert', ''), ['{} -S extra/imagemagick && convert'.format(pacman_cmd)]),
67 (Command('sudo convert', ''), ['{} -S extra/imagemagick && sudo convert'.format(pacman_cmd)])])
68def test_get_new_command(command, new_command, mocker):
69 assert get_new_command(command) == new_command
70
71
72@pytest.mark.parametrize('command, new_command, return_value', [
73 (Command('vim', ''), vim_possibilities, PKGFILE_OUTPUT_VIM),
74 (Command('sudo vim', ''), sudo_vim_possibilities, PKGFILE_OUTPUT_VIM),
75 (Command('convert', ''), ['{} -S extra/imagemagick && convert'.format(pacman_cmd)], PKGFILE_OUTPUT_CONVERT),
76 (Command('sudo', ''), ['{} -S core/sudo && sudo'.format(pacman_cmd)], PKGFILE_OUTPUT_SUDO),
77 (Command('sudo convert', ''), ['{} -S extra/imagemagick && sudo convert'.format(pacman_cmd)], PKGFILE_OUTPUT_CONVERT)])
78@patch('thefuck.specific.archlinux.subprocess')
79@patch.multiple(pacman, create=True, pacman=pacman_cmd)
80def test_get_new_command_mocked(subp_mock, command, new_command, return_value):
81 subp_mock.check_output.return_value = return_value
82 assert get_new_command(command) == new_command
83