diff --git a/tests/rules/test_pacman.py b/tests/rules/test_pacman.py index b9742e7f..90ee2591 100644 --- a/tests/rules/test_pacman.py +++ b/tests/rules/test_pacman.py @@ -23,23 +23,25 @@ extra/vim-python3 7.4.712-1 \t/usr/bin/vim @pytest.mark.skipif(not getattr(pacman, 'enabled_by_default', True), reason='Skip if pacman is not available') @pytest.mark.parametrize('command', [ - Command(script='vim', stderr='vim: command not found')]) + Command(script='vim', stderr='vim: command not found'), + Command(script='sudo vim', stderr='sudo: vim: command not found')]) def test_match(command): assert match(command, None) @pytest.mark.parametrize('command, return_value', [ - (Command(script='vim', stderr='vim: command not found'), PKGFILE_OUTPUT_VIM)]) + (Command(script='vim', stderr='vim: command not found'), PKGFILE_OUTPUT_VIM), + (Command(script='sudo vim', stderr='sudo: vim: command not found'), PKGFILE_OUTPUT_VIM)]) @patch('thefuck.rules.pacman.subprocess') @patch.multiple(pacman, create=True, pacman=pacman_cmd) def test_match_mocked(subp_mock, command, return_value): subp_mock.check_output.return_value = return_value assert match(command, None) - assert subp_mock.check_output.called @pytest.mark.parametrize('command', [ - Command(script='vim', stderr=''), Command()]) + Command(script='vim', stderr=''), Command(), + Command(script='sudo vim', stderr=''), Command()]) def test_not_match(command): assert not match(command, None) @@ -48,19 +50,20 @@ def test_not_match(command): reason='Skip if pacman is not available') @pytest.mark.parametrize('command, new_command', [ (Command('vim'), '{} -S extra/gvim && vim'.format(pacman_cmd)), - (Command('convert'), '{} -S extra/imagemagick && convert'.format(pacman_cmd))]) + (Command('sudo vim'), '{} -S extra/gvim && sudo vim'.format(pacman_cmd)), + (Command('convert'), '{} -S extra/imagemagick && convert'.format(pacman_cmd)), + (Command('sudo convert'), '{} -S extra/imagemagick && sudo convert'.format(pacman_cmd))]) def test_get_new_command(command, new_command, mocker): assert get_new_command(command, None) == new_command @pytest.mark.parametrize('command, new_command, return_value', [ - (Command('vim'), '{} -S extra/gvim && vim'.format(pacman_cmd), - PKGFILE_OUTPUT_VIM), - (Command('convert'), '{} -S extra/imagemagick && convert'.format(pacman_cmd), - PKGFILE_OUTPUT_CONVERT)]) + (Command('vim'), '{} -S extra/gvim && vim'.format(pacman_cmd), PKGFILE_OUTPUT_VIM), + (Command('sudo vim'), '{} -S extra/gvim && sudo vim'.format(pacman_cmd), PKGFILE_OUTPUT_VIM), + (Command('convert'), '{} -S extra/imagemagick && convert'.format(pacman_cmd), PKGFILE_OUTPUT_CONVERT), + (Command('sudo convert'), '{} -S extra/imagemagick && sudo convert'.format(pacman_cmd), PKGFILE_OUTPUT_CONVERT)]) @patch('thefuck.rules.pacman.subprocess') @patch.multiple(pacman, create=True, pacman=pacman_cmd) def test_get_new_command_mocked(subp_mock, command, new_command, return_value): subp_mock.check_output.return_value = return_value assert get_new_command(command, None) == new_command - assert subp_mock.check_output.called diff --git a/thefuck/rules/pacman.py b/thefuck/rules/pacman.py index 08a39ecf..1272827b 100644 --- a/thefuck/rules/pacman.py +++ b/thefuck/rules/pacman.py @@ -1,12 +1,21 @@ import subprocess from thefuck.utils import DEVNULL, which from thefuck import shells +from thefuck.utils import memoize +@memoize def __get_pkgfile(command): try: + command = command.script + + if command.startswith('sudo'): + command = command[5:] + + command = command.split(" ")[0] + return subprocess.check_output( - ['pkgfile', '-b', '-v', command.script.split(" ")[0]], + ['pkgfile', '-b', '-v', command], universal_newlines=True, stderr=DEVNULL ).split() except subprocess.CalledProcessError: