diff --git a/tests/functional/plots.py b/tests/functional/plots.py new file mode 100644 index 00000000..bfa09ae5 --- /dev/null +++ b/tests/functional/plots.py @@ -0,0 +1,20 @@ +def with_confirmation(proc): + """Ensures that command can be fixed when confirmation enabled.""" + proc.sendline('ehco test') + + proc.sendline('fuck') + proc.expect('echo test') + proc.expect('enter') + proc.expect_exact('ctrl+c') + proc.send('\n') + + proc.expect('test') + + +def without_confirmation(proc): + """Ensures that command can be fixed when confirmation disabled.""" + proc.sendline('ehco test') + + proc.sendline('fuck') + proc.expect('echo test') + proc.expect('test') diff --git a/tests/functional/test_bash.py b/tests/functional/test_bash.py index ca320780..52d21d6e 100644 --- a/tests/functional/test_bash.py +++ b/tests/functional/test_bash.py @@ -1,4 +1,5 @@ import pytest +from tests.functional.plots import with_confirmation, without_confirmation from tests.functional.utils import spawn, functional containers = [('thefuck/ubuntu-python3-bash', ''' @@ -23,17 +24,7 @@ CMD ["/bin/bash"] def test_with_confirmation(tag, dockerfile): with spawn(tag, dockerfile) as proc: proc.sendline('eval $(thefuck-alias)') - - proc.sendline('ehco test') - proc.expect('command not found') - - proc.sendline('fuck') - proc.expect('echo test') - proc.expect('enter') - proc.expect_exact('ctrl+c') - proc.send('\n') - - proc.expect('test') + with_confirmation(proc) @functional @@ -42,10 +33,4 @@ def test_without_confirmation(tag, dockerfile): with spawn(tag, dockerfile) as proc: proc.sendline('export THEFUCK_REQUIRE_CONFIRMATION=false') proc.sendline('eval $(thefuck-alias)') - - proc.sendline('ehco test') - proc.expect('command not found') - - proc.sendline('fuck') - proc.expect('echo test') - proc.expect('test') + without_confirmation(proc) diff --git a/tests/functional/test_fish.py b/tests/functional/test_fish.py new file mode 100644 index 00000000..933ec05f --- /dev/null +++ b/tests/functional/test_fish.py @@ -0,0 +1,39 @@ +import pytest +from tests.functional.plots import with_confirmation, without_confirmation +from tests.functional.utils import spawn, functional + +containers = [('thefuck/ubuntu-python3-bash', ''' +FROM ubuntu:latest +RUN apt-get update +RUN apt-get install -yy python3 python3-pip python3-dev fish +RUN pip3 install -U setuptools +RUN ln -s /usr/bin/pip3 /usr/bin/pip +CMD ["/usr/bin/fish"] +'''), + ('thefuck/ubuntu-python2-bash', ''' +FROM ubuntu:latest +RUN apt-get update +RUN apt-get install -yy python python-pip python-dev fish +RUN pip2 install -U pip setuptools +CMD ["/usr/bin/fish"] +''')] + + +@functional +@pytest.mark.parametrize('tag, dockerfile', containers) +def test_with_confirmation(tag, dockerfile): + with spawn(tag, dockerfile) as proc: + proc.sendline('thefuck-alias >> ~/.config/fish/config.fish') + proc.sendline('fish') + with_confirmation(proc) + + +@functional +@pytest.mark.parametrize('tag, dockerfile', containers) +def test_without_confirmation(tag, dockerfile): + with spawn(tag, dockerfile) as proc: + proc.sendline('thefuck-alias >> ~/.config/fish/config.fish') + proc.sendline('mkdir ~/.thefuck') + proc.sendline('echo "require_confirmation = False" >> ~/.thefuck/settings.py') + proc.sendline('fish') + without_confirmation(proc) diff --git a/tests/functional/test_zsh.py b/tests/functional/test_zsh.py index ccbdac64..1913d9e5 100644 --- a/tests/functional/test_zsh.py +++ b/tests/functional/test_zsh.py @@ -1,5 +1,6 @@ import pytest from tests.functional.utils import spawn, functional +from tests.functional.plots import with_confirmation, without_confirmation containers = [('thefuck/ubuntu-python3-zsh', ''' FROM ubuntu:latest @@ -23,17 +24,7 @@ CMD ["/bin/zsh"] def test_with_confirmation(tag, dockerfile): with spawn(tag, dockerfile) as proc: proc.sendline('eval $(thefuck-alias)') - - proc.sendline('ehco test') - proc.expect('command not found') - - proc.sendline('fuck') - proc.expect('echo test') - proc.expect('enter') - proc.expect_exact('ctrl+c') - proc.send('\n') - - proc.expect('test') + with_confirmation(proc) @functional @@ -42,10 +33,4 @@ def test_without_confirmation(tag, dockerfile): with spawn(tag, dockerfile) as proc: proc.sendline('export THEFUCK_REQUIRE_CONFIRMATION=false') proc.sendline('eval $(thefuck-alias)') - - proc.sendline('ehco test') - proc.expect('command not found') - - proc.sendline('fuck') - proc.expect('echo test') - proc.expect('test') + without_confirmation(proc) diff --git a/tests/functional/utils.py b/tests/functional/utils.py index ee930502..f29f5808 100644 --- a/tests/functional/utils.py +++ b/tests/functional/utils.py @@ -1,11 +1,12 @@ import os -import pytest from contextlib import contextmanager -import pexpect import subprocess import shutil from tempfile import mkdtemp from pathlib import Path +import sys +import pexpect +import pytest root = str(Path(__file__).parent.parent.parent.resolve()) @@ -25,6 +26,7 @@ def spawn(tag, dockerfile): build_container(tag, dockerfile) proc = pexpect.spawnu( 'docker run --volume {}:/src --tty=true --interactive=true {}'.format(root, tag)) + proc.logfile = sys.stdout proc.sendline('pip install /src') try: