diff --git a/README.md b/README.md index 9c00d926..245fcce8 100644 --- a/README.md +++ b/README.md @@ -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): diff --git a/tests/functional/test_bash.py b/tests/functional/test_bash.py index e3749622..df697a70 100644 --- a/tests/functional/test_bash.py +++ b/tests/functional/test_bash.py @@ -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 diff --git a/tests/functional/test_zsh.py b/tests/functional/test_zsh.py index 942f0248..72be1526 100644 --- a/tests/functional/test_zsh.py +++ b/tests/functional/test_zsh.py @@ -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 diff --git a/tests/rules/test_ag_literal.py b/tests/rules/test_ag_literal.py index 4040d5db..df5f6b10 100644 --- a/tests/rules/test_ag_literal.py +++ b/tests/rules/test_ag_literal.py @@ -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 diff --git a/tests/rules/test_apt_get.py b/tests/rules/test_apt_get.py index d669037c..57a441a2 100644 --- a/tests/rules/test_apt_get.py +++ b/tests/rules/test_apt_get.py @@ -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): diff --git a/tests/rules/test_apt_get_search.py b/tests/rules/test_apt_get_search.py index f9074485..21a8376a 100644 --- a/tests/rules/test_apt_get_search.py +++ b/tests/rules/test_apt_get_search.py @@ -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' diff --git a/tests/rules/test_apt_invalid_operation.py b/tests/rules/test_apt_invalid_operation.py index 23ae9d5f..7b9fcde3 100644 --- a/tests/rules/test_apt_invalid_operation.py +++ b/tests/rules/test_apt_invalid_operation.py @@ -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 diff --git a/tests/rules/test_aws_cli.py b/tests/rules/test_aws_cli.py index 48b10593..f40dcb58 100644 --- a/tests/rules/test_aws_cli.py +++ b/tests/rules/test_aws_cli.py @@ -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 diff --git a/tests/rules/test_brew_install.py b/tests/rules/test_brew_install.py index 50d4eaac..cd6e028b 100644 --- a/tests/rules/test_brew_install.py +++ b/tests/rules/test_brew_install.py @@ -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' diff --git a/tests/rules/test_brew_link.py b/tests/rules/test_brew_link.py index 0586574c..6ccce952 100644 --- a/tests/rules/test_brew_link.py +++ b/tests/rules/test_brew_link.py @@ -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 diff --git a/tests/rules/test_brew_uninstall.py b/tests/rules/test_brew_uninstall.py index cba0d424..b91c2ae0 100644 --- a/tests/rules/test_brew_uninstall.py +++ b/tests/rules/test_brew_uninstall.py @@ -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 diff --git a/tests/rules/test_brew_unknown_command.py b/tests/rules/test_brew_unknown_command.py index 2185b867..a1ad6f9d 100644 --- a/tests/rules/test_brew_unknown_command.py +++ b/tests/rules/test_brew_unknown_command.py @@ -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 diff --git a/tests/rules/test_brew_update_formula.py b/tests/rules/test_brew_update_formula.py index 4c492d07..2f8db163 100644 --- a/tests/rules/test_brew_update_formula.py +++ b/tests/rules/test_brew_update_formula.py @@ -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 '.") @@ -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 diff --git a/tests/rules/test_brew_upgrade.py b/tests/rules/test_brew_upgrade.py index e1afc8ee..62aca98a 100644 --- a/tests/rules/test_brew_upgrade.py +++ b/tests/rules/test_brew_upgrade.py @@ -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 diff --git a/tests/rules/test_cargo_no_command.py b/tests/rules/test_cargo_no_command.py index 53eea0b6..fed4fcb8 100644 --- a/tests/rules/test_cargo_no_command.py +++ b/tests/rules/test_cargo_no_command.py @@ -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 diff --git a/tests/rules/test_cd_mkdir.py b/tests/rules/test_cd_mkdir.py index 759ada36..61dc30e1 100644 --- a/tests/rules/test_cd_mkdir.py +++ b/tests/rules/test_cd_mkdir.py @@ -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 diff --git a/tests/rules/test_cd_parent.py b/tests/rules/test_cd_parent.py index 812f5885..7cb7176c 100644 --- a/tests/rules/test_cd_parent.py +++ b/tests/rules/test_cd_parent.py @@ -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 ..' diff --git a/tests/rules/test_chmod_x.py b/tests/rules/test_chmod_x.py index bc6d411b..9fc62beb 100644 --- a/tests/rules/test_chmod_x.py +++ b/tests/rules/test_chmod_x.py @@ -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 diff --git a/tests/rules/test_composer_not_command.py b/tests/rules/test_composer_not_command.py index 717ee3ab..33823cfc 100644 --- a/tests/rules/test_composer_not_command.py +++ b/tests/rules/test_composer_not_command.py @@ -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') diff --git a/tests/rules/test_cp_omitting_directory.py b/tests/rules/test_cp_omitting_directory.py index 364e9276..e4243799 100644 --- a/tests/rules/test_cp_omitting_directory.py +++ b/tests/rules/test_cp_omitting_directory.py @@ -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' diff --git a/tests/rules/test_dirty_untar.py b/tests/rules/test_dirty_untar.py index cc6994ba..e0aa5754 100644 --- a/tests/rules/test_dirty_untar.py +++ b/tests/rules/test_dirty_untar.py @@ -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))) diff --git a/tests/rules/test_dirty_unzip.py b/tests/rules/test_dirty_unzip.py index eddb2ded..ed1f8881 100644 --- a/tests/rules/test_dirty_unzip.py +++ b/tests/rules/test_dirty_unzip.py @@ -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 diff --git a/tests/rules/test_django_south_ghost.py b/tests/rules/test_django_south_ghost.py index bbc83fe5..c9f13d6a 100644 --- a/tests/rules/test_django_south_ghost.py +++ b/tests/rules/test_django_south_ghost.py @@ -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 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' diff --git a/tests/rules/test_django_south_merge.py b/tests/rules/test_django_south_merge.py index 581a1cf3..6548a8cc 100644 --- a/tests/rules/test_django_south_merge.py +++ b/tests/rules/test_django_south_merge.py @@ -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') diff --git a/tests/rules/test_docker_not_command.py b/tests/rules/test_docker_not_command.py index 172f1bf6..697c0f31 100644 --- a/tests/rules/test_docker_not_command.py +++ b/tests/rules/test_docker_not_command.py @@ -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] diff --git a/tests/rules/test_dry.py b/tests/rules/test_dry.py index ce46865d..9973f84b 100644 --- a/tests/rules/test_dry.py +++ b/tests/rules/test_dry.py @@ -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 diff --git a/tests/rules/test_fab_command_not_found.py b/tests/rules/test_fab_command_not_found.py index da596b6b..24002886 100644 --- a/tests/rules/test_fab_command_not_found.py +++ b/tests/rules/test_fab_command_not_found.py @@ -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 diff --git a/tests/rules/test_fix_alt_space.py b/tests/rules/test_fix_alt_space.py index abc0ed1f..76975661 100644 --- a/tests/rules/test_fix_alt_space.py +++ b/tests/rules/test_fix_alt_space.py @@ -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') diff --git a/tests/rules/test_fix_file.py b/tests/rules/test_fix_file.py index 70921cb8..c4cec0f9 100644 --- a/tests/rules/test_fix_file.py +++ b/tests/rules/test_fix_file.py @@ -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 @@ -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 @@ -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]: diff --git a/tests/rules/test_gem_unknown_command.py b/tests/rules/test_gem_unknown_command.py index c5d30887..3da0fa71 100644 --- a/tests/rules/test_gem_unknown_command.py +++ b/tests/rules/test_gem_unknown_command.py @@ -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 diff --git a/tests/rules/test_git_add.py b/tests/rules/test_git_add.py index 853c03af..3be7f4c8 100644 --- a/tests/rules/test_git_add.py +++ b/tests/rules/test_git_add.py @@ -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 diff --git a/tests/rules/test_git_add_force.py b/tests/rules/test_git_add_force.py index d6d3dd7c..4f7ac061 100644 --- a/tests/rules/test_git_add_force.py +++ b/tests/rules/test_git_add_force.py @@ -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") diff --git a/tests/rules/test_git_bisect_usage.py b/tests/rules/test_git_bisect_usage.py index c4f8828e..a9d57cd7 100644 --- a/tests/rules/test_git_bisect_usage.py +++ b/tests/rules/test_git_bisect_usage.py @@ -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 diff --git a/tests/rules/test_git_branch_delete.py b/tests/rules/test_git_branch_delete.py index bfcc5d17..2a8c977d 100644 --- a/tests/rules/test_git_branch_delete.py +++ b/tests/rules/test_git_branch_delete.py @@ -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" diff --git a/tests/rules/test_git_branch_exists.py b/tests/rules/test_git_branch_exists.py index e2122320..14c17e50 100644 --- a/tests/rules/test_git_branch_exists.py +++ b/tests/rules/test_git_branch_exists.py @@ -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 diff --git a/tests/rules/test_git_branch_list.py b/tests/rules/test_git_branch_list.py index cb160e3d..b1c21a4d 100644 --- a/tests/rules/test_git_branch_list.py +++ b/tests/rules/test_git_branch_list.py @@ -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')) diff --git a/tests/rules/test_git_checkout.py b/tests/rules/test_git_checkout.py index 13212d7d..355b6862 100644 --- a/tests/rules/test_git_checkout.py +++ b/tests/rules/test_git_checkout.py @@ -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) diff --git a/tests/rules/test_git_diff_no_index.py b/tests/rules/test_git_diff_no_index.py index f982a47a..889f7876 100644 --- a/tests/rules/test_git_diff_no_index.py +++ b/tests/rules/test_git_diff_no_index.py @@ -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 diff --git a/tests/rules/test_git_diff_staged.py b/tests/rules/test_git_diff_staged.py index 9ff673bd..72d68565 100644 --- a/tests/rules/test_git_diff_staged.py +++ b/tests/rules/test_git_diff_staged.py @@ -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 diff --git a/tests/rules/test_git_fix_stash.py b/tests/rules/test_git_fix_stash.py index 6e4ac162..ca63ee70 100644 --- a/tests/rules/test_git_fix_stash.py +++ b/tests/rules/test_git_fix_stash.py @@ -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 [] '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 diff --git a/tests/rules/test_git_flag_after_filename.py b/tests/rules/test_git_flag_after_filename.py index 4cf49957..91ba267a 100644 --- a/tests/rules/test_git_flag_after_filename.py +++ b/tests/rules/test_git_flag_after_filename.py @@ -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) diff --git a/tests/rules/test_git_help_aliased.py b/tests/rules/test_git_help_aliased.py index ef33a112..baa2ec4f 100644 --- a/tests/rules/test_git_help_aliased.py +++ b/tests/rules/test_git_help_aliased.py @@ -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 diff --git a/tests/rules/test_git_not_command.py b/tests/rules/test_git_not_command.py index ede5aa23..8a9740c5 100644 --- a/tests/rules/test_git_not_command.py +++ b/tests/rules/test_git_not_command.py @@ -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']) diff --git a/tests/rules/test_git_pull.py b/tests/rules/test_git_pull.py index d24e400c..b2a7154d 100644 --- a/tests/rules/test_git_pull.py +++ b/tests/rules/test_git_pull.py @@ -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") diff --git a/tests/rules/test_git_pull_clone.py b/tests/rules/test_git_pull_clone.py index 9e7875bb..307e3a24 100644 --- a/tests/rules/test_git_pull_clone.py +++ b/tests/rules/test_git_pull_clone.py @@ -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 diff --git a/tests/rules/test_git_pull_uncommitted_changes.py b/tests/rules/test_git_pull_uncommitted_changes.py index e32a7370..ac29bc0d 100644 --- a/tests/rules/test_git_pull_uncommitted_changes.py +++ b/tests/rules/test_git_pull_uncommitted_changes.py @@ -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") diff --git a/tests/rules/test_git_pull_unstaged_changes.py b/tests/rules/test_git_pull_unstaged_changes.py index ef3d94ea..3600e749 100644 --- a/tests/rules/test_git_pull_unstaged_changes.py +++ b/tests/rules/test_git_pull_unstaged_changes.py @@ -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") diff --git a/tests/rules/test_git_push.py b/tests/rules/test_git_push.py index 1eb61b23..debd7039 100644 --- a/tests/rules/test_git_push.py +++ b/tests/rules/test_git_push.py @@ -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" diff --git a/tests/rules/test_git_push_force.py b/tests/rules/test_git_push_force.py index 9eb322c4..96e056a8 100644 --- a/tests/rules/test_git_push_force.py +++ b/tests/rules/test_git_push_force.py @@ -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 diff --git a/tests/rules/test_git_push_pull.py b/tests/rules/test_git_push_pull.py index 93e41bc2..74cea4f8 100644 --- a/tests/rules/test_git_push_pull.py +++ b/tests/rules/test_git_push_pull.py @@ -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 diff --git a/tests/rules/test_git_push_without_commits.py b/tests/rules/test_git_push_without_commits.py index 4ffea4da..75ea9739 100644 --- a/tests/rules/test_git_push_without_commits.py +++ b/tests/rules/test_git_push_without_commits.py @@ -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): diff --git a/tests/rules/test_git_rebase_merge_dir.py b/tests/rules/test_git_rebase_merge_dir.py index 3e43ea70..55f6285f 100644 --- a/tests/rules/test_git_rebase_merge_dir.py +++ b/tests/rules/test_git_rebase_merge_dir.py @@ -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 diff --git a/tests/rules/test_git_rebase_no_changes.py b/tests/rules/test_git_rebase_no_changes.py index d6c1c21d..f70d8858 100644 --- a/tests/rules/test_git_rebase_no_changes.py +++ b/tests/rules/test_git_rebase_no_changes.py @@ -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') diff --git a/tests/rules/test_git_remote_seturl_add.py b/tests/rules/test_git_remote_seturl_add.py index 011d6207..f73dd16d 100644 --- a/tests/rules/test_git_remote_seturl_add.py +++ b/tests/rules/test_git_remote_seturl_add.py @@ -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 diff --git a/tests/rules/test_git_rm_local_modifications.py b/tests/rules/test_git_rm_local_modifications.py index 1b0a4df6..f09b4485 100644 --- a/tests/rules/test_git_rm_local_modifications.py +++ b/tests/rules/test_git_rm_local_modifications.py @@ -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 diff --git a/tests/rules/test_git_rm_recursive.py b/tests/rules/test_git_rm_recursive.py index 31b7d974..ecc437ce 100644 --- a/tests/rules/test_git_rm_recursive.py +++ b/tests/rules/test_git_rm_recursive.py @@ -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 diff --git a/tests/rules/test_git_rm_staged.py b/tests/rules/test_git_rm_staged.py index 125ae998..dbdd7d27 100644 --- a/tests/rules/test_git_rm_staged.py +++ b/tests/rules/test_git_rm_staged.py @@ -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 diff --git a/tests/rules/test_git_stash.py b/tests/rules/test_git_stash.py index 53cdce42..125bf973 100644 --- a/tests/rules/test_git_stash.py +++ b/tests/rules/test_git_stash.py @@ -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 diff --git a/tests/rules/test_git_stash_pop.py b/tests/rules/test_git_stash_pop.py index b82f0d56..35cde465 100644 --- a/tests/rules/test_git_stash_pop.py +++ b/tests/rules/test_git_stash_pop.py @@ -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 .") diff --git a/tests/rules/test_git_tag_force.py b/tests/rules/test_git_tag_force.py index 3a2e40d9..193e6271 100644 --- a/tests/rules/test_git_tag_force.py +++ b/tests/rules/test_git_tag_force.py @@ -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") diff --git a/tests/rules/test_git_two_dashes.py b/tests/rules/test_git_two_dashes.py index 56e6b56b..abd413c4 100644 --- a/tests/rules/test_git_two_dashes.py +++ b/tests/rules/test_git_two_dashes.py @@ -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 diff --git a/tests/rules/test_go_run.py b/tests/rules/test_go_run.py index f0ae90cc..f00cd25f 100644 --- a/tests/rules/test_go_run.py +++ b/tests/rules/test_go_run.py @@ -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 diff --git a/tests/rules/test_gradle_not_task.py b/tests/rules/test_gradle_not_task.py index 1cf968bc..f66fa02a 100644 --- a/tests/rules/test_gradle_not_task.py +++ b/tests/rules/test_gradle_not_task.py @@ -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 diff --git a/tests/rules/test_gradle_wrapper.py b/tests/rules/test_gradle_wrapper.py index 39d1bc43..a953e7cc 100644 --- a/tests/rules/test_gradle_wrapper.py +++ b/tests/rules/test_gradle_wrapper.py @@ -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 diff --git a/tests/rules/test_grep_arguments_order.py b/tests/rules/test_grep_arguments_order.py index b2896493..3fdee1cc 100644 --- a/tests/rules/test_grep_arguments_order.py +++ b/tests/rules/test_grep_arguments_order.py @@ -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 diff --git a/tests/rules/test_grep_recursive.py b/tests/rules/test_grep_recursive.py index 1bf248f1..87c1590f 100644 --- a/tests/rules/test_grep_recursive.py +++ b/tests/rules/test_grep_recursive.py @@ -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é .' diff --git a/tests/rules/test_grunt_task_not_found.py b/tests/rules/test_grunt_task_not_found.py index 62c8f441..d40ebaee 100644 --- a/tests/rules/test_grunt_task_not_found.py +++ b/tests/rules/test_grunt_task_not_found.py @@ -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 diff --git a/tests/rules/test_gulp_not_task.py b/tests/rules/test_gulp_not_task.py index 6a7106c3..26bc18f3 100644 --- a/tests/rules/test_gulp_not_task.py +++ b/tests/rules/test_gulp_not_task.py @@ -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'] diff --git a/tests/rules/test_has_exists_script.py b/tests/rules/test_has_exists_script.py index 7ddb7b89..7814a753 100644 --- a/tests/rules/test_has_exists_script.py +++ b/tests/rules/test_has_exists_script.py @@ -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' diff --git a/tests/rules/test_heroku_not_command.py b/tests/rules/test_heroku_not_command.py index be67eae9..824b5b3c 100644 --- a/tests/rules/test_heroku_not_command.py +++ b/tests/rules/test_heroku_not_command.py @@ -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 diff --git a/tests/rules/test_history.py b/tests/rules/test_history.py index 87129f7a..98812876 100644 --- a/tests/rules/test_history.py +++ b/tests/rules/test_history.py @@ -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 diff --git a/tests/rules/test_hostscli.py b/tests/rules/test_hostscli.py index 373f1fe5..671d502c 100644 --- a/tests/rules/test_hostscli.py +++ b/tests/rules/test_hostscli.py @@ -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 diff --git a/tests/rules/test_ifconfig_device_not_found.py b/tests/rules/test_ifconfig_device_not_found.py index e09daffc..09d20b13 100644 --- a/tests/rules/test_ifconfig_device_not_found.py +++ b/tests/rules/test_ifconfig_device_not_found.py @@ -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 diff --git a/tests/rules/test_java.py b/tests/rules/test_java.py index a7194ec3..86ab7669 100644 --- a/tests/rules/test_java.py +++ b/tests/rules/test_java.py @@ -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 diff --git a/tests/rules/test_javac.py b/tests/rules/test_javac.py index a83b0821..8363ccc2 100644 --- a/tests/rules/test_javac.py +++ b/tests/rules/test_javac.py @@ -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 diff --git a/tests/rules/test_lein_not_task.py b/tests/rules/test_lein_not_task.py index 8b3420c2..84b9fec8 100644 --- a/tests/rules/test_lein_not_task.py +++ b/tests/rules/test_lein_not_task.py @@ -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']) diff --git a/tests/rules/test_ln_no_hard_link.py b/tests/rules/test_ln_no_hard_link.py index 7d3d2743..2fa91ea3 100644 --- a/tests/rules/test_ln_no_hard_link.py +++ b/tests/rules/test_ln_no_hard_link.py @@ -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 diff --git a/tests/rules/test_ln_s_order.py b/tests/rules/test_ln_s_order.py index 8501b664..38f5519e 100644 --- a/tests/rules/test_ln_s_order.py +++ b/tests/rules/test_ln_s_order.py @@ -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 diff --git a/tests/rules/test_ls_all.py b/tests/rules/test_ls_all.py index 475f4e9c..0c5b44f7 100644 --- a/tests/rules/test_ls_all.py +++ b/tests/rules/test_ls_all.py @@ -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' diff --git a/tests/rules/test_ls_lah.py b/tests/rules/test_ls_lah.py index 3766f87c..c4ddb2b7 100644 --- a/tests/rules/test_ls_lah.py +++ b/tests/rules/test_ls_lah.py @@ -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' diff --git a/tests/rules/test_man.py b/tests/rules/test_man.py index c4714881..27abcf28 100644 --- a/tests/rules/test_man.py +++ b/tests/rules/test_man.py @@ -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 diff --git a/tests/rules/test_man_no_space.py b/tests/rules/test_man_no_space.py index 949acf08..7d4b6925 100644 --- a/tests/rules/test_man_no_space.py +++ b/tests/rules/test_man_no_space.py @@ -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' diff --git a/tests/rules/test_mercurial.py b/tests/rules/test_mercurial.py index 75fdf836..277dfca6 100644 --- a/tests/rules/test_mercurial.py +++ b/tests/rules/test_mercurial.py @@ -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'), diff --git a/tests/rules/test_missing_space_before_subcommand.py b/tests/rules/test_missing_space_before_subcommand.py index 68925dab..7455b9e4 100644 --- a/tests/rules/test_missing_space_before_subcommand.py +++ b/tests/rules/test_missing_space_before_subcommand.py @@ -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 diff --git a/tests/rules/test_mkdir_p.py b/tests/rules/test_mkdir_p.py index 39111b2c..f229a857 100644 --- a/tests/rules/test_mkdir_p.py +++ b/tests/rules/test_mkdir_p.py @@ -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 diff --git a/tests/rules/test_mvn_no_command.py b/tests/rules/test_mvn_no_command.py index 7e729457..e4aa723d 100644 --- a/tests/rules/test_mvn_no_command.py +++ b/tests/rules/test_mvn_no_command.py @@ -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 : or :[:]:. 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 : or :[:]:. 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 : or :[:]:. 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 : or :[:]:. 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 : or :[:]:. 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 : or :[:]:. 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 diff --git a/tests/rules/test_mvn_unknown_lifecycle_phase.py b/tests/rules/test_mvn_unknown_lifecycle_phase.py index b880fd20..aff6ad27 100644 --- a/tests/rules/test_mvn_unknown_lifecycle_phase.py +++ b/tests/rules/test_mvn_unknown_lifecycle_phase.py @@ -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 : or :[:]:. 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 : or :[:]:. 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 : or :[:]:. 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 : or :[:]:. 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 : or :[:]:. 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 : or :[:]:. 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 diff --git a/tests/rules/test_no_command.py b/tests/rules/test_no_command.py index 5e5aab94..ab8b0dac 100644 --- a/tests/rules/test_no_command.py +++ b/tests/rules/test_no_command.py @@ -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 diff --git a/tests/rules/test_no_such_file.py b/tests/rules/test_no_such_file.py index 169882e5..bef720a5 100644 --- a/tests/rules/test_no_such_file.py +++ b/tests/rules/test_no_such_file.py @@ -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 diff --git a/tests/rules/test_npm_missing_script.py b/tests/rules/test_npm_missing_script.py index 5a33febd..db10549d 100644 --- a/tests/rules/test_npm_missing_script.py +++ b/tests/rules/test_npm_missing_script.py @@ -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 diff --git a/tests/rules/test_npm_run_script.py b/tests/rules/test_npm_run_script.py index 1825caa7..8bf2f710 100644 --- a/tests/rules/test_npm_run_script.py +++ b/tests/rules/test_npm_run_script.py @@ -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 where 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 diff --git a/tests/rules/test_npm_wrong_command.py b/tests/rules/test_npm_wrong_command.py index e9511af5..f93da580 100644 --- a/tests/rules/test_npm_wrong_command.py +++ b/tests/rules/test_npm_wrong_command.py @@ -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 where 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 diff --git a/tests/rules/test_open.py b/tests/rules/test_open.py index 9186adf4..2f1b276d 100644 --- a/tests/rules/test_open.py +++ b/tests/rules/test_open.py @@ -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 diff --git a/tests/rules/test_pacman.py b/tests/rules/test_pacman.py index 956497f5..985b8b89 100644 --- a/tests/rules/test_pacman.py +++ b/tests/rules/test_pacman.py @@ -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): diff --git a/tests/rules/test_pacman_not_found.py b/tests/rules/test_pacman_not_found.py index b98dc335..ee81d269 100644 --- a/tests/rules/test_pacman_not_found.py +++ b/tests/rules/test_pacman_not_found.py @@ -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 diff --git a/tests/rules/test_path_from_history.py b/tests/rules/test_path_from_history.py index 9b14ca73..99ab3318 100644 --- a/tests/rules/test_path_from_history.py +++ b/tests/rules/test_path_from_history.py @@ -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 diff --git a/tests/rules/test_pip_unknown_command.py b/tests/rules/test_pip_unknown_command.py index 79fa2f2c..22abef26 100644 --- a/tests/rules/test_pip_unknown_command.py +++ b/tests/rules/test_pip_unknown_command.py @@ -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' diff --git a/tests/rules/test_port_already_in_use.py b/tests/rules/test_port_already_in_use.py index ff85b665..c1297647 100644 --- a/tests/rules/test_port_already_in_use.py +++ b/tests/rules/test_port_already_in_use.py @@ -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' diff --git a/tests/rules/test_python_command.py b/tests/rules/test_python_command.py index 234d2e54..9e642a13 100644 --- a/tests/rules/test_python_command.py +++ b/tests/rules/test_python_command.py @@ -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') diff --git a/tests/rules/test_python_execute.py b/tests/rules/test_python_execute.py index 0f4a2222..7034142a 100644 --- a/tests/rules/test_python_execute.py +++ b/tests/rules/test_python_execute.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 diff --git a/tests/rules/test_quotation_marks.py b/tests/rules/test_quotation_marks.py index 27b6699d..050d59b5 100644 --- a/tests/rules/test_quotation_marks.py +++ b/tests/rules/test_quotation_marks.py @@ -1,19 +1,19 @@ import pytest from thefuck.rules.quotation_marks import match, get_new_command -from tests.utils import Command +from thefuck.types import Command @pytest.mark.parametrize('command', [ - Command(script="git commit -m \'My Message\""), - Command(script="git commit -am \"Mismatched Quotation Marks\'"), - Command(script="echo \"hello\'")]) + Command("git commit -m \'My Message\"", ''), + Command("git commit -am \"Mismatched Quotation Marks\'", ''), + Command("echo \"hello\'", '')]) def test_match(command): assert match(command) @pytest.mark.parametrize('command, new_command', [ - (Command("git commit -m \'My Message\""), "git commit -m \"My Message\""), - (Command("git commit -am \"Mismatched Quotation Marks\'"), "git commit -am \"Mismatched Quotation Marks\""), - (Command("echo \"hello\'"), "echo \"hello\"")]) + (Command("git commit -m \'My Message\"", ''), "git commit -m \"My Message\""), + (Command("git commit -am \"Mismatched Quotation Marks\'", ''), "git commit -am \"Mismatched Quotation Marks\""), + (Command("echo \"hello\'", ''), "echo \"hello\"")]) def test_get_new_command(command, new_command): assert get_new_command(command) == new_command diff --git a/tests/rules/test_react_native_command_unrecognized.py b/tests/rules/test_react_native_command_unrecognized.py index 5e6fae89..e294971c 100644 --- a/tests/rules/test_react_native_command_unrecognized.py +++ b/tests/rules/test_react_native_command_unrecognized.py @@ -2,9 +2,9 @@ import pytest from io import BytesIO from thefuck.rules.react_native_command_unrecognized import match, \ get_new_command -from tests.utils import Command +from thefuck.types import Command -stderr = "Unrecognized command '{}'".format +output = "Unrecognized command '{}'".format stdout = b''' Scanning 615 folders for symlinks in /home/nvbn/work/zcho/BookkaWebView/node_modules (6ms) @@ -38,23 +38,23 @@ Scanning 615 folders for symlinks in /home/nvbn/work/zcho/BookkaWebView/node_mod @pytest.mark.parametrize('command', [ - Command('react-native star', stderr=stderr('star')), - Command('react-native android-logs', stderr=stderr('android-logs'))]) + Command('react-native star', output('star')), + Command('react-native android-logs', output('android-logs'))]) def test_match(command): assert match(command) @pytest.mark.parametrize('command', [ - Command('gradle star', stderr=stderr('star')), - Command('react-native start')]) + Command('gradle star', output('star')), + Command('react-native start', '')]) def test_not_match(command): assert not match(command) @pytest.mark.parametrize('command, result', [ - (Command('react-native star', stderr=stderr('star')), + (Command('react-native star', output('star')), 'react-native start'), - (Command('react-native logsandroid -f', stderr=stderr('logsandroid')), + (Command('react-native logsandroid -f', output('logsandroid')), 'react-native log-android -f')]) def test_get_new_command(mocker, command, result): patch = mocker.patch( diff --git a/tests/rules/test_remove_trailing_cedilla.py b/tests/rules/test_remove_trailing_cedilla.py index d139984d..f4707ac2 100644 --- a/tests/rules/test_remove_trailing_cedilla.py +++ b/tests/rules/test_remove_trailing_cedilla.py @@ -1,17 +1,17 @@ import pytest from thefuck.rules.remove_trailing_cedilla import match, get_new_command, CEDILLA -from tests.utils import Command +from thefuck.types import Command @pytest.mark.parametrize('command', [ - Command(script='wrong' + CEDILLA), - Command(script='wrong with args' + CEDILLA)]) + Command('wrong' + CEDILLA, ''), + Command('wrong with args' + CEDILLA, '')]) def test_match(command): assert match(command) @pytest.mark.parametrize('command, new_command', [ - (Command('wrong' + CEDILLA), 'wrong'), - (Command('wrong with args' + CEDILLA), 'wrong with args')]) + (Command('wrong' + CEDILLA, ''), 'wrong'), + (Command('wrong with args' + CEDILLA, ''), 'wrong with args')]) def test_get_new_command(command, new_command): assert get_new_command(command) == new_command diff --git a/tests/rules/test_rm_dir.py b/tests/rules/test_rm_dir.py index 69ec42a3..9a201094 100644 --- a/tests/rules/test_rm_dir.py +++ b/tests/rules/test_rm_dir.py @@ -1,31 +1,31 @@ import pytest from thefuck.rules.rm_dir import match, get_new_command -from tests.utils import Command +from thefuck.types import Command @pytest.mark.parametrize('command', [ - Command('rm foo', stderr='rm: foo: is a directory'), - Command('rm foo', stderr='rm: foo: Is a directory'), - Command('hdfs dfs -rm foo', stderr='rm: `foo`: Is a directory'), - Command('./bin/hdfs dfs -rm foo', stderr='rm: `foo`: Is a directory'), + Command('rm foo', 'rm: foo: is a directory'), + Command('rm foo', 'rm: foo: Is a directory'), + Command('hdfs dfs -rm foo', 'rm: `foo`: Is a directory'), + Command('./bin/hdfs dfs -rm foo', 'rm: `foo`: Is a directory'), ]) def test_match(command): assert match(command) @pytest.mark.parametrize('command', [ - Command('rm foo'), - Command('hdfs dfs -rm foo'), - Command('./bin/hdfs dfs -rm foo'), - Command(), + Command('rm foo', ''), + Command('hdfs dfs -rm foo', ''), + Command('./bin/hdfs dfs -rm foo', ''), + Command('', ''), ]) def test_not_match(command): assert not match(command) @pytest.mark.parametrize('command, new_command', [ - (Command('rm foo'), 'rm -rf foo'), - (Command('hdfs dfs -rm foo'), 'hdfs dfs -rm -r foo'), + (Command('rm foo', ''), 'rm -rf foo'), + (Command('hdfs dfs -rm foo', ''), 'hdfs dfs -rm -r foo'), ]) def test_get_new_command(command, new_command): assert get_new_command(command) == new_command diff --git a/tests/rules/test_rm_root.py b/tests/rules/test_rm_root.py index fe419904..99cb0af9 100644 --- a/tests/rules/test_rm_root.py +++ b/tests/rules/test_rm_root.py @@ -1,21 +1,20 @@ import pytest from thefuck.rules.rm_root import match, get_new_command -from tests.utils import Command +from thefuck.types import Command def test_match(): - assert match(Command(script='rm -rf /', - stderr='add --no-preserve-root')) + assert match(Command('rm -rf /', 'add --no-preserve-root')) @pytest.mark.parametrize('command', [ - Command(script='ls', stderr='add --no-preserve-root'), - Command(script='rm --no-preserve-root /', stderr='add --no-preserve-root'), - Command(script='rm -rf /', stderr='')]) + Command('ls', 'add --no-preserve-root'), + Command('rm --no-preserve-root /', 'add --no-preserve-root'), + Command('rm -rf /', '')]) def test_not_match(command): assert not match(command) def test_get_new_command(): - assert (get_new_command(Command(script='rm -rf /')) + assert (get_new_command(Command('rm -rf /', '')) == 'rm -rf / --no-preserve-root') diff --git a/tests/rules/test_scm_correction.py b/tests/rules/test_scm_correction.py index 7f02b905..a2f00a58 100644 --- a/tests/rules/test_scm_correction.py +++ b/tests/rules/test_scm_correction.py @@ -1,6 +1,6 @@ import pytest from thefuck.rules.scm_correction import match, get_new_command -from tests.utils import Command +from thefuck.types import Command @pytest.fixture @@ -9,19 +9,19 @@ def get_actual_scm_mock(mocker): return_value=None) -@pytest.mark.parametrize('script, stderr, actual_scm', [ +@pytest.mark.parametrize('script, output, actual_scm', [ ('git log', 'fatal: Not a git repository ' '(or any of the parent directories): .git', 'hg'), ('hg log', "abort: no repository found in '/home/nvbn/exp/thefuck' " "(.hg not found)!", 'git')]) -def test_match(get_actual_scm_mock, script, stderr, actual_scm): +def test_match(get_actual_scm_mock, script, output, actual_scm): get_actual_scm_mock.return_value = actual_scm - assert match(Command(script, stderr=stderr)) + assert match(Command(script, output)) -@pytest.mark.parametrize('script, stderr, actual_scm', [ +@pytest.mark.parametrize('script, output, actual_scm', [ ('git log', '', 'hg'), ('git log', 'fatal: Not a git repository ' '(or any of the parent directories): .git', @@ -32,9 +32,9 @@ def test_match(get_actual_scm_mock, script, stderr, actual_scm): ('not-scm log', "abort: no repository found in '/home/nvbn/exp/thefuck' " "(.hg not found)!", 'git')]) -def test_not_match(get_actual_scm_mock, script, stderr, actual_scm): +def test_not_match(get_actual_scm_mock, script, output, actual_scm): get_actual_scm_mock.return_value = actual_scm - assert not match(Command(script, stderr=stderr)) + assert not match(Command(script, output)) @pytest.mark.parametrize('script, actual_scm, result', [ @@ -42,5 +42,5 @@ def test_not_match(get_actual_scm_mock, script, stderr, actual_scm): ('hg log', 'git', 'git log')]) def test_get_new_command(get_actual_scm_mock, script, actual_scm, result): get_actual_scm_mock.return_value = actual_scm - new_command = get_new_command(Command(script)) + new_command = get_new_command(Command(script, '')) assert new_command == result diff --git a/tests/rules/test_sed_unterminated_s.py b/tests/rules/test_sed_unterminated_s.py index 7b2bf78d..500d7c5b 100644 --- a/tests/rules/test_sed_unterminated_s.py +++ b/tests/rules/test_sed_unterminated_s.py @@ -1,6 +1,6 @@ import pytest from thefuck.rules.sed_unterminated_s import match, get_new_command -from tests.utils import Command +from thefuck.types import Command @pytest.fixture @@ -9,20 +9,20 @@ def sed_unterminated_s(): def test_match(sed_unterminated_s): - assert match(Command('sed -e s/foo/bar', stderr=sed_unterminated_s)) - assert match(Command('sed -es/foo/bar', stderr=sed_unterminated_s)) - assert match(Command('sed -e s/foo/bar -e s/baz/quz', stderr=sed_unterminated_s)) - assert not match(Command('sed -e s/foo/bar')) - assert not match(Command('sed -es/foo/bar')) - assert not match(Command('sed -e s/foo/bar -e s/baz/quz')) + assert match(Command('sed -e s/foo/bar', sed_unterminated_s)) + assert match(Command('sed -es/foo/bar', sed_unterminated_s)) + assert match(Command('sed -e s/foo/bar -e s/baz/quz', sed_unterminated_s)) + assert not match(Command('sed -e s/foo/bar', '')) + assert not match(Command('sed -es/foo/bar', '')) + assert not match(Command('sed -e s/foo/bar -e s/baz/quz', '')) def test_get_new_command(sed_unterminated_s): - assert (get_new_command(Command('sed -e s/foo/bar', stderr=sed_unterminated_s)) + assert (get_new_command(Command('sed -e s/foo/bar', sed_unterminated_s)) == 'sed -e s/foo/bar/') - assert (get_new_command(Command('sed -es/foo/bar', stderr=sed_unterminated_s)) + assert (get_new_command(Command('sed -es/foo/bar', sed_unterminated_s)) == 'sed -es/foo/bar/') - assert (get_new_command(Command(r"sed -e 's/\/foo/bar'", stderr=sed_unterminated_s)) + assert (get_new_command(Command(r"sed -e 's/\/foo/bar'", sed_unterminated_s)) == r"sed -e 's/\/foo/bar/'") - assert (get_new_command(Command(r"sed -e s/foo/bar -es/baz/quz", stderr=sed_unterminated_s)) + assert (get_new_command(Command(r"sed -e s/foo/bar -es/baz/quz", sed_unterminated_s)) == r"sed -e s/foo/bar/ -es/baz/quz/") diff --git a/tests/rules/test_sl_ls.py b/tests/rules/test_sl_ls.py index a1c46d8d..09cb0a23 100644 --- a/tests/rules/test_sl_ls.py +++ b/tests/rules/test_sl_ls.py @@ -1,12 +1,12 @@ from thefuck.rules.sl_ls import match, get_new_command -from tests.utils import Command +from thefuck.types import Command def test_match(): - assert match(Command('sl')) - assert not match(Command('ls')) + assert match(Command('sl', '')) + assert not match(Command('ls', '')) def test_get_new_command(): - assert get_new_command(Command('sl')) == 'ls' + assert get_new_command(Command('sl', '')) == 'ls' diff --git a/tests/rules/test_ssh_known_host.py b/tests/rules/test_ssh_known_host.py index 66b76e96..d4632b7d 100644 --- a/tests/rules/test_ssh_known_host.py +++ b/tests/rules/test_ssh_known_host.py @@ -2,7 +2,7 @@ import os import pytest from thefuck.rules.ssh_known_hosts import match, get_new_command,\ side_effect -from tests.utils import Command +from thefuck.types import Command @pytest.fixture @@ -43,19 +43,19 @@ Host key verification failed.""".format(path, '98.765.432.321') def test_match(ssh_error): errormsg, _, _, _ = ssh_error - assert match(Command('ssh', stderr=errormsg)) - assert match(Command('ssh', stderr=errormsg)) - assert match(Command('scp something something', stderr=errormsg)) - assert match(Command('scp something something', stderr=errormsg)) - assert not match(Command(stderr=errormsg)) - assert not match(Command('notssh', stderr=errormsg)) - assert not match(Command('ssh')) + assert match(Command('ssh', errormsg)) + assert match(Command('ssh', errormsg)) + assert match(Command('scp something something', errormsg)) + assert match(Command('scp something something', errormsg)) + assert not match(Command(errormsg, '')) + assert not match(Command('notssh', errormsg)) + assert not match(Command('ssh', '')) @pytest.mark.skipif(os.name == 'nt', reason='Skip if testing on Windows') def test_side_effect(ssh_error): errormsg, path, reset, known_hosts = ssh_error - command = Command('ssh user@host', stderr=errormsg) + command = Command('ssh user@host', errormsg) side_effect(command, None) expected = ['123.234.567.890 asdjkasjdakjsd\n', '111.222.333.444 qwepoiwqepoiss\n'] assert known_hosts(path) == expected @@ -63,4 +63,4 @@ def test_side_effect(ssh_error): def test_get_new_command(ssh_error, monkeypatch): errormsg, _, _, _ = ssh_error - assert get_new_command(Command('ssh user@host', stderr=errormsg)) == 'ssh user@host' + assert get_new_command(Command('ssh user@host', errormsg)) == 'ssh user@host' diff --git a/tests/rules/test_sudo.py b/tests/rules/test_sudo.py index e36001db..60636dde 100644 --- a/tests/rules/test_sudo.py +++ b/tests/rules/test_sudo.py @@ -1,25 +1,25 @@ import pytest from thefuck.rules.sudo import match, get_new_command -from tests.utils import Command +from thefuck.types import Command -@pytest.mark.parametrize('stderr, stdout', [ - ('Permission denied', ''), - ('permission denied', ''), - ("npm ERR! Error: EACCES, unlink", ''), - ('requested operation requires superuser privilege', ''), - ('need to be root', ''), - ('need root', ''), - ('must be root', ''), - ('You don\'t have access to the history DB.', ''), - ('', "error: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/ipaddr.py'")]) -def test_match(stderr, stdout): - assert match(Command(stderr=stderr, stdout=stdout)) +@pytest.mark.parametrize('output', [ + 'Permission denied', + 'permission denied', + "npm ERR! Error: EACCES, unlink", + 'requested operation requires superuser privilege', + 'need to be root', + 'need root', + 'must be root', + 'You don\'t have access to the history DB.', + "error: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/ipaddr.py'"]) +def test_match(output): + assert match(Command('', output)) def test_not_match(): - assert not match(Command()) - assert not match(Command(script='sudo ls', stderr='Permission denied')) + assert not match(Command('', '')) + assert not match(Command('sudo ls', 'Permission denied')) @pytest.mark.parametrize('before, after', [ @@ -28,4 +28,4 @@ def test_not_match(): ('echo "a" >> b', 'sudo sh -c "echo \\"a\\" >> b"'), ('mkdir && touch a', 'sudo sh -c "mkdir && touch a"')]) def test_get_new_command(before, after): - assert get_new_command(Command(before)) == after + assert get_new_command(Command(before, '')) == after diff --git a/tests/rules/test_sudo_command_from_user_path.py b/tests/rules/test_sudo_command_from_user_path.py index 7d6dacee..7e9e04ee 100644 --- a/tests/rules/test_sudo_command_from_user_path.py +++ b/tests/rules/test_sudo_command_from_user_path.py @@ -1,9 +1,9 @@ import pytest from thefuck.rules.sudo_command_from_user_path import match, get_new_command -from tests.utils import Command +from thefuck.types import Command -stderr = 'sudo: {}: command not found' +output = 'sudo: {}: command not found' @pytest.fixture(autouse=True) @@ -12,28 +12,28 @@ def which(mocker): return_value='/usr/bin/app') -@pytest.mark.parametrize('script, stderr', [ - ('sudo npm install -g react-native-cli', stderr.format('npm')), - ('sudo -u app appcfg update .', stderr.format('appcfg'))]) -def test_match(script, stderr): - assert match(Command(script, stderr=stderr)) +@pytest.mark.parametrize('script, output', [ + ('sudo npm install -g react-native-cli', output.format('npm')), + ('sudo -u app appcfg update .', output.format('appcfg'))]) +def test_match(script, output): + assert match(Command(script, output)) -@pytest.mark.parametrize('script, stderr, which_result', [ - ('npm --version', stderr.format('npm'), '/usr/bin/npm'), +@pytest.mark.parametrize('script, output, which_result', [ + ('npm --version', output.format('npm'), '/usr/bin/npm'), ('sudo npm --version', '', '/usr/bin/npm'), - ('sudo npm --version', stderr.format('npm'), None)]) -def test_not_match(which, script, stderr, which_result): + ('sudo npm --version', output.format('npm'), None)]) +def test_not_match(which, script, output, which_result): which.return_value = which_result - assert not match(Command(script, stderr=stderr)) + assert not match(Command(script, output)) -@pytest.mark.parametrize('script, stderr, result', [ +@pytest.mark.parametrize('script, output, result', [ ('sudo npm install -g react-native-cli', - stderr.format('npm'), + output.format('npm'), 'sudo env "PATH=$PATH" npm install -g react-native-cli'), ('sudo -u app appcfg update .', - stderr.format('appcfg'), + output.format('appcfg'), 'sudo -u app env "PATH=$PATH" appcfg update .')]) -def test_get_new_command(script, stderr, result): - assert get_new_command(Command(script, stderr=stderr)) == result +def test_get_new_command(script, output, result): + assert get_new_command(Command(script, output)) == result diff --git a/tests/rules/test_switch_lang.py b/tests/rules/test_switch_lang.py index 1a048acd..5d22f949 100644 --- a/tests/rules/test_switch_lang.py +++ b/tests/rules/test_switch_lang.py @@ -2,27 +2,27 @@ import pytest from thefuck.rules import switch_lang -from tests.utils import Command +from thefuck.types import Command @pytest.mark.parametrize('command', [ - Command(stderr='command not found: фзе-пуе', script=u'фзе-пуе'), - Command(stderr='command not found: λσ', script=u'λσ')]) + Command(u'фзе-пуе', 'command not found: фзе-пуе'), + Command(u'λσ', 'command not found: λσ')]) def test_match(command): assert switch_lang.match(command) @pytest.mark.parametrize('command', [ - Command(stderr='command not found: pat-get', script=u'pat-get'), - Command(stderr='command not found: ls', script=u'ls'), - Command(stderr='command not found: агсл', script=u'агсл'), - Command(stderr='some info', script=u'фзе-пуе')]) + Command(u'pat-get', 'command not found: pat-get'), + Command(u'ls', 'command not found: ls'), + Command(u'агсл', 'command not found: агсл'), + Command(u'фзе-пуе', 'some info')]) def test_not_match(command): assert not switch_lang.match(command) @pytest.mark.parametrize('command, new_command', [ - (Command(u'фзе-пуе штыефдд мшь'), 'apt-get install vim'), - (Command(u'λσ -λα'), 'ls -la')]) + (Command(u'фзе-пуе штыефдд мшь', ''), 'apt-get install vim'), + (Command(u'λσ -λα', ''), 'ls -la')]) def test_get_new_command(command, new_command): assert switch_lang.get_new_command(command) == new_command diff --git a/tests/rules/test_systemctl.py b/tests/rules/test_systemctl.py index eb9a270b..84601873 100644 --- a/tests/rules/test_systemctl.py +++ b/tests/rules/test_systemctl.py @@ -1,17 +1,17 @@ from thefuck.rules.systemctl import match, get_new_command -from tests.utils import Command +from thefuck.types import Command def test_match(): - assert match(Command('systemctl nginx start', stderr='Unknown operation \'nginx\'.')) - assert match(Command('sudo systemctl nginx start', stderr='Unknown operation \'nginx\'.')) - assert not match(Command('systemctl start nginx')) - assert not match(Command('systemctl start nginx')) - assert not match(Command('sudo systemctl nginx', stderr='Unknown operation \'nginx\'.')) - assert not match(Command('systemctl nginx', stderr='Unknown operation \'nginx\'.')) - assert not match(Command('systemctl start wtf', stderr='Failed to start wtf.service: Unit wtf.service failed to load: No such file or directory.')) + assert match(Command('systemctl nginx start', 'Unknown operation \'nginx\'.')) + assert match(Command('sudo systemctl nginx start', 'Unknown operation \'nginx\'.')) + assert not match(Command('systemctl start nginx', '')) + assert not match(Command('systemctl start nginx', '')) + assert not match(Command('sudo systemctl nginx', 'Unknown operation \'nginx\'.')) + assert not match(Command('systemctl nginx', 'Unknown operation \'nginx\'.')) + assert not match(Command('systemctl start wtf', 'Failed to start wtf.service: Unit wtf.service failed to load: No such file or directory.')) def test_get_new_command(): - assert get_new_command(Command('systemctl nginx start')) == "systemctl start nginx" - assert get_new_command(Command('sudo systemctl nginx start')) == "sudo systemctl start nginx" + assert get_new_command(Command('systemctl nginx start', '')) == "systemctl start nginx" + assert get_new_command(Command('sudo systemctl nginx start', '')) == "sudo systemctl start nginx" diff --git a/tests/rules/test_tmux.py b/tests/rules/test_tmux.py index 51357b62..e27ee918 100644 --- a/tests/rules/test_tmux.py +++ b/tests/rules/test_tmux.py @@ -1,6 +1,6 @@ import pytest from thefuck.rules.tmux import match, get_new_command -from tests.utils import Command +from thefuck.types import Command @pytest.fixture @@ -11,9 +11,9 @@ def tmux_ambiguous(): def test_match(tmux_ambiguous): - assert match(Command('tmux list', stderr=tmux_ambiguous)) + assert match(Command('tmux list', tmux_ambiguous)) def test_get_new_command(tmux_ambiguous): - assert get_new_command(Command('tmux list', stderr=tmux_ambiguous))\ + assert get_new_command(Command('tmux list', tmux_ambiguous))\ == ['tmux list-keys', 'tmux list-panes', 'tmux list-windows'] diff --git a/tests/rules/test_touch.py b/tests/rules/test_touch.py index 6de74085..fbee06ad 100644 --- a/tests/rules/test_touch.py +++ b/tests/rules/test_touch.py @@ -1,29 +1,27 @@ import pytest from thefuck.rules.touch import match, get_new_command -from tests.utils import Command +from thefuck.types import Command @pytest.fixture -def stderr(): +def output(): return "touch: cannot touch '/a/b/c':" \ " No such file or directory" -def test_match(stderr): - command = Command( - 'touch /a/b/c', stderr=stderr) +def test_match(output): + command = Command('touch /a/b/c', output) assert match(command) @pytest.mark.parametrize('command', [ - Command('touch /a/b/c'), - Command('touch /a/b/c', stdout=stderr()), - Command('ls /a/b/c', stderr=stderr())]) + Command('touch /a/b/c', ''), + Command('ls /a/b/c', output())]) def test_not_match(command): assert not match(command) -def test_get_new_command(stderr): - command = Command('touch /a/b/c', stderr=stderr) +def test_get_new_command(output): + command = Command('touch /a/b/c', output) fixed_command = get_new_command(command) assert fixed_command == 'mkdir -p /a/b && touch /a/b/c' diff --git a/tests/rules/test_tsuru_login.py b/tests/rules/test_tsuru_login.py index 6a2059b6..7457f835 100644 --- a/tests/rules/test_tsuru_login.py +++ b/tests/rules/test_tsuru_login.py @@ -1,6 +1,6 @@ import pytest from thefuck.rules.tsuru_login import match, get_new_command -from tests.utils import Command +from thefuck.types import Command error_msg = ( @@ -11,26 +11,26 @@ error_msg = ( @pytest.mark.parametrize('command', [ - Command(script='tsuru app-shell', stderr=error_msg[0]), - Command(script='tsuru app-log -f', stderr=error_msg[1]), + Command('tsuru app-shell', error_msg[0]), + Command('tsuru app-log -f', error_msg[1]), ]) def test_match(command): assert match(command) @pytest.mark.parametrize('command', [ - Command(script='tsuru'), - Command(script='tsuru app-restart', stderr=('Error: unauthorized')), - Command(script='tsuru app-log -f', stderr=('Error: unparseable data')), + Command('tsuru', ''), + Command('tsuru app-restart', 'Error: unauthorized'), + Command('tsuru app-log -f', 'Error: unparseable data'), ]) def test_not_match(command): assert not match(command) @pytest.mark.parametrize('command, new_command', [ - (Command('tsuru app-shell', stderr=error_msg[0]), + (Command('tsuru app-shell', error_msg[0]), 'tsuru login && tsuru app-shell'), - (Command('tsuru app-log -f', stderr=error_msg[1]), + (Command('tsuru app-log -f', error_msg[1]), 'tsuru login && tsuru app-log -f'), ]) def test_get_new_command(command, new_command): diff --git a/tests/rules/test_tsuru_not_command.py b/tests/rules/test_tsuru_not_command.py index 635c922d..9c918543 100644 --- a/tests/rules/test_tsuru_not_command.py +++ b/tests/rules/test_tsuru_not_command.py @@ -1,29 +1,29 @@ import pytest -from tests.utils import Command +from thefuck.types import Command from thefuck.rules.tsuru_not_command import match, get_new_command @pytest.mark.parametrize('command', [ - Command('tsuru log', stderr=( + Command('tsuru log', ( 'tsuru: "tchururu" is not a tsuru command. See "tsuru help".\n' '\nDid you mean?\n' '\tapp-log\n' '\tlogin\n' '\tlogout\n' )), - Command('tsuru app-l', stderr=( + Command('tsuru app-l', ( 'tsuru: "tchururu" is not a tsuru command. See "tsuru help".\n' '\nDid you mean?\n' '\tapp-list\n' '\tapp-log\n' )), - Command('tsuru user-list', stderr=( + Command('tsuru user-list', ( 'tsuru: "tchururu" is not a tsuru command. See "tsuru help".\n' '\nDid you mean?\n' '\tteam-user-list\n' )), - Command('tsuru targetlist', stderr=( + Command('tsuru targetlist', ( 'tsuru: "tchururu" is not a tsuru command. See "tsuru help".\n' '\nDid you mean?\n' '\ttarget-list\n' @@ -34,16 +34,16 @@ def test_match(command): @pytest.mark.parametrize('command', [ - Command('tsuru tchururu', stderr=( + Command('tsuru tchururu', ( 'tsuru: "tchururu" is not a tsuru command. See "tsuru help".\n' '\nDid you mean?\n' )), - Command('tsuru version', stderr='tsuru version 0.16.0.'), - Command('tsuru help', stderr=( + Command('tsuru version', 'tsuru version 0.16.0.'), + Command('tsuru help', ( 'tsuru version 0.16.0.\n' '\nUsage: tsuru command [args]\n' )), - Command('tsuru platform-list', stderr=( + Command('tsuru platform-list', ( '- java\n' '- logstashgiro\n' '- newnode\n' @@ -55,32 +55,32 @@ def test_match(command): '- ruby20\n' '- static\n' )), - Command('tsuru env-get', stderr='Error: App thefuck not found.'), + Command('tsuru env-get', 'Error: App thefuck not found.'), ]) def test_not_match(command): assert not match(command) @pytest.mark.parametrize('command, new_commands', [ - (Command('tsuru log', stderr=( + (Command('tsuru log', ( 'tsuru: "log" is not a tsuru command. See "tsuru help".\n' '\nDid you mean?\n' '\tapp-log\n' '\tlogin\n' '\tlogout\n' )), ['tsuru login', 'tsuru logout', 'tsuru app-log']), - (Command('tsuru app-l', stderr=( + (Command('tsuru app-l', ( 'tsuru: "app-l" is not a tsuru command. See "tsuru help".\n' '\nDid you mean?\n' '\tapp-list\n' '\tapp-log\n' )), ['tsuru app-log', 'tsuru app-list']), - (Command('tsuru user-list', stderr=( + (Command('tsuru user-list', ( 'tsuru: "user-list" is not a tsuru command. See "tsuru help".\n' '\nDid you mean?\n' '\tteam-user-list\n' )), ['tsuru team-user-list']), - (Command('tsuru targetlist', stderr=( + (Command('tsuru targetlist', ( 'tsuru: "targetlist" is not a tsuru command. See "tsuru help".\n' '\nDid you mean?\n' '\ttarget-list\n' diff --git a/tests/rules/test_unknown_command.py b/tests/rules/test_unknown_command.py index 7e7f9aa7..77913b30 100644 --- a/tests/rules/test_unknown_command.py +++ b/tests/rules/test_unknown_command.py @@ -1,34 +1,34 @@ import pytest from thefuck.rules.unknown_command import match, get_new_command -from tests.utils import Command +from thefuck.types import Command @pytest.mark.parametrize('command', [ - Command(script='./bin/hdfs dfs ls', stderr='ls: Unknown command\nDid you mean -ls? This command begins with a dash.'), - Command(script='hdfs dfs ls', - stderr='ls: Unknown command\nDid you mean -ls? This command begins with a dash.'), - Command(script='hdfs dfs ls /foo/bar', stderr='ls: Unknown command\nDid you mean -ls? This command begins with a dash.')]) + Command('./bin/hdfs dfs ls', 'ls: Unknown command\nDid you mean -ls? This command begins with a dash.'), + Command('hdfs dfs ls', + 'ls: Unknown command\nDid you mean -ls? This command begins with a dash.'), + Command('hdfs dfs ls /foo/bar', 'ls: Unknown command\nDid you mean -ls? This command begins with a dash.')]) def test_match(command): assert match(command) @pytest.mark.parametrize('command', [ - Command(script='./bin/hdfs dfs -ls', stderr=''), - Command(script='./bin/hdfs dfs -ls /foo/bar', stderr=''), - Command(script='hdfs dfs -ls -R /foo/bar', stderr=''), - Command()]) + Command('./bin/hdfs dfs -ls', ''), + Command('./bin/hdfs dfs -ls /foo/bar', ''), + Command('hdfs dfs -ls -R /foo/bar', ''), + Command('', '')]) def test_not_match(command): assert not match(command) @pytest.mark.parametrize('command, new_command', [ (Command('hdfs dfs ls', - stderr='ls: Unknown command\nDid you mean -ls? This command begins with a dash.'), ['hdfs dfs -ls']), + 'ls: Unknown command\nDid you mean -ls? This command begins with a dash.'), ['hdfs dfs -ls']), (Command('hdfs dfs rm /foo/bar', - stderr='rm: Unknown command\nDid you mean -rm? This command begins with a dash.'), ['hdfs dfs -rm /foo/bar']), + 'rm: Unknown command\nDid you mean -rm? This command begins with a dash.'), ['hdfs dfs -rm /foo/bar']), (Command('./bin/hdfs dfs ls -R /foo/bar', - stderr='ls: Unknown command\nDid you mean -ls? This command begins with a dash.'), ['./bin/hdfs dfs -ls -R /foo/bar']), + 'ls: Unknown command\nDid you mean -ls? This command begins with a dash.'), ['./bin/hdfs dfs -ls -R /foo/bar']), (Command('./bin/hdfs dfs -Dtest=fred ls -R /foo/bar', - stderr='ls: Unknown command\nDid you mean -ls? This command begins with a dash.'), ['./bin/hdfs dfs -Dtest=fred -ls -R /foo/bar'])]) + 'ls: Unknown command\nDid you mean -ls? This command begins with a dash.'), ['./bin/hdfs dfs -Dtest=fred -ls -R /foo/bar'])]) def test_get_new_command(command, new_command): assert get_new_command(command) == new_command diff --git a/tests/rules/test_vagrant_up.py b/tests/rules/test_vagrant_up.py index 4319eed6..f5ee0531 100644 --- a/tests/rules/test_vagrant_up.py +++ b/tests/rules/test_vagrant_up.py @@ -1,34 +1,34 @@ import pytest from thefuck.rules.vagrant_up import match, get_new_command -from tests.utils import Command +from thefuck.types import Command @pytest.mark.parametrize('command', [ - Command(script='vagrant ssh', stderr='VM must be running to open SSH connection. Run `vagrant up`\nto start the virtual machine.'), - Command(script='vagrant ssh devbox', stderr='VM must be running to open SSH connection. Run `vagrant up`\nto start the virtual machine.'), - Command(script='vagrant rdp', - stderr='VM must be created before running this command. Run `vagrant up` first.'), - Command(script='vagrant rdp devbox', - stderr='VM must be created before running this command. Run `vagrant up` first.')]) + Command('vagrant ssh', 'VM must be running to open SSH connection. Run `vagrant up`\nto start the virtual machine.'), + Command('vagrant ssh devbox', 'VM must be running to open SSH connection. Run `vagrant up`\nto start the virtual machine.'), + Command('vagrant rdp', + 'VM must be created before running this command. Run `vagrant up` first.'), + Command('vagrant rdp devbox', + 'VM must be created before running this command. Run `vagrant up` first.')]) def test_match(command): assert match(command) @pytest.mark.parametrize('command', [ - Command(script='vagrant ssh', stderr=''), - Command(script='vagrant ssh jeff', stderr='The machine with the name \'jeff\' was not found configured for this Vagrant environment.'), - Command(script='vagrant ssh', stderr='A Vagrant environment or target machine is required to run this command. Run `vagrant init` to create a new Vagrant environment. Or, get an ID of a target machine from `vagrant global-status` to run this command on. A final option is to change to a directory with a Vagrantfile and to try again.'), - Command()]) + Command('vagrant ssh', ''), + Command('vagrant ssh jeff', 'The machine with the name \'jeff\' was not found configured for this Vagrant environment.'), + Command('vagrant ssh', 'A Vagrant environment or target machine is required to run this command. Run `vagrant init` to create a new Vagrant environment. Or, get an ID of a target machine from `vagrant global-status` to run this command on. A final option is to change to a directory with a Vagrantfile and to try again.'), + Command('', '')]) def test_not_match(command): assert not match(command) @pytest.mark.parametrize('command, new_command', [ - (Command(script='vagrant ssh', stderr='VM must be running to open SSH connection. Run `vagrant up`\nto start the virtual machine.'), 'vagrant up && vagrant ssh'), - (Command(script='vagrant ssh devbox', stderr='VM must be running to open SSH connection. Run `vagrant up`\nto start the virtual machine.'), ['vagrant up devbox && vagrant ssh devbox', 'vagrant up && vagrant ssh devbox']), - (Command(script='vagrant rdp', - stderr='VM must be created before running this command. Run `vagrant up` first.'), 'vagrant up && vagrant rdp'), - (Command(script='vagrant rdp devbox', - stderr='VM must be created before running this command. Run `vagrant up` first.'), ['vagrant up devbox && vagrant rdp devbox', 'vagrant up && vagrant rdp devbox'])]) + (Command('vagrant ssh', 'VM must be running to open SSH connection. Run `vagrant up`\nto start the virtual machine.'), 'vagrant up && vagrant ssh'), + (Command('vagrant ssh devbox', 'VM must be running to open SSH connection. Run `vagrant up`\nto start the virtual machine.'), ['vagrant up devbox && vagrant ssh devbox', 'vagrant up && vagrant ssh devbox']), + (Command('vagrant rdp', + 'VM must be created before running this command. Run `vagrant up` first.'), 'vagrant up && vagrant rdp'), + (Command('vagrant rdp devbox', + 'VM must be created before running this command. Run `vagrant up` first.'), ['vagrant up devbox && vagrant rdp devbox', 'vagrant up && vagrant rdp devbox'])]) def test_get_new_command(command, new_command): assert get_new_command(command) == new_command diff --git a/tests/rules/test_whois.py b/tests/rules/test_whois.py index 2426c9fe..135d4eb5 100644 --- a/tests/rules/test_whois.py +++ b/tests/rules/test_whois.py @@ -1,26 +1,29 @@ import pytest from thefuck.rules.whois import match, get_new_command -from tests.utils import Command +from thefuck.types import Command @pytest.mark.parametrize('command', [ - Command(script='whois https://en.wikipedia.org/wiki/Main_Page'), - Command(script='whois https://en.wikipedia.org/'), - Command(script='whois meta.unix.stackexchange.com')]) + Command('whois https://en.wikipedia.org/wiki/Main_Page', ''), + Command('whois https://en.wikipedia.org/', ''), + Command('whois meta.unix.stackexchange.com', '')]) def test_match(command): assert match(command) def test_not_match(): - assert not match(Command(script='whois')) + assert not match(Command('whois', '')) # `whois com` actually makes sense @pytest.mark.parametrize('command, new_command', [ - (Command('whois https://en.wikipedia.org/wiki/Main_Page'), 'whois en.wikipedia.org'), - (Command('whois https://en.wikipedia.org/'), 'whois en.wikipedia.org'), - (Command('whois meta.unix.stackexchange.com'), ['whois unix.stackexchange.com', - 'whois stackexchange.com', - 'whois com'])]) + (Command('whois https://en.wikipedia.org/wiki/Main_Page', ''), + 'whois en.wikipedia.org'), + (Command('whois https://en.wikipedia.org/', ''), + 'whois en.wikipedia.org'), + (Command('whois meta.unix.stackexchange.com', ''), + ['whois unix.stackexchange.com', + 'whois stackexchange.com', + 'whois com'])]) def test_get_new_command(command, new_command): assert get_new_command(command) == new_command diff --git a/tests/rules/test_workon_doesnt_exists.py b/tests/rules/test_workon_doesnt_exists.py index da863023..e8450615 100644 --- a/tests/rules/test_workon_doesnt_exists.py +++ b/tests/rules/test_workon_doesnt_exists.py @@ -1,6 +1,6 @@ import pytest from thefuck.rules.workon_doesnt_exists import match, get_new_command -from tests.utils import Command +from thefuck.types import Command @pytest.fixture(autouse=True) @@ -13,13 +13,13 @@ def envs(mocker): @pytest.mark.parametrize('script', [ 'workon tehfuck', 'workon code-view', 'workon new-env']) def test_match(script): - assert match(Command(script)) + assert match(Command(script, '')) @pytest.mark.parametrize('script', [ 'workon thefuck', 'workon code_view', 'work on tehfuck']) 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): ('workon code-view', 'workon code_view'), ('workon zzzz', 'mkvirtualenv zzzz')]) def test_get_new_command(script, result): - assert get_new_command(Command(script))[0] == result + assert get_new_command(Command(script, ''))[0] == result diff --git a/tests/rules/test_yarn_alias.py b/tests/rules/test_yarn_alias.py index 81dbf66d..5493f6df 100644 --- a/tests/rules/test_yarn_alias.py +++ b/tests/rules/test_yarn_alias.py @@ -1,24 +1,24 @@ import pytest from thefuck.rules.yarn_alias import match, get_new_command -from tests.utils import Command +from thefuck.types import Command -stderr_remove = 'error Did you mean `yarn remove`?' -stderr_etl = 'error Command "etil" not found. Did you mean "etl"?' -stderr_list = 'error Did you mean `yarn list`?' +output_remove = 'error Did you mean `yarn remove`?' +output_etl = 'error Command "etil" not found. Did you mean "etl"?' +output_list = 'error Did you mean `yarn list`?' @pytest.mark.parametrize('command', [ - Command(script='yarn rm', stderr=stderr_remove), - Command(script='yarn etil', stderr=stderr_etl), - Command(script='yarn ls', stderr=stderr_list)]) + Command('yarn rm', output_remove), + Command('yarn etil', output_etl), + Command('yarn ls', output_list)]) def test_match(command): assert match(command) @pytest.mark.parametrize('command, new_command', [ - (Command('yarn rm', stderr=stderr_remove), 'yarn remove'), - (Command('yarn etil', stderr=stderr_etl), 'yarn etl'), - (Command('yarn ls', stderr=stderr_list), 'yarn list')]) + (Command('yarn rm', output_remove), 'yarn remove'), + (Command('yarn etil', output_etl), 'yarn etl'), + (Command('yarn ls', output_list), 'yarn list')]) def test_get_new_command(command, new_command): assert get_new_command(command) == new_command diff --git a/tests/rules/test_yarn_command_not_found.py b/tests/rules/test_yarn_command_not_found.py index dd6ca5ae..6745163e 100644 --- a/tests/rules/test_yarn_command_not_found.py +++ b/tests/rules/test_yarn_command_not_found.py @@ -2,10 +2,10 @@ from io import BytesIO import pytest -from tests.utils import Command +from thefuck.types import Command from thefuck.rules.yarn_command_not_found import match, get_new_command -stderr = ''' +output = ''' error Command "{}" not found. '''.format @@ -93,22 +93,22 @@ def yarn_help(mocker): @pytest.mark.parametrize('command', [ - Command('yarn whyy webpack', stderr=stderr('whyy'))]) + Command('yarn whyy webpack', output('whyy'))]) def test_match(command): assert match(command) @pytest.mark.parametrize('command', [ - Command('npm nuild', stderr=stderr('nuild')), - Command('yarn install')]) + Command('npm nuild', output('nuild')), + Command('yarn install', '')]) def test_not_match(command): assert not match(command) @pytest.mark.parametrize('command, result', [ - (Command('yarn whyy webpack', stderr=stderr('whyy')), + (Command('yarn whyy webpack', output('whyy')), 'yarn why webpack'), - (Command('yarn require lodash', stderr=stderr('require')), + (Command('yarn require lodash', output('require')), 'yarn add lodash')]) def test_get_new_command(command, result): fixed_command = get_new_command(command) diff --git a/tests/rules/test_yarn_command_replaced.py b/tests/rules/test_yarn_command_replaced.py index 57c5021f..f46aa28b 100644 --- a/tests/rules/test_yarn_command_replaced.py +++ b/tests/rules/test_yarn_command_replaced.py @@ -1,32 +1,32 @@ import pytest -from tests.utils import Command +from thefuck.types import Command from thefuck.rules.yarn_command_replaced import match, get_new_command -stderr = ('error `install` has been replaced with `add` to add new ' +output = ('error `install` has been replaced with `add` to add new ' 'dependencies. Run "yarn add {}" instead.').format @pytest.mark.parametrize('command', [ - Command(script='yarn install redux', stderr=stderr('redux')), - Command(script='yarn install moment', stderr=stderr('moment')), - Command(script='yarn install lodash', stderr=stderr('lodash'))]) + Command('yarn install redux', output('redux')), + Command('yarn install moment', output('moment')), + Command('yarn install lodash', output('lodash'))]) def test_match(command): assert match(command) @pytest.mark.parametrize('command', [ - Command('yarn install')]) + Command('yarn install', '')]) def test_not_match(command): assert not match(command) @pytest.mark.parametrize('command, new_command', [ - (Command('yarn install redux', stderr=stderr('redux')), + (Command('yarn install redux', output('redux')), 'yarn add redux'), - (Command('yarn install moment', stderr=stderr('moment')), + (Command('yarn install moment', output('moment')), 'yarn add moment'), - (Command('yarn install lodash', stderr=stderr('lodash')), + (Command('yarn install lodash', output('lodash')), 'yarn add lodash')]) def test_get_new_command(command, new_command): assert get_new_command(command) == new_command diff --git a/tests/rules/test_yarn_help.py b/tests/rules/test_yarn_help.py index 76485644..ed810390 100644 --- a/tests/rules/test_yarn_help.py +++ b/tests/rules/test_yarn_help.py @@ -1,10 +1,10 @@ import pytest from thefuck.rules.yarn_help import match, get_new_command -from tests.utils import Command +from thefuck.types import Command from thefuck.system import open_command -stdout_clean = ''' +output_clean = ''' Usage: yarn [command] [flags] @@ -45,13 +45,13 @@ stdout_clean = ''' @pytest.mark.parametrize('command', [ - Command(script='yarn help clean', stdout=stdout_clean)]) + Command('yarn help clean', output_clean)]) def test_match(command): assert match(command) @pytest.mark.parametrize('command, url', [ - (Command('yarn help clean', stdout=stdout_clean), + (Command('yarn help clean', output_clean), 'https://yarnpkg.com/en/docs/cli/clean')]) def test_get_new_command(command, url): assert get_new_command(command) == open_command(url) diff --git a/tests/specific/test_git.py b/tests/specific/test_git.py index 8e1e61bc..ab1b57ba 100644 --- a/tests/specific/test_git.py +++ b/tests/specific/test_git.py @@ -1,18 +1,18 @@ import pytest from thefuck.specific.git import git_support -from tests.utils import Command +from thefuck.types import Command -@pytest.mark.parametrize('called, command, stderr', [ +@pytest.mark.parametrize('called, command, output', [ ('git co', 'git checkout', "19:22:36.299340 git.c:282 trace: alias expansion: co => 'checkout'"), ('git com file', 'git commit --verbose file', "19:23:25.470911 git.c:282 trace: alias expansion: com => 'commit' '--verbose'")]) -def test_git_support(called, command, stderr): +def test_git_support(called, command, output): @git_support def fn(command): return command.script - assert fn(Command(script=called, stderr=stderr)) == command + assert fn(Command(called, output)) == command @pytest.mark.parametrize('command, is_git', [ @@ -28,4 +28,4 @@ def test_git_support_match(command, is_git): def fn(command): return True - assert fn(Command(script=command)) == is_git + assert fn(Command(command, '')) == is_git diff --git a/tests/specific/test_sudo.py b/tests/specific/test_sudo.py index 2b99eb72..1eb0070d 100644 --- a/tests/specific/test_sudo.py +++ b/tests/specific/test_sudo.py @@ -1,6 +1,6 @@ import pytest from thefuck.specific.sudo import sudo_support -from tests.utils import Command +from thefuck.types import Command @pytest.mark.parametrize('return_value, command, called, result', [ @@ -13,7 +13,7 @@ from tests.utils import Command (False, 'ls', 'ls', False)]) def test_sudo_support(return_value, command, called, result): def fn(command): - assert command == Command(called) + assert command == Command(called, '') return return_value - assert sudo_support(fn)(Command(command)) == result + assert sudo_support(fn)(Command(command, '')) == result diff --git a/tests/test_corrector.py b/tests/test_corrector.py index 39b3c108..fb8cb94d 100644 --- a/tests/test_corrector.py +++ b/tests/test_corrector.py @@ -1,9 +1,10 @@ # -*- coding: utf-8 -*- import pytest +from tests.utils import Rule, CorrectedCommand from thefuck import corrector, const from thefuck.system import Path -from tests.utils import Rule, Command, CorrectedCommand +from thefuck.types import Command from thefuck.corrector import get_corrected_commands, organize_commands @@ -39,7 +40,7 @@ class TestGetRules(object): def test_get_corrected_commands(mocker): - command = Command('test', 'test', 'test') + command = Command('test', 'test') rules = [Rule(match=lambda _: False), Rule(match=lambda _: True, get_new_command=lambda x: x.script + '!', priority=100), diff --git a/tests/test_types.py b/tests/test_types.py index d9326d3e..f946a8b8 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -1,13 +1,14 @@ # -*- coding: utf-8 -*- import os -from subprocess import PIPE +from subprocess import PIPE, STDOUT from mock import Mock import pytest -from tests.utils import CorrectedCommand, Rule, Command +from tests.utils import CorrectedCommand, Rule from thefuck import const from thefuck.exceptions import EmptyCommand from thefuck.system import Path +from thefuck.types import Command class TestCorrectedCommand(object): @@ -38,7 +39,7 @@ class TestCorrectedCommand(object): {'repeat': True, 'debug': True})]) def test_run(self, capsys, settings, script, printed, override_settings): settings.update(override_settings) - CorrectedCommand(script, None, 1000).run(Command()) + CorrectedCommand(script, None, 1000).run(Command(script, '')) out, _ = capsys.readouterr() assert out[:-1] == printed @@ -77,30 +78,30 @@ class TestRule(object): def test_isnt_match(self): assert not Rule('', lambda _: False).is_match( - Command('ls')) + Command('ls', '')) def test_is_match(self): rule = Rule('', lambda x: x.script == 'cd ..') - assert rule.is_match(Command('cd ..')) + assert rule.is_match(Command('cd ..', '')) @pytest.mark.usefixtures('no_colors') def test_isnt_match_when_rule_failed(self, capsys): rule = Rule('test', Mock(side_effect=OSError('Denied')), requires_output=False) - assert not rule.is_match(Command('ls')) + assert not rule.is_match(Command('ls', '')) assert capsys.readouterr()[1].split('\n')[0] == '[WARN] Rule test:' def test_get_corrected_commands_with_rule_returns_list(self): rule = Rule(get_new_command=lambda x: [x.script + '!', x.script + '@'], priority=100) - assert (list(rule.get_corrected_commands(Command(script='test'))) + assert (list(rule.get_corrected_commands(Command('test', ''))) == [CorrectedCommand(script='test!', priority=100), CorrectedCommand(script='test@', priority=200)]) def test_get_corrected_commands_with_rule_returns_command(self): rule = Rule(get_new_command=lambda x: x.script + '!', priority=100) - assert (list(rule.get_corrected_commands(Command(script='test'))) + assert (list(rule.get_corrected_commands(Command('test', ''))) == [CorrectedCommand(script='test!', priority=100)]) @@ -108,8 +109,7 @@ class TestCommand(object): @pytest.fixture(autouse=True) def Popen(self, monkeypatch): Popen = Mock() - Popen.return_value.stdout.read.return_value = b'stdout' - Popen.return_value.stderr.read.return_value = b'stderr' + Popen.return_value.stdout.read.return_value = b'output' monkeypatch.setattr('thefuck.output_readers.rerun.Popen', Popen) return Popen @@ -122,12 +122,12 @@ class TestCommand(object): settings.env = {} assert Command.from_raw_script( ['apt-get', 'search', 'vim']) == Command( - 'apt-get search vim', 'stdout', 'stderr') + 'apt-get search vim', 'output') Popen.assert_called_once_with('apt-get search vim', shell=True, stdin=PIPE, stdout=PIPE, - stderr=PIPE, + stderr=STDOUT, env=os_environ) @pytest.mark.parametrize('script, result', [ diff --git a/tests/test_utils.py b/tests/test_utils.py index 5e271e49..6d27dd9a 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -8,7 +8,7 @@ from thefuck.utils import default_settings, \ memoize, get_closest, get_all_executables, replace_argument, \ get_all_matched_commands, is_app, for_app, cache, \ get_valid_history_without_current -from tests.utils import Command +from thefuck.types import Command @pytest.mark.parametrize('override, old, new', [ @@ -107,7 +107,7 @@ def test_get_all_matched_commands(stderr, result): ('hub diff', ['git', 'hub'], True), ('hg diff', ['git', 'hub'], False)]) def test_is_app(script, names, result): - assert is_app(Command(script), *names) == result + assert is_app(Command(script, ''), *names) == result @pytest.mark.usefixtures('no_memoize') @@ -120,7 +120,7 @@ def test_for_app(script, names, result): def match(command): return True - assert match(Command(script)) == result + assert match(Command(script, '')) == result class TestCache(object): @@ -222,5 +222,5 @@ class TestGetValidHistoryWithoutCurrent(object): (u'cafe ô', ['ls cat', 'diff x', u'café ô']), ]) def test_get_valid_history_without_current(self, script, result): - command = Command(script=script) + command = Command(script, '') assert get_valid_history_without_current(command) == result diff --git a/tests/utils.py b/tests/utils.py index 62a84749..a3e13531 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -2,11 +2,6 @@ from thefuck import types from thefuck.const import DEFAULT_PRIORITY -class Command(types.Command): - def __init__(self, script='', stdout='', stderr=''): - super(Command, self).__init__(script, stdout, stderr) - - class Rule(types.Rule): def __init__(self, name='', match=lambda *_: True, get_new_command=lambda *_: '', diff --git a/thefuck/output_readers/__init__.py b/thefuck/output_readers/__init__.py index c07a8cb9..1bae93c8 100644 --- a/thefuck/output_readers/__init__.py +++ b/thefuck/output_readers/__init__.py @@ -9,7 +9,7 @@ def get_output(script, expanded): :type script: str :param expanded: Console script with expanded aliases. :type expanded: str - :rtype: (str, str) + :rtype: str """ if settings.instant_mode: diff --git a/thefuck/output_readers/read_log.py b/thefuck/output_readers/read_log.py index 82a3d2d0..7c039fad 100644 --- a/thefuck/output_readers/read_log.py +++ b/thefuck/output_readers/read_log.py @@ -7,7 +7,7 @@ except ImportError: import six import pyte from ..exceptions import ScriptNotInLog -from ..logs import warn +from ..logs import warn, debug from .. import const @@ -58,30 +58,31 @@ def get_output(script): """Reads script output from log. :type script: str - :rtype: (str, str) + :rtype: str | None """ if six.PY2: warn('Experimental instant mode is Python 3+ only') - return None, None + return None if 'THEFUCK_OUTPUT_LOG' not in os.environ: warn("Output log isn't specified") - return None, None + return None if const.USER_COMMAND_MARK not in os.environ.get('PS1', ''): warn("PS1 doesn't contain user command mark, please ensure " "that PS1 is not changed after The Fuck alias initialization") - return None, None + return None try: with open(os.environ['THEFUCK_OUTPUT_LOG'], 'rb') as log_file: lines = _get_output_lines(script, log_file) output = '\n'.join(lines).strip() - return output, output + debug(u'Received output: {}'.format(output)) + return output except OSError: warn("Can't read output log") - return None, None + return None except ScriptNotInLog: warn("Script not found in output log") - return None, None + return None diff --git a/thefuck/output_readers/rerun.py b/thefuck/output_readers/rerun.py index 571dd3af..c5b439ab 100644 --- a/thefuck/output_readers/rerun.py +++ b/thefuck/output_readers/rerun.py @@ -1,6 +1,6 @@ import os import shlex -from subprocess import Popen, PIPE +from subprocess import Popen, PIPE, STDOUT from psutil import Process, TimeoutExpired from .. import logs from ..conf import settings @@ -33,7 +33,7 @@ def get_output(script, expanded): :type script: str :type expanded: str - :rtype: (str, str) + :rtype: str | None """ env = dict(os.environ) @@ -43,15 +43,11 @@ def get_output(script, expanded): with logs.debug_time(u'Call: {}; with env: {}; is slow: '.format( script, env, is_slow)): result = Popen(expanded, shell=True, stdin=PIPE, - stdout=PIPE, stderr=PIPE, env=env) + stdout=PIPE, stderr=STDOUT, env=env) if _wait_output(result, is_slow): - stdout = result.stdout.read().decode('utf-8') - stderr = result.stderr.read().decode('utf-8') - - logs.debug(u'Received stdout: {}'.format(stdout)) - logs.debug(u'Received stderr: {}'.format(stderr)) - - return stdout, stderr + output = result.stdout.read().decode('utf-8') + logs.debug(u'Received output: {}'.format(output)) + return output else: logs.debug(u'Execution timed out!') - return None, None + return None diff --git a/thefuck/rules/ag_literal.py b/thefuck/rules/ag_literal.py index a07ae07a..6972bf63 100644 --- a/thefuck/rules/ag_literal.py +++ b/thefuck/rules/ag_literal.py @@ -3,7 +3,7 @@ from thefuck.utils import for_app @for_app('ag') def match(command): - return command.stderr.endswith('run ag with -Q\n') + return command.output.endswith('run ag with -Q\n') def get_new_command(command): diff --git a/thefuck/rules/apt_get.py b/thefuck/rules/apt_get.py index abe742b3..b2465a88 100644 --- a/thefuck/rules/apt_get.py +++ b/thefuck/rules/apt_get.py @@ -29,7 +29,7 @@ def get_package(executable): def match(command): - if 'not found' in command.stderr or 'not installed' in command.stderr: + if 'not found' in command.output or 'not installed' in command.output: executable = _get_executable(command) return not which(executable) and get_package(executable) else: diff --git a/thefuck/rules/apt_invalid_operation.py b/thefuck/rules/apt_invalid_operation.py index f73de266..db8e0032 100644 --- a/thefuck/rules/apt_invalid_operation.py +++ b/thefuck/rules/apt_invalid_operation.py @@ -9,7 +9,7 @@ enabled_by_default = apt_available @for_app('apt', 'apt-get', 'apt-cache') @sudo_support def match(command): - return 'E: Invalid operation' in command.stderr + return 'E: Invalid operation' in command.output @eager diff --git a/thefuck/rules/aws_cli.py b/thefuck/rules/aws_cli.py index 565173f6..1c665827 100644 --- a/thefuck/rules/aws_cli.py +++ b/thefuck/rules/aws_cli.py @@ -8,10 +8,10 @@ OPTIONS = "^\s*\*\s(.*)" @for_app('aws') def match(command): - return "usage:" in command.stderr and "maybe you meant:" in command.stderr + return "usage:" in command.output and "maybe you meant:" in command.output def get_new_command(command): - mistake = re.search(INVALID_CHOICE, command.stderr).group(0) - options = re.findall(OPTIONS, command.stderr, flags=re.MULTILINE) + mistake = re.search(INVALID_CHOICE, command.output).group(0) + options = re.findall(OPTIONS, command.output, flags=re.MULTILINE) return [replace_argument(command.script, mistake, o) for o in options] diff --git a/thefuck/rules/brew_install.py b/thefuck/rules/brew_install.py index fcd1491a..dea23f44 100644 --- a/thefuck/rules/brew_install.py +++ b/thefuck/rules/brew_install.py @@ -25,18 +25,18 @@ def _get_similar_formula(formula_name): def match(command): is_proper_command = ('brew install' in command.script and - 'No available formula' in command.stderr) + 'No available formula' in command.output) if is_proper_command: formula = re.findall(r'Error: No available formula for ([a-z]+)', - command.stderr)[0] + command.output)[0] return bool(_get_similar_formula(formula)) return False def get_new_command(command): not_exist_formula = re.findall(r'Error: No available formula for ([a-z]+)', - command.stderr)[0] + command.output)[0] exist_formula = _get_similar_formula(not_exist_formula) return replace_argument(command.script, not_exist_formula, exist_formula) diff --git a/thefuck/rules/brew_link.py b/thefuck/rules/brew_link.py index 1c4d251e..b8a158f9 100644 --- a/thefuck/rules/brew_link.py +++ b/thefuck/rules/brew_link.py @@ -4,7 +4,7 @@ from thefuck.utils import for_app @for_app('brew', at_least=2) def match(command): return (command.script_parts[1] in ['ln', 'link'] - and "brew link --overwrite --dry-run" in command.stderr) + and "brew link --overwrite --dry-run" in command.output) def get_new_command(command): diff --git a/thefuck/rules/brew_uninstall.py b/thefuck/rules/brew_uninstall.py index f72062f7..222a25f2 100644 --- a/thefuck/rules/brew_uninstall.py +++ b/thefuck/rules/brew_uninstall.py @@ -4,7 +4,7 @@ from thefuck.utils import for_app @for_app('brew', at_least=2) def match(command): return (command.script_parts[1] in ['uninstall', 'rm', 'remove'] - and "brew uninstall --force" in command.stdout) + and "brew uninstall --force" in command.output) def get_new_command(command): diff --git a/thefuck/rules/brew_unknown_command.py b/thefuck/rules/brew_unknown_command.py index 1d8186e6..d9cb58c7 100644 --- a/thefuck/rules/brew_unknown_command.py +++ b/thefuck/rules/brew_unknown_command.py @@ -67,16 +67,16 @@ def _brew_commands(): def match(command): is_proper_command = ('brew' in command.script and - 'Unknown command' in command.stderr) + 'Unknown command' in command.output) if is_proper_command: broken_cmd = re.findall(r'Error: Unknown command: ([a-z]+)', - command.stderr)[0] + command.output)[0] return bool(get_closest(broken_cmd, _brew_commands())) return False def get_new_command(command): broken_cmd = re.findall(r'Error: Unknown command: ([a-z]+)', - command.stderr)[0] + command.output)[0] return replace_command(command, broken_cmd, _brew_commands()) diff --git a/thefuck/rules/brew_update_formula.py b/thefuck/rules/brew_update_formula.py index 58a0e570..2100c23b 100644 --- a/thefuck/rules/brew_update_formula.py +++ b/thefuck/rules/brew_update_formula.py @@ -4,8 +4,8 @@ from thefuck.utils import for_app @for_app('brew', at_least=2) def match(command): return ('update' in command.script - and "Error: This command updates brew itself" in command.stderr - and "Use 'brew upgrade '" in command.stderr) + and "Error: This command updates brew itself" in command.output + and "Use 'brew upgrade '" in command.output) def get_new_command(command): diff --git a/thefuck/rules/cargo_no_command.py b/thefuck/rules/cargo_no_command.py index f141b672..687f40af 100644 --- a/thefuck/rules/cargo_no_command.py +++ b/thefuck/rules/cargo_no_command.py @@ -4,12 +4,12 @@ from thefuck.utils import replace_argument, for_app @for_app('cargo', at_least=1) def match(command): - return ('no such subcommand' in command.stderr.lower() - and 'Did you mean' in command.stderr) + return ('no such subcommand' in command.output.lower() + and 'Did you mean' in command.output) def get_new_command(command): broken = command.script_parts[1] - fix = re.findall(r'Did you mean `([^`]*)`', command.stderr)[0] + fix = re.findall(r'Did you mean `([^`]*)`', command.output)[0] return replace_argument(command.script, broken, fix) diff --git a/thefuck/rules/cd_correction.py b/thefuck/rules/cd_correction.py index 231ca799..888571bd 100644 --- a/thefuck/rules/cd_correction.py +++ b/thefuck/rules/cd_correction.py @@ -22,8 +22,8 @@ def _get_sub_dirs(parent): def match(command): """Match function copied from cd_mkdir.py""" return (command.script.startswith('cd ') - and ('no such file or directory' in command.stderr.lower() - or 'cd: can\'t cd to' in command.stderr.lower())) + and ('no such file or directory' in command.output.lower() + or 'cd: can\'t cd to' in command.output.lower())) @sudo_support diff --git a/thefuck/rules/cd_mkdir.py b/thefuck/rules/cd_mkdir.py index faba704e..09e3ab64 100644 --- a/thefuck/rules/cd_mkdir.py +++ b/thefuck/rules/cd_mkdir.py @@ -7,9 +7,11 @@ from thefuck.shells import shell @sudo_support @for_app('cd') def match(command): - return (('no such file or directory' in command.stderr.lower() - or 'cd: can\'t cd to' in command.stderr.lower() - or 'the system cannot find the path specified.' in command.stderr.lower())) + return ( + 'no such file or directory' in command.output.lower() + or 'cd: can\'t cd to' in command.output.lower() + or 'the system cannot find the path specified.' in command.output.lower() + ) @sudo_support diff --git a/thefuck/rules/chmod_x.py b/thefuck/rules/chmod_x.py index d6b4e80f..09e685ee 100644 --- a/thefuck/rules/chmod_x.py +++ b/thefuck/rules/chmod_x.py @@ -4,7 +4,7 @@ from thefuck.shells import shell def match(command): return (command.script.startswith('./') - and 'permission denied' in command.stderr.lower() + and 'permission denied' in command.output.lower() and os.path.exists(command.script_parts[0]) and not os.access(command.script_parts[0], os.X_OK)) diff --git a/thefuck/rules/composer_not_command.py b/thefuck/rules/composer_not_command.py index e96e349a..bfe4c5a4 100644 --- a/thefuck/rules/composer_not_command.py +++ b/thefuck/rules/composer_not_command.py @@ -4,13 +4,13 @@ from thefuck.utils import replace_argument, for_app @for_app('composer') def match(command): - return (('did you mean this?' in command.stderr.lower() - or 'did you mean one of these?' in command.stderr.lower())) + return (('did you mean this?' in command.output.lower() + or 'did you mean one of these?' in command.output.lower())) def get_new_command(command): - broken_cmd = re.findall(r"Command \"([^']*)\" is not defined", command.stderr)[0] - new_cmd = re.findall(r'Did you mean this\?[^\n]*\n\s*([^\n]*)', command.stderr) + broken_cmd = re.findall(r"Command \"([^']*)\" is not defined", command.output)[0] + new_cmd = re.findall(r'Did you mean this\?[^\n]*\n\s*([^\n]*)', command.output) if not new_cmd: - new_cmd = re.findall(r'Did you mean one of these\?[^\n]*\n\s*([^\n]*)', command.stderr) + new_cmd = re.findall(r'Did you mean one of these\?[^\n]*\n\s*([^\n]*)', command.output) return replace_argument(command.script, broken_cmd, new_cmd[0].strip()) diff --git a/thefuck/rules/cp_omitting_directory.py b/thefuck/rules/cp_omitting_directory.py index 66c7f8db..7ccf0ba9 100644 --- a/thefuck/rules/cp_omitting_directory.py +++ b/thefuck/rules/cp_omitting_directory.py @@ -6,8 +6,8 @@ from thefuck.utils import for_app @sudo_support @for_app('cp') def match(command): - stderr = command.stderr.lower() - return 'omitting directory' in stderr or 'is a directory' in stderr + output = command.output.lower() + return 'omitting directory' in output or 'is a directory' in output @sudo_support diff --git a/thefuck/rules/cpp11.py b/thefuck/rules/cpp11.py index 3cd7d728..99bbf340 100644 --- a/thefuck/rules/cpp11.py +++ b/thefuck/rules/cpp11.py @@ -4,8 +4,8 @@ from thefuck.utils import for_app @for_app('g++', 'clang++') def match(command): return ('This file requires compiler and library support for the ' - 'ISO C++ 2011 standard.' in command.stderr or - '-Wc++11-extensions' in command.stderr) + 'ISO C++ 2011 standard.' in command.output or + '-Wc++11-extensions' in command.output) def get_new_command(command): diff --git a/thefuck/rules/django_south_ghost.py b/thefuck/rules/django_south_ghost.py index fda221c6..75a2aec1 100644 --- a/thefuck/rules/django_south_ghost.py +++ b/thefuck/rules/django_south_ghost.py @@ -1,7 +1,7 @@ def match(command): return 'manage.py' in command.script and \ 'migrate' in command.script \ - and 'or pass --delete-ghost-migrations' in command.stderr + and 'or pass --delete-ghost-migrations' in command.output def get_new_command(command): diff --git a/thefuck/rules/django_south_merge.py b/thefuck/rules/django_south_merge.py index 572d9daf..155b9452 100644 --- a/thefuck/rules/django_south_merge.py +++ b/thefuck/rules/django_south_merge.py @@ -1,7 +1,7 @@ def match(command): return 'manage.py' in command.script and \ 'migrate' in command.script \ - and '--merge: will just attempt the migration' in command.stderr + and '--merge: will just attempt the migration' in command.output def get_new_command(command): diff --git a/thefuck/rules/docker_not_command.py b/thefuck/rules/docker_not_command.py index 52003cf5..d8a22cb7 100644 --- a/thefuck/rules/docker_not_command.py +++ b/thefuck/rules/docker_not_command.py @@ -8,7 +8,7 @@ from thefuck.specific.sudo import sudo_support @sudo_support @for_app('docker') def match(command): - return 'is not a docker command' in command.stderr + return 'is not a docker command' in command.output def get_docker_commands(): @@ -23,5 +23,5 @@ def get_docker_commands(): @sudo_support def get_new_command(command): wrong_command = re.findall( - r"docker: '(\w+)' is not a docker command.", command.stderr)[0] + r"docker: '(\w+)' is not a docker command.", command.output)[0] return replace_command(command, wrong_command, get_docker_commands()) diff --git a/thefuck/rules/fab_command_not_found.py b/thefuck/rules/fab_command_not_found.py index 9c4f699d..e87026ec 100644 --- a/thefuck/rules/fab_command_not_found.py +++ b/thefuck/rules/fab_command_not_found.py @@ -24,9 +24,10 @@ def _get_between(content, start, end=None): def get_new_command(command): not_found_commands = _get_between( - command.stderr, 'Warning: Command(s) not found:', 'Available commands:') + command.output, 'Warning: Command(s) not found:', + 'Available commands:') possible_commands = _get_between( - command.stdout, 'Available commands:') + command.output, 'Available commands:') script = command.script for not_found in not_found_commands: diff --git a/thefuck/rules/fix_alt_space.py b/thefuck/rules/fix_alt_space.py index 2e64ec97..bf2d3204 100644 --- a/thefuck/rules/fix_alt_space.py +++ b/thefuck/rules/fix_alt_space.py @@ -6,7 +6,7 @@ from thefuck.specific.sudo import sudo_support @sudo_support def match(command): - return ('command not found' in command.stderr.lower() + return ('command not found' in command.output.lower() and u' ' in command.script) diff --git a/thefuck/rules/fix_file.py b/thefuck/rules/fix_file.py index b10cf047..d091c2ab 100644 --- a/thefuck/rules/fix_file.py +++ b/thefuck/rules/fix_file.py @@ -46,9 +46,9 @@ patterns = [_make_pattern(p).search for p in patterns] @memoize -def _search(stderr): +def _search(output): for pattern in patterns: - m = pattern(stderr) + m = pattern(output) if m and os.path.isfile(m.group('file')): return m @@ -57,13 +57,13 @@ def match(command): if 'EDITOR' not in os.environ: return False - return _search(command.stderr) or _search(command.stdout) + return _search(command.output) @default_settings({'fixlinecmd': u'{editor} {file} +{line}', 'fixcolcmd': None}) def get_new_command(command): - m = _search(command.stderr) or _search(command.stdout) + m = _search(command.output) # Note: there does not seem to be a standard for columns, so they are just # ignored by default diff --git a/thefuck/rules/gem_unknown_command.py b/thefuck/rules/gem_unknown_command.py index e20f3ba4..3d5ee64d 100644 --- a/thefuck/rules/gem_unknown_command.py +++ b/thefuck/rules/gem_unknown_command.py @@ -6,12 +6,12 @@ from thefuck.utils import for_app, eager, replace_command @for_app('gem') def match(command): return ('ERROR: While executing gem ... (Gem::CommandLineError)' - in command.stderr - and 'Unknown command' in command.stderr) + in command.output + and 'Unknown command' in command.output) def _get_unknown_command(command): - return re.findall(r'Unknown command (.*)$', command.stderr)[0] + return re.findall(r'Unknown command (.*)$', command.output)[0] @eager diff --git a/thefuck/rules/git_add.py b/thefuck/rules/git_add.py index b9cbadb6..0230d47e 100644 --- a/thefuck/rules/git_add.py +++ b/thefuck/rules/git_add.py @@ -9,14 +9,14 @@ from thefuck.utils import memoize def _get_missing_file(command): pathspec = re.findall( r"error: pathspec '([^']*)' " - r'did not match any file\(s\) known to git.', command.stderr)[0] + r'did not match any file\(s\) known to git.', command.output)[0] if Path(pathspec).exists(): return pathspec @git_support def match(command): - return ('did not match any file(s) known to git.' in command.stderr + return ('did not match any file(s) known to git.' in command.output and _get_missing_file(command)) diff --git a/thefuck/rules/git_add_force.py b/thefuck/rules/git_add_force.py index bf7c28b8..91aba575 100644 --- a/thefuck/rules/git_add_force.py +++ b/thefuck/rules/git_add_force.py @@ -5,7 +5,7 @@ from thefuck.specific.git import git_support @git_support def match(command): return ('add' in command.script_parts - and 'Use -f if you really want to add them.' in command.stderr) + and 'Use -f if you really want to add them.' in command.output) @git_support diff --git a/thefuck/rules/git_bisect_usage.py b/thefuck/rules/git_bisect_usage.py index 2503e3c6..37b05f47 100644 --- a/thefuck/rules/git_bisect_usage.py +++ b/thefuck/rules/git_bisect_usage.py @@ -6,11 +6,11 @@ from thefuck.specific.git import git_support @git_support def match(command): return ('bisect' in command.script_parts and - 'usage: git bisect' in command.stderr) + 'usage: git bisect' in command.output) @git_support def get_new_command(command): broken = re.findall(r'git bisect ([^ $]*).*', command.script)[0] - usage = re.findall(r'usage: git bisect \[([^\]]+)\]', command.stderr)[0] + usage = re.findall(r'usage: git bisect \[([^\]]+)\]', command.output)[0] return replace_command(command, broken, usage.split('|')) diff --git a/thefuck/rules/git_branch_delete.py b/thefuck/rules/git_branch_delete.py index 2fb83d01..e45102cf 100644 --- a/thefuck/rules/git_branch_delete.py +++ b/thefuck/rules/git_branch_delete.py @@ -5,7 +5,7 @@ from thefuck.specific.git import git_support @git_support def match(command): return ('branch -d' in command.script - and 'If you are sure you want to delete it' in command.stderr) + and 'If you are sure you want to delete it' in command.output) @git_support diff --git a/thefuck/rules/git_branch_exists.py b/thefuck/rules/git_branch_exists.py index 25b7e506..93e11b52 100644 --- a/thefuck/rules/git_branch_exists.py +++ b/thefuck/rules/git_branch_exists.py @@ -6,15 +6,15 @@ from thefuck.utils import eager @git_support def match(command): - return ("fatal: A branch named '" in command.stderr - and " already exists." in command.stderr) + return ("fatal: A branch named '" in command.output + and " already exists." in command.output) @git_support @eager def get_new_command(command): branch_name = re.findall( - r"fatal: A branch named '([^']*)' already exists.", command.stderr)[0] + r"fatal: A branch named '([^']*)' already exists.", command.output)[0] new_command_templates = [['git branch -d {0}', 'git branch {0}'], ['git branch -d {0}', 'git checkout -b {0}'], ['git branch -D {0}', 'git branch {0}'], diff --git a/thefuck/rules/git_checkout.py b/thefuck/rules/git_checkout.py index 458b90c0..934f0a49 100644 --- a/thefuck/rules/git_checkout.py +++ b/thefuck/rules/git_checkout.py @@ -8,8 +8,8 @@ from thefuck.shells import shell @git_support def match(command): - return ('did not match any file(s) known to git.' in command.stderr - and "Did you forget to 'git add'?" not in command.stderr) + return ('did not match any file(s) known to git.' in command.output + and "Did you forget to 'git add'?" not in command.output) def get_branches(): @@ -29,7 +29,7 @@ def get_branches(): def get_new_command(command): missing_file = re.findall( r"error: pathspec '([^']*)' " - r"did not match any file\(s\) known to git.", command.stderr)[0] + r"did not match any file\(s\) known to git.", command.output)[0] closest_branch = utils.get_closest(missing_file, get_branches(), fallback_to_first=False) if closest_branch: diff --git a/thefuck/rules/git_diff_no_index.py b/thefuck/rules/git_diff_no_index.py index 00515171..a40caefe 100644 --- a/thefuck/rules/git_diff_no_index.py +++ b/thefuck/rules/git_diff_no_index.py @@ -8,7 +8,6 @@ def match(command): if not arg.startswith('-')] return ('diff' in command.script and '--no-index' not in command.script - and not command.stdout and len(files) == 2) diff --git a/thefuck/rules/git_fix_stash.py b/thefuck/rules/git_fix_stash.py index 0ff01b92..e68aa063 100644 --- a/thefuck/rules/git_fix_stash.py +++ b/thefuck/rules/git_fix_stash.py @@ -7,7 +7,7 @@ from thefuck.specific.git import git_support def match(command): if command.script_parts and len(command.script_parts) > 1: return (command.script_parts[1] == 'stash' - and 'usage:' in command.stderr) + and 'usage:' in command.output) else: return False diff --git a/thefuck/rules/git_flag_after_filename.py b/thefuck/rules/git_flag_after_filename.py index bec0591e..c6b03260 100644 --- a/thefuck/rules/git_flag_after_filename.py +++ b/thefuck/rules/git_flag_after_filename.py @@ -6,7 +6,7 @@ error_pattern = "fatal: bad flag '(.*?)' used after filename" @git_support def match(command): - return re.search(error_pattern, command.stderr) + return re.search(error_pattern, command.output) @git_support @@ -14,7 +14,7 @@ def get_new_command(command): command_parts = command.script_parts[:] # find the bad flag - bad_flag = re.search(error_pattern, command.stderr).group(1) + bad_flag = re.search(error_pattern, command.output).group(1) bad_flag_index = command_parts.index(bad_flag) # find the filename diff --git a/thefuck/rules/git_help_aliased.py b/thefuck/rules/git_help_aliased.py index d4103029..014393c6 100644 --- a/thefuck/rules/git_help_aliased.py +++ b/thefuck/rules/git_help_aliased.py @@ -3,10 +3,10 @@ from thefuck.specific.git import git_support @git_support def match(command): - return 'help' in command.script and ' is aliased to ' in command.stdout + return 'help' in command.script and ' is aliased to ' in command.output @git_support def get_new_command(command): - aliased = command.stdout.split('`', 2)[2].split("'", 1)[0].split(' ', 1)[0] + aliased = command.output.split('`', 2)[2].split("'", 1)[0].split(' ', 1)[0] return 'git help {}'.format(aliased) diff --git a/thefuck/rules/git_not_command.py b/thefuck/rules/git_not_command.py index 2aecf8d5..fd2a1bd1 100644 --- a/thefuck/rules/git_not_command.py +++ b/thefuck/rules/git_not_command.py @@ -5,14 +5,14 @@ from thefuck.specific.git import git_support @git_support def match(command): - return (" is not a git command. See 'git --help'." in command.stderr - and ('The most similar command' in command.stderr - or 'Did you mean' in command.stderr)) + return (" is not a git command. See 'git --help'." in command.output + and ('The most similar command' in command.output + or 'Did you mean' in command.output)) @git_support def get_new_command(command): broken_cmd = re.findall(r"git: '([^']*)' is not a git command", - command.stderr)[0] - matched = get_all_matched_commands(command.stderr, ['The most similar command', 'Did you mean']) + command.output)[0] + matched = get_all_matched_commands(command.output, ['The most similar command', 'Did you mean']) return replace_command(command, broken_cmd, matched) diff --git a/thefuck/rules/git_pull.py b/thefuck/rules/git_pull.py index 7978802f..60a36567 100644 --- a/thefuck/rules/git_pull.py +++ b/thefuck/rules/git_pull.py @@ -4,13 +4,12 @@ from thefuck.specific.git import git_support @git_support def match(command): - return ('pull' in command.script - and 'set-upstream' in command.stderr) + return 'pull' in command.script and 'set-upstream' in command.output @git_support def get_new_command(command): - line = command.stderr.split('\n')[-3].strip() + line = command.output.split('\n')[-3].strip() branch = line.split(' ')[-1] set_upstream = line.replace('', 'origin')\ .replace('', branch) diff --git a/thefuck/rules/git_pull_clone.py b/thefuck/rules/git_pull_clone.py index 7d513294..c61b0353 100644 --- a/thefuck/rules/git_pull_clone.py +++ b/thefuck/rules/git_pull_clone.py @@ -4,8 +4,8 @@ from thefuck.specific.git import git_support @git_support def match(command): - return ('fatal: Not a git repository' in command.stderr - and "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)." in command.stderr) + return ('fatal: Not a git repository' in command.output + and "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)." in command.output) @git_support diff --git a/thefuck/rules/git_pull_uncommitted_changes.py b/thefuck/rules/git_pull_uncommitted_changes.py index 3a8be31a..152503c8 100644 --- a/thefuck/rules/git_pull_uncommitted_changes.py +++ b/thefuck/rules/git_pull_uncommitted_changes.py @@ -5,8 +5,8 @@ from thefuck.specific.git import git_support @git_support def match(command): return ('pull' in command.script - and ('You have unstaged changes' in command.stderr - or 'contains uncommitted changes' in command.stderr)) + and ('You have unstaged changes' in command.output + or 'contains uncommitted changes' in command.output)) @git_support diff --git a/thefuck/rules/git_push.py b/thefuck/rules/git_push.py index 1f8e7626..7a472407 100644 --- a/thefuck/rules/git_push.py +++ b/thefuck/rules/git_push.py @@ -6,7 +6,7 @@ from thefuck.specific.git import git_support @git_support def match(command): return ('push' in command.script - and 'set-upstream' in command.stderr) + and 'set-upstream' in command.output) def _get_upstream_option_index(command_parts): @@ -33,6 +33,6 @@ def get_new_command(command): if len(command_parts) > upstream_option_index: command_parts.pop(upstream_option_index) - arguments = re.findall(r'git push (.*)', command.stderr)[0].strip() + arguments = re.findall(r'git push (.*)', command.output)[0].strip() return replace_argument(" ".join(command_parts), 'push', 'push {}'.format(arguments)) diff --git a/thefuck/rules/git_push_force.py b/thefuck/rules/git_push_force.py index 918af8c4..45c56ec6 100644 --- a/thefuck/rules/git_push_force.py +++ b/thefuck/rules/git_push_force.py @@ -5,9 +5,9 @@ from thefuck.specific.git import git_support @git_support def match(command): return ('push' in command.script - and '! [rejected]' in command.stderr - and 'failed to push some refs to' in command.stderr - and 'Updates were rejected because the tip of your current branch is behind' in command.stderr) + and '! [rejected]' in command.output + and 'failed to push some refs to' in command.output + and 'Updates were rejected because the tip of your current branch is behind' in command.output) @git_support diff --git a/thefuck/rules/git_push_pull.py b/thefuck/rules/git_push_pull.py index 785e74f8..59ab1d54 100644 --- a/thefuck/rules/git_push_pull.py +++ b/thefuck/rules/git_push_pull.py @@ -6,12 +6,12 @@ from thefuck.specific.git import git_support @git_support def match(command): return ('push' in command.script and - '! [rejected]' in command.stderr and - 'failed to push some refs to' in command.stderr and + '! [rejected]' in command.output and + 'failed to push some refs to' in command.output and ('Updates were rejected because the tip of your' - ' current branch is behind' in command.stderr or + ' current branch is behind' in command.output or 'Updates were rejected because the remote ' - 'contains work that you do' in command.stderr)) + 'contains work that you do' in command.output)) @git_support diff --git a/thefuck/rules/git_push_without_commits.py b/thefuck/rules/git_push_without_commits.py index a1321319..d2c59c20 100644 --- a/thefuck/rules/git_push_without_commits.py +++ b/thefuck/rules/git_push_without_commits.py @@ -7,7 +7,7 @@ refspec_does_not_match = re.compile(r'src refspec \w+ does not match any\.') @git_support def match(command): - return bool(refspec_does_not_match.search(command.stderr)) + return bool(refspec_does_not_match.search(command.output)) def get_new_command(command): diff --git a/thefuck/rules/git_rebase_merge_dir.py b/thefuck/rules/git_rebase_merge_dir.py index 910e3121..c4b3f68e 100644 --- a/thefuck/rules/git_rebase_merge_dir.py +++ b/thefuck/rules/git_rebase_merge_dir.py @@ -5,13 +5,13 @@ from thefuck.specific.git import git_support @git_support def match(command): return (' rebase' in command.script and - 'It seems that there is already a rebase-merge directory' in command.stderr and - 'I wonder if you are in the middle of another rebase' in command.stderr) + 'It seems that there is already a rebase-merge directory' in command.output and + 'I wonder if you are in the middle of another rebase' in command.output) @git_support def get_new_command(command): command_list = ['git rebase --continue', 'git rebase --abort', 'git rebase --skip'] - rm_cmd = command.stderr.split('\n')[-4] + rm_cmd = command.output.split('\n')[-4] command_list.append(rm_cmd.strip()) return get_close_matches(command.script, command_list, 4, 0) diff --git a/thefuck/rules/git_rebase_no_changes.py b/thefuck/rules/git_rebase_no_changes.py index fca3eb33..28a39f25 100644 --- a/thefuck/rules/git_rebase_no_changes.py +++ b/thefuck/rules/git_rebase_no_changes.py @@ -3,13 +3,11 @@ from thefuck.specific.git import git_support @git_support def match(command): - return ({'rebase', '--continue'}.issubset(command.script_parts) and - 'No changes - did you forget to use \'git add\'?' in command.stdout) + return ( + {'rebase', '--continue'}.issubset(command.script_parts) and + 'No changes - did you forget to use \'git add\'?' in command.output + ) def get_new_command(command): return 'git rebase --skip' - - -enabled_by_default = True -requires_output = True diff --git a/thefuck/rules/git_remote_seturl_add.py b/thefuck/rules/git_remote_seturl_add.py index 4468b10c..8be2be42 100644 --- a/thefuck/rules/git_remote_seturl_add.py +++ b/thefuck/rules/git_remote_seturl_add.py @@ -4,7 +4,8 @@ from thefuck.specific.git import git_support @git_support def match(command): - return ('set-url' in command.script and 'fatal: No such remote' in command.stderr) + return ('set-url' in command.script + and 'fatal: No such remote' in command.output) def get_new_command(command): diff --git a/thefuck/rules/git_rm_local_modifications.py b/thefuck/rules/git_rm_local_modifications.py index 01b8de42..602fb300 100644 --- a/thefuck/rules/git_rm_local_modifications.py +++ b/thefuck/rules/git_rm_local_modifications.py @@ -4,8 +4,8 @@ from thefuck.specific.git import git_support @git_support def match(command): return (' rm ' in command.script and - 'error: the following file has local modifications' in command.stderr and - 'use --cached to keep the file, or -f to force removal' in command.stderr) + 'error: the following file has local modifications' in command.output and + 'use --cached to keep the file, or -f to force removal' in command.output) @git_support diff --git a/thefuck/rules/git_rm_recursive.py b/thefuck/rules/git_rm_recursive.py index 9053aa6c..5870e253 100644 --- a/thefuck/rules/git_rm_recursive.py +++ b/thefuck/rules/git_rm_recursive.py @@ -4,8 +4,8 @@ from thefuck.specific.git import git_support @git_support def match(command): return (' rm ' in command.script - and "fatal: not removing '" in command.stderr - and "' recursively without -r" in command.stderr) + and "fatal: not removing '" in command.output + and "' recursively without -r" in command.output) @git_support diff --git a/thefuck/rules/git_rm_staged.py b/thefuck/rules/git_rm_staged.py index 7532a1f6..1f8e585d 100644 --- a/thefuck/rules/git_rm_staged.py +++ b/thefuck/rules/git_rm_staged.py @@ -4,8 +4,8 @@ from thefuck.specific.git import git_support @git_support def match(command): return (' rm ' in command.script and - 'error: the following file has changes staged in the index' in command.stderr and - 'use --cached to keep the file, or -f to force removal' in command.stderr) + 'error: the following file has changes staged in the index' in command.output and + 'use --cached to keep the file, or -f to force removal' in command.output) @git_support diff --git a/thefuck/rules/git_stash.py b/thefuck/rules/git_stash.py index 9dd5f502..5c4effa8 100644 --- a/thefuck/rules/git_stash.py +++ b/thefuck/rules/git_stash.py @@ -6,7 +6,7 @@ from thefuck.specific.git import git_support def match(command): # catches "Please commit or stash them" and "Please, commit your changes or # stash them before you can switch branches." - return 'or stash them' in command.stderr + return 'or stash them' in command.output @git_support diff --git a/thefuck/rules/git_stash_pop.py b/thefuck/rules/git_stash_pop.py index b8281362..0e143ffd 100644 --- a/thefuck/rules/git_stash_pop.py +++ b/thefuck/rules/git_stash_pop.py @@ -6,7 +6,7 @@ from thefuck.specific.git import git_support def match(command): return ('stash' in command.script and 'pop' in command.script - and 'Your local changes to the following files would be overwritten by merge' in command.stderr) + and 'Your local changes to the following files would be overwritten by merge' in command.output) @git_support diff --git a/thefuck/rules/git_tag_force.py b/thefuck/rules/git_tag_force.py index 6f6de7f2..63e8e391 100644 --- a/thefuck/rules/git_tag_force.py +++ b/thefuck/rules/git_tag_force.py @@ -5,7 +5,7 @@ from thefuck.specific.git import git_support @git_support def match(command): return ('tag' in command.script_parts - and 'already exists' in command.stderr) + and 'already exists' in command.output) @git_support diff --git a/thefuck/rules/git_two_dashes.py b/thefuck/rules/git_two_dashes.py index 93dcd870..3569dca5 100644 --- a/thefuck/rules/git_two_dashes.py +++ b/thefuck/rules/git_two_dashes.py @@ -4,11 +4,11 @@ from thefuck.specific.git import git_support @git_support def match(command): - return ('error: did you mean `' in command.stderr - and '` (with two dashes ?)' in command.stderr) + return ('error: did you mean `' in command.output + and '` (with two dashes ?)' in command.output) @git_support def get_new_command(command): - to = command.stderr.split('`')[1] + to = command.output.split('`')[1] return replace_argument(command.script, to[1:], to) diff --git a/thefuck/rules/gradle_no_task.py b/thefuck/rules/gradle_no_task.py index eaf30136..7820d1df 100644 --- a/thefuck/rules/gradle_no_task.py +++ b/thefuck/rules/gradle_no_task.py @@ -7,7 +7,7 @@ regex = re.compile(r"Task '(.*)' (is ambiguous|not found)") @for_app('gradle', './gradlew') def match(command): - return regex.findall(command.stderr) + return regex.findall(command.output) @eager @@ -29,6 +29,6 @@ def _get_all_tasks(gradle): def get_new_command(command): - wrong_task = regex.findall(command.stderr)[0][0] + wrong_task = regex.findall(command.output)[0][0] all_tasks = _get_all_tasks(command.script_parts[0]) return replace_command(command, wrong_task, all_tasks) diff --git a/thefuck/rules/gradle_wrapper.py b/thefuck/rules/gradle_wrapper.py index e325d9e3..94b750c5 100644 --- a/thefuck/rules/gradle_wrapper.py +++ b/thefuck/rules/gradle_wrapper.py @@ -5,7 +5,7 @@ from thefuck.utils import for_app, which @for_app('gradle') def match(command): return (not which(command.script_parts[0]) - and 'not found' in command.stderr + and 'not found' in command.output and os.path.isfile('gradlew')) diff --git a/thefuck/rules/grep_arguments_order.py b/thefuck/rules/grep_arguments_order.py index 1409ba22..5513cc5d 100644 --- a/thefuck/rules/grep_arguments_order.py +++ b/thefuck/rules/grep_arguments_order.py @@ -10,7 +10,7 @@ def _get_actual_file(parts): @for_app('grep', 'egrep') def match(command): - return ': No such file or directory' in command.stderr \ + return ': No such file or directory' in command.output \ and _get_actual_file(command.script_parts) diff --git a/thefuck/rules/grep_recursive.py b/thefuck/rules/grep_recursive.py index 3f793a18..268d9d1a 100644 --- a/thefuck/rules/grep_recursive.py +++ b/thefuck/rules/grep_recursive.py @@ -3,7 +3,7 @@ from thefuck.utils import for_app @for_app('grep') def match(command): - return 'is a directory' in command.stderr.lower() + return 'is a directory' in command.output.lower() def get_new_command(command): diff --git a/thefuck/rules/grunt_task_not_found.py b/thefuck/rules/grunt_task_not_found.py index d36f7af3..97da5815 100644 --- a/thefuck/rules/grunt_task_not_found.py +++ b/thefuck/rules/grunt_task_not_found.py @@ -7,7 +7,7 @@ regex = re.compile(r'Warning: Task "(.*)" not found.') @for_app('grunt') def match(command): - return regex.findall(command.stdout) + return regex.findall(command.output) @eager @@ -29,7 +29,7 @@ def _get_all_tasks(): def get_new_command(command): - misspelled_task = regex.findall(command.stdout)[0].split(':')[0] + misspelled_task = regex.findall(command.output)[0].split(':')[0] tasks = _get_all_tasks() fixed = get_closest(misspelled_task, tasks) return command.script.replace(' {}'.format(misspelled_task), diff --git a/thefuck/rules/gulp_not_task.py b/thefuck/rules/gulp_not_task.py index 8d207079..812e3973 100644 --- a/thefuck/rules/gulp_not_task.py +++ b/thefuck/rules/gulp_not_task.py @@ -5,7 +5,7 @@ from thefuck.utils import replace_command, for_app @for_app('gulp') def match(command): - return 'is not in your gulpfile' in command.stdout + return 'is not in your gulpfile' in command.output def get_gulp_tasks(): @@ -17,5 +17,5 @@ def get_gulp_tasks(): def get_new_command(command): wrong_task = re.findall(r"Task '(\w+)' is not in your gulpfile", - command.stdout)[0] + command.output)[0] return replace_command(command, wrong_task, get_gulp_tasks()) diff --git a/thefuck/rules/has_exists_script.py b/thefuck/rules/has_exists_script.py index e71b3a16..73924fb8 100644 --- a/thefuck/rules/has_exists_script.py +++ b/thefuck/rules/has_exists_script.py @@ -5,7 +5,7 @@ from thefuck.specific.sudo import sudo_support @sudo_support def match(command): return command.script_parts and os.path.exists(command.script_parts[0]) \ - and 'command not found' in command.stderr + and 'command not found' in command.output @sudo_support diff --git a/thefuck/rules/heroku_not_command.py b/thefuck/rules/heroku_not_command.py index 8ace1f76..5182ff11 100644 --- a/thefuck/rules/heroku_not_command.py +++ b/thefuck/rules/heroku_not_command.py @@ -4,8 +4,8 @@ from thefuck.utils import for_app @for_app('heroku') def match(command): - return 'Run heroku _ to run' in command.stderr + return 'Run heroku _ to run' in command.output def get_new_command(command): - return re.findall('Run heroku _ to run ([^.]*)', command.stderr)[0] + return re.findall('Run heroku _ to run ([^.]*)', command.output)[0] diff --git a/thefuck/rules/hostscli.py b/thefuck/rules/hostscli.py index 36b2f520..debc9ac1 100644 --- a/thefuck/rules/hostscli.py +++ b/thefuck/rules/hostscli.py @@ -11,17 +11,17 @@ no_website = "hostscli.errors.WebsiteImportError" def match(command): errors = [no_command, no_website] for error in errors: - if error in command.stderr: + if error in command.output: return True return False @sudo_support def get_new_command(command): - if no_website in command.stderr: + if no_website in command.output: return ['hostscli websites'] misspelled_command = re.findall( - r'Error: No such command ".*"', command.stderr)[0] + r'Error: No such command ".*"', command.output)[0] commands = ['block', 'unblock', 'websites', 'block_all', 'unblock_all'] return replace_command(command, misspelled_command, commands) diff --git a/thefuck/rules/ifconfig_device_not_found.py b/thefuck/rules/ifconfig_device_not_found.py index a7e5026f..f65c77ad 100644 --- a/thefuck/rules/ifconfig_device_not_found.py +++ b/thefuck/rules/ifconfig_device_not_found.py @@ -5,7 +5,7 @@ from thefuck.utils import for_app, replace_command, eager @for_app('ifconfig') def match(command): return 'error fetching interface information: Device not found' \ - in command.stderr + in command.output @eager @@ -18,6 +18,6 @@ def _get_possible_interfaces(): def get_new_command(command): - interface = command.stderr.split(' ')[0][:-1] + interface = command.output.split(' ')[0][:-1] possible_interfaces = _get_possible_interfaces() return replace_command(command, interface, possible_interfaces) diff --git a/thefuck/rules/lein_not_task.py b/thefuck/rules/lein_not_task.py index 7118080e..b960b1a4 100644 --- a/thefuck/rules/lein_not_task.py +++ b/thefuck/rules/lein_not_task.py @@ -7,13 +7,13 @@ from thefuck.specific.sudo import sudo_support @for_app('lein') def match(command): return (command.script.startswith('lein') - and "is not a task. See 'lein help'" in command.stderr - and 'Did you mean this?' in command.stderr) + and "is not a task. See 'lein help'" in command.output + and 'Did you mean this?' in command.output) @sudo_support def get_new_command(command): broken_cmd = re.findall(r"'([^']*)' is not a task", - command.stderr)[0] - new_cmds = get_all_matched_commands(command.stderr, 'Did you mean this?') + command.output)[0] + new_cmds = get_all_matched_commands(command.output, 'Did you mean this?') return replace_command(command, broken_cmd, new_cmds) diff --git a/thefuck/rules/ln_no_hard_link.py b/thefuck/rules/ln_no_hard_link.py index 4ee1d615..68766d35 100644 --- a/thefuck/rules/ln_no_hard_link.py +++ b/thefuck/rules/ln_no_hard_link.py @@ -14,7 +14,7 @@ from thefuck.specific.sudo import sudo_support @sudo_support def match(command): - return (command.stderr.endswith("hard link not allowed for directory") and + return (command.output.endswith("hard link not allowed for directory") and command.script_parts[0] == 'ln') diff --git a/thefuck/rules/ln_s_order.py b/thefuck/rules/ln_s_order.py index 1c07e36a..963a4424 100644 --- a/thefuck/rules/ln_s_order.py +++ b/thefuck/rules/ln_s_order.py @@ -13,7 +13,7 @@ def _get_destination(script_parts): def match(command): return (command.script_parts[0] == 'ln' and {'-s', '--symbolic'}.intersection(command.script_parts) - and 'File exists' in command.stderr + and 'File exists' in command.output and _get_destination(command.script_parts)) diff --git a/thefuck/rules/ls_all.py b/thefuck/rules/ls_all.py index e898d17d..6dcef0b2 100644 --- a/thefuck/rules/ls_all.py +++ b/thefuck/rules/ls_all.py @@ -3,7 +3,7 @@ from thefuck.utils import for_app @for_app('ls') def match(command): - return command.stdout.strip() == '' + return command.output.strip() == '' def get_new_command(command): diff --git a/thefuck/rules/man.py b/thefuck/rules/man.py index e4ec54d9..c8878568 100644 --- a/thefuck/rules/man.py +++ b/thefuck/rules/man.py @@ -17,7 +17,7 @@ def get_new_command(command): # If there are no man pages for last_arg, suggest `last_arg --help` instead. # Otherwise, suggest `--help` after suggesting other man page sections. - if command.stderr.strip() == 'No manual entry for ' + last_arg: + if command.output.strip() == 'No manual entry for ' + last_arg: return [help_command] split_cmd2 = command.script_parts diff --git a/thefuck/rules/man_no_space.py b/thefuck/rules/man_no_space.py index 2d5d74e6..86e77167 100644 --- a/thefuck/rules/man_no_space.py +++ b/thefuck/rules/man_no_space.py @@ -1,6 +1,6 @@ def match(command): return (command.script.startswith(u'man') - and u'command not found' in command.stderr.lower()) + and u'command not found' in command.output.lower()) def get_new_command(command): diff --git a/thefuck/rules/mercurial.py b/thefuck/rules/mercurial.py index f2b6581e..ae6f7aa3 100644 --- a/thefuck/rules/mercurial.py +++ b/thefuck/rules/mercurial.py @@ -3,10 +3,10 @@ from thefuck.utils import get_closest, for_app def extract_possibilities(command): - possib = re.findall(r'\n\(did you mean one of ([^\?]+)\?\)', command.stderr) + possib = re.findall(r'\n\(did you mean one of ([^\?]+)\?\)', command.output) if possib: return possib[0].split(', ') - possib = re.findall(r'\n ([^$]+)$', command.stderr) + possib = re.findall(r'\n ([^$]+)$', command.output) if possib: return possib[0].split(' ') return possib @@ -14,10 +14,10 @@ def extract_possibilities(command): @for_app('hg') def match(command): - return ('hg: unknown command' in command.stderr - and '(did you mean one of ' in command.stderr - or "hg: command '" in command.stderr - and "' is ambiguous:" in command.stderr) + return ('hg: unknown command' in command.output + and '(did you mean one of ' in command.output + or "hg: command '" in command.output + and "' is ambiguous:" in command.output) def get_new_command(command): diff --git a/thefuck/rules/mkdir_p.py b/thefuck/rules/mkdir_p.py index 40f59728..3f781e14 100644 --- a/thefuck/rules/mkdir_p.py +++ b/thefuck/rules/mkdir_p.py @@ -5,7 +5,7 @@ from thefuck.specific.sudo import sudo_support @sudo_support def match(command): return ('mkdir' in command.script - and 'No such file or directory' in command.stderr) + and 'No such file or directory' in command.output) @sudo_support diff --git a/thefuck/rules/mvn_no_command.py b/thefuck/rules/mvn_no_command.py index e489d00b..36c2a0a3 100644 --- a/thefuck/rules/mvn_no_command.py +++ b/thefuck/rules/mvn_no_command.py @@ -3,7 +3,7 @@ from thefuck.utils import for_app @for_app('mvn') def match(command): - return 'No goals have been specified for this build' in command.stdout + return 'No goals have been specified for this build' in command.output def get_new_command(command): diff --git a/thefuck/rules/mvn_unknown_lifecycle_phase.py b/thefuck/rules/mvn_unknown_lifecycle_phase.py index eb0ed52f..ff3c54e6 100644 --- a/thefuck/rules/mvn_unknown_lifecycle_phase.py +++ b/thefuck/rules/mvn_unknown_lifecycle_phase.py @@ -5,12 +5,12 @@ import re def _get_failed_lifecycle(command): return re.search(r'\[ERROR\] Unknown lifecycle phase "(.+)"', - command.stdout) + command.output) def _getavailable_lifecycles(command): return re.search( - r'Available lifecycle phases are: (.+) -> \[Help 1\]', command.stdout) + r'Available lifecycle phases are: (.+) -> \[Help 1\]', command.output) @for_app('mvn') diff --git a/thefuck/rules/no_command.py b/thefuck/rules/no_command.py index 174ee780..ba5f0e36 100644 --- a/thefuck/rules/no_command.py +++ b/thefuck/rules/no_command.py @@ -7,7 +7,7 @@ from thefuck.specific.sudo import sudo_support @sudo_support def match(command): return (not which(command.script_parts[0]) - and 'not found' in command.stderr + and 'not found' in command.output and bool(get_close_matches(command.script_parts[0], get_all_executables()))) diff --git a/thefuck/rules/no_such_file.py b/thefuck/rules/no_such_file.py index c7d23849..dc790a25 100644 --- a/thefuck/rules/no_such_file.py +++ b/thefuck/rules/no_such_file.py @@ -12,7 +12,7 @@ patterns = ( def match(command): for pattern in patterns: - if re.search(pattern, command.stderr): + if re.search(pattern, command.output): return True return False @@ -20,7 +20,7 @@ def match(command): def get_new_command(command): for pattern in patterns: - file = re.findall(pattern, command.stderr) + file = re.findall(pattern, command.output) if file: file = file[0] diff --git a/thefuck/rules/npm_missing_script.py b/thefuck/rules/npm_missing_script.py index 184d900e..fc9d5a4a 100644 --- a/thefuck/rules/npm_missing_script.py +++ b/thefuck/rules/npm_missing_script.py @@ -8,10 +8,10 @@ enabled_by_default = npm_available @for_app('npm') def match(command): return (any(part.startswith('ru') for part in command.script_parts) - and 'npm ERR! missing script: ' in command.stderr) + and 'npm ERR! missing script: ' in command.output) def get_new_command(command): misspelled_script = re.findall( - r'.*missing script: (.*)\n', command.stderr)[0] + r'.*missing script: (.*)\n', command.output)[0] return replace_command(command, misspelled_script, get_scripts()) diff --git a/thefuck/rules/npm_run_script.py b/thefuck/rules/npm_run_script.py index 00f37ecd..6d932f44 100644 --- a/thefuck/rules/npm_run_script.py +++ b/thefuck/rules/npm_run_script.py @@ -6,7 +6,7 @@ enabled_by_default = npm_available @for_app('npm') def match(command): - return ('Usage: npm ' in command.stdout + return ('Usage: npm ' in command.output and not any(part.startswith('ru') for part in command.script_parts) and command.script_parts[1] in get_scripts()) diff --git a/thefuck/rules/npm_wrong_command.py b/thefuck/rules/npm_wrong_command.py index f8da0210..e3511fe8 100644 --- a/thefuck/rules/npm_wrong_command.py +++ b/thefuck/rules/npm_wrong_command.py @@ -15,7 +15,7 @@ def _get_wrong_command(script_parts): @for_app('npm') def match(command): return (command.script_parts[0] == 'npm' and - 'where is one of:' in command.stdout and + 'where is one of:' in command.output and _get_wrong_command(command.script_parts)) @@ -36,7 +36,7 @@ def _get_available_commands(stdout): def get_new_command(command): - npm_commands = _get_available_commands(command.stdout) + npm_commands = _get_available_commands(command.output) wrong_command = _get_wrong_command(command.script_parts) fixed = get_closest(wrong_command, npm_commands) return replace_argument(command.script, wrong_command, fixed) diff --git a/thefuck/rules/open.py b/thefuck/rules/open.py index 86f20087..1c701122 100644 --- a/thefuck/rules/open.py +++ b/thefuck/rules/open.py @@ -25,16 +25,16 @@ def is_arg_url(command): @for_app('open', 'xdg-open', 'gnome-open', 'kde-open') def match(command): return (is_arg_url(command) or - command.stderr.strip().startswith('The file ') and - command.stderr.strip().endswith(' does not exist.')) + command.output.strip().startswith('The file ') and + command.output.strip().endswith(' does not exist.')) @eager def get_new_command(command): - stderr = command.stderr.strip() + output = command.output.strip() if is_arg_url(command): yield command.script.replace('open ', 'open http://') - elif stderr.startswith('The file ') and stderr.endswith(' does not exist.'): + elif output.startswith('The file ') and output.endswith(' does not exist.'): arg = command.script.split(' ', 1)[1] for option in ['touch', 'mkdir']: yield shell.and_(u'{} {}'.format(option, arg), command.script) diff --git a/thefuck/rules/pacman.py b/thefuck/rules/pacman.py index 779ed20f..92a48e88 100644 --- a/thefuck/rules/pacman.py +++ b/thefuck/rules/pacman.py @@ -3,7 +3,7 @@ from thefuck.shells import shell def match(command): - return 'not found' in command.stderr and get_pkgfile(command.script) + return 'not found' in command.output and get_pkgfile(command.script) def get_new_command(command): diff --git a/thefuck/rules/pacman_not_found.py b/thefuck/rules/pacman_not_found.py index 2019a4f9..720135aa 100644 --- a/thefuck/rules/pacman_not_found.py +++ b/thefuck/rules/pacman_not_found.py @@ -14,7 +14,7 @@ def match(command): return (command.script_parts and (command.script_parts[0] in ('pacman', 'yaourt') or command.script_parts[0:2] == ['sudo', 'pacman']) - and 'error: target not found:' in command.stderr) + and 'error: target not found:' in command.output) def get_new_command(command): diff --git a/thefuck/rules/path_from_history.py b/thefuck/rules/path_from_history.py index a5ea4adc..d05bb9ae 100644 --- a/thefuck/rules/path_from_history.py +++ b/thefuck/rules/path_from_history.py @@ -15,7 +15,7 @@ patterns = [r'no such file or directory: (.*)$', @memoize def _get_destination(command): for pattern in patterns: - found = re.findall(pattern, command.stderr) + found = re.findall(pattern, command.output) if found: if found[0] in command.script_parts: return found[0] diff --git a/thefuck/rules/pip_unknown_command.py b/thefuck/rules/pip_unknown_command.py index a3c0dcac..75fcc7ca 100644 --- a/thefuck/rules/pip_unknown_command.py +++ b/thefuck/rules/pip_unknown_command.py @@ -7,13 +7,13 @@ from thefuck.specific.sudo import sudo_support @for_app('pip', 'pip2', 'pip3') def match(command): return ('pip' in command.script and - 'unknown command' in command.stderr and - 'maybe you meant' in command.stderr) + 'unknown command' in command.output and + 'maybe you meant' in command.output) def get_new_command(command): broken_cmd = re.findall(r'ERROR: unknown command \"([a-z]+)\"', - command.stderr)[0] - new_cmd = re.findall(r'maybe you meant \"([a-z]+)\"', command.stderr)[0] + command.output)[0] + new_cmd = re.findall(r'maybe you meant \"([a-z]+)\"', command.output)[0] return replace_argument(command.script, broken_cmd, new_cmd) diff --git a/thefuck/rules/port_already_in_use.py b/thefuck/rules/port_already_in_use.py index 8264775b..d3552431 100644 --- a/thefuck/rules/port_already_in_use.py +++ b/thefuck/rules/port_already_in_use.py @@ -24,8 +24,7 @@ def _get_pid_by_port(port): @memoize def _get_used_port(command): for pattern in patterns: - matched = (re.search(pattern, command.stderr) - or re.search(pattern, command.stdout)) + matched = re.search(pattern, command.output) if matched: return matched.group('port') diff --git a/thefuck/rules/python_command.py b/thefuck/rules/python_command.py index 98c56f72..08699373 100644 --- a/thefuck/rules/python_command.py +++ b/thefuck/rules/python_command.py @@ -8,8 +8,8 @@ from thefuck.specific.sudo import sudo_support def match(command): return (command.script_parts and command.script_parts[0].endswith('.py') - and ('Permission denied' in command.stderr or - 'command not found' in command.stderr)) + and ('Permission denied' in command.output or + 'command not found' in command.output)) @sudo_support diff --git a/thefuck/rules/react_native_command_unrecognized.py b/thefuck/rules/react_native_command_unrecognized.py index a16624cf..41a25ce1 100644 --- a/thefuck/rules/react_native_command_unrecognized.py +++ b/thefuck/rules/react_native_command_unrecognized.py @@ -5,7 +5,7 @@ from thefuck.utils import for_app, replace_command, cache, eager @for_app('react-native') def match(command): - return re.findall(r"Unrecognized command '.*'", command.stderr) + return re.findall(r"Unrecognized command '.*'", command.output) @cache('package.json') @@ -29,6 +29,6 @@ def _get_commands(): def get_new_command(command): misspelled_command = re.findall(r"Unrecognized command '(.*)'", - command.stderr)[0] + command.output)[0] commands = _get_commands() return replace_command(command, misspelled_command, commands) diff --git a/thefuck/rules/rm_dir.py b/thefuck/rules/rm_dir.py index 51cdff8f..6c6449fd 100644 --- a/thefuck/rules/rm_dir.py +++ b/thefuck/rules/rm_dir.py @@ -5,7 +5,7 @@ from thefuck.specific.sudo import sudo_support @sudo_support def match(command): return ('rm' in command.script - and 'is a directory' in command.stderr.lower()) + and 'is a directory' in command.output.lower()) @sudo_support diff --git a/thefuck/rules/rm_root.py b/thefuck/rules/rm_root.py index 3ac8d4a4..3eb3047d 100644 --- a/thefuck/rules/rm_root.py +++ b/thefuck/rules/rm_root.py @@ -8,7 +8,7 @@ def match(command): return (command.script_parts and {'rm', '/'}.issubset(command.script_parts) and '--no-preserve-root' not in command.script - and '--no-preserve-root' in command.stderr) + and '--no-preserve-root' in command.output) @sudo_support diff --git a/thefuck/rules/scm_correction.py b/thefuck/rules/scm_correction.py index 0b2fc7e5..78c44949 100644 --- a/thefuck/rules/scm_correction.py +++ b/thefuck/rules/scm_correction.py @@ -24,7 +24,7 @@ def match(command): scm = command.script_parts[0] pattern = wrong_scm_patterns[scm] - return pattern in command.stderr and _get_actual_scm() + return pattern in command.output and _get_actual_scm() def get_new_command(command): diff --git a/thefuck/rules/sed_unterminated_s.py b/thefuck/rules/sed_unterminated_s.py index 11968066..41cad2d0 100644 --- a/thefuck/rules/sed_unterminated_s.py +++ b/thefuck/rules/sed_unterminated_s.py @@ -5,7 +5,7 @@ from thefuck.utils import for_app @for_app('sed') def match(command): - return "unterminated `s' command" in command.stderr + return "unterminated `s' command" in command.output def get_new_command(command): diff --git a/thefuck/rules/ssh_known_hosts.py b/thefuck/rules/ssh_known_hosts.py index e4495cda..7ebce5d6 100644 --- a/thefuck/rules/ssh_known_hosts.py +++ b/thefuck/rules/ssh_known_hosts.py @@ -17,7 +17,7 @@ def match(command): r"Warning: the \S+ host key for '([^']+)' differs from the key for the IP address '([^']+)'", ) - return any(re.findall(pattern, command.stderr) for pattern in patterns) + return any(re.findall(pattern, command.output) for pattern in patterns) def get_new_command(command): @@ -28,7 +28,7 @@ def side_effect(old_cmd, command): offending_pattern = re.compile( r'(?:Offending (?:key for IP|\S+ key)|Matching host key) in ([^:]+):(\d+)', re.MULTILINE) - offending = offending_pattern.findall(old_cmd.stderr) + offending = offending_pattern.findall(old_cmd.output) for filepath, lineno in offending: with open(filepath, 'r') as fh: lines = fh.readlines() diff --git a/thefuck/rules/sudo.py b/thefuck/rules/sudo.py index 70db4f00..4723de0b 100644 --- a/thefuck/rules/sudo.py +++ b/thefuck/rules/sudo.py @@ -30,8 +30,7 @@ def match(command): return False for pattern in patterns: - if pattern in command.stderr.lower()\ - or pattern in command.stdout.lower(): + if pattern in command.output.lower(): return True return False diff --git a/thefuck/rules/sudo_command_from_user_path.py b/thefuck/rules/sudo_command_from_user_path.py index 39ddace9..256f8aa3 100644 --- a/thefuck/rules/sudo_command_from_user_path.py +++ b/thefuck/rules/sudo_command_from_user_path.py @@ -3,14 +3,14 @@ from thefuck.utils import for_app, which, replace_argument def _get_command_name(command): - found = re.findall(r'sudo: (.*): command not found', command.stderr) + found = re.findall(r'sudo: (.*): command not found', command.output) if found: return found[0] @for_app('sudo') def match(command): - if 'command not found' in command.stderr: + if 'command not found' in command.output: command_name = _get_command_name(command) return which(command_name) diff --git a/thefuck/rules/switch_lang.py b/thefuck/rules/switch_lang.py index 60e5780c..e67c89d5 100644 --- a/thefuck/rules/switch_lang.py +++ b/thefuck/rules/switch_lang.py @@ -30,7 +30,7 @@ def _switch_command(command, layout): def match(command): - if 'not found' not in command.stderr: + if 'not found' not in command.output: return False matched_layout = _get_matched_layout(command) return (matched_layout and diff --git a/thefuck/rules/systemctl.py b/thefuck/rules/systemctl.py index 499235c5..3968819e 100644 --- a/thefuck/rules/systemctl.py +++ b/thefuck/rules/systemctl.py @@ -11,7 +11,7 @@ def match(command): # Catches "Unknown operation 'service'." when executing systemctl with # misordered arguments cmd = command.script_parts - return (cmd and 'Unknown operation \'' in command.stderr and + return (cmd and 'Unknown operation \'' in command.output and len(cmd) - cmd.index('systemctl') == 3) diff --git a/thefuck/rules/test.py.py b/thefuck/rules/test.py.py index 82810a80..b898db52 100644 --- a/thefuck/rules/test.py.py +++ b/thefuck/rules/test.py.py @@ -1,5 +1,5 @@ def match(command): - return command.script == 'test.py' and 'not found' in command.stderr + return command.script == 'test.py' and 'not found' in command.output def get_new_command(command): diff --git a/thefuck/rules/tmux.py b/thefuck/rules/tmux.py index 73a90756..b7f9b01d 100644 --- a/thefuck/rules/tmux.py +++ b/thefuck/rules/tmux.py @@ -4,13 +4,13 @@ from thefuck.utils import replace_command, for_app @for_app('tmux') def match(command): - return ('ambiguous command:' in command.stderr - and 'could be:' in command.stderr) + return ('ambiguous command:' in command.output + and 'could be:' in command.output) def get_new_command(command): cmd = re.match(r"ambiguous command: (.*), could be: (.*)", - command.stderr) + command.output) old_cmd = cmd.group(1) suggestions = [c.strip() for c in cmd.group(2).split(',')] diff --git a/thefuck/rules/touch.py b/thefuck/rules/touch.py index 4da351a2..2552d854 100644 --- a/thefuck/rules/touch.py +++ b/thefuck/rules/touch.py @@ -5,9 +5,9 @@ from thefuck.utils import for_app @for_app('touch') def match(command): - return 'No such file or directory' in command.stderr + return 'No such file or directory' in command.output def get_new_command(command): - path = re.findall(r"touch: cannot touch '(.+)/.+':", command.stderr)[0] + path = re.findall(r"touch: cannot touch '(.+)/.+':", command.output)[0] return shell.and_(u'mkdir -p {}'.format(path), command.script) diff --git a/thefuck/rules/tsuru_login.py b/thefuck/rules/tsuru_login.py index 5f0be702..e2a5ef89 100644 --- a/thefuck/rules/tsuru_login.py +++ b/thefuck/rules/tsuru_login.py @@ -4,8 +4,8 @@ from thefuck.utils import for_app @for_app('tsuru') def match(command): - return ('not authenticated' in command.stderr - and 'session has expired' in command.stderr) + return ('not authenticated' in command.output + and 'session has expired' in command.output) def get_new_command(command): diff --git a/thefuck/rules/tsuru_not_command.py b/thefuck/rules/tsuru_not_command.py index cae67826..2535104d 100644 --- a/thefuck/rules/tsuru_not_command.py +++ b/thefuck/rules/tsuru_not_command.py @@ -4,12 +4,12 @@ from thefuck.utils import get_all_matched_commands, replace_command, for_app @for_app('tsuru') def match(command): - return (' is not a tsuru command. See "tsuru help".' in command.stderr - and '\nDid you mean?\n\t' in command.stderr) + return (' is not a tsuru command. See "tsuru help".' in command.output + and '\nDid you mean?\n\t' in command.output) def get_new_command(command): broken_cmd = re.findall(r'tsuru: "([^"]*)" is not a tsuru command', - command.stderr)[0] + command.output)[0] return replace_command(command, broken_cmd, - get_all_matched_commands(command.stderr)) + get_all_matched_commands(command.output)) diff --git a/thefuck/rules/unknown_command.py b/thefuck/rules/unknown_command.py index 30a90bc8..7deaf2a0 100644 --- a/thefuck/rules/unknown_command.py +++ b/thefuck/rules/unknown_command.py @@ -3,11 +3,11 @@ from thefuck.utils import replace_command def match(command): - return (re.search(r"([^:]*): Unknown command.*", command.stderr) is not None - and re.search(r"Did you mean ([^?]*)?", command.stderr) is not None) + return (re.search(r"([^:]*): Unknown command.*", command.output) is not None + and re.search(r"Did you mean ([^?]*)?", command.output) is not None) def get_new_command(command): - broken_cmd = re.findall(r"([^:]*): Unknown command.*", command.stderr)[0] - matched = re.findall(r"Did you mean ([^?]*)?", command.stderr) + broken_cmd = re.findall(r"([^:]*): Unknown command.*", command.output)[0] + matched = re.findall(r"Did you mean ([^?]*)?", command.output) return replace_command(command, broken_cmd, matched) diff --git a/thefuck/rules/vagrant_up.py b/thefuck/rules/vagrant_up.py index 85595fb4..68783ff0 100644 --- a/thefuck/rules/vagrant_up.py +++ b/thefuck/rules/vagrant_up.py @@ -4,7 +4,7 @@ from thefuck.utils import for_app @for_app('vagrant') def match(command): - return 'run `vagrant up`' in command.stderr.lower() + return 'run `vagrant up`' in command.output.lower() def get_new_command(command): diff --git a/thefuck/rules/yarn_alias.py b/thefuck/rules/yarn_alias.py index 9750218a..8905e979 100644 --- a/thefuck/rules/yarn_alias.py +++ b/thefuck/rules/yarn_alias.py @@ -4,11 +4,11 @@ from thefuck.utils import replace_argument, for_app @for_app('yarn', at_least=1) def match(command): - return ('Did you mean' in command.stderr) + return 'Did you mean' in command.output def get_new_command(command): broken = command.script_parts[1] - fix = re.findall(r'Did you mean [`"](?:yarn )?([^`"]*)[`"]', command.stderr)[0] + fix = re.findall(r'Did you mean [`"](?:yarn )?([^`"]*)[`"]', command.output)[0] return replace_argument(command.script, broken, fix) diff --git a/thefuck/rules/yarn_command_not_found.py b/thefuck/rules/yarn_command_not_found.py index 82a7a2a8..443257b0 100644 --- a/thefuck/rules/yarn_command_not_found.py +++ b/thefuck/rules/yarn_command_not_found.py @@ -7,7 +7,7 @@ regex = re.compile(r'error Command "(.*)" not found.') @for_app('yarn') def match(command): - return regex.findall(command.stderr) + return regex.findall(command.output) npm_commands = {'require': 'add'} @@ -29,7 +29,7 @@ def _get_all_tasks(): def get_new_command(command): - misspelled_task = regex.findall(command.stderr)[0] + misspelled_task = regex.findall(command.output)[0] if misspelled_task in npm_commands: yarn_command = npm_commands[misspelled_task] return replace_argument(command.script, misspelled_task, yarn_command) diff --git a/thefuck/rules/yarn_command_replaced.py b/thefuck/rules/yarn_command_replaced.py index 1594d1d0..faa191e6 100644 --- a/thefuck/rules/yarn_command_replaced.py +++ b/thefuck/rules/yarn_command_replaced.py @@ -6,8 +6,8 @@ regex = re.compile(r'Run "(.*)" instead') @for_app('yarn', at_least=1) def match(command): - return regex.findall(command.stderr) + return regex.findall(command.output) def get_new_command(command): - return regex.findall(command.stderr)[0] + return regex.findall(command.output)[0] diff --git a/thefuck/rules/yarn_help.py b/thefuck/rules/yarn_help.py index a4d8f931..6c360dd0 100644 --- a/thefuck/rules/yarn_help.py +++ b/thefuck/rules/yarn_help.py @@ -6,12 +6,12 @@ from thefuck.system import open_command @for_app('yarn', at_least=2) def match(command): return (command.script_parts[1] == 'help' - and 'for documentation about this command.' in command.stdout) + and 'for documentation about this command.' in command.output) def get_new_command(command): url = re.findall( r'Visit ([^ ]*) for documentation about this command.', - command.stdout)[0] + command.output)[0] return open_command(url) diff --git a/thefuck/specific/git.py b/thefuck/specific/git.py index 6c2ba4fc..b2c107cd 100644 --- a/thefuck/specific/git.py +++ b/thefuck/specific/git.py @@ -14,9 +14,9 @@ def git_support(fn, command): return False # perform git aliases expansion - if 'trace: alias expansion:' in command.stderr: + if 'trace: alias expansion:' in command.output: search = re.search("trace: alias expansion: ([^ ]*) => ([^\n]*)", - command.stderr) + command.output) alias = search.group(1) # by default git quotes everything, for example: diff --git a/thefuck/types.py b/thefuck/types.py index 5fa7b3d7..8c5770f4 100644 --- a/thefuck/types.py +++ b/thefuck/types.py @@ -13,17 +13,25 @@ from .output_readers import get_output class Command(object): """Command that should be fixed.""" - def __init__(self, script, stdout, stderr): + def __init__(self, script, output): """Initializes command with given values. :type script: basestring - :type stdout: basestring - :type stderr: basestring + :type output: basestring """ self.script = script - self.stdout = stdout - self.stderr = stderr + self.output = output + + @property + def stdout(self): + logs.warn('`stdout` is deprecated, please use `output` instead') + return self.output + + @property + def stderr(self): + logs.warn('`stderr` is deprecated, please use `output` instead') + return self.output @property def script_parts(self): @@ -39,14 +47,13 @@ class Command(object): def __eq__(self, other): if isinstance(other, Command): - return ((self.script, self.stdout, self.stderr) - == (other.script, other.stdout, other.stderr)) + return (self.script, self.output) == (other.script, other.output) else: return False def __repr__(self): - return u'Command(script={}, stdout={}, stderr={})'.format( - self.script, self.stdout, self.stderr) + return u'Command(script={}, output={})'.format( + self.script, self.output) def update(self, **kwargs): """Returns new command with replaced fields. @@ -55,8 +62,7 @@ class Command(object): """ kwargs.setdefault('script', self.script) - kwargs.setdefault('stdout', self.stdout) - kwargs.setdefault('stderr', self.stderr) + kwargs.setdefault('output', self.output) return Command(**kwargs) @classmethod @@ -73,8 +79,8 @@ class Command(object): raise EmptyCommand expanded = shell.from_shell(script) - stdout, stderr = get_output(script, expanded) - return cls(expanded, stdout, stderr) + output = get_output(script, expanded) + return cls(expanded, output) class Rule(object): @@ -163,9 +169,7 @@ class Rule(object): :rtype: bool """ - script_only = command.stdout is None and command.stderr is None - - if script_only and self.requires_output: + if command.output is None and self.requires_output: return False try: