mirror of
				https://github.com/nvbn/thefuck.git
				synced 2025-10-31 07:04:12 +00:00 
			
		
		
		
	Merge pull request #689 from nvbn/682-instant-fuck-mode
Unify work with output in instant and classic modes
This commit is contained in:
		| @@ -306,7 +306,7 @@ side_effect(old_command: Command, fixed_command: str) -> None | ||||
| ``` | ||||
| and optional `enabled_by_default`, `requires_output` and `priority` variables. | ||||
|  | ||||
| `Command` has four attributes: `script`, `stdout`, `stderr` and `script_parts`. | ||||
| `Command` has three attributes: `script`, `output` and `script_parts`. | ||||
| Rule shouldn't change `Command`. | ||||
|  | ||||
|  | ||||
| @@ -317,8 +317,8 @@ Simple example of the rule for running script with `sudo`: | ||||
|  | ||||
| ```python | ||||
| def match(command): | ||||
|     return ('permission denied' in command.stderr.lower() | ||||
|             or 'EACCES' in command.stderr) | ||||
|     return ('permission denied' in command.output.lower() | ||||
|             or 'EACCES' in command.output) | ||||
|  | ||||
|  | ||||
| def get_new_command(command): | ||||
|   | ||||
| @@ -3,22 +3,35 @@ from tests.functional.plots import with_confirmation, without_confirmation, \ | ||||
|     refuse_with_confirmation, history_changed, history_not_changed, \ | ||||
|     select_command_with_arrows, how_to_configure | ||||
|  | ||||
| containers = ((u'thefuck/python3-bash', | ||||
|                u'FROM python:3', | ||||
|                u'bash'), | ||||
|               (u'thefuck/python2-bash', | ||||
|                u'FROM python:2', | ||||
|                u'bash')) | ||||
|  | ||||
| python_3 = (u'thefuck/python3-bash', | ||||
|             u'FROM python:3', | ||||
|             u'sh') | ||||
|  | ||||
| python_2 = (u'thefuck/python2-bash', | ||||
|             u'FROM python:2', | ||||
|             u'sh') | ||||
|  | ||||
|  | ||||
| @pytest.fixture(params=containers) | ||||
| init_bashrc = u'''echo ' | ||||
| export SHELL=/bin/bash | ||||
| export PS1="$ " | ||||
| echo > $HISTFILE | ||||
| eval $(thefuck --alias {}) | ||||
| ' > ~/.bashrc''' | ||||
|  | ||||
|  | ||||
| @pytest.fixture(params=[(python_3, False), | ||||
|                         (python_3, True), | ||||
|                         (python_2, False)]) | ||||
| def proc(request, spawnu, TIMEOUT): | ||||
|     proc = spawnu(*request.param) | ||||
|     container, instant_mode = request.param | ||||
|     proc = spawnu(*container) | ||||
|     proc.sendline(u"pip install /src") | ||||
|     assert proc.expect([TIMEOUT, u'Successfully installed']) | ||||
|     proc.sendline(u"export PS1='$ '") | ||||
|     proc.sendline(u'eval $(thefuck --alias)') | ||||
|     proc.sendline(u'echo > $HISTFILE') | ||||
|     proc.sendline(init_bashrc.format( | ||||
|         u'--enable-experimental-instant-mode' if instant_mode else '')) | ||||
|     proc.sendline(u"bash") | ||||
|     return proc | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -3,29 +3,42 @@ from tests.functional.plots import with_confirmation, without_confirmation, \ | ||||
|     refuse_with_confirmation, history_changed, history_not_changed, \ | ||||
|     select_command_with_arrows, how_to_configure | ||||
|  | ||||
| containers = (('thefuck/python3-zsh', | ||||
|                u'''FROM python:3 | ||||
|                    RUN apt-get update | ||||
|                    RUN apt-get install -yy zsh''', | ||||
|                u'zsh'), | ||||
|               ('thefuck/python2-zsh', | ||||
|                u'''FROM python:2 | ||||
|                    RUN apt-get update | ||||
|                    RUN apt-get install -yy zsh''', | ||||
|                u'zsh')) | ||||
|  | ||||
| python_3 = ('thefuck/python3-zsh', | ||||
|             u'''FROM python:3 | ||||
|                 RUN apt-get update | ||||
|                 RUN apt-get install -yy zsh''', | ||||
|             u'sh') | ||||
|  | ||||
| python_2 = ('thefuck/python2-zsh', | ||||
|             u'''FROM python:2 | ||||
|                 RUN apt-get update | ||||
|                 RUN apt-get install -yy zsh''', | ||||
|             u'sh') | ||||
|  | ||||
|  | ||||
| @pytest.fixture(params=containers) | ||||
| init_zshrc = u'''echo ' | ||||
| export SHELL=/usr/bin/zsh | ||||
| export HISTFILE=~/.zsh_history | ||||
| echo > $HISTFILE | ||||
| export SAVEHIST=100 | ||||
| export HISTSIZE=100 | ||||
| eval $(thefuck --alias {}) | ||||
| setopt INC_APPEND_HISTORY | ||||
| ' > ~/.zshrc''' | ||||
|  | ||||
|  | ||||
| @pytest.fixture(params=[(python_3, False), | ||||
|                         (python_3, True), | ||||
|                         (python_2, False)]) | ||||
| def proc(request, spawnu, TIMEOUT): | ||||
|     proc = spawnu(*request.param) | ||||
|     container, instant_mode = request.param | ||||
|     proc = spawnu(*container) | ||||
|     proc.sendline(u'pip install /src') | ||||
|     assert proc.expect([TIMEOUT, u'Successfully installed']) | ||||
|     proc.sendline(u'eval $(thefuck --alias)') | ||||
|     proc.sendline(u'export HISTFILE=~/.zsh_history') | ||||
|     proc.sendline(u'echo > $HISTFILE') | ||||
|     proc.sendline(u'export SAVEHIST=100') | ||||
|     proc.sendline(u'export HISTSIZE=100') | ||||
|     proc.sendline(u'setopt INC_APPEND_HISTORY') | ||||
|     proc.sendline(init_zshrc.format( | ||||
|         u'--enable-experimental-instant-mode' if instant_mode else '')) | ||||
|     proc.sendline(u"zsh") | ||||
|     return proc | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -1,25 +1,25 @@ | ||||
| import pytest | ||||
| from thefuck.rules.ag_literal import get_new_command, match | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
| def output(): | ||||
|     return ('ERR: Bad regex! pcre_compile() failed at position 1: missing )\n' | ||||
|             'If you meant to search for a literal string, run ag with -Q\n') | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['ag \(']) | ||||
| def test_match(script, stderr): | ||||
|     assert match(Command(script=script, stderr=stderr)) | ||||
| def test_match(script, output): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['ag foo']) | ||||
| def test_not_match(script): | ||||
|     assert not match(Command(script=script)) | ||||
|     assert not match(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, new_cmd', [ | ||||
|     ('ag \(', 'ag -Q \(')]) | ||||
| def test_get_new_command(script, new_cmd, stderr): | ||||
|     assert get_new_command((Command(script=script, stderr=stderr))) == new_cmd | ||||
| def test_get_new_command(script, new_cmd, output): | ||||
|     assert get_new_command((Command(script, output))) == new_cmd | ||||
|   | ||||
| @@ -1,14 +1,14 @@ | ||||
| import pytest | ||||
| from thefuck.rules.apt_get import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, packages', [ | ||||
|     (Command(script='vim', stderr='vim: command not found'), | ||||
|     (Command('vim', 'vim: command not found'), | ||||
|      [('vim', 'main'), ('vim-tiny', 'main')]), | ||||
|     (Command(script='sudo vim', stderr='vim: command not found'), | ||||
|     (Command('sudo vim', 'vim: command not found'), | ||||
|      [('vim', 'main'), ('vim-tiny', 'main')]), | ||||
|     (Command(script='vim', stderr="The program 'vim' is currently not installed. You can install it by typing: sudo apt install vim"), | ||||
|     (Command('vim', "The program 'vim' is currently not installed. You can install it by typing: sudo apt install vim"), | ||||
|      [('vim', 'main'), ('vim-tiny', 'main')])]) | ||||
| def test_match(mocker, command, packages): | ||||
|     mocker.patch('thefuck.rules.apt_get.which', return_value=None) | ||||
| @@ -20,13 +20,13 @@ def test_match(mocker, command, packages): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, packages, which', [ | ||||
|     (Command(script='a_bad_cmd', stderr='a_bad_cmd: command not found'), | ||||
|     (Command('a_bad_cmd', 'a_bad_cmd: command not found'), | ||||
|      [], None), | ||||
|     (Command(script='vim', stderr=''), [], None), | ||||
|     (Command(), [], None), | ||||
|     (Command(script='vim', stderr='vim: command not found'), | ||||
|     (Command('vim', ''), [], None), | ||||
|     (Command('', ''), [], None), | ||||
|     (Command('vim', 'vim: command not found'), | ||||
|      ['vim'], '/usr/bin/vim'), | ||||
|     (Command(script='sudo vim', stderr='vim: command not found'), | ||||
|     (Command('sudo vim', 'vim: command not found'), | ||||
|      ['vim'], '/usr/bin/vim')]) | ||||
| def test_not_match(mocker, command, packages, which): | ||||
|     mocker.patch('thefuck.rules.apt_get.which', return_value=which) | ||||
| @@ -38,14 +38,14 @@ def test_not_match(mocker, command, packages, which): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command, packages', [ | ||||
|     (Command('vim'), 'sudo apt-get install vim && vim', | ||||
|     (Command('vim', ''), 'sudo apt-get install vim && vim', | ||||
|      [('vim', 'main'), ('vim-tiny', 'main')]), | ||||
|     (Command('convert'), 'sudo apt-get install imagemagick && convert', | ||||
|     (Command('convert', ''), 'sudo apt-get install imagemagick && convert', | ||||
|      [('imagemagick', 'main'), | ||||
|       ('graphicsmagick-imagemagick-compat', 'universe')]), | ||||
|     (Command('sudo vim'), 'sudo apt-get install vim && sudo vim', | ||||
|     (Command('sudo vim', ''), 'sudo apt-get install vim && sudo vim', | ||||
|      [('vim', 'main'), ('vim-tiny', 'main')]), | ||||
|     (Command('sudo convert'), 'sudo apt-get install imagemagick && sudo convert', | ||||
|     (Command('sudo convert', ''), 'sudo apt-get install imagemagick && sudo convert', | ||||
|      [('imagemagick', 'main'), | ||||
|       ('graphicsmagick-imagemagick-compat', 'universe')])]) | ||||
| def test_get_new_command(mocker, command, new_command, packages): | ||||
|   | ||||
| @@ -1,25 +1,26 @@ | ||||
| import pytest | ||||
| from thefuck.rules.apt_get_search import get_new_command, match | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| def test_match(): | ||||
|     assert match(Command('apt-get search foo')) | ||||
|     assert match(Command('apt-get search foo', '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('apt-cache search foo'), | ||||
|     Command('aptitude search foo'), | ||||
|     Command('apt search foo'), | ||||
|     Command('apt-get install foo'), | ||||
|     Command('apt-get source foo'), | ||||
|     Command('apt-get clean'), | ||||
|     Command('apt-get remove'), | ||||
|     Command('apt-get update') | ||||
|     Command('apt-cache search foo', ''), | ||||
|     Command('aptitude search foo', ''), | ||||
|     Command('apt search foo', ''), | ||||
|     Command('apt-get install foo', ''), | ||||
|     Command('apt-get source foo', ''), | ||||
|     Command('apt-get clean', ''), | ||||
|     Command('apt-get remove', ''), | ||||
|     Command('apt-get update', '') | ||||
| ]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(): | ||||
|     assert get_new_command(Command('apt-get search foo')) == 'apt-cache search foo' | ||||
|     new_command = get_new_command(Command('apt-get search foo', '')) | ||||
|     assert new_command == 'apt-cache search foo' | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| from io import BytesIO | ||||
| import pytest | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
| from thefuck.rules.apt_invalid_operation import match, get_new_command, \ | ||||
|     _get_operations | ||||
|  | ||||
| @@ -77,19 +77,19 @@ apt_get_operations = ['update', 'upgrade', 'install', 'remove', 'autoremove', | ||||
|                       'changelog', 'download'] | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('apt', invalid_operation('saerch')), | ||||
|     ('apt-get', invalid_operation('isntall')), | ||||
|     ('apt-cache', invalid_operation('rumove'))]) | ||||
| def test_match(script, stderr): | ||||
|     assert match(Command(script, stderr=stderr)) | ||||
| def test_match(script, output): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('vim', invalid_operation('vim')), | ||||
|     ('apt-get', "")]) | ||||
| def test_not_match(script, stderr): | ||||
|     assert not match(Command(script, stderr=stderr)) | ||||
| def test_not_match(script, output): | ||||
|     assert not match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| @@ -111,12 +111,12 @@ def test_get_operations(set_help, app, help_text, operations): | ||||
|     assert _get_operations(app) == operations | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr, help_text, result', [ | ||||
| @pytest.mark.parametrize('script, output, help_text, result', [ | ||||
|     ('apt-get isntall vim', invalid_operation('isntall'), | ||||
|      apt_get_help, 'apt-get install vim'), | ||||
|     ('apt saerch vim', invalid_operation('saerch'), | ||||
|      apt_help, 'apt search vim'), | ||||
| ]) | ||||
| def test_get_new_command(set_help, stderr, script, help_text, result): | ||||
| def test_get_new_command(set_help, output, script, help_text, result): | ||||
|     set_help(help_text) | ||||
|     assert get_new_command(Command(script, stderr=stderr))[0] == result | ||||
|     assert get_new_command(Command(script, output))[0] == result | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| import pytest | ||||
|  | ||||
| from thefuck.rules.aws_cli import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| no_suggestions = '''\ | ||||
| @@ -77,25 +77,25 @@ Invalid choice: 't-item', maybe you meant: | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('aws dynamdb scan', stderr=misspelled_command), | ||||
|     Command('aws dynamodb scn', stderr=misspelled_subcommand), | ||||
|     Command('aws dynamdb scan', misspelled_command), | ||||
|     Command('aws dynamodb scn', misspelled_subcommand), | ||||
|     Command('aws dynamodb t-item', | ||||
|             stderr=misspelled_subcommand_with_multiple_options)]) | ||||
|             misspelled_subcommand_with_multiple_options)]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| def test_not_match(): | ||||
|     assert not match(Command('aws dynamodb invalid', stderr=no_suggestions)) | ||||
|     assert not match(Command('aws dynamodb invalid', no_suggestions)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, result', [ | ||||
|     (Command('aws dynamdb scan', stderr=misspelled_command), | ||||
|     (Command('aws dynamdb scan', misspelled_command), | ||||
|      ['aws dynamodb scan']), | ||||
|     (Command('aws dynamodb scn', stderr=misspelled_subcommand), | ||||
|     (Command('aws dynamodb scn', misspelled_subcommand), | ||||
|      ['aws dynamodb scan']), | ||||
|     (Command('aws dynamodb t-item', | ||||
|              stderr=misspelled_subcommand_with_multiple_options), | ||||
|              misspelled_subcommand_with_multiple_options), | ||||
|      ['aws dynamodb put-item', 'aws dynamodb get-item'])]) | ||||
| def test_get_new_command(command, result): | ||||
|     assert get_new_command(command) == result | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| import pytest | ||||
| from thefuck.rules.brew_install import match, get_new_command | ||||
| from thefuck.rules.brew_install import _get_formulas | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| @@ -28,19 +28,19 @@ def _is_not_okay_to_test(): | ||||
| def test_match(brew_no_available_formula, brew_already_installed, | ||||
|                brew_install_no_argument): | ||||
|     assert match(Command('brew install elsticsearch', | ||||
|                          stderr=brew_no_available_formula)) | ||||
|                          brew_no_available_formula)) | ||||
|     assert not match(Command('brew install git', | ||||
|                              stderr=brew_already_installed)) | ||||
|     assert not match(Command('brew install', stderr=brew_install_no_argument)) | ||||
|                              brew_already_installed)) | ||||
|     assert not match(Command('brew install', brew_install_no_argument)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.skipif(_is_not_okay_to_test(), | ||||
|                     reason='No need to run if there\'s no formula') | ||||
| def test_get_new_command(brew_no_available_formula): | ||||
|     assert get_new_command(Command('brew install elsticsearch', | ||||
|                                    stderr=brew_no_available_formula))\ | ||||
|                                    brew_no_available_formula))\ | ||||
|         == 'brew install elasticsearch' | ||||
|  | ||||
|     assert get_new_command(Command('brew install aa', | ||||
|                                    stderr=brew_no_available_formula))\ | ||||
|                                    brew_no_available_formula))\ | ||||
|         != 'brew install aha' | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
| from thefuck.rules.brew_link import get_new_command, match | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
| def output(): | ||||
|     return ("Error: Could not symlink bin/gcp\n" | ||||
|             "Target /usr/local/bin/gcp\n" | ||||
|             "already exists. You may want to remove it:\n" | ||||
| @@ -23,16 +23,15 @@ def new_command(formula): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['brew link coreutils', 'brew ln coreutils']) | ||||
| def test_match(stderr, script): | ||||
|     assert match(Command(script=script, stderr=stderr)) | ||||
| def test_match(output, script): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['brew link coreutils']) | ||||
| def test_not_match(script): | ||||
|     stderr = '' | ||||
|     assert not match(Command(script=script, stderr=stderr)) | ||||
|     assert not match(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, formula, ', [('brew link coreutils', 'coreutils')]) | ||||
| def test_get_new_command(stderr, new_command, script, formula): | ||||
|     assert get_new_command(Command(script=script, stderr=stderr)) == new_command | ||||
| def test_get_new_command(output, new_command, script, formula): | ||||
|     assert get_new_command(Command(script, output)) == new_command | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
| from thefuck.rules.brew_uninstall import get_new_command, match | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stdout(): | ||||
| def output(): | ||||
|     return ("Uninstalling /usr/local/Cellar/tbb/4.4-20160916... (118 files, 1.9M)\n" | ||||
|             "tbb 4.4-20160526, 4.4-20160722 are still installed.\n" | ||||
|             "Remove all versions with `brew uninstall --force tbb`.\n") | ||||
| @@ -16,16 +16,16 @@ def new_command(formula): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['brew uninstall tbb', 'brew rm tbb', 'brew remove tbb']) | ||||
| def test_match(stdout, script): | ||||
|     assert match(Command(script=script, stdout=stdout)) | ||||
| def test_match(output, script): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['brew remove gnuplot']) | ||||
| def test_not_match(script): | ||||
|     stdout = 'Uninstalling /usr/local/Cellar/gnuplot/5.0.4_1... (44 files, 2.3M)\n' | ||||
|     assert not match(Command(script=script, stdout=stdout)) | ||||
|     output = 'Uninstalling /usr/local/Cellar/gnuplot/5.0.4_1... (44 files, 2.3M)\n' | ||||
|     assert not match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, formula, ', [('brew uninstall tbb', 'tbb')]) | ||||
| def test_get_new_command(stdout, new_command, script, formula): | ||||
|     assert get_new_command(Command(script=script, stdout=stdout)) == new_command | ||||
| def test_get_new_command(output, new_command, script, formula): | ||||
|     assert get_new_command(Command(script, output)) == new_command | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| import pytest | ||||
| from thefuck.rules.brew_unknown_command import match, get_new_command | ||||
| from thefuck.rules.brew_unknown_command import _brew_commands | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| @@ -15,15 +15,15 @@ def brew_unknown_cmd2(): | ||||
|  | ||||
|  | ||||
| def test_match(brew_unknown_cmd): | ||||
|     assert match(Command('brew inst', stderr=brew_unknown_cmd)) | ||||
|     assert match(Command('brew inst', brew_unknown_cmd)) | ||||
|     for command in _brew_commands(): | ||||
|         assert not match(Command('brew ' + command)) | ||||
|         assert not match(Command('brew ' + command, '')) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(brew_unknown_cmd, brew_unknown_cmd2): | ||||
|     assert (get_new_command(Command('brew inst', stderr=brew_unknown_cmd)) | ||||
|     assert (get_new_command(Command('brew inst', brew_unknown_cmd)) | ||||
|             == ['brew list', 'brew install', 'brew uninstall']) | ||||
|  | ||||
|     cmds = get_new_command(Command('brew instaa', stderr=brew_unknown_cmd2)) | ||||
|     cmds = get_new_command(Command('brew instaa', brew_unknown_cmd2)) | ||||
|     assert 'brew install' in cmds | ||||
|     assert 'brew uninstall' in cmds | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
| from thefuck.rules.brew_update_formula import get_new_command, match | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
| def output(): | ||||
|     return ("Error: This command updates brew itself, and does not take formula" | ||||
|             " names.\nUse 'brew upgrade <formula>'.") | ||||
|  | ||||
| @@ -15,16 +15,16 @@ def new_command(formula): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['brew update foo', 'brew update bar zap']) | ||||
| def test_match(stderr, script): | ||||
|     assert match(Command(script=script, stderr=stderr)) | ||||
| def test_match(output, script): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['brew upgrade foo', 'brew update']) | ||||
| def test_not_match(script): | ||||
|     assert not match(Command(script=script, stderr='')) | ||||
|     assert not match(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, formula, ', [ | ||||
|     ('brew update foo', 'foo'), ('brew update bar zap', 'bar zap')]) | ||||
| def test_get_new_command(stderr, new_command, script, formula): | ||||
|     assert get_new_command(Command(script=script, stderr=stderr)) == new_command | ||||
| def test_get_new_command(output, new_command, script, formula): | ||||
|     assert get_new_command(Command(script, output)) == new_command | ||||
|   | ||||
| @@ -1,15 +1,15 @@ | ||||
| import pytest | ||||
| from thefuck.rules.brew_upgrade import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='brew upgrade')]) | ||||
|     Command('brew upgrade', '')]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command('brew upgrade'), 'brew upgrade --all')]) | ||||
|     (Command('brew upgrade', ''), 'brew upgrade --all')]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.cargo_no_command import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| no_such_subcommand_old = """No such subcommand | ||||
| @@ -15,14 +15,14 @@ no_such_subcommand = """error: no such subcommand | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='cargo buid', stderr=no_such_subcommand_old), | ||||
|     Command(script='cargo buils', stderr=no_such_subcommand)]) | ||||
|     Command('cargo buid', no_such_subcommand_old), | ||||
|     Command('cargo buils', no_such_subcommand)]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command('cargo buid', stderr=no_such_subcommand_old), 'cargo build'), | ||||
|     (Command('cargo buils', stderr=no_such_subcommand), 'cargo build')]) | ||||
|     (Command('cargo buid', no_such_subcommand_old), 'cargo build'), | ||||
|     (Command('cargo buils', no_such_subcommand), 'cargo build')]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,25 +1,25 @@ | ||||
| import pytest | ||||
| from thefuck.rules.cd_mkdir import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='cd foo', stderr='cd: foo: No such file or directory'), | ||||
|     Command(script='cd foo/bar/baz', | ||||
|             stderr='cd: foo: No such file or directory'), | ||||
|     Command(script='cd foo/bar/baz', stderr='cd: can\'t cd to foo/bar/baz')]) | ||||
|     Command('cd foo', 'cd: foo: No such file or directory'), | ||||
|     Command('cd foo/bar/baz', | ||||
|             'cd: foo: No such file or directory'), | ||||
|     Command('cd foo/bar/baz', 'cd: can\'t cd to foo/bar/baz')]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='cd foo', stderr=''), Command()]) | ||||
|     Command('cd foo', ''), Command('', '')]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command('cd foo'), 'mkdir -p foo && cd foo'), | ||||
|     (Command('cd foo/bar/baz'), 'mkdir -p foo/bar/baz && cd foo/bar/baz')]) | ||||
|     (Command('cd foo', ''), 'mkdir -p foo && cd foo'), | ||||
|     (Command('cd foo/bar/baz', ''), 'mkdir -p foo/bar/baz && cd foo/bar/baz')]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,12 +1,11 @@ | ||||
| from thefuck.rules.cd_parent import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| def test_match(): | ||||
|     assert match(Command('cd..', stderr='cd..: command not found')) | ||||
|     assert not match(Command()) | ||||
|     assert match(Command('cd..', 'cd..: command not found')) | ||||
|     assert not match(Command('', '')) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(): | ||||
|     assert get_new_command( | ||||
|         Command('cd..')) == 'cd ..' | ||||
|     assert get_new_command(Command('cd..', '')) == 'cd ..' | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| import pytest | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
| from thefuck.rules.chmod_x import match, get_new_command | ||||
|  | ||||
|  | ||||
| @@ -14,26 +14,26 @@ def file_access(mocker): | ||||
|  | ||||
|  | ||||
| @pytest.mark.usefixtures('file_exists', 'file_access') | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('./gradlew build', 'gradlew: Permission denied'), | ||||
|     ('./install.sh --help', 'install.sh: permission denied')]) | ||||
| def test_match(script, stderr): | ||||
|     assert match(Command(script, stderr=stderr)) | ||||
| def test_match(script, output): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr, exists, callable', [ | ||||
| @pytest.mark.parametrize('script, output, exists, callable', [ | ||||
|     ('./gradlew build', 'gradlew: Permission denied', True, True), | ||||
|     ('./gradlew build', 'gradlew: Permission denied', False, False), | ||||
|     ('./gradlew build', 'gradlew: error', True, False), | ||||
|     ('gradlew build', 'gradlew: Permission denied', True, False)]) | ||||
| def test_not_match(file_exists, file_access, script, stderr, exists, callable): | ||||
| def test_not_match(file_exists, file_access, script, output, exists, callable): | ||||
|     file_exists.return_value = exists | ||||
|     file_access.return_value = callable | ||||
|     assert not match(Command(script, stderr=stderr)) | ||||
|     assert not match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, result', [ | ||||
|     ('./gradlew build', 'chmod +x gradlew && ./gradlew build'), | ||||
|     ('./install.sh --help', 'chmod +x install.sh && ./install.sh --help')]) | ||||
| def test_get_new_command(script, result): | ||||
|     assert get_new_command(Command(script)) == result | ||||
|     assert get_new_command(Command(script, '')) == result | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.composer_not_command import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| @@ -41,16 +41,16 @@ def composer_not_command_one_of_this(): | ||||
|  | ||||
| def test_match(composer_not_command, composer_not_command_one_of_this): | ||||
|     assert match(Command('composer udpate', | ||||
|                          stderr=composer_not_command)) | ||||
|                          composer_not_command)) | ||||
|     assert match(Command('composer pdate', | ||||
|                          stderr=composer_not_command_one_of_this)) | ||||
|     assert not match(Command('ls update', stderr=composer_not_command)) | ||||
|                          composer_not_command_one_of_this)) | ||||
|     assert not match(Command('ls update', composer_not_command)) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(composer_not_command, composer_not_command_one_of_this): | ||||
|     assert (get_new_command(Command('composer udpate', | ||||
|                                     stderr=composer_not_command)) | ||||
|                                     composer_not_command)) | ||||
|             == 'composer update') | ||||
|     assert (get_new_command(Command('composer pdate', | ||||
|                                     stderr=composer_not_command_one_of_this)) | ||||
|                                     composer_not_command_one_of_this)) | ||||
|             == 'composer selfupdate') | ||||
|   | ||||
| @@ -1,22 +1,22 @@ | ||||
| import pytest | ||||
| from thefuck.rules.cp_omitting_directory import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('cp dir', 'cp: dor: is a directory'), | ||||
|     ('cp dir', "cp: omitting directory 'dir'")]) | ||||
| def test_match(script, stderr): | ||||
|     assert match(Command(script, stderr=stderr)) | ||||
| def test_match(script, output): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('some dir', 'cp: dor: is a directory'), | ||||
|     ('some dir', "cp: omitting directory 'dir'"), | ||||
|     ('cp dir', '')]) | ||||
| def test_not_match(script, stderr): | ||||
|     assert not match(Command(script, stderr=stderr)) | ||||
| def test_not_match(script, output): | ||||
|     assert not match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(): | ||||
|     assert get_new_command(Command(script='cp dir')) == 'cp -a dir' | ||||
|     assert get_new_command(Command('cp dir', '')) == 'cp -a dir' | ||||
|   | ||||
| @@ -3,7 +3,7 @@ import pytest | ||||
| import tarfile | ||||
| from thefuck.rules.dirty_untar import match, get_new_command, side_effect, \ | ||||
|                                       tar_extensions  # noqa: E126 | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| @@ -52,7 +52,7 @@ parametrize_script = pytest.mark.parametrize('script, fixed', [ | ||||
| @parametrize_script | ||||
| def test_match(ext, tar_error, filename, unquoted, quoted, script, fixed): | ||||
|     tar_error(unquoted.format(ext)) | ||||
|     assert match(Command(script=script.format(filename.format(ext)))) | ||||
|     assert match(Command(script.format(filename.format(ext)), '')) | ||||
|  | ||||
|  | ||||
| @parametrize_extensions | ||||
| @@ -60,7 +60,7 @@ def test_match(ext, tar_error, filename, unquoted, quoted, script, fixed): | ||||
| @parametrize_script | ||||
| def test_side_effect(ext, tar_error, filename, unquoted, quoted, script, fixed): | ||||
|     tar_error(unquoted.format(ext)) | ||||
|     side_effect(Command(script=script.format(filename.format(ext))), None) | ||||
|     side_effect(Command(script.format(filename.format(ext)), ''), None) | ||||
|     assert set(os.listdir('.')) == {unquoted.format(ext), 'd'} | ||||
|  | ||||
|  | ||||
| @@ -69,5 +69,5 @@ def test_side_effect(ext, tar_error, filename, unquoted, quoted, script, fixed): | ||||
| @parametrize_script | ||||
| def test_get_new_command(ext, tar_error, filename, unquoted, quoted, script, fixed): | ||||
|     tar_error(unquoted.format(ext)) | ||||
|     assert (get_new_command(Command(script=script.format(filename.format(ext)))) | ||||
|     assert (get_new_command(Command(script.format(filename.format(ext)), '')) | ||||
|             == fixed.format(dir=quoted.format(''), filename=filename.format(ext))) | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import os | ||||
| import pytest | ||||
| import zipfile | ||||
| from thefuck.rules.dirty_unzip import match, get_new_command, side_effect | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
| from unicodedata import normalize | ||||
|  | ||||
|  | ||||
| @@ -42,7 +42,7 @@ def zip_error(tmpdir): | ||||
|     (u'unzip foo.zip', u'foo.zip')]) | ||||
| def test_match(zip_error, script, filename): | ||||
|     zip_error(filename) | ||||
|     assert match(Command(script=script)) | ||||
|     assert match(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script,filename', [ | ||||
| @@ -52,7 +52,7 @@ def test_match(zip_error, script, filename): | ||||
|     (u'unzip foo.zip', u'foo.zip')]) | ||||
| def test_side_effect(zip_error, script, filename): | ||||
|     zip_error(filename) | ||||
|     side_effect(Command(script=script), None) | ||||
|     side_effect(Command(script, ''), None) | ||||
|  | ||||
|     dir_list = os.listdir(u'.') | ||||
|     if filename not in set(dir_list): | ||||
| @@ -68,4 +68,4 @@ def test_side_effect(zip_error, script, filename): | ||||
|     (u'unzip foo.zip', u'unzip foo.zip -d foo', u'foo.zip')]) | ||||
| def test_get_new_command(zip_error, script, fixed, filename): | ||||
|     zip_error(filename) | ||||
|     assert get_new_command(Command(script=script)) == fixed | ||||
|     assert get_new_command(Command(script, '')) == fixed | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from thefuck.rules.django_south_ghost import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
| def output(): | ||||
|     return '''Traceback (most recent call last): | ||||
|   File "/home/nvbn/work/.../bin/python", line 42, in <module> | ||||
|     exec(compile(__file__f.read(), __file__, "exec")) | ||||
| @@ -40,14 +40,14 @@ south.exceptions.GhostMigrations: | ||||
| '''  # noqa | ||||
|  | ||||
|  | ||||
| def test_match(stderr): | ||||
|     assert match(Command('./manage.py migrate', stderr=stderr)) | ||||
|     assert match(Command('python manage.py migrate', stderr=stderr)) | ||||
|     assert not match(Command('./manage.py migrate')) | ||||
|     assert not match(Command('app migrate', stderr=stderr)) | ||||
|     assert not match(Command('./manage.py test', stderr=stderr)) | ||||
| def test_match(output): | ||||
|     assert match(Command('./manage.py migrate', output)) | ||||
|     assert match(Command('python manage.py migrate', output)) | ||||
|     assert not match(Command('./manage.py migrate', '')) | ||||
|     assert not match(Command('app migrate', output)) | ||||
|     assert not match(Command('./manage.py test', output)) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(): | ||||
|     assert get_new_command(Command('./manage.py migrate auth'))\ | ||||
|     assert get_new_command(Command('./manage.py migrate auth', ''))\ | ||||
|         == './manage.py migrate auth --delete-ghost-migrations' | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from thefuck.rules.django_south_merge import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
| def output(): | ||||
|     return '''Running migrations for app: | ||||
|  ! Migration app:0003_auto... should not have been applied before app:0002_auto__add_field_query_due_date_ but was. | ||||
| Traceback (most recent call last): | ||||
| @@ -30,14 +30,14 @@ The following options are available: | ||||
| ''' | ||||
|  | ||||
|  | ||||
| def test_match(stderr): | ||||
|     assert match(Command('./manage.py migrate', stderr=stderr)) | ||||
|     assert match(Command('python manage.py migrate', stderr=stderr)) | ||||
|     assert not match(Command('./manage.py migrate')) | ||||
|     assert not match(Command('app migrate', stderr=stderr)) | ||||
|     assert not match(Command('./manage.py test', stderr=stderr)) | ||||
| def test_match(output): | ||||
|     assert match(Command('./manage.py migrate', output)) | ||||
|     assert match(Command('python manage.py migrate', output)) | ||||
|     assert not match(Command('./manage.py migrate', '')) | ||||
|     assert not match(Command('app migrate', output)) | ||||
|     assert not match(Command('./manage.py test', output)) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(): | ||||
|     assert (get_new_command(Command('./manage.py migrate auth')) | ||||
|     assert (get_new_command(Command('./manage.py migrate auth', '')) | ||||
|             == './manage.py migrate auth --merge') | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from io import BytesIO | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
| from thefuck.rules.docker_not_command import get_new_command, match | ||||
|  | ||||
|  | ||||
| @@ -104,20 +104,20 @@ Run 'docker COMMAND --help' for more information on a command. | ||||
|     return mock | ||||
|  | ||||
|  | ||||
| def stderr(cmd): | ||||
| def output(cmd): | ||||
|     return "docker: '{}' is not a docker command.\n" \ | ||||
|            "See 'docker --help'.".format(cmd) | ||||
|  | ||||
|  | ||||
| def test_match(): | ||||
|     assert match(Command('docker pes', stderr=stderr('pes'))) | ||||
|     assert match(Command('docker pes', output('pes'))) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('docker ps', ''), | ||||
|     ('cat pes', stderr('pes'))]) | ||||
| def test_not_match(script, stderr): | ||||
|     assert not match(Command(script, stderr=stderr)) | ||||
|     ('cat pes', output('pes'))]) | ||||
| def test_not_match(script, output): | ||||
|     assert not match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.usefixtures('docker_help') | ||||
| @@ -125,5 +125,5 @@ def test_not_match(script, stderr): | ||||
|     ('pes', ['ps', 'push', 'pause']), | ||||
|     ('tags', ['tag', 'stats', 'images'])]) | ||||
| def test_get_new_command(wrong, fixed): | ||||
|     command = Command('docker {}'.format(wrong), stderr=stderr(wrong)) | ||||
|     command = Command('docker {}'.format(wrong), output(wrong)) | ||||
|     assert get_new_command(command) == ['docker {}'.format(x) for x in fixed] | ||||
|   | ||||
| @@ -1,17 +1,17 @@ | ||||
| import pytest | ||||
| from thefuck.rules.dry import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='cd cd foo'), | ||||
|     Command(script='git git push origin/master')]) | ||||
|     Command('cd cd foo', ''), | ||||
|     Command('git git push origin/master', '')]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command('cd cd foo'), 'cd foo'), | ||||
|     (Command('git git push origin/master'), 'git push origin/master')]) | ||||
|     (Command('cd cd foo', ''), 'cd foo'), | ||||
|     (Command('git git push origin/master', ''), 'git push origin/master')]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,13 +1,12 @@ | ||||
| import pytest | ||||
| from thefuck.rules.fab_command_not_found import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
| stderr = ''' | ||||
| output = ''' | ||||
| Warning: Command(s) not found: | ||||
|     extenson | ||||
|     deloyp | ||||
| ''' | ||||
| stdout = ''' | ||||
|  | ||||
| Available commands: | ||||
|  | ||||
|     update_config | ||||
| @@ -21,16 +20,16 @@ Available commands: | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('fab extenson', stderr=stderr), | ||||
|     Command('fab deloyp', stderr=stderr), | ||||
|     Command('fab extenson deloyp', stderr=stderr)]) | ||||
|     Command('fab extenson', output), | ||||
|     Command('fab deloyp', output), | ||||
|     Command('fab extenson deloyp', output)]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('gulp extenson', stderr=stderr), | ||||
|     Command('fab deloyp')]) | ||||
|     Command('gulp extenson', output), | ||||
|     Command('fab deloyp', '')]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
| @@ -45,5 +44,5 @@ def test_not_match(command): | ||||
|      'fab prepare_extension:version=2016 deploy:beta=true -H the.fuck'), | ||||
| ]) | ||||
| def test_get_new_command(script, result): | ||||
|     command = Command(script, stdout, stderr) | ||||
|     command = Command(script, output) | ||||
|     assert get_new_command(command) == result | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # -*- encoding: utf-8 -*- | ||||
|  | ||||
| from thefuck.rules.fix_alt_space import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| def test_match(): | ||||
| @@ -11,12 +11,12 @@ def test_match(): | ||||
|  | ||||
|     """ | ||||
|     assert match(Command(u'ps -ef | grep foo', | ||||
|                          stderr=u'-bash:  grep: command not found')) | ||||
|     assert not match(Command('ps -ef | grep foo')) | ||||
|     assert not match(Command()) | ||||
|                          u'-bash:  grep: command not found')) | ||||
|     assert not match(Command('ps -ef | grep foo', '')) | ||||
|     assert not match(Command('', '')) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(): | ||||
|     """ Replace the Alt+Space character by a simple space """ | ||||
|     assert (get_new_command(Command(u'ps -ef | grep foo')) | ||||
|     assert (get_new_command(Command(u'ps -ef | grep foo', '')) | ||||
|             == 'ps -ef | grep foo') | ||||
|   | ||||
| @@ -3,12 +3,12 @@ | ||||
| import pytest | ||||
| import os | ||||
| from thefuck.rules.fix_file import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| # (script, file, line, col (or None), stdout, stderr) | ||||
| # (script, file, line, col (or None), output) | ||||
| tests = ( | ||||
| ('gcc a.c', 'a.c', 3, 1, '', | ||||
| ('gcc a.c', 'a.c', 3, 1, | ||||
| """ | ||||
| a.c: In function 'main': | ||||
| a.c:3:1: error: expected expression before '}' token | ||||
| @@ -16,47 +16,47 @@ a.c:3:1: error: expected expression before '}' token | ||||
|   ^ | ||||
| """), | ||||
|  | ||||
| ('clang a.c', 'a.c', 3, 1, '', | ||||
| ('clang a.c', 'a.c', 3, 1, | ||||
| """ | ||||
| a.c:3:1: error: expected expression | ||||
| } | ||||
| ^ | ||||
| """), | ||||
|  | ||||
| ('perl a.pl', 'a.pl', 3, None, '', | ||||
| ('perl a.pl', 'a.pl', 3, None, | ||||
| """ | ||||
| syntax error at a.pl line 3, at EOF | ||||
| Execution of a.pl aborted due to compilation errors. | ||||
| """), | ||||
|  | ||||
| ('perl a.pl', 'a.pl', 2, None, '', | ||||
| ('perl a.pl', 'a.pl', 2, None, | ||||
| """ | ||||
| Search pattern not terminated at a.pl line 2. | ||||
| """), | ||||
|  | ||||
| ('sh a.sh', 'a.sh', 2, None, '', | ||||
| ('sh a.sh', 'a.sh', 2, None, | ||||
| """ | ||||
| a.sh: line 2: foo: command not found | ||||
| """), | ||||
|  | ||||
| ('zsh a.sh', 'a.sh', 2, None, '', | ||||
| ('zsh a.sh', 'a.sh', 2, None, | ||||
| """ | ||||
| a.sh:2: command not found: foo | ||||
| """), | ||||
|  | ||||
| ('bash a.sh', 'a.sh', 2, None, '', | ||||
| ('bash a.sh', 'a.sh', 2, None, | ||||
| """ | ||||
| a.sh: line 2: foo: command not found | ||||
| """), | ||||
|  | ||||
| ('rustc a.rs', 'a.rs', 2, 5, '', | ||||
| ('rustc a.rs', 'a.rs', 2, 5, | ||||
| """ | ||||
| a.rs:2:5: 2:6 error: unexpected token: `+` | ||||
| a.rs:2     + | ||||
|            ^ | ||||
| """), | ||||
|  | ||||
| ('cargo build', 'src/lib.rs', 3, 5, '', | ||||
| ('cargo build', 'src/lib.rs', 3, 5, | ||||
| """ | ||||
|    Compiling test v0.1.0 (file:///tmp/fix-error/test) | ||||
|    src/lib.rs:3:5: 3:6 error: unexpected token: `+` | ||||
| @@ -67,7 +67,7 @@ Could not compile `test`. | ||||
| To learn more, run the command again with --verbose. | ||||
| """), | ||||
|  | ||||
| ('python a.py', 'a.py', 2, None, '', | ||||
| ('python a.py', 'a.py', 2, None, | ||||
| """ | ||||
|   File "a.py", line 2 | ||||
|       + | ||||
| @@ -75,7 +75,7 @@ To learn more, run the command again with --verbose. | ||||
| SyntaxError: invalid syntax | ||||
| """), | ||||
|  | ||||
| ('python a.py', 'a.py', 8, None, '', | ||||
| ('python a.py', 'a.py', 8, None, | ||||
| """ | ||||
| Traceback (most recent call last): | ||||
|   File "a.py", line 8, in <module> | ||||
| @@ -89,7 +89,7 @@ Traceback (most recent call last): | ||||
| TypeError: first argument must be string or compiled pattern | ||||
| """), | ||||
|  | ||||
| (u'python café.py', u'café.py', 8, None, '', | ||||
| (u'python café.py', u'café.py', 8, None, | ||||
| u""" | ||||
| Traceback (most recent call last): | ||||
|   File "café.py", line 8, in <module> | ||||
| @@ -103,43 +103,43 @@ Traceback (most recent call last): | ||||
| TypeError: first argument must be string or compiled pattern | ||||
| """), | ||||
|  | ||||
| ('ruby a.rb', 'a.rb', 3, None, '', | ||||
| ('ruby a.rb', 'a.rb', 3, None, | ||||
| """ | ||||
| a.rb:3: syntax error, unexpected keyword_end | ||||
| """), | ||||
|  | ||||
| ('lua a.lua', 'a.lua', 2, None, '', | ||||
| ('lua a.lua', 'a.lua', 2, None, | ||||
| """ | ||||
| lua: a.lua:2: unexpected symbol near '+' | ||||
| """), | ||||
|  | ||||
| ('fish a.sh', '/tmp/fix-error/a.sh', 2, None, '', | ||||
| ('fish a.sh', '/tmp/fix-error/a.sh', 2, None, | ||||
| """ | ||||
| fish: Unknown command 'foo' | ||||
| /tmp/fix-error/a.sh (line 2): foo | ||||
|                               ^ | ||||
| """), | ||||
|  | ||||
| ('./a', './a', 2, None, '', | ||||
| ('./a', './a', 2, None, | ||||
| """ | ||||
| awk: ./a:2: BEGIN { print "Hello, world!" + } | ||||
| awk: ./a:2:                                 ^ syntax error | ||||
| """), | ||||
|  | ||||
| ('llc a.ll', 'a.ll', 1, 2, '', | ||||
| ('llc a.ll', 'a.ll', 1, 2, | ||||
| """ | ||||
| llc: a.ll:1:2: error: expected top-level entity | ||||
| + | ||||
| ^ | ||||
| """), | ||||
|  | ||||
| ('go build a.go', 'a.go', 1, 2, '', | ||||
| ('go build a.go', 'a.go', 1, 2, | ||||
| """ | ||||
| can't load package: | ||||
| a.go:1:2: expected 'package', found '+' | ||||
| """), | ||||
|  | ||||
| ('make', 'Makefile', 2, None, '', | ||||
| ('make', 'Makefile', 2, None, | ||||
| """ | ||||
| bidule | ||||
| make: bidule: Command not found | ||||
| @@ -147,12 +147,12 @@ Makefile:2: recipe for target 'target' failed | ||||
| make: *** [target] Error 127 | ||||
| """), | ||||
|  | ||||
| ('git st', '/home/martin/.config/git/config', 1, None, '', | ||||
| ('git st', '/home/martin/.config/git/config', 1, None, | ||||
| """ | ||||
| fatal: bad config file line 1 in /home/martin/.config/git/config | ||||
| """), | ||||
|  | ||||
| ('node fuck.js asdf qwer', '/Users/pablo/Workspace/barebones/fuck.js', '2', 5, '', | ||||
| ('node fuck.js asdf qwer', '/Users/pablo/Workspace/barebones/fuck.js', '2', 5, | ||||
| """ | ||||
| /Users/pablo/Workspace/barebones/fuck.js:2 | ||||
| conole.log(arg);  // this should read console.log(arg); | ||||
| @@ -176,7 +176,7 @@ ReferenceError: conole is not defined | ||||
| ./tests/rules/test_systemctl.py:18:80: E501 line too long (103 > 79 characters) | ||||
| ./tests/rules/test_whois.py:20:80: E501 line too long (89 > 79 characters) | ||||
| ./tests/rules/test_whois.py:22:80: E501 line too long (83 > 79 characters) | ||||
| """, ''), | ||||
| """), | ||||
|  | ||||
| ('py.test', '/home/thefuck/tests/rules/test_fix_file.py', 218, None, | ||||
| """ | ||||
| @@ -190,7 +190,7 @@ test = ('fish a.sh', '/tmp/fix-error/a.sh', 2, None, '', "\\nfish: Unknown comma | ||||
| E       NameError: name 'mocker' is not defined | ||||
|  | ||||
| /home/thefuck/tests/rules/test_fix_file.py:218: NameError | ||||
| """, ''), | ||||
| """), | ||||
| )  # noqa | ||||
|  | ||||
|  | ||||
| @@ -199,7 +199,7 @@ E       NameError: name 'mocker' is not defined | ||||
| def test_match(mocker, monkeypatch, test): | ||||
|     mocker.patch('os.path.isfile', return_value=True) | ||||
|     monkeypatch.setenv('EDITOR', 'dummy_editor') | ||||
|     assert match(Command(stdout=test[4], stderr=test[5])) | ||||
|     assert match(Command('', test[4])) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('test', tests) | ||||
| @@ -209,7 +209,7 @@ def test_no_editor(mocker, monkeypatch, test): | ||||
|     if 'EDITOR' in os.environ: | ||||
|         monkeypatch.delenv('EDITOR') | ||||
|  | ||||
|     assert not match(Command(stdout=test[4], stderr=test[5])) | ||||
|     assert not match(Command('', test[4])) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('test', tests) | ||||
| @@ -218,7 +218,7 @@ def test_not_file(mocker, monkeypatch, test): | ||||
|     mocker.patch('os.path.isfile', return_value=False) | ||||
|     monkeypatch.setenv('EDITOR', 'dummy_editor') | ||||
|  | ||||
|     assert not match(Command(stdout=test[4], stderr=test[5])) | ||||
|     assert not match(Command('', test[4])) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('test', tests) | ||||
| @@ -234,7 +234,7 @@ def test_get_new_command_with_settings(mocker, monkeypatch, test, settings): | ||||
|     mocker.patch('os.path.isfile', return_value=True) | ||||
|     monkeypatch.setenv('EDITOR', 'dummy_editor') | ||||
|  | ||||
|     cmd = Command(script=test[0], stdout=test[4], stderr=test[5]) | ||||
|     cmd = Command(test[0], test[4]) | ||||
|     settings.fixcolcmd = '{editor} {file} +{line}:{col}' | ||||
|  | ||||
|     if test[3]: | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| import pytest | ||||
| from six import BytesIO | ||||
| from thefuck.rules.gem_unknown_command import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
| stderr = ''' | ||||
| output = ''' | ||||
| ERROR:  While executing gem ... (Gem::CommandLineError) | ||||
|     Unknown command {} | ||||
| ''' | ||||
| @@ -64,19 +64,19 @@ def gem_help_commands(mocker): | ||||
|     ('gem isntall jekyll', 'isntall'), | ||||
|     ('gem last --local', 'last')]) | ||||
| def test_match(script, command): | ||||
|     assert match(Command(script, stderr=stderr.format(command))) | ||||
|     assert match(Command(script, output.format(command))) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('gem install jekyll', ''), | ||||
|     ('git log', stderr.format('log'))]) | ||||
| def test_not_match(script, stderr): | ||||
|     assert not match(Command(script, stderr=stderr)) | ||||
|     ('git log', output.format('log'))]) | ||||
| def test_not_match(script, output): | ||||
|     assert not match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr, result', [ | ||||
|     ('gem isntall jekyll', stderr.format('isntall'), 'gem install jekyll'), | ||||
|     ('gem last --local', stderr.format('last'), 'gem list --local')]) | ||||
| def test_get_new_command(script, stderr, result): | ||||
|     new_command = get_new_command(Command(script, stderr=stderr)) | ||||
| @pytest.mark.parametrize('script, output, result', [ | ||||
|     ('gem isntall jekyll', output.format('isntall'), 'gem install jekyll'), | ||||
|     ('gem last --local', output.format('last'), 'gem list --local')]) | ||||
| def test_get_new_command(script, output, result): | ||||
|     new_command = get_new_command(Command(script, output)) | ||||
|     assert new_command[0] == result | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_add import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture(autouse=True) | ||||
| @@ -10,7 +10,7 @@ def path_exists(mocker): | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(target): | ||||
| def output(target): | ||||
|     return ("error: pathspec '{}' did not match any " | ||||
|             'file(s) known to git.'.format(target)) | ||||
|  | ||||
| @@ -18,17 +18,17 @@ def stderr(target): | ||||
| @pytest.mark.parametrize('script, target', [ | ||||
|     ('git submodule update unknown', 'unknown'), | ||||
|     ('git commit unknown', 'unknown')]) | ||||
| def test_match(stderr, script, target): | ||||
|     assert match(Command(script=script, stderr=stderr)) | ||||
| def test_match(output, script, target): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, target, exists', [ | ||||
|     ('git submodule update known', '', True), | ||||
|     ('git commit known', '', True), | ||||
|     ('git submodule update known', stderr, False)]) | ||||
| def test_not_match(path_exists, stderr, script, target, exists): | ||||
|     ('git submodule update known', output, False)]) | ||||
| def test_not_match(path_exists, output, script, target, exists): | ||||
|     path_exists.return_value = exists | ||||
|     assert not match(Command(script=script, stderr=stderr)) | ||||
|     assert not match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, target, new_command', [ | ||||
| @@ -36,5 +36,5 @@ def test_not_match(path_exists, stderr, script, target, exists): | ||||
|      'git add -- unknown && git submodule update unknown'), | ||||
|     ('git commit unknown', 'unknown', | ||||
|      'git add -- unknown && git commit unknown')]) | ||||
| def test_get_new_command(stderr, script, target, new_command): | ||||
|     assert get_new_command(Command(script=script, stderr=stderr)) == new_command | ||||
| def test_get_new_command(output, script, target, new_command): | ||||
|     assert get_new_command(Command(script, output)) == new_command | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_add_force import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
| def output(): | ||||
|     return ('The following paths are ignored by one of your .gitignore files:\n' | ||||
|             'dist/app.js\n' | ||||
|             'dist/background.js\n' | ||||
| @@ -12,11 +12,11 @@ def stderr(): | ||||
|             'Use -f if you really want to add them.\n') | ||||
|  | ||||
|  | ||||
| def test_match(stderr): | ||||
|     assert match(Command('git add dist/*.js', stderr=stderr)) | ||||
|     assert not match(Command('git add dist/*.js')) | ||||
| def test_match(output): | ||||
|     assert match(Command('git add dist/*.js', output)) | ||||
|     assert not match(Command('git add dist/*.js', '')) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(stderr): | ||||
|     assert (get_new_command(Command('git add dist/*.js', stderr=stderr)) | ||||
| def test_get_new_command(output): | ||||
|     assert (get_new_command(Command('git add dist/*.js', output)) | ||||
|             == "git add --force dist/*.js") | ||||
|   | ||||
| @@ -1,30 +1,30 @@ | ||||
| import pytest | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
| from thefuck.rules.git_bisect_usage import match, get_new_command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
| def output(): | ||||
|     return ("usage: git bisect [help|start|bad|good|new|old" | ||||
|             "|terms|skip|next|reset|visualize|replay|log|run]") | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', [ | ||||
|     'git bisect strt', 'git bisect rset', 'git bisect goood']) | ||||
| def test_match(stderr, script): | ||||
|     assert match(Command(script=script, stderr=stderr)) | ||||
| def test_match(output, script): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', [ | ||||
|     'git bisect', 'git bisect start', 'git bisect good']) | ||||
| def test_not_match(script): | ||||
|     assert not match(Command(script=script, stderr='')) | ||||
|     assert not match(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, new_cmd, ', [ | ||||
|     ('git bisect goood', ['good', 'old', 'log']), | ||||
|     ('git bisect strt', ['start', 'terms', 'reset']), | ||||
|     ('git bisect rset', ['reset', 'next', 'start'])]) | ||||
| def test_get_new_command(stderr, script, new_cmd): | ||||
| def test_get_new_command(output, script, new_cmd): | ||||
|     new_cmd = ['git bisect %s' % cmd for cmd in new_cmd] | ||||
|     assert get_new_command(Command(script=script, stderr=stderr)) == new_cmd | ||||
|     assert get_new_command(Command(script, output)) == new_cmd | ||||
|   | ||||
| @@ -1,22 +1,22 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_branch_delete import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
| def output(): | ||||
|     return '''error: The branch 'branch' is not fully merged. | ||||
| If you are sure you want to delete it, run 'git branch -D branch'. | ||||
|  | ||||
| ''' | ||||
|  | ||||
|  | ||||
| def test_match(stderr): | ||||
|     assert match(Command('git branch -d branch', stderr=stderr)) | ||||
|     assert not match(Command('git branch -d branch')) | ||||
|     assert not match(Command('ls', stderr=stderr)) | ||||
| def test_match(output): | ||||
|     assert match(Command('git branch -d branch', output)) | ||||
|     assert not match(Command('git branch -d branch', '')) | ||||
|     assert not match(Command('ls', output)) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(stderr): | ||||
|     assert get_new_command(Command('git branch -d branch', stderr=stderr))\ | ||||
| def test_get_new_command(output): | ||||
|     assert get_new_command(Command('git branch -d branch', output))\ | ||||
|         == "git branch -D branch" | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_branch_exists import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(branch_name): | ||||
| def output(branch_name): | ||||
|     return "fatal: A branch named '{}' already exists.".format(branch_name) | ||||
|  | ||||
|  | ||||
| @@ -19,16 +19,16 @@ def new_command(branch_name): | ||||
|  | ||||
| @pytest.mark.parametrize('script, branch_name', [ | ||||
|     ('git branch foo', 'foo'), ('git checkout bar', 'bar')]) | ||||
| def test_match(stderr, script, branch_name): | ||||
|     assert match(Command(script=script, stderr=stderr)) | ||||
| def test_match(output, script, branch_name): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['git branch foo', 'git checkout bar']) | ||||
| def test_not_match(script): | ||||
|     assert not match(Command(script=script, stderr='')) | ||||
|     assert not match(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, branch_name, ', [ | ||||
|     ('git branch foo', 'foo'), ('git checkout bar', 'bar')]) | ||||
| def test_get_new_command(stderr, new_command, script, branch_name): | ||||
|     assert get_new_command(Command(script=script, stderr=stderr)) == new_command | ||||
| def test_get_new_command(output, new_command, script, branch_name): | ||||
|     assert get_new_command(Command(script, output)) == new_command | ||||
|   | ||||
| @@ -1,19 +1,19 @@ | ||||
| from thefuck.rules.git_branch_list import match, get_new_command | ||||
| from thefuck.shells import shell | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| def test_match(): | ||||
|     assert match(Command('git branch list')) | ||||
|     assert match(Command('git branch list', '')) | ||||
|  | ||||
|  | ||||
| def test_not_match(): | ||||
|     assert not match(Command()) | ||||
|     assert not match(Command('git commit')) | ||||
|     assert not match(Command('git branch')) | ||||
|     assert not match(Command('git stash list')) | ||||
|     assert not match(Command('', '')) | ||||
|     assert not match(Command('git commit', '')) | ||||
|     assert not match(Command('git branch', '')) | ||||
|     assert not match(Command('git stash list', '')) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(): | ||||
|     assert (get_new_command(Command('git branch list')) == | ||||
|     assert (get_new_command(Command('git branch list', '')) == | ||||
|             shell.and_('git branch --delete list', 'git branch')) | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| import pytest | ||||
| from io import BytesIO | ||||
| from thefuck.rules.git_checkout import match, get_branches, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| @@ -21,17 +21,17 @@ def git_branch(mocker, branches): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git checkout unknown', stderr=did_not_match('unknown')), | ||||
|     Command(script='git commit unknown', stderr=did_not_match('unknown'))]) | ||||
|     Command('git checkout unknown', did_not_match('unknown')), | ||||
|     Command('git commit unknown', did_not_match('unknown'))]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git submodule update unknown', | ||||
|             stderr=did_not_match('unknown', True)), | ||||
|     Command(script='git checkout known', stderr=('')), | ||||
|     Command(script='git commit known', stderr=(''))]) | ||||
|     Command('git submodule update unknown', | ||||
|             did_not_match('unknown', True)), | ||||
|     Command('git checkout known', ''), | ||||
|     Command('git commit known', '')]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
| @@ -51,18 +51,18 @@ def test_get_branches(branches, branch_list, git_branch): | ||||
|  | ||||
| @pytest.mark.parametrize('branches, command, new_command', [ | ||||
|     (b'', | ||||
|      Command(script='git checkout unknown', stderr=did_not_match('unknown')), | ||||
|      Command('git checkout unknown', did_not_match('unknown')), | ||||
|      'git branch unknown && git checkout unknown'), | ||||
|     (b'', | ||||
|      Command('git commit unknown', stderr=did_not_match('unknown')), | ||||
|      Command('git commit unknown', did_not_match('unknown')), | ||||
|      'git branch unknown && git commit unknown'), | ||||
|     (b'  test-random-branch-123', | ||||
|      Command(script='git checkout tst-rdm-brnch-123', | ||||
|              stderr=did_not_match('tst-rdm-brnch-123')), | ||||
|      Command('git checkout tst-rdm-brnch-123', | ||||
|              did_not_match('tst-rdm-brnch-123')), | ||||
|      'git checkout test-random-branch-123'), | ||||
|     (b'  test-random-branch-123', | ||||
|      Command(script='git commit tst-rdm-brnch-123', | ||||
|              stderr=did_not_match('tst-rdm-brnch-123')), | ||||
|      Command('git commit tst-rdm-brnch-123', | ||||
|              did_not_match('tst-rdm-brnch-123')), | ||||
|      'git commit test-random-branch-123')]) | ||||
| def test_get_new_command(branches, command, new_command, git_branch): | ||||
|     git_branch(branches) | ||||
|   | ||||
| @@ -1,23 +1,23 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_diff_no_index import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git diff foo bar')]) | ||||
|     Command('git diff foo bar', '')]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git diff --no-index foo bar'), | ||||
|     Command(script='git diff foo'), | ||||
|     Command(script='git diff foo bar baz')]) | ||||
|     Command('git diff --no-index foo bar', ''), | ||||
|     Command('git diff foo', ''), | ||||
|     Command('git diff foo bar baz', '')]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command('git diff foo bar'), 'git diff --no-index foo bar')]) | ||||
|     (Command('git diff foo bar', ''), 'git diff --no-index foo bar')]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,26 +1,26 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_diff_staged import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git diff foo'), | ||||
|     Command(script='git diff')]) | ||||
|     Command('git diff foo', ''), | ||||
|     Command('git diff', '')]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git diff --staged'), | ||||
|     Command(script='git tag'), | ||||
|     Command(script='git branch'), | ||||
|     Command(script='git log')]) | ||||
|     Command('git diff --staged', ''), | ||||
|     Command('git tag', ''), | ||||
|     Command('git branch', ''), | ||||
|     Command('git log', '')]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command('git diff'), 'git diff --staged'), | ||||
|     (Command('git diff foo'), 'git diff --staged foo')]) | ||||
|     (Command('git diff', ''), 'git diff --staged'), | ||||
|     (Command('git diff foo', ''), 'git diff --staged foo')]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_fix_stash import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| git_stash_err = ''' | ||||
| @@ -20,11 +20,11 @@ usage: git stash list [<options>] | ||||
|     'git stash Some message', | ||||
|     'git stash saev Some message']) | ||||
| def test_match(wrong): | ||||
|     assert match(Command(wrong, stderr=git_stash_err)) | ||||
|     assert match(Command(wrong, git_stash_err)) | ||||
|  | ||||
|  | ||||
| def test_not_match(): | ||||
|     assert not match(Command("git", stderr=git_stash_err)) | ||||
|     assert not match(Command("git", git_stash_err)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('wrong,fixed', [ | ||||
| @@ -32,4 +32,4 @@ def test_not_match(): | ||||
|     ('git stash Some message', 'git stash save Some message'), | ||||
|     ('git stash saev Some message', 'git stash save Some message')]) | ||||
| def test_get_new_command(wrong, fixed): | ||||
|     assert get_new_command(Command(wrong, stderr=git_stash_err)) == fixed | ||||
|     assert get_new_command(Command(wrong, git_stash_err)) == fixed | ||||
|   | ||||
| @@ -1,13 +1,13 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_flag_after_filename import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
| command1 = Command('git log README.md -p', | ||||
|                    stderr="fatal: bad flag '-p' used after filename") | ||||
|                    "fatal: bad flag '-p' used after filename") | ||||
| command2 = Command('git log README.md -p CONTRIBUTING.md', | ||||
|                    stderr="fatal: bad flag '-p' used after filename") | ||||
|                    "fatal: bad flag '-p' used after filename") | ||||
| command3 = Command('git log -p README.md --name-only', | ||||
|                    stderr="fatal: bad flag '--name-only' used after filename") | ||||
|                    "fatal: bad flag '--name-only' used after filename") | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
| @@ -17,8 +17,8 @@ def test_match(command): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('git log README.md'), | ||||
|     Command('git log -p README.md')]) | ||||
|     Command('git log README.md', ''), | ||||
|     Command('git log -p README.md', '')]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|   | ||||
| @@ -1,24 +1,24 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_help_aliased import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stdout', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('git help st', "`git st' is aliased to `status'"), | ||||
|     ('git help ds', "`git ds' is aliased to `diff --staged'")]) | ||||
| def test_match(script, stdout): | ||||
|     assert match(Command(script=script, stdout=stdout)) | ||||
| def test_match(script, output): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stdout', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('git help status', "GIT-STATUS(1)...Git Manual...GIT-STATUS(1)"), | ||||
|     ('git help diff', "GIT-DIFF(1)...Git Manual...GIT-DIFF(1)")]) | ||||
| def test_not_match(script, stdout): | ||||
|     assert not match(Command(script=script, stdout=stdout)) | ||||
| def test_not_match(script, output): | ||||
|     assert not match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stdout, new_command', [ | ||||
| @pytest.mark.parametrize('script, output, new_command', [ | ||||
|     ('git help st', "`git st' is aliased to `status'", 'git help status'), | ||||
|     ('git help ds', "`git ds' is aliased to `diff --staged'", 'git help diff')]) | ||||
| def test_get_new_command(script, stdout, new_command): | ||||
|     assert get_new_command(Command(script=script, stdout=stdout)) == new_command | ||||
| def test_get_new_command(script, output, new_command): | ||||
|     assert get_new_command(Command(script, output)) == new_command | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_not_command import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| @@ -41,17 +41,17 @@ def git_command(): | ||||
|  | ||||
|  | ||||
| def test_match(git_not_command, git_command, git_not_command_one_of_this): | ||||
|     assert match(Command('git brnch', stderr=git_not_command)) | ||||
|     assert match(Command('git st', stderr=git_not_command_one_of_this)) | ||||
|     assert not match(Command('ls brnch', stderr=git_not_command)) | ||||
|     assert not match(Command('git branch', stderr=git_command)) | ||||
|     assert match(Command('git brnch', git_not_command)) | ||||
|     assert match(Command('git st', git_not_command_one_of_this)) | ||||
|     assert not match(Command('ls brnch', git_not_command)) | ||||
|     assert not match(Command('git branch', git_command)) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(git_not_command, git_not_command_one_of_this, | ||||
|                          git_not_command_closest): | ||||
|     assert (get_new_command(Command('git brnch', stderr=git_not_command)) | ||||
|     assert (get_new_command(Command('git brnch', git_not_command)) | ||||
|             == ['git branch']) | ||||
|     assert (get_new_command(Command('git st', stderr=git_not_command_one_of_this)) | ||||
|     assert (get_new_command(Command('git st', git_not_command_one_of_this)) | ||||
|             == ['git stats', 'git stash', 'git stage']) | ||||
|     assert (get_new_command(Command('git tags', stderr=git_not_command_closest)) | ||||
|     assert (get_new_command(Command('git tags', git_not_command_closest)) | ||||
|             == ['git tag', 'git stage']) | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_pull import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
| def output(): | ||||
|     return '''There is no tracking information for the current branch. | ||||
| Please specify which branch you want to merge with. | ||||
| See git-pull(1) for details | ||||
| @@ -18,12 +18,12 @@ If you wish to set tracking information for this branch you can do so with: | ||||
| ''' | ||||
|  | ||||
|  | ||||
| def test_match(stderr): | ||||
|     assert match(Command('git pull', stderr=stderr)) | ||||
|     assert not match(Command('git pull')) | ||||
|     assert not match(Command('ls', stderr=stderr)) | ||||
| def test_match(output): | ||||
|     assert match(Command('git pull', output)) | ||||
|     assert not match(Command('git pull', '')) | ||||
|     assert not match(Command('ls', output)) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(stderr): | ||||
|     assert (get_new_command(Command('git pull', stderr=stderr)) | ||||
| def test_get_new_command(output): | ||||
|     assert (get_new_command(Command('git pull', output)) | ||||
|             == "git branch --set-upstream-to=origin/master master && git pull") | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_pull_clone import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| git_err = ''' | ||||
| @@ -10,12 +10,12 @@ Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git pull git@github.com:mcarton/thefuck.git', stderr=git_err)]) | ||||
|     Command('git pull git@github.com:mcarton/thefuck.git', git_err)]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, output', [ | ||||
|     (Command(script='git pull git@github.com:mcarton/thefuck.git', stderr=git_err), 'git clone git@github.com:mcarton/thefuck.git')]) | ||||
|     (Command('git pull git@github.com:mcarton/thefuck.git', git_err), 'git clone git@github.com:mcarton/thefuck.git')]) | ||||
| def test_get_new_command(command, output): | ||||
|     assert get_new_command(command) == output | ||||
|   | ||||
| @@ -1,19 +1,19 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_pull_uncommitted_changes import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
| def output(): | ||||
|     return '''error: Cannot pull with rebase: You have unstaged changes.''' | ||||
|  | ||||
|  | ||||
| def test_match(stderr): | ||||
|     assert match(Command('git pull', stderr=stderr)) | ||||
|     assert not match(Command('git pull')) | ||||
|     assert not match(Command('ls', stderr=stderr)) | ||||
| def test_match(output): | ||||
|     assert match(Command('git pull', output)) | ||||
|     assert not match(Command('git pull', '')) | ||||
|     assert not match(Command('ls', output)) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(stderr): | ||||
|     assert (get_new_command(Command('git pull', stderr=stderr)) | ||||
| def test_get_new_command(output): | ||||
|     assert (get_new_command(Command('git pull', output)) | ||||
|             == "git stash && git pull && git stash pop") | ||||
|   | ||||
| @@ -1,19 +1,19 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_pull_uncommitted_changes import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
| def output(): | ||||
|     return '''error: Cannot pull with rebase: Your index contains uncommitted changes.''' | ||||
|  | ||||
|  | ||||
| def test_match(stderr): | ||||
|     assert match(Command('git pull', stderr=stderr)) | ||||
|     assert not match(Command('git pull')) | ||||
|     assert not match(Command('ls', stderr=stderr)) | ||||
| def test_match(output): | ||||
|     assert match(Command('git pull', output)) | ||||
|     assert not match(Command('git pull', '')) | ||||
|     assert not match(Command('ls', output)) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(stderr): | ||||
|     assert (get_new_command(Command('git pull', stderr=stderr)) | ||||
| def test_get_new_command(output): | ||||
|     assert (get_new_command(Command('git pull', output)) | ||||
|             == "git stash && git pull && git stash pop") | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_push import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
| def output(): | ||||
|     return '''fatal: The current branch master has no upstream branch. | ||||
| To push the current branch and set the remote as upstream, use | ||||
|  | ||||
| @@ -13,21 +13,21 @@ To push the current branch and set the remote as upstream, use | ||||
| ''' | ||||
|  | ||||
|  | ||||
| def test_match(stderr): | ||||
|     assert match(Command('git push', stderr=stderr)) | ||||
|     assert match(Command('git push master', stderr=stderr)) | ||||
|     assert not match(Command('git push master')) | ||||
|     assert not match(Command('ls', stderr=stderr)) | ||||
| def test_match(output): | ||||
|     assert match(Command('git push', output)) | ||||
|     assert match(Command('git push master', output)) | ||||
|     assert not match(Command('git push master', '')) | ||||
|     assert not match(Command('ls', output)) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(stderr): | ||||
|     assert get_new_command(Command('git push', stderr=stderr))\ | ||||
| def test_get_new_command(output): | ||||
|     assert get_new_command(Command('git push', output))\ | ||||
|         == "git push --set-upstream origin master" | ||||
|     assert get_new_command(Command('git push -u', stderr=stderr))\ | ||||
|     assert get_new_command(Command('git push -u', output))\ | ||||
|         == "git push --set-upstream origin master" | ||||
|     assert get_new_command(Command('git push -u origin', stderr=stderr))\ | ||||
|     assert get_new_command(Command('git push -u origin', output))\ | ||||
|         == "git push --set-upstream origin master" | ||||
|     assert get_new_command(Command('git push --set-upstream origin', stderr=stderr))\ | ||||
|     assert get_new_command(Command('git push --set-upstream origin', output))\ | ||||
|         == "git push --set-upstream origin master" | ||||
|     assert get_new_command(Command('git push --quiet', stderr=stderr))\ | ||||
|     assert get_new_command(Command('git push --quiet', output))\ | ||||
|         == "git push --set-upstream origin master --quiet" | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_push_force import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| git_err = ''' | ||||
| @@ -26,27 +26,27 @@ To /tmp/bar | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git push', stderr=git_err), | ||||
|     Command(script='git push nvbn', stderr=git_err), | ||||
|     Command(script='git push nvbn master', stderr=git_err)]) | ||||
|     Command('git push', git_err), | ||||
|     Command('git push nvbn', git_err), | ||||
|     Command('git push nvbn master', git_err)]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git push', stderr=git_ok), | ||||
|     Command(script='git push', stderr=git_uptodate), | ||||
|     Command(script='git push nvbn', stderr=git_ok), | ||||
|     Command(script='git push nvbn master', stderr=git_uptodate), | ||||
|     Command(script='git push nvbn', stderr=git_ok), | ||||
|     Command(script='git push nvbn master', stderr=git_uptodate)]) | ||||
|     Command('git push', git_ok), | ||||
|     Command('git push', git_uptodate), | ||||
|     Command('git push nvbn', git_ok), | ||||
|     Command('git push nvbn master', git_uptodate), | ||||
|     Command('git push nvbn', git_ok), | ||||
|     Command('git push nvbn master', git_uptodate)]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, output', [ | ||||
|     (Command(script='git push', stderr=git_err), 'git push --force-with-lease'), | ||||
|     (Command(script='git push nvbn', stderr=git_err), 'git push --force-with-lease nvbn'), | ||||
|     (Command(script='git push nvbn master', stderr=git_err), 'git push --force-with-lease nvbn master')]) | ||||
|     (Command('git push', git_err), 'git push --force-with-lease'), | ||||
|     (Command('git push nvbn', git_err), 'git push --force-with-lease nvbn'), | ||||
|     (Command('git push nvbn master', git_err), 'git push --force-with-lease nvbn master')]) | ||||
| def test_get_new_command(command, output): | ||||
|     assert get_new_command(command) == output | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_push_pull import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| git_err = ''' | ||||
| @@ -37,37 +37,37 @@ To /tmp/bar | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git push', stderr=git_err), | ||||
|     Command(script='git push nvbn', stderr=git_err), | ||||
|     Command(script='git push nvbn master', stderr=git_err), | ||||
|     Command(script='git push', stderr=git_err2), | ||||
|     Command(script='git push nvbn', stderr=git_err2), | ||||
|     Command(script='git push nvbn master', stderr=git_err2)]) | ||||
|     Command('git push', git_err), | ||||
|     Command('git push nvbn', git_err), | ||||
|     Command('git push nvbn master', git_err), | ||||
|     Command('git push', git_err2), | ||||
|     Command('git push nvbn', git_err2), | ||||
|     Command('git push nvbn master', git_err2)]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git push', stderr=git_ok), | ||||
|     Command(script='git push', stderr=git_uptodate), | ||||
|     Command(script='git push nvbn', stderr=git_ok), | ||||
|     Command(script='git push nvbn master', stderr=git_uptodate), | ||||
|     Command(script='git push nvbn', stderr=git_ok), | ||||
|     Command(script='git push nvbn master', stderr=git_uptodate)]) | ||||
|     Command('git push', git_ok), | ||||
|     Command('git push', git_uptodate), | ||||
|     Command('git push nvbn', git_ok), | ||||
|     Command('git push nvbn master', git_uptodate), | ||||
|     Command('git push nvbn', git_ok), | ||||
|     Command('git push nvbn master', git_uptodate)]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, output', [ | ||||
|     (Command(script='git push', stderr=git_err), 'git pull && git push'), | ||||
|     (Command(script='git push nvbn', stderr=git_err), | ||||
|     (Command('git push', git_err), 'git pull && git push'), | ||||
|     (Command('git push nvbn', git_err), | ||||
|      'git pull nvbn && git push nvbn'), | ||||
|     (Command(script='git push nvbn master', stderr=git_err), | ||||
|     (Command('git push nvbn master', git_err), | ||||
|      'git pull nvbn master && git push nvbn master'), | ||||
|     (Command(script='git push', stderr=git_err2), 'git pull && git push'), | ||||
|     (Command(script='git push nvbn', stderr=git_err2), | ||||
|     (Command('git push', git_err2), 'git pull && git push'), | ||||
|     (Command('git push nvbn', git_err2), | ||||
|      'git pull nvbn && git push nvbn'), | ||||
|     (Command(script='git push nvbn master', stderr=git_err2), | ||||
|     (Command('git push nvbn master', git_err2), | ||||
|      'git pull nvbn master && git push nvbn master')]) | ||||
| def test_get_new_command(command, output): | ||||
|     assert get_new_command(command) == output | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
|  | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
| from thefuck.rules.git_push_without_commits import ( | ||||
|     fix, | ||||
|     get_new_command, | ||||
| @@ -14,13 +14,13 @@ error: failed to push some refs to 'git@github.com:User/repo.git' | ||||
| ''' | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [Command(command, stderr=expected_error)]) | ||||
| @pytest.mark.parametrize('command', [Command(command, expected_error)]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, result', [( | ||||
|     Command(command, stderr=expected_error), | ||||
|     Command(command, expected_error), | ||||
|     fix.format(command=command), | ||||
| )]) | ||||
| def test_get_new_command(command, result): | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_rebase_merge_dir import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
| def output(): | ||||
|     return ('\n\nIt seems that there is already a rebase-merge directory, and\n' | ||||
|             'I wonder if you are in the middle of another rebase.  If that is the\n' | ||||
|             'case, please try\n' | ||||
| @@ -16,14 +16,16 @@ def stderr(): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', [ | ||||
|     ('git rebase master'), ('git rebase -skip'), ('git rebase')]) | ||||
| def test_match(stderr, script): | ||||
|     assert match(Command(script=script, stderr=stderr)) | ||||
|     'git rebase master', | ||||
|     'git rebase -skip', | ||||
|     'git rebase']) | ||||
| def test_match(output, script): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['git rebase master', 'git rebase -abort']) | ||||
| def test_not_match(script): | ||||
|     assert not match(Command(script=script)) | ||||
|     assert not match(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, result', [ | ||||
| @@ -36,5 +38,5 @@ def test_not_match(script): | ||||
|     ('git rebase', [ | ||||
|         'git rebase --skip', 'git rebase --abort', 'git rebase --continue', | ||||
|         'rm -fr "/foo/bar/baz/egg/.git/rebase-merge"'])]) | ||||
| def test_get_new_command(stderr, script, result): | ||||
|     assert get_new_command(Command(script=script, stderr=stderr)) == result | ||||
| def test_get_new_command(output, script, result): | ||||
|     assert get_new_command(Command(script, output)) == result | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_rebase_no_changes import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stdout(): | ||||
| def output(): | ||||
|     return '''Applying: Test commit | ||||
| No changes - did you forget to use 'git add'? | ||||
| If there is nothing left to stage, chances are that something else | ||||
| @@ -17,12 +17,12 @@ To check out the original branch and stop rebasing, run "git rebase --abort". | ||||
| ''' | ||||
|  | ||||
|  | ||||
| def test_match(stdout): | ||||
|     assert match(Command('git rebase --continue', stdout=stdout)) | ||||
|     assert not match(Command('git rebase --continue')) | ||||
|     assert not match(Command('git rebase --skip')) | ||||
| def test_match(output): | ||||
|     assert match(Command('git rebase --continue', output)) | ||||
|     assert not match(Command('git rebase --continue', '')) | ||||
|     assert not match(Command('git rebase --skip', '')) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(stdout): | ||||
|     assert (get_new_command(Command('git rebase --continue', stdout=stdout)) == | ||||
| def test_get_new_command(output): | ||||
|     assert (get_new_command(Command('git rebase --continue', output)) == | ||||
|             'git rebase --skip') | ||||
|   | ||||
| @@ -1,26 +1,26 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_remote_seturl_add import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git remote set-url origin url', stderr="fatal: No such remote")]) | ||||
|     Command('git remote set-url origin url', "fatal: No such remote")]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('git remote set-url origin url', stderr=""), | ||||
|     Command('git remote add origin url'), | ||||
|     Command('git remote remove origin'), | ||||
|     Command('git remote prune origin'), | ||||
|     Command('git remote set-branches origin branch')]) | ||||
|     Command('git remote set-url origin url', ""), | ||||
|     Command('git remote add origin url', ''), | ||||
|     Command('git remote remove origin', ''), | ||||
|     Command('git remote prune origin', ''), | ||||
|     Command('git remote set-branches origin branch', '')]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command('git remote set-url origin git@github.com:nvbn/thefuck.git'), | ||||
|     (Command('git remote set-url origin git@github.com:nvbn/thefuck.git', ''), | ||||
|      'git remote add origin git@github.com:nvbn/thefuck.git')]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_rm_local_modifications import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(target): | ||||
| def output(target): | ||||
|     return ('error: the following file has local modifications:\n    {}\n(use ' | ||||
|             '--cached to keep the file, or -f to force removal)').format(target) | ||||
|  | ||||
| @@ -12,17 +12,17 @@ def stderr(target): | ||||
| @pytest.mark.parametrize('script, target', [ | ||||
|     ('git rm foo', 'foo'), | ||||
|     ('git rm foo bar', 'bar')]) | ||||
| def test_match(stderr, script, target): | ||||
|     assert match(Command(script=script, stderr=stderr)) | ||||
| def test_match(output, script, target): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['git rm foo', 'git rm foo bar', 'git rm']) | ||||
| def test_not_match(script): | ||||
|     assert not match(Command(script=script, stderr='')) | ||||
|     assert not match(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, target, new_command', [ | ||||
|     ('git rm foo', 'foo', ['git rm --cached foo', 'git rm -f foo']), | ||||
|     ('git rm foo bar', 'bar', ['git rm --cached foo bar', 'git rm -f foo bar'])]) | ||||
| def test_get_new_command(stderr, script, target, new_command): | ||||
|     assert get_new_command(Command(script=script, stderr=stderr)) == new_command | ||||
| def test_get_new_command(output, script, target, new_command): | ||||
|     assert get_new_command(Command(script, output)) == new_command | ||||
|   | ||||
| @@ -1,27 +1,27 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_rm_recursive import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(target): | ||||
| def output(target): | ||||
|     return "fatal: not removing '{}' recursively without -r".format(target) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, target', [ | ||||
|     ('git rm foo', 'foo'), | ||||
|     ('git rm foo bar', 'foo bar')]) | ||||
| def test_match(stderr, script, target): | ||||
|     assert match(Command(script=script, stderr=stderr)) | ||||
| def test_match(output, script, target): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['git rm foo', 'git rm foo bar']) | ||||
| def test_not_match(script): | ||||
|     assert not match(Command(script=script, stderr='')) | ||||
|     assert not match(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, target, new_command', [ | ||||
|     ('git rm foo', 'foo', 'git rm -r foo'), | ||||
|     ('git rm foo bar', 'foo bar', 'git rm -r foo bar')]) | ||||
| def test_get_new_command(stderr, script, target, new_command): | ||||
|     assert get_new_command(Command(script=script, stderr=stderr)) == new_command | ||||
| def test_get_new_command(output, script, target, new_command): | ||||
|     assert get_new_command(Command(script, output)) == new_command | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_rm_staged import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(target): | ||||
| def output(target): | ||||
|     return ('error: the following file has changes staged in the index:\n    {}\n(use ' | ||||
|             '--cached to keep the file, or -f to force removal)').format(target) | ||||
|  | ||||
| @@ -12,17 +12,17 @@ def stderr(target): | ||||
| @pytest.mark.parametrize('script, target', [ | ||||
|     ('git rm foo', 'foo'), | ||||
|     ('git rm foo bar', 'bar')]) | ||||
| def test_match(stderr, script, target): | ||||
|     assert match(Command(script=script, stderr=stderr)) | ||||
| def test_match(output, script, target): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['git rm foo', 'git rm foo bar', 'git rm']) | ||||
| def test_not_match(script): | ||||
|     assert not match(Command(script=script, stderr='')) | ||||
|     assert not match(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, target, new_command', [ | ||||
|     ('git rm foo', 'foo', ['git rm --cached foo', 'git rm -f foo']), | ||||
|     ('git rm foo bar', 'bar', ['git rm --cached foo bar', 'git rm -f foo bar'])]) | ||||
| def test_get_new_command(stderr, script, target, new_command): | ||||
|     assert get_new_command(Command(script=script, stderr=stderr)) == new_command | ||||
| def test_get_new_command(output, script, target, new_command): | ||||
|     assert get_new_command(Command(script, output)) == new_command | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_stash import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| cherry_pick_error = ( | ||||
| @@ -15,23 +15,23 @@ rebase_error = ( | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git cherry-pick a1b2c3d', stderr=cherry_pick_error), | ||||
|     Command(script='git rebase -i HEAD~7', stderr=rebase_error)]) | ||||
|     Command('git cherry-pick a1b2c3d', cherry_pick_error), | ||||
|     Command('git rebase -i HEAD~7', rebase_error)]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git cherry-pick a1b2c3d', stderr=('')), | ||||
|     Command(script='git rebase -i HEAD~7', stderr=(''))]) | ||||
|     Command('git cherry-pick a1b2c3d', ''), | ||||
|     Command('git rebase -i HEAD~7', '')]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command(script='git cherry-pick a1b2c3d', stderr=cherry_pick_error), | ||||
|     (Command('git cherry-pick a1b2c3d', cherry_pick_error), | ||||
|      'git stash && git cherry-pick a1b2c3d'), | ||||
|     (Command('git rebase -i HEAD~7', stderr=rebase_error), | ||||
|     (Command('git rebase -i HEAD~7', rebase_error), | ||||
|      'git stash && git rebase -i HEAD~7')]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,18 +1,18 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_stash_pop import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
| def output(): | ||||
|     return '''error: Your local changes to the following files would be overwritten by merge:''' | ||||
|  | ||||
|  | ||||
| def test_match(stderr): | ||||
|     assert match(Command('git stash pop', stderr=stderr)) | ||||
|     assert not match(Command('git stash')) | ||||
| def test_match(output): | ||||
|     assert match(Command('git stash pop', output)) | ||||
|     assert not match(Command('git stash', '')) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(stderr): | ||||
|     assert (get_new_command(Command('git stash pop', stderr=stderr)) | ||||
| def test_get_new_command(output): | ||||
|     assert (get_new_command(Command('git stash pop', output)) | ||||
|             == "git add --update && git stash pop && git reset .") | ||||
|   | ||||
| @@ -1,18 +1,18 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_tag_force import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
| def output(): | ||||
|     return '''fatal: tag 'alert' already exists''' | ||||
|  | ||||
|  | ||||
| def test_match(stderr): | ||||
|     assert match(Command('git tag alert', stderr=stderr)) | ||||
|     assert not match(Command('git tag alert')) | ||||
| def test_match(output): | ||||
|     assert match(Command('git tag alert', output)) | ||||
|     assert not match(Command('git tag alert', '')) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(stderr): | ||||
|     assert (get_new_command(Command('git tag alert', stderr=stderr)) | ||||
| def test_get_new_command(output): | ||||
|     assert (get_new_command(Command('git tag alert', output)) | ||||
|             == "git tag --force alert") | ||||
|   | ||||
| @@ -1,47 +1,45 @@ | ||||
| import pytest | ||||
| from thefuck.rules.git_two_dashes import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(meant): | ||||
|     return 'error: did you mean `%s` (with two dashes ?)' % meant | ||||
| output = 'error: did you mean `{}` (with two dashes ?)'.format | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git add -patch', stderr=stderr('--patch')), | ||||
|     Command(script='git checkout -patch', stderr=stderr('--patch')), | ||||
|     Command(script='git commit -amend', stderr=stderr('--amend')), | ||||
|     Command(script='git push -tags', stderr=stderr('--tags')), | ||||
|     Command(script='git rebase -continue', stderr=stderr('--continue'))]) | ||||
|     Command('git add -patch', output('--patch')), | ||||
|     Command('git checkout -patch', output('--patch')), | ||||
|     Command('git commit -amend', output('--amend')), | ||||
|     Command('git push -tags', output('--tags')), | ||||
|     Command('git rebase -continue', output('--continue'))]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='git add --patch'), | ||||
|     Command(script='git checkout --patch'), | ||||
|     Command(script='git commit --amend'), | ||||
|     Command(script='git push --tags'), | ||||
|     Command(script='git rebase --continue')]) | ||||
|     Command('git add --patch', ''), | ||||
|     Command('git checkout --patch', ''), | ||||
|     Command('git commit --amend', ''), | ||||
|     Command('git push --tags', ''), | ||||
|     Command('git rebase --continue', '')]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, output', [ | ||||
|     (Command(script='git add -patch', stderr=stderr('--patch')), | ||||
|     (Command('git add -patch', output('--patch')), | ||||
|         'git add --patch'), | ||||
|     (Command(script='git checkout -patch', stderr=stderr('--patch')), | ||||
|     (Command('git checkout -patch', output('--patch')), | ||||
|         'git checkout --patch'), | ||||
|     (Command(script='git checkout -patch', stderr=stderr('--patch')), | ||||
|     (Command('git checkout -patch', output('--patch')), | ||||
|         'git checkout --patch'), | ||||
|     (Command(script='git init -bare', stderr=stderr('--bare')), | ||||
|     (Command('git init -bare', output('--bare')), | ||||
|         'git init --bare'), | ||||
|     (Command(script='git commit -amend', stderr=stderr('--amend')), | ||||
|     (Command('git commit -amend', output('--amend')), | ||||
|         'git commit --amend'), | ||||
|     (Command(script='git push -tags', stderr=stderr('--tags')), | ||||
|     (Command('git push -tags', output('--tags')), | ||||
|         'git push --tags'), | ||||
|     (Command(script='git rebase -continue', stderr=stderr('--continue')), | ||||
|     (Command('git rebase -continue', output('--continue')), | ||||
|         'git rebase --continue')]) | ||||
| def test_get_new_command(command, output): | ||||
|     assert get_new_command(command) == output | ||||
|   | ||||
| @@ -1,17 +1,17 @@ | ||||
| import pytest | ||||
| from thefuck.rules.go_run import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='go run foo'), | ||||
|     Command(script='go run bar')]) | ||||
|     Command('go run foo', ''), | ||||
|     Command('go run bar', '')]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command('go run foo'), 'go run foo.go'), | ||||
|     (Command('go run bar'), 'go run bar.go')]) | ||||
|     (Command('go run foo', ''), 'go run foo.go'), | ||||
|     (Command('go run bar', ''), 'go run bar.go')]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| import pytest | ||||
| from io import BytesIO | ||||
| from thefuck.rules.gradle_no_task import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
| gradle_tasks = b''' | ||||
| :tasks | ||||
| @@ -97,7 +97,7 @@ BUILD SUCCESSFUL | ||||
| Total time: 1.936 secs | ||||
| ''' | ||||
|  | ||||
| stderr_not_found = ''' | ||||
| output_not_found = ''' | ||||
|  | ||||
| FAILURE: Build failed with an exception. | ||||
|  | ||||
| @@ -108,7 +108,7 @@ Task '{}' not found in root project 'org.rerenderer_example.snake'. | ||||
| Run gradlew tasks to get a list of available tasks. Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. | ||||
| '''.format | ||||
|  | ||||
| stderr_ambiguous = ''' | ||||
| output_ambiguous = ''' | ||||
|  | ||||
| FAILURE: Build failed with an exception. | ||||
|  | ||||
| @@ -128,31 +128,31 @@ def tasks(mocker): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('./gradlew assembler', stderr=stderr_ambiguous('assembler')), | ||||
|     Command('./gradlew instar', stderr=stderr_not_found('instar')), | ||||
|     Command('gradle assembler', stderr=stderr_ambiguous('assembler')), | ||||
|     Command('gradle instar', stderr=stderr_not_found('instar'))]) | ||||
|     Command('./gradlew assembler', output_ambiguous('assembler')), | ||||
|     Command('./gradlew instar', output_not_found('instar')), | ||||
|     Command('gradle assembler', output_ambiguous('assembler')), | ||||
|     Command('gradle instar', output_not_found('instar'))]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('./gradlew assemble'), | ||||
|     Command('gradle assemble'), | ||||
|     Command('npm assembler', stderr=stderr_ambiguous('assembler')), | ||||
|     Command('npm instar', stderr=stderr_not_found('instar'))]) | ||||
|     Command('./gradlew assemble', ''), | ||||
|     Command('gradle assemble', ''), | ||||
|     Command('npm assembler', output_ambiguous('assembler')), | ||||
|     Command('npm instar', output_not_found('instar'))]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, result', [ | ||||
|     (Command('./gradlew assembler', stderr=stderr_ambiguous('assembler')), | ||||
|     (Command('./gradlew assembler', output_ambiguous('assembler')), | ||||
|      './gradlew assemble'), | ||||
|     (Command('./gradlew instardebug', stderr=stderr_not_found('instardebug')), | ||||
|     (Command('./gradlew instardebug', output_not_found('instardebug')), | ||||
|      './gradlew installDebug'), | ||||
|     (Command('gradle assembler', stderr=stderr_ambiguous('assembler')), | ||||
|     (Command('gradle assembler', output_ambiguous('assembler')), | ||||
|      'gradle assemble'), | ||||
|     (Command('gradle instardebug', stderr=stderr_not_found('instardebug')), | ||||
|     (Command('gradle instardebug', output_not_found('instardebug')), | ||||
|      'gradle installDebug')]) | ||||
| def test_get_new_command(command, result): | ||||
|     assert get_new_command(command)[0] == result | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.gradle_wrapper import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture(autouse=True) | ||||
| @@ -10,8 +10,8 @@ def exists(mocker): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('gradle tasks', stderr='gradle: not found'), | ||||
|     Command('gradle build', stderr='gradle: not found')]) | ||||
|     Command('gradle tasks', 'gradle: not found'), | ||||
|     Command('gradle build', 'gradle: not found')]) | ||||
| def test_match(mocker, command): | ||||
|     mocker.patch('thefuck.rules.gradle_wrapper.which', return_value=None) | ||||
|  | ||||
| @@ -19,9 +19,9 @@ def test_match(mocker, command): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, gradlew, which', [ | ||||
|     (Command('gradle tasks', stderr='gradle: not found'), False, None), | ||||
|     (Command('gradle tasks', stderr='command not found'), True, '/usr/bin/gradle'), | ||||
|     (Command('npm tasks', stderr='npm: not found'), True, None)]) | ||||
|     (Command('gradle tasks', 'gradle: not found'), False, None), | ||||
|     (Command('gradle tasks', 'command not found'), True, '/usr/bin/gradle'), | ||||
|     (Command('npm tasks', 'npm: not found'), True, None)]) | ||||
| def test_not_match(mocker, exists, command, gradlew, which): | ||||
|     mocker.patch('thefuck.rules.gradle_wrapper.which', return_value=which) | ||||
|     exists.return_value = gradlew | ||||
| @@ -34,5 +34,5 @@ def test_not_match(mocker, exists, command, gradlew, which): | ||||
|     ('gradle --help', './gradlew --help'), | ||||
|     ('gradle build -c', './gradlew build -c')]) | ||||
| def test_get_new_command(script, result): | ||||
|     command = Command(script) | ||||
|     command = Command(script, '') | ||||
|     assert get_new_command(command) == result | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| import pytest | ||||
| from thefuck.rules.grep_arguments_order import get_new_command, match | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
| stderr = 'grep: {}: No such file or directory'.format | ||||
| output = 'grep: {}: No such file or directory'.format | ||||
|  | ||||
|  | ||||
| @pytest.fixture(autouse=True) | ||||
| @@ -16,25 +16,25 @@ def os_path(monkeypatch): | ||||
|     ('egrep test.py test', 'test'), | ||||
|     ('egrep -lir . test', 'test')]) | ||||
| def test_match(script, file): | ||||
|     assert match(Command(script, stderr=stderr(file))) | ||||
|     assert match(Command(script, output(file))) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
|     ('cat test.py', stderr('test')), | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('cat test.py', output('test')), | ||||
|     ('grep test test.py', ''), | ||||
|     ('grep -lir test .', ''), | ||||
|     ('egrep test test.py', ''), | ||||
|     ('egrep -lir test .', '')]) | ||||
| def test_not_match(script, stderr): | ||||
|     assert not match(Command(script, stderr=stderr)) | ||||
| def test_not_match(script, output): | ||||
|     assert not match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr, result', [ | ||||
|     ('grep test.py test', stderr('test'), 'grep test test.py'), | ||||
|     ('grep -lir . test', stderr('test'), 'grep -lir test .'), | ||||
|     ('grep . test -lir', stderr('test'), 'grep test -lir .'), | ||||
|     ('egrep test.py test', stderr('test'), 'egrep test test.py'), | ||||
|     ('egrep -lir . test', stderr('test'), 'egrep -lir test .'), | ||||
|     ('egrep . test -lir', stderr('test'), 'egrep test -lir .')]) | ||||
| def test_get_new_command(script, stderr, result): | ||||
|     assert get_new_command(Command(script, stderr=stderr)) == result | ||||
| @pytest.mark.parametrize('script, output, result', [ | ||||
|     ('grep test.py test', output('test'), 'grep test test.py'), | ||||
|     ('grep -lir . test', output('test'), 'grep -lir test .'), | ||||
|     ('grep . test -lir', output('test'), 'grep test -lir .'), | ||||
|     ('egrep test.py test', output('test'), 'egrep test test.py'), | ||||
|     ('egrep -lir . test', output('test'), 'egrep -lir test .'), | ||||
|     ('egrep . test -lir', output('test'), 'egrep test -lir .')]) | ||||
| def test_get_new_command(script, output, result): | ||||
|     assert get_new_command(Command(script, output)) == result | ||||
|   | ||||
| @@ -1,15 +1,15 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
|  | ||||
| from thefuck.rules.grep_recursive import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| def test_match(): | ||||
|     assert match(Command('grep blah .', stderr='grep: .: Is a directory')) | ||||
|     assert match(Command(u'grep café .', stderr='grep: .: Is a directory')) | ||||
|     assert not match(Command()) | ||||
|     assert match(Command('grep blah .', 'grep: .: Is a directory')) | ||||
|     assert match(Command(u'grep café .', 'grep: .: Is a directory')) | ||||
|     assert not match(Command('', '')) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(): | ||||
|     assert get_new_command(Command('grep blah .')) == 'grep -r blah .' | ||||
|     assert get_new_command(Command(u'grep café .')) == u'grep -r café .' | ||||
|     assert get_new_command(Command('grep blah .', '')) == 'grep -r blah .' | ||||
|     assert get_new_command(Command(u'grep café .', '')) == u'grep -r café .' | ||||
|   | ||||
| @@ -2,10 +2,10 @@ | ||||
|  | ||||
| from io import BytesIO | ||||
| import pytest | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
| from thefuck.rules.grunt_task_not_found import match, get_new_command | ||||
|  | ||||
| stdout = ''' | ||||
| output = ''' | ||||
| Warning: Task "{}" not found. Use --force to continue. | ||||
|  | ||||
| Aborted due to warnings. | ||||
| @@ -107,23 +107,23 @@ def grunt_help(mocker): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('grunt defualt', stdout('defualt')), | ||||
|     Command('grunt buld:css', stdout('buld:css'))]) | ||||
|     Command('grunt defualt', output('defualt')), | ||||
|     Command('grunt buld:css', output('buld:css'))]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('npm nuild', stdout('nuild')), | ||||
|     Command('grunt rm')]) | ||||
|     Command('npm nuild', output('nuild')), | ||||
|     Command('grunt rm', '')]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, result', [ | ||||
|     (Command('grunt defualt', stdout('defualt')), 'grunt default'), | ||||
|     (Command('grunt cmpass:all', stdout('cmpass:all')), 'grunt compass:all'), | ||||
|     (Command('grunt cmpass:all --color', stdout('cmpass:all')), | ||||
|     (Command('grunt defualt', output('defualt')), 'grunt default'), | ||||
|     (Command('grunt cmpass:all', output('cmpass:all')), 'grunt compass:all'), | ||||
|     (Command('grunt cmpass:all --color', output('cmpass:all')), | ||||
|      'grunt compass:all --color')]) | ||||
| def test_get_new_command(command, result): | ||||
|     assert get_new_command(command) == result | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from io import BytesIO | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
| from thefuck.rules.gulp_not_task import match, get_new_command | ||||
|  | ||||
|  | ||||
| def stdout(task): | ||||
| def output(task): | ||||
|     return '''[00:41:11] Using gulpfile gulpfile.js | ||||
| [00:41:11] Task '{}' is not in your gulpfile | ||||
| [00:41:11] Please check the documentation for proper gulpfile formatting | ||||
| @@ -12,12 +12,12 @@ def stdout(task): | ||||
|  | ||||
|  | ||||
| def test_match(): | ||||
|     assert match(Command('gulp srve', stdout('srve'))) | ||||
|     assert match(Command('gulp srve', output('srve'))) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stdout', [ | ||||
|     ('gulp serve', ''), | ||||
|     ('cat srve', stdout('srve'))]) | ||||
|     ('cat srve', output('srve'))]) | ||||
| def test_not_march(script, stdout): | ||||
|     assert not match(Command(script, stdout)) | ||||
|  | ||||
| @@ -25,5 +25,5 @@ def test_not_march(script, stdout): | ||||
| def test_get_new_command(mocker): | ||||
|     mock = mocker.patch('subprocess.Popen') | ||||
|     mock.return_value.stdout = BytesIO(b'serve \nbuild \ndefault \n') | ||||
|     command = Command('gulp srve', stdout('srve')) | ||||
|     command = Command('gulp srve', output('srve')) | ||||
|     assert get_new_command(command) == ['gulp serve', 'gulp default'] | ||||
|   | ||||
| @@ -1,18 +1,18 @@ | ||||
| from mock import patch | ||||
| from thefuck.rules.has_exists_script import match, get_new_command | ||||
| from ..utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| def test_match(): | ||||
|     with patch('os.path.exists', return_value=True): | ||||
|         assert match(Command(script='main', stderr='main: command not found')) | ||||
|         assert match(Command(script='main --help', | ||||
|                              stderr='main: command not found')) | ||||
|         assert not match(Command(script='main', stderr='')) | ||||
|         assert match(Command('main', 'main: command not found')) | ||||
|         assert match(Command('main --help', | ||||
|                              'main: command not found')) | ||||
|         assert not match(Command('main', '')) | ||||
|  | ||||
|     with patch('os.path.exists', return_value=False): | ||||
|         assert not match(Command(script='main', stderr='main: command not found')) | ||||
|         assert not match(Command('main', 'main: command not found')) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(): | ||||
|     assert get_new_command(Command(script='main --help')) == './main --help' | ||||
|     assert get_new_command(Command('main --help', '')) == './main --help' | ||||
|   | ||||
| @@ -1,11 +1,11 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
|  | ||||
| import pytest | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
| from thefuck.rules.heroku_not_command import match, get_new_command | ||||
|  | ||||
|  | ||||
| suggest_stderr = ''' | ||||
| suggest_output = ''' | ||||
|  ▸    log is not a heroku command. | ||||
|  ▸    Perhaps you meant logs? | ||||
|  ▸    Run heroku _ to run heroku logs. | ||||
| @@ -15,17 +15,17 @@ suggest_stderr = ''' | ||||
| @pytest.mark.parametrize('cmd', ['log']) | ||||
| def test_match(cmd): | ||||
|     assert match( | ||||
|         Command('heroku {}'.format(cmd), stderr=suggest_stderr)) | ||||
|         Command('heroku {}'.format(cmd), suggest_output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
|     ('cat log', suggest_stderr)]) | ||||
| def test_not_match(script, stderr): | ||||
|     assert not match(Command(script, stderr=stderr)) | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('cat log', suggest_output)]) | ||||
| def test_not_match(script, output): | ||||
|     assert not match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('cmd, result', [ | ||||
|     ('log', 'heroku logs')]) | ||||
| def test_get_new_command(cmd, result): | ||||
|     command = Command('heroku {}'.format(cmd), stderr=suggest_stderr) | ||||
|     command = Command('heroku {}'.format(cmd), suggest_output) | ||||
|     assert get_new_command(command) == result | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.history import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture(autouse=True) | ||||
| @@ -12,16 +12,16 @@ def history_without_current(mocker): | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['ls cet', 'daff x']) | ||||
| def test_match(script): | ||||
|     assert match(Command(script=script)) | ||||
|     assert match(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['apt-get', 'nocommand y']) | ||||
| def test_not_match(script): | ||||
|     assert not match(Command(script=script)) | ||||
|     assert not match(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, result', [ | ||||
|     ('ls cet', 'ls cat'), | ||||
|     ('daff x', 'diff x')]) | ||||
| def test_get_new_command(script, result): | ||||
|     assert get_new_command(Command(script)) == result | ||||
|     assert get_new_command(Command(script, '')) == result | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.hostscli import no_website, get_new_command, match | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
| no_website_long = ''' | ||||
| {}: | ||||
| @@ -15,15 +15,13 @@ type `hostscli websites` to see a list of websites that you can block/unblock | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('hostscli block a_website_that_does_not_exist', | ||||
|             stderr=no_website_long)]) | ||||
|     Command('hostscli block a_website_that_does_not_exist', no_website_long)]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, result', [( | ||||
|     Command('hostscli block a_website_that_does_not_exist', | ||||
|             stderr=no_website_long), | ||||
|     Command('hostscli block a_website_that_does_not_exist', no_website_long), | ||||
|     ['hostscli websites'])]) | ||||
| def test_get_new_command(command, result): | ||||
|     assert get_new_command(command) == result | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from six import BytesIO | ||||
| from thefuck.rules.ifconfig_device_not_found import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| stderr = '{}: error fetching interface information: Device not found' | ||||
| output = '{}: error fetching interface information: Device not found' | ||||
|  | ||||
| stdout = b''' | ||||
| wlp2s0    Link encap:Ethernet  HWaddr 5c:51:4f:7c:58:5d | ||||
| @@ -26,21 +26,21 @@ def ifconfig(mocker): | ||||
|     return mock | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
|     ('ifconfig wlan0', stderr.format('wlan0')), | ||||
|     ('ifconfig -s eth0', stderr.format('eth0')), | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('ifconfig wlan0', output.format('wlan0')), | ||||
|     ('ifconfig -s eth0', output.format('eth0')), | ||||
| ]) | ||||
| def test_match(script, stderr): | ||||
|     assert match(Command(script, stderr=stderr)) | ||||
| def test_match(script, output): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('config wlan0', | ||||
|      'wlan0: error fetching interface information: Device not found'), | ||||
|     ('ifconfig eth0', ''), | ||||
| ]) | ||||
| def test_not_match(script, stderr): | ||||
|     assert not match(Command(script, stderr=stderr)) | ||||
| def test_not_match(script, output): | ||||
|     assert not match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, result', [ | ||||
| @@ -49,5 +49,5 @@ def test_not_match(script, stderr): | ||||
| ]) | ||||
| def test_get_new_comman(script, result): | ||||
|     new_command = get_new_command( | ||||
|         Command(script, stderr=stderr.format('wlan0'))) | ||||
|         Command(script, output.format('wlan0'))) | ||||
|     assert new_command == result | ||||
|   | ||||
| @@ -1,17 +1,17 @@ | ||||
| import pytest | ||||
| from thefuck.rules.java import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='java foo.java'), | ||||
|     Command(script='java bar.java')]) | ||||
|     Command('java foo.java', ''), | ||||
|     Command('java bar.java', '')]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command('java foo.java'), 'java foo'), | ||||
|     (Command('java bar.java'), 'java bar')]) | ||||
|     (Command('java foo.java', ''), 'java foo'), | ||||
|     (Command('java bar.java', ''), 'java bar')]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,17 +1,17 @@ | ||||
| import pytest | ||||
| from thefuck.rules.javac import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='javac foo'), | ||||
|     Command(script='javac bar')]) | ||||
|     Command('javac foo', ''), | ||||
|     Command('javac bar', '')]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command('javac foo'), 'javac foo.java'), | ||||
|     (Command('javac bar'), 'javac bar.java')]) | ||||
|     (Command('javac foo', ''), 'javac foo.java'), | ||||
|     (Command('javac bar', ''), 'javac bar.java')]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.lein_not_task import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| @@ -14,10 +14,10 @@ Did you mean this? | ||||
|  | ||||
|  | ||||
| def test_match(is_not_task): | ||||
|     assert match(Command(script='lein rpl', stderr=is_not_task)) | ||||
|     assert not match(Command(script='ls', stderr=is_not_task)) | ||||
|     assert match(Command('lein rpl', is_not_task)) | ||||
|     assert not match(Command('ls', is_not_task)) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(is_not_task): | ||||
|     assert (get_new_command(Command(script='lein rpl --help', stderr=is_not_task)) | ||||
|     assert (get_new_command(Command('lein rpl --help', is_not_task)) | ||||
|             == ['lein repl --help', 'lein jar --help']) | ||||
|   | ||||
| @@ -1,27 +1,27 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| import pytest | ||||
| from thefuck.rules.ln_no_hard_link import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
| error = "hard link not allowed for directory" | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ("ln barDir barLink", "ln: ‘barDir’: {}"), | ||||
|     ("sudo ln a b", "ln: ‘a’: {}"), | ||||
|     ("sudo ln -nbi a b", "ln: ‘a’: {}")]) | ||||
| def test_match(script, stderr): | ||||
|     command = Command(script, stderr=stderr.format(error)) | ||||
| def test_match(script, output): | ||||
|     command = Command(script, output.format(error)) | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('', ''), | ||||
|     ("ln a b", "... hard link"), | ||||
|     ("sudo ln a b", "... hard link"), | ||||
|     ("a b", error)]) | ||||
| def test_not_match(script, stderr): | ||||
|     command = Command(script, stderr=stderr) | ||||
| def test_not_match(script, output): | ||||
|     command = Command(script, output) | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @@ -33,5 +33,5 @@ def test_not_match(script, stderr): | ||||
|     ("ln a ln", "ln -s a ln"), | ||||
|     ("sudo ln a ln", "sudo ln -s a ln")]) | ||||
| def test_get_new_command(script, result): | ||||
|     command = Command(script) | ||||
|     command = Command(script, '') | ||||
|     assert get_new_command(command) == result | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.ln_s_order import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| @@ -8,17 +8,17 @@ def file_exists(mocker): | ||||
|     return mocker.patch('os.path.exists', return_value=True) | ||||
|  | ||||
|  | ||||
| get_stderr = "ln: failed to create symbolic link '{}': File exists".format | ||||
| get_output = "ln: failed to create symbolic link '{}': File exists".format | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr, exists', [ | ||||
|     ('ln dest source', get_stderr('source'), True), | ||||
|     ('ls -s dest source', get_stderr('source'), True), | ||||
| @pytest.mark.parametrize('script, output, exists', [ | ||||
|     ('ln dest source', get_output('source'), True), | ||||
|     ('ls -s dest source', get_output('source'), True), | ||||
|     ('ln -s dest source', '', True), | ||||
|     ('ln -s dest source', get_stderr('source'), False)]) | ||||
| def test_not_match(file_exists, script, stderr, exists): | ||||
|     ('ln -s dest source', get_output('source'), False)]) | ||||
| def test_not_match(file_exists, script, output, exists): | ||||
|     file_exists.return_value = exists | ||||
|     assert not match(Command(script, stderr=stderr)) | ||||
|     assert not match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.usefixtures('file_exists') | ||||
| @@ -27,6 +27,6 @@ def test_not_match(file_exists, script, stderr, exists): | ||||
|     ('ln dest -s source', 'ln -s source dest'), | ||||
|     ('ln dest source -s', 'ln source -s dest')]) | ||||
| def test_match(script, result): | ||||
|     stderr = get_stderr('source') | ||||
|     assert match(Command(script, stderr=stderr)) | ||||
|     assert get_new_command(Command(script, stderr=stderr)) == result | ||||
|     output = get_output('source') | ||||
|     assert match(Command(script, output)) | ||||
|     assert get_new_command(Command(script, output)) == result | ||||
|   | ||||
| @@ -1,12 +1,12 @@ | ||||
| from thefuck.rules.ls_all import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| def test_match(): | ||||
|     assert match(Command(script='ls')) | ||||
|     assert not match(Command(script='ls', stdout='file.py\n')) | ||||
|     assert match(Command('ls', '')) | ||||
|     assert not match(Command('ls', 'file.py\n')) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(): | ||||
|     assert get_new_command(Command(script='ls empty_dir')) == 'ls -A empty_dir' | ||||
|     assert get_new_command(Command(script='ls')) == 'ls -A' | ||||
|     assert get_new_command(Command('ls empty_dir', '')) == 'ls -A empty_dir' | ||||
|     assert get_new_command(Command('ls', '')) == 'ls -A' | ||||
|   | ||||
| @@ -1,16 +1,16 @@ | ||||
| from thefuck.rules.ls_lah import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| def test_match(): | ||||
|     assert match(Command(script='ls')) | ||||
|     assert match(Command(script='ls file.py')) | ||||
|     assert match(Command(script='ls /opt')) | ||||
|     assert not match(Command(script='ls -lah /opt')) | ||||
|     assert not match(Command(script='pacman -S binutils')) | ||||
|     assert not match(Command(script='lsof')) | ||||
|     assert match(Command('ls', '')) | ||||
|     assert match(Command('ls file.py', '')) | ||||
|     assert match(Command('ls /opt', '')) | ||||
|     assert not match(Command('ls -lah /opt', '')) | ||||
|     assert not match(Command('pacman -S binutils', '')) | ||||
|     assert not match(Command('lsof', '')) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(): | ||||
|     assert get_new_command(Command(script='ls file.py')) == 'ls -lah file.py' | ||||
|     assert get_new_command(Command(script='ls')) == 'ls -lah' | ||||
|     assert get_new_command(Command('ls file.py', '')) == 'ls -lah file.py' | ||||
|     assert get_new_command(Command('ls', '')) == 'ls -lah' | ||||
|   | ||||
| @@ -1,35 +1,35 @@ | ||||
| import pytest | ||||
| from thefuck.rules.man import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('man read'), | ||||
|     Command('man 2 read'), | ||||
|     Command('man 3 read'), | ||||
|     Command('man -s2 read'), | ||||
|     Command('man -s3 read'), | ||||
|     Command('man -s 2 read'), | ||||
|     Command('man -s 3 read')]) | ||||
|     Command('man read', ''), | ||||
|     Command('man 2 read', ''), | ||||
|     Command('man 3 read', ''), | ||||
|     Command('man -s2 read', ''), | ||||
|     Command('man -s3 read', ''), | ||||
|     Command('man -s 2 read', ''), | ||||
|     Command('man -s 3 read', '')]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('man'), | ||||
|     Command('man ')]) | ||||
|     Command('man', ''), | ||||
|     Command('man ', '')]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command('man read'), ['man 3 read', 'man 2 read', 'read --help']), | ||||
|     (Command('man missing', stderr="No manual entry for missing\n"), ['missing --help']), | ||||
|     (Command('man 2 read'), 'man 3 read'), | ||||
|     (Command('man 3 read'), 'man 2 read'), | ||||
|     (Command('man -s2 read'), 'man -s3 read'), | ||||
|     (Command('man -s3 read'), 'man -s2 read'), | ||||
|     (Command('man -s 2 read'), 'man -s 3 read'), | ||||
|     (Command('man -s 3 read'), 'man -s 2 read')]) | ||||
|     (Command('man read', ''), ['man 3 read', 'man 2 read', 'read --help']), | ||||
|     (Command('man missing', "No manual entry for missing\n"), ['missing --help']), | ||||
|     (Command('man 2 read', ''), 'man 3 read'), | ||||
|     (Command('man 3 read', ''), 'man 2 read'), | ||||
|     (Command('man -s2 read', ''), 'man -s3 read'), | ||||
|     (Command('man -s3 read', ''), 'man -s2 read'), | ||||
|     (Command('man -s 2 read', ''), 'man -s 3 read'), | ||||
|     (Command('man -s 3 read', ''), 'man -s 2 read')]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,12 +1,11 @@ | ||||
| from thefuck.rules.man_no_space import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| def test_match(): | ||||
|     assert match(Command('mandiff', stderr='mandiff: command not found')) | ||||
|     assert not match(Command()) | ||||
|     assert match(Command('mandiff', 'mandiff: command not found')) | ||||
|     assert not match(Command('', '')) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(): | ||||
|     assert get_new_command( | ||||
|         Command('mandiff')) == 'man diff' | ||||
|     assert get_new_command(Command('mandiff', '')) == 'man diff' | ||||
|   | ||||
| @@ -1,37 +1,37 @@ | ||||
| import pytest | ||||
|  | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
| from thefuck.rules.mercurial import ( | ||||
|     extract_possibilities, match, get_new_command | ||||
| ) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('hg base', stderr=( | ||||
|     Command('hg base', ( | ||||
|         "hg: unknown command 'base'" | ||||
|         '\n(did you mean one of blame, phase, rebase?)' | ||||
|     )), | ||||
|     Command('hg branchch', stderr=( | ||||
|     Command('hg branchch', ( | ||||
|         "hg: unknown command 'branchch'" | ||||
|         '\n(did you mean one of branch, branches?)' | ||||
|     )), | ||||
|     Command('hg vert', stderr=( | ||||
|     Command('hg vert', ( | ||||
|         "hg: unknown command 'vert'" | ||||
|         '\n(did you mean one of revert?)' | ||||
|     )), | ||||
|     Command('hg lgo -r tip', stderr=( | ||||
|     Command('hg lgo -r tip', ( | ||||
|         "hg: command 're' is ambiguous:" | ||||
|         '\n(did you mean one of log?)' | ||||
|     )), | ||||
|     Command('hg rerere', stderr=( | ||||
|     Command('hg rerere', ( | ||||
|         "hg: unknown command 'rerere'" | ||||
|         '\n(did you mean one of revert?)' | ||||
|     )), | ||||
|     Command('hg re', stderr=( | ||||
|     Command('hg re', ( | ||||
|         "hg: command 're' is ambiguous:" | ||||
|         '\n    rebase recover remove rename resolve revert' | ||||
|     )), | ||||
|     Command('hg re re', stderr=( | ||||
|     Command('hg re re', ( | ||||
|         "hg: command 're' is ambiguous:" | ||||
|         '\n    rebase recover remove rename resolve revert' | ||||
|     )), | ||||
| @@ -41,24 +41,24 @@ def test_match(command): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('hg', stderr=( | ||||
|     Command('hg', ( | ||||
|         '\nMercurial Distributed SCM\n\nbasic commands:' | ||||
|     )), | ||||
|     Command('hg asdf', stderr=( | ||||
|     Command('hg asdf', ( | ||||
|         "hg: unknown command 'asdf'" | ||||
|         '\nMercurial Distributed SCM\n\nbasic commands:' | ||||
|     )), | ||||
|     Command('hg qwer', stderr=( | ||||
|     Command('hg qwer', ( | ||||
|         "hg: unknown command 'qwer'" | ||||
|         '\nMercurial Distributed SCM\n\nbasic commands:' | ||||
|     )), | ||||
|     Command('hg me', stderr=( | ||||
|     Command('hg me', ( | ||||
|         "\nabort: no repository found in './thefuck' (.hg not found)!" | ||||
|     )), | ||||
|     Command('hg reb', stderr=( | ||||
|     Command('hg reb', ( | ||||
|         "\nabort: no repository found in './thefuck' (.hg not found)!" | ||||
|     )), | ||||
|     Command('hg co', stderr=( | ||||
|     Command('hg co', ( | ||||
|         "\nabort: no repository found in './thefuck' (.hg not found)!" | ||||
|     )), | ||||
| ]) | ||||
| @@ -67,31 +67,31 @@ def test_not_match(command): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, possibilities', [ | ||||
|     (Command('hg base', stderr=( | ||||
|     (Command('hg base', ( | ||||
|         "hg: unknown command 'base'" | ||||
|         '\n(did you mean one of blame, phase, rebase?)' | ||||
|     )), ['blame', 'phase', 'rebase']), | ||||
|     (Command('hg branchch', stderr=( | ||||
|     (Command('hg branchch', ( | ||||
|         "hg: unknown command 'branchch'" | ||||
|         '\n(did you mean one of branch, branches?)' | ||||
|     )), ['branch', 'branches']), | ||||
|     (Command('hg vert', stderr=( | ||||
|     (Command('hg vert', ( | ||||
|         "hg: unknown command 'vert'" | ||||
|         '\n(did you mean one of revert?)' | ||||
|     )), ['revert']), | ||||
|     (Command('hg lgo -r tip', stderr=( | ||||
|     (Command('hg lgo -r tip', ( | ||||
|         "hg: command 're' is ambiguous:" | ||||
|         '\n(did you mean one of log?)' | ||||
|     )), ['log']), | ||||
|     (Command('hg rerere', stderr=( | ||||
|     (Command('hg rerere', ( | ||||
|         "hg: unknown command 'rerere'" | ||||
|         '\n(did you mean one of revert?)' | ||||
|     )), ['revert']), | ||||
|     (Command('hg re', stderr=( | ||||
|     (Command('hg re', ( | ||||
|         "hg: command 're' is ambiguous:" | ||||
|         '\n    rebase recover remove rename resolve revert' | ||||
|     )), ['rebase', 'recover', 'remove', 'rename', 'resolve', 'revert']), | ||||
|     (Command('hg re re', stderr=( | ||||
|     (Command('hg re re', ( | ||||
|         "hg: command 're' is ambiguous:" | ||||
|         '\n    rebase recover remove rename resolve revert' | ||||
|     )), ['rebase', 'recover', 'remove', 'rename', 'resolve', 'revert']), | ||||
| @@ -101,31 +101,31 @@ def test_extract_possibilities(command, possibilities): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command('hg base', stderr=( | ||||
|     (Command('hg base', ( | ||||
|         "hg: unknown command 'base'" | ||||
|         '\n(did you mean one of blame, phase, rebase?)' | ||||
|     )), 'hg rebase'), | ||||
|     (Command('hg branchch', stderr=( | ||||
|     (Command('hg branchch', ( | ||||
|         "hg: unknown command 'branchch'" | ||||
|         '\n(did you mean one of branch, branches?)' | ||||
|     )), 'hg branch'), | ||||
|     (Command('hg vert', stderr=( | ||||
|     (Command('hg vert', ( | ||||
|         "hg: unknown command 'vert'" | ||||
|         '\n(did you mean one of revert?)' | ||||
|     )), 'hg revert'), | ||||
|     (Command('hg lgo -r tip', stderr=( | ||||
|     (Command('hg lgo -r tip', ( | ||||
|         "hg: command 're' is ambiguous:" | ||||
|         '\n(did you mean one of log?)' | ||||
|     )), 'hg log -r tip'), | ||||
|     (Command('hg rerere', stderr=( | ||||
|     (Command('hg rerere', ( | ||||
|         "hg: unknown command 'rerere'" | ||||
|         '\n(did you mean one of revert?)' | ||||
|     )), 'hg revert'), | ||||
|     (Command('hg re', stderr=( | ||||
|     (Command('hg re', ( | ||||
|         "hg: command 're' is ambiguous:" | ||||
|         '\n    rebase recover remove rename resolve revert' | ||||
|     )), 'hg rebase'), | ||||
|     (Command('hg re re', stderr=( | ||||
|     (Command('hg re re', ( | ||||
|         "hg: command 're' is ambiguous:" | ||||
|         '\n    rebase recover remove rename resolve revert' | ||||
|     )), 'hg rebase re'), | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| import pytest | ||||
| from thefuck.rules.missing_space_before_subcommand import ( | ||||
|     match, get_new_command) | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture(autouse=True) | ||||
| @@ -14,12 +14,12 @@ def all_executables(mocker): | ||||
| @pytest.mark.parametrize('script', [ | ||||
|     'gitbranch', 'ls-la', 'npminstall']) | ||||
| def test_match(script): | ||||
|     assert match(Command(script)) | ||||
|     assert match(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['git branch', 'vimfile']) | ||||
| def test_not_match(script): | ||||
|     assert not match(Command(script)) | ||||
|     assert not match(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, result', [ | ||||
| @@ -27,4 +27,4 @@ def test_not_match(script): | ||||
|     ('ls-la', 'ls -la'), | ||||
|     ('npminstall webpack', 'npm install webpack')]) | ||||
| def test_get_new_command(script, result): | ||||
|     assert get_new_command(Command(script)) == result | ||||
|     assert get_new_command(Command(script, '')) == result | ||||
|   | ||||
| @@ -1,32 +1,32 @@ | ||||
| import pytest | ||||
| from thefuck.rules.mkdir_p import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('mkdir foo/bar/baz', stderr='mkdir: foo/bar: No such file or directory'), | ||||
|     Command('./bin/hdfs dfs -mkdir foo/bar/baz', stderr='mkdir: `foo/bar/baz\': No such file or directory'), | ||||
|     Command('hdfs dfs -mkdir foo/bar/baz', stderr='mkdir: `foo/bar/baz\': No such file or directory') | ||||
|     Command('mkdir foo/bar/baz', 'mkdir: foo/bar: No such file or directory'), | ||||
|     Command('./bin/hdfs dfs -mkdir foo/bar/baz', 'mkdir: `foo/bar/baz\': No such file or directory'), | ||||
|     Command('hdfs dfs -mkdir foo/bar/baz', 'mkdir: `foo/bar/baz\': No such file or directory') | ||||
| ]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('mkdir foo/bar/baz'), | ||||
|     Command('mkdir foo/bar/baz', stderr='foo bar baz'), | ||||
|     Command('hdfs dfs -mkdir foo/bar/baz'), | ||||
|     Command('./bin/hdfs dfs -mkdir foo/bar/baz'), | ||||
|     Command(), | ||||
|     Command('mkdir foo/bar/baz', ''), | ||||
|     Command('mkdir foo/bar/baz', 'foo bar baz'), | ||||
|     Command('hdfs dfs -mkdir foo/bar/baz', ''), | ||||
|     Command('./bin/hdfs dfs -mkdir foo/bar/baz', ''), | ||||
|     Command('', ''), | ||||
| ]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command('mkdir foo/bar/baz'), 'mkdir -p foo/bar/baz'), | ||||
|     (Command('hdfs dfs -mkdir foo/bar/baz'), 'hdfs dfs -mkdir -p foo/bar/baz'), | ||||
|     (Command('./bin/hdfs dfs -mkdir foo/bar/baz'), './bin/hdfs dfs -mkdir -p foo/bar/baz'), | ||||
|     (Command('mkdir foo/bar/baz', ''), 'mkdir -p foo/bar/baz'), | ||||
|     (Command('hdfs dfs -mkdir foo/bar/baz', ''), 'hdfs dfs -mkdir -p foo/bar/baz'), | ||||
|     (Command('./bin/hdfs dfs -mkdir foo/bar/baz', ''), './bin/hdfs dfs -mkdir -p foo/bar/baz'), | ||||
| ]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,16 +1,16 @@ | ||||
| import pytest | ||||
| from thefuck.rules.mvn_no_command import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='mvn', stdout='[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]')]) | ||||
|     Command('mvn', '[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]')]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='mvn clean', stdout=""" | ||||
|     Command('mvn clean', """ | ||||
| [INFO] Scanning for projects...[INFO]                                                                          | ||||
| [INFO] ------------------------------------------------------------------------ | ||||
| [INFO] Building test 0.2 | ||||
| @@ -26,15 +26,15 @@ def test_match(command): | ||||
| [INFO] Final Memory: 6M/240M | ||||
| [INFO] ------------------------------------------------------------------------ | ||||
| """),  # noqa | ||||
|     Command(script='mvn --help'), | ||||
|     Command(script='mvn -v') | ||||
|     Command('mvn --help', ''), | ||||
|     Command('mvn -v', '') | ||||
| ]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command(script='mvn', stdout='[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]'), ['mvn clean package', 'mvn clean install']), | ||||
|     (Command(script='mvn -N', stdout='[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]'), ['mvn -N clean package', 'mvn -N clean install'])]) | ||||
|     (Command('mvn', '[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]'), ['mvn clean package', 'mvn clean install']), | ||||
|     (Command('mvn -N', '[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]'), ['mvn -N clean package', 'mvn -N clean install'])]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,16 +1,16 @@ | ||||
| import pytest | ||||
| from thefuck.rules.mvn_unknown_lifecycle_phase import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='mvn cle', stdout='[ERROR] Unknown lifecycle phase "cle". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]')]) | ||||
|     Command('mvn cle', '[ERROR] Unknown lifecycle phase "cle". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]')]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='mvn clean', stdout=""" | ||||
|     Command('mvn clean', """ | ||||
| [INFO] Scanning for projects...[INFO]                                                                          | ||||
| [INFO] ------------------------------------------------------------------------ | ||||
| [INFO] Building test 0.2 | ||||
| @@ -26,15 +26,15 @@ def test_match(command): | ||||
| [INFO] Final Memory: 6M/240M | ||||
| [INFO] ------------------------------------------------------------------------ | ||||
| """),  # noqa | ||||
|     Command(script='mvn --help'), | ||||
|     Command(script='mvn -v') | ||||
|     Command('mvn --help', ''), | ||||
|     Command('mvn -v', '') | ||||
| ]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command(script='mvn cle', stdout='[ERROR] Unknown lifecycle phase "cle". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]'), ['mvn clean', 'mvn compile']), | ||||
|     (Command(script='mvn claen package', stdout='[ERROR] Unknown lifecycle phase "claen". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]'), ['mvn clean package'])]) | ||||
|     (Command('mvn cle', '[ERROR] Unknown lifecycle phase "cle". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]'), ['mvn clean', 'mvn compile']), | ||||
|     (Command('mvn claen package', '[ERROR] Unknown lifecycle phase "claen". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]'), ['mvn clean package'])]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.no_command import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture(autouse=True) | ||||
| @@ -17,25 +17,25 @@ def history_without_current(mocker): | ||||
|  | ||||
|  | ||||
| @pytest.mark.usefixtures('no_memoize') | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('vom file.py', 'vom: not found'), | ||||
|     ('fucck', 'fucck: not found'), | ||||
|     ('got commit', 'got: command not found')]) | ||||
| def test_match(mocker, script, stderr): | ||||
| def test_match(mocker, script, output): | ||||
|     mocker.patch('thefuck.rules.no_command.which', return_value=None) | ||||
|  | ||||
|     assert match(Command(script, stderr=stderr)) | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.usefixtures('no_memoize') | ||||
| @pytest.mark.parametrize('script, stderr, which', [ | ||||
| @pytest.mark.parametrize('script, output, which', [ | ||||
|     ('qweqwe', 'qweqwe: not found', None), | ||||
|     ('vom file.py', 'some text', None), | ||||
|     ('vim file.py', 'vim: not found', 'vim')]) | ||||
| def test_not_match(mocker, script, stderr, which): | ||||
| def test_not_match(mocker, script, output, which): | ||||
|     mocker.patch('thefuck.rules.no_command.which', return_value=which) | ||||
|  | ||||
|     assert not match(Command(script, stderr=stderr)) | ||||
|     assert not match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.usefixtures('no_memoize') | ||||
| @@ -44,4 +44,4 @@ def test_not_match(mocker, script, stderr, which): | ||||
|     ('fucck', ['fsck']), | ||||
|     ('got commit', ['git commit', 'go commit'])]) | ||||
| def test_get_new_command(script, result): | ||||
|     assert get_new_command(Command(script)) == result | ||||
|     assert get_new_command(Command(script, '')) == result | ||||
|   | ||||
| @@ -1,27 +1,27 @@ | ||||
| import pytest | ||||
| from thefuck.rules.no_such_file import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='mv foo bar/foo', stderr="mv: cannot move 'foo' to 'bar/foo': No such file or directory"), | ||||
|     Command(script='mv foo bar/', stderr="mv: cannot move 'foo' to 'bar/': No such file or directory"), | ||||
|     Command('mv foo bar/foo', "mv: cannot move 'foo' to 'bar/foo': No such file or directory"), | ||||
|     Command('mv foo bar/', "mv: cannot move 'foo' to 'bar/': No such file or directory"), | ||||
| ]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='mv foo bar/', stderr=""), | ||||
|     Command(script='mv foo bar/foo', stderr="mv: permission denied"), | ||||
|     Command('mv foo bar/', ""), | ||||
|     Command('mv foo bar/foo', "mv: permission denied"), | ||||
| ]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command(script='mv foo bar/foo', stderr="mv: cannot move 'foo' to 'bar/foo': No such file or directory"), 'mkdir -p bar && mv foo bar/foo'), | ||||
|     (Command(script='mv foo bar/', stderr="mv: cannot move 'foo' to 'bar/': No such file or directory"), 'mkdir -p bar && mv foo bar/'), | ||||
|     (Command('mv foo bar/foo', "mv: cannot move 'foo' to 'bar/foo': No such file or directory"), 'mkdir -p bar && mv foo bar/foo'), | ||||
|     (Command('mv foo bar/', "mv: cannot move 'foo' to 'bar/': No such file or directory"), 'mkdir -p bar && mv foo bar/'), | ||||
| ]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| import pytest | ||||
| from io import BytesIO | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
| from thefuck.rules.npm_missing_script import match, get_new_command | ||||
|  | ||||
| stderr = ''' | ||||
| output = ''' | ||||
| npm ERR! Linux 4.4.0-31-generic | ||||
| npm ERR! argv "/opt/node/bin/node" "/opt/node/bin/npm" "run" "dvelop" | ||||
| npm ERR! node v4.4.7 | ||||
| @@ -42,28 +42,28 @@ def run_script(mocker): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('npm ru wach', stderr=stderr('wach')), | ||||
|     Command('npm run live-tes', stderr=stderr('live-tes')), | ||||
|     Command('npm run-script sahare', stderr=stderr('sahare'))]) | ||||
|     Command('npm ru wach', output('wach')), | ||||
|     Command('npm run live-tes', output('live-tes')), | ||||
|     Command('npm run-script sahare', output('sahare'))]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command('npm wach', stderr=stderr('wach')), | ||||
|     Command('vim live-tes', stderr=stderr('live-tes')), | ||||
|     Command('npm run-script sahare')]) | ||||
|     Command('npm wach', output('wach')), | ||||
|     Command('vim live-tes', output('live-tes')), | ||||
|     Command('npm run-script sahare', '')]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr, result', [ | ||||
|     ('npm ru wach-tests', stderr('wach-tests'), 'npm ru watch-test'), | ||||
|     ('npm -i run-script dvelop', stderr('dvelop'), | ||||
| @pytest.mark.parametrize('script, output, result', [ | ||||
|     ('npm ru wach-tests', output('wach-tests'), 'npm ru watch-test'), | ||||
|     ('npm -i run-script dvelop', output('dvelop'), | ||||
|      'npm -i run-script develop'), | ||||
|     ('npm -i run-script buld -X POST', stderr('buld'), | ||||
|     ('npm -i run-script buld -X POST', output('buld'), | ||||
|      'npm -i run-script build -X POST')]) | ||||
| def test_get_new_command(script, stderr, result): | ||||
|     command = Command(script, stderr=stderr) | ||||
| def test_get_new_command(script, output, result): | ||||
|     command = Command(script, output) | ||||
|  | ||||
|     assert get_new_command(command)[0] == result | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| import pytest | ||||
| from io import BytesIO | ||||
| from thefuck.rules.npm_run_script import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
| stdout = ''' | ||||
| output = ''' | ||||
| Usage: npm <command> | ||||
|  | ||||
| where <command> is one of: | ||||
| @@ -58,7 +58,7 @@ def run_script(mocker): | ||||
| @pytest.mark.parametrize('script', [ | ||||
|     'npm watch-test', 'npm develop']) | ||||
| def test_match(script): | ||||
|     command = Command(script, stdout) | ||||
|     command = Command(script, output) | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @@ -66,8 +66,8 @@ def test_match(script): | ||||
| @pytest.mark.parametrize('command, run_script_out', [ | ||||
|     (Command('npm test', 'TEST FAIL'), run_script_stdout), | ||||
|     (Command('npm watch-test', 'TEST FAIL'), run_script_stdout), | ||||
|     (Command('npm test', stdout), run_script_stdout), | ||||
|     (Command('vim watch-test', stdout), run_script_stdout)]) | ||||
|     (Command('npm test', output), run_script_stdout), | ||||
|     (Command('vim watch-test', output), run_script_stdout)]) | ||||
| def test_not_match(run_script, command, run_script_out): | ||||
|     run_script.stdout = BytesIO(run_script_out) | ||||
|     assert not match(command) | ||||
| @@ -80,5 +80,5 @@ def test_not_match(run_script, command, run_script_out): | ||||
|     ('npm -i watch-script --path ..', | ||||
|      'npm run-script -i watch-script --path ..')]) | ||||
| def test_get_new_command(script, result): | ||||
|     command = Command(script, stdout) | ||||
|     command = Command(script, output) | ||||
|     assert get_new_command(command) == result | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| import pytest | ||||
| from thefuck.rules.npm_wrong_command import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
| stdout = ''' | ||||
| output = ''' | ||||
| Usage: npm <command> | ||||
|  | ||||
| where <command> is one of: | ||||
| @@ -38,16 +38,16 @@ npm@2.14.7 /opt/node/lib/node_modules/npm | ||||
|     'npm -f urgrade -g', | ||||
|     'npm urg']) | ||||
| def test_match(script): | ||||
|     assert match(Command(script, stdout)) | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stdout', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('npm urgrade', ''), | ||||
|     ('npm', stdout), | ||||
|     ('test urgrade', stdout), | ||||
|     ('npm -e', stdout)]) | ||||
| def test_not_match(script, stdout): | ||||
|     assert not match(Command(script, stdout)) | ||||
|     ('npm', output), | ||||
|     ('test urgrade', output), | ||||
|     ('npm -e', output)]) | ||||
| def test_not_match(script, output): | ||||
|     assert not match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, result', [ | ||||
| @@ -55,4 +55,4 @@ def test_not_match(script, stdout): | ||||
|     ('npm -g isntall gulp', 'npm -g install gulp'), | ||||
|     ('npm isntall -g gulp', 'npm install -g gulp')]) | ||||
| def test_get_new_command(script, result): | ||||
|     assert get_new_command(Command(script, stdout)) == result | ||||
|     assert get_new_command(Command(script, output)) == result | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import pytest | ||||
| from thefuck.rules.open import is_arg_url, match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(script): | ||||
| def output(script): | ||||
|     return 'The file {} does not exist.\n'.format(script.split(' ', 1)[1]) | ||||
|  | ||||
|  | ||||
| @@ -20,12 +20,12 @@ def stderr(script): | ||||
|     'open foo.se', | ||||
|     'open www.foo.ru']) | ||||
| def test_is_arg_url(script): | ||||
|     assert is_arg_url(Command(script)) | ||||
|     assert is_arg_url(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', ['open foo', 'open bar.txt', 'open egg.doc']) | ||||
| def test_not_is_arg_url(script): | ||||
|     assert not is_arg_url(Command(script)) | ||||
|     assert not is_arg_url(Command(script, '')) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script', [ | ||||
| @@ -34,8 +34,8 @@ def test_not_is_arg_url(script): | ||||
|     'gnome-open foo.com', | ||||
|     'kde-open foo.com', | ||||
|     'open nonest']) | ||||
| def test_match(script, stderr): | ||||
|     assert match(Command(script, stderr=stderr)) | ||||
| def test_match(script, output): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, new_command', [ | ||||
| @@ -45,5 +45,5 @@ def test_match(script, stderr): | ||||
|     ('kde-open foo.io', ['kde-open http://foo.io']), | ||||
|     ('open nonest', ['touch nonest && open nonest', | ||||
|                      'mkdir nonest && open nonest'])]) | ||||
| def test_get_new_command(script, new_command, stderr): | ||||
|     assert get_new_command(Command(script, stderr=stderr)) == new_command | ||||
| def test_get_new_command(script, new_command, output): | ||||
|     assert get_new_command(Command(script, output)) == new_command | ||||
|   | ||||
| @@ -2,7 +2,7 @@ import pytest | ||||
| from mock import patch | ||||
| from thefuck.rules import pacman | ||||
| from thefuck.rules.pacman import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| pacman_cmd = getattr(pacman, 'pacman', 'pacman') | ||||
| @@ -20,15 +20,15 @@ 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='sudo vim', stderr='sudo: vim: command not found')]) | ||||
|     Command('vim', 'vim: command not found'), | ||||
|     Command('sudo vim', 'sudo: vim: command not found')]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, return_value', [ | ||||
|     (Command(script='vim', stderr='vim: command not found'), PKGFILE_OUTPUT_VIM), | ||||
|     (Command(script='sudo vim', stderr='sudo: vim: command not found'), PKGFILE_OUTPUT_VIM)]) | ||||
|     (Command('vim', 'vim: command not found'), PKGFILE_OUTPUT_VIM), | ||||
|     (Command('sudo vim', 'sudo: vim: command not found'), PKGFILE_OUTPUT_VIM)]) | ||||
| @patch('thefuck.specific.archlinux.subprocess') | ||||
| @patch.multiple(pacman, create=True, pacman=pacman_cmd) | ||||
| def test_match_mocked(subp_mock, command, return_value): | ||||
| @@ -37,8 +37,8 @@ def test_match_mocked(subp_mock, command, return_value): | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='vim', stderr=''), Command(), | ||||
|     Command(script='sudo vim', stderr=''), Command()]) | ||||
|     Command('vim', ''), Command('', ''), | ||||
|     Command('sudo vim', ''), Command('', '')]) | ||||
| def test_not_match(command): | ||||
|     assert not match(command) | ||||
|  | ||||
| @@ -61,20 +61,20 @@ vim_possibilities = [s.format(pacman_cmd) for s in vim_possibilities] | ||||
| @pytest.mark.skipif(not getattr(pacman, 'enabled_by_default', True), | ||||
|                     reason='Skip if pacman is not available') | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command('vim'), vim_possibilities), | ||||
|     (Command('sudo vim'), sudo_vim_possibilities), | ||||
|     (Command('convert'), ['{} -S extra/imagemagick && convert'.format(pacman_cmd)]), | ||||
|     (Command('sudo convert'), ['{} -S extra/imagemagick && sudo convert'.format(pacman_cmd)])]) | ||||
|     (Command('vim', ''), vim_possibilities), | ||||
|     (Command('sudo vim', ''), sudo_vim_possibilities), | ||||
|     (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) == new_command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command, return_value', [ | ||||
|     (Command('vim'), vim_possibilities, PKGFILE_OUTPUT_VIM), | ||||
|     (Command('sudo vim'), sudo_vim_possibilities, PKGFILE_OUTPUT_VIM), | ||||
|     (Command('convert'), ['{} -S extra/imagemagick && convert'.format(pacman_cmd)], PKGFILE_OUTPUT_CONVERT), | ||||
|     (Command('sudo'), ['{} -S core/sudo && sudo'.format(pacman_cmd)], PKGFILE_OUTPUT_SUDO), | ||||
|     (Command('sudo convert'), ['{} -S extra/imagemagick && sudo convert'.format(pacman_cmd)], PKGFILE_OUTPUT_CONVERT)]) | ||||
|     (Command('vim', ''), vim_possibilities, PKGFILE_OUTPUT_VIM), | ||||
|     (Command('sudo vim', ''), sudo_vim_possibilities, PKGFILE_OUTPUT_VIM), | ||||
|     (Command('convert', ''), ['{} -S extra/imagemagick && convert'.format(pacman_cmd)], PKGFILE_OUTPUT_CONVERT), | ||||
|     (Command('sudo', ''), ['{} -S core/sudo && sudo'.format(pacman_cmd)], PKGFILE_OUTPUT_SUDO), | ||||
|     (Command('sudo convert', ''), ['{} -S extra/imagemagick && sudo convert'.format(pacman_cmd)], PKGFILE_OUTPUT_CONVERT)]) | ||||
| @patch('thefuck.specific.archlinux.subprocess') | ||||
| @patch.multiple(pacman, create=True, pacman=pacman_cmd) | ||||
| def test_get_new_command_mocked(subp_mock, command, new_command, return_value): | ||||
|   | ||||
| @@ -2,7 +2,7 @@ import pytest | ||||
| from mock import patch | ||||
| from thefuck.rules import pacman_not_found | ||||
| from thefuck.rules.pacman_not_found import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
| PKGFILE_OUTPUT_LLC = '''extra/llvm 3.6.0-5      /usr/bin/llc | ||||
| extra/llvm35 3.5.2-13/usr/bin/llc''' | ||||
| @@ -11,17 +11,17 @@ extra/llvm35 3.5.2-13/usr/bin/llc''' | ||||
| @pytest.mark.skipif(not getattr(pacman_not_found, 'enabled_by_default', True), | ||||
|                     reason='Skip if pacman is not available') | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='yaourt -S llc', stderr='error: target not found: llc'), | ||||
|     Command(script='pacman llc', stderr='error: target not found: llc'), | ||||
|     Command(script='sudo pacman llc', stderr='error: target not found: llc')]) | ||||
|     Command('yaourt -S llc', 'error: target not found: llc'), | ||||
|     Command('pacman llc', 'error: target not found: llc'), | ||||
|     Command('sudo pacman llc', 'error: target not found: llc')]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='yaourt -S llc', stderr='error: target not found: llc'), | ||||
|     Command(script='pacman llc', stderr='error: target not found: llc'), | ||||
|     Command(script='sudo pacman llc', stderr='error: target not found: llc')]) | ||||
|     Command('yaourt -S llc', 'error: target not found: llc'), | ||||
|     Command('pacman llc', 'error: target not found: llc'), | ||||
|     Command('sudo pacman llc', 'error: target not found: llc')]) | ||||
| @patch('thefuck.specific.archlinux.subprocess') | ||||
| def test_match_mocked(subp_mock, command): | ||||
|     subp_mock.check_output.return_value = PKGFILE_OUTPUT_LLC | ||||
| @@ -31,17 +31,17 @@ def test_match_mocked(subp_mock, command): | ||||
| @pytest.mark.skipif(not getattr(pacman_not_found, 'enabled_by_default', True), | ||||
|                     reason='Skip if pacman is not available') | ||||
| @pytest.mark.parametrize('command, fixed', [ | ||||
|     (Command(script='yaourt -S llc', stderr='error: target not found: llc'), ['yaourt -S extra/llvm', 'yaourt -S extra/llvm35']), | ||||
|     (Command(script='pacman -S llc', stderr='error: target not found: llc'), ['pacman -S extra/llvm', 'pacman -S extra/llvm35']), | ||||
|     (Command(script='sudo pacman -S llc', stderr='error: target not found: llc'), ['sudo pacman -S extra/llvm', 'sudo pacman -S extra/llvm35'])]) | ||||
|     (Command('yaourt -S llc', 'error: target not found: llc'), ['yaourt -S extra/llvm', 'yaourt -S extra/llvm35']), | ||||
|     (Command('pacman -S llc', 'error: target not found: llc'), ['pacman -S extra/llvm', 'pacman -S extra/llvm35']), | ||||
|     (Command('sudo pacman -S llc', 'error: target not found: llc'), ['sudo pacman -S extra/llvm', 'sudo pacman -S extra/llvm35'])]) | ||||
| def test_get_new_command(command, fixed): | ||||
|     assert get_new_command(command) == fixed | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, fixed', [ | ||||
|     (Command(script='yaourt -S llc', stderr='error: target not found: llc'), ['yaourt -S extra/llvm', 'yaourt -S extra/llvm35']), | ||||
|     (Command(script='pacman -S llc', stderr='error: target not found: llc'), ['pacman -S extra/llvm', 'pacman -S extra/llvm35']), | ||||
|     (Command(script='sudo pacman -S llc', stderr='error: target not found: llc'), ['sudo pacman -S extra/llvm', 'sudo pacman -S extra/llvm35'])]) | ||||
|     (Command('yaourt -S llc', 'error: target not found: llc'), ['yaourt -S extra/llvm', 'yaourt -S extra/llvm35']), | ||||
|     (Command('pacman -S llc', 'error: target not found: llc'), ['pacman -S extra/llvm', 'pacman -S extra/llvm35']), | ||||
|     (Command('sudo pacman -S llc', 'error: target not found: llc'), ['sudo pacman -S extra/llvm', 'sudo pacman -S extra/llvm35'])]) | ||||
| @patch('thefuck.specific.archlinux.subprocess') | ||||
| def test_get_new_command_mocked(subp_mock, command, fixed): | ||||
|     subp_mock.check_output.return_value = PKGFILE_OUTPUT_LLC | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.path_from_history import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture(autouse=True) | ||||
| @@ -18,26 +18,26 @@ def path_exists(mocker): | ||||
|     return exists_mock | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('ls project', 'no such file or directory: project'), | ||||
|     ('cd project', "can't cd to project"), | ||||
| ]) | ||||
| def test_match(script, stderr): | ||||
|     assert match(Command(script, stderr=stderr)) | ||||
| def test_match(script, output): | ||||
|     assert match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr', [ | ||||
| @pytest.mark.parametrize('script, output', [ | ||||
|     ('myapp cats', 'no such file or directory: project'), | ||||
|     ('cd project', ""), | ||||
| ]) | ||||
| def test_not_match(script, stderr): | ||||
|     assert not match(Command(script, stderr=stderr)) | ||||
| def test_not_match(script, output): | ||||
|     assert not match(Command(script, output)) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('script, stderr, result', [ | ||||
| @pytest.mark.parametrize('script, output, result', [ | ||||
|     ('ls project', 'no such file or directory: project', 'ls ~/work/project'), | ||||
|     ('cd java', "can't cd to java", 'cd /opt/java'), | ||||
| ]) | ||||
| def test_get_new_command(script, stderr, result): | ||||
|     new_command = get_new_command(Command(script, stderr=stderr)) | ||||
| def test_get_new_command(script, output, result): | ||||
|     new_command = get_new_command(Command(script, output)) | ||||
|     assert new_command[0] == result | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import pytest | ||||
| from thefuck.rules.pip_unknown_command import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| @@ -14,11 +14,11 @@ def pip_unknown_cmd_without_recommend(): | ||||
|  | ||||
|  | ||||
| def test_match(pip_unknown_cmd, pip_unknown_cmd_without_recommend): | ||||
|     assert match(Command('pip instatl', stderr=pip_unknown_cmd)) | ||||
|     assert match(Command('pip instatl', pip_unknown_cmd)) | ||||
|     assert not match(Command('pip i', | ||||
|                              stderr=pip_unknown_cmd_without_recommend)) | ||||
|                              pip_unknown_cmd_without_recommend)) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(pip_unknown_cmd): | ||||
|     assert get_new_command(Command('pip instatl', | ||||
|                                    stderr=pip_unknown_cmd)) == 'pip install' | ||||
|                                    pip_unknown_cmd)) == 'pip install' | ||||
|   | ||||
| @@ -2,7 +2,7 @@ from io import BytesIO | ||||
|  | ||||
| import pytest | ||||
| from thefuck.rules.port_already_in_use import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
| outputs = [ | ||||
|     ''' | ||||
| @@ -76,17 +76,17 @@ def lsof(mocker): | ||||
| @pytest.mark.usefixtures('no_memoize') | ||||
| @pytest.mark.parametrize( | ||||
|     'command', | ||||
|     [Command('./app', stdout=output) for output in outputs] | ||||
|     + [Command('./app', stderr=output) for output in outputs]) | ||||
|     [Command('./app', output) for output in outputs] | ||||
|     + [Command('./app', output) for output in outputs]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.usefixtures('no_memoize') | ||||
| @pytest.mark.parametrize('command, lsof_output', [ | ||||
|     (Command('./app'), lsof_stdout), | ||||
|     (Command('./app', stdout=outputs[1]), b''), | ||||
|     (Command('./app', stderr=outputs[2]), b'')]) | ||||
|     (Command('./app', ''), lsof_stdout), | ||||
|     (Command('./app', outputs[1]), b''), | ||||
|     (Command('./app', outputs[2]), b'')]) | ||||
| def test_not_match(lsof, command, lsof_output): | ||||
|     lsof.return_value.stdout = BytesIO(lsof_output) | ||||
|  | ||||
| @@ -95,7 +95,7 @@ def test_not_match(lsof, command, lsof_output): | ||||
|  | ||||
| @pytest.mark.parametrize( | ||||
|     'command', | ||||
|     [Command('./app', stdout=output) for output in outputs] | ||||
|     + [Command('./app', stderr=output) for output in outputs]) | ||||
|     [Command('./app', output) for output in outputs] | ||||
|     + [Command('./app', output) for output in outputs]) | ||||
| def test_get_new_command(command): | ||||
|     assert get_new_command(command) == 'kill 18233 && ./app' | ||||
|   | ||||
| @@ -1,12 +1,12 @@ | ||||
| from thefuck.rules.python_command import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| def test_match(): | ||||
|     assert match(Command('temp.py', stderr='Permission denied')) | ||||
|     assert not match(Command()) | ||||
|     assert match(Command('temp.py', 'Permission denied')) | ||||
|     assert not match(Command('', '')) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(): | ||||
|     assert (get_new_command(Command('./test_sudo.py')) | ||||
|     assert (get_new_command(Command('./test_sudo.py', '')) | ||||
|             == 'python ./test_sudo.py') | ||||
|   | ||||
| @@ -1,17 +1,17 @@ | ||||
| import pytest | ||||
| from thefuck.rules.python_execute import match, get_new_command | ||||
| from tests.utils import Command | ||||
| from thefuck.types import Command | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command', [ | ||||
|     Command(script='python foo'), | ||||
|     Command(script='python bar')]) | ||||
|     Command('python foo', ''), | ||||
|     Command('python bar', '')]) | ||||
| def test_match(command): | ||||
|     assert match(command) | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize('command, new_command', [ | ||||
|     (Command('python foo'), 'python foo.py'), | ||||
|     (Command('python bar'), 'python bar.py')]) | ||||
|     (Command('python foo', ''), 'python foo.py'), | ||||
|     (Command('python bar', ''), 'python bar.py')]) | ||||
| def test_get_new_command(command, new_command): | ||||
|     assert get_new_command(command) == new_command | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user