From 2da3d023614d3099aad9ad8010fea3b8ff93891d Mon Sep 17 00:00:00 2001 From: nvbn Date: Sat, 25 Jul 2015 03:01:03 +0300 Subject: [PATCH] Add `BARE` option for running functional tests without docker --- .travis.yml | 12 +++++++++++- tests/functional/plots.py | 9 +++++++++ tests/functional/test_bash.py | 19 ++++++++----------- tests/functional/test_fish.py | 24 ++++++++++-------------- tests/functional/test_tcsh.py | 18 +++++++----------- tests/functional/test_zsh.py | 15 ++++++--------- tests/functional/utils.py | 26 +++++++++++++++++++------- 7 files changed, 70 insertions(+), 53 deletions(-) diff --git a/.travis.yml b/.travis.yml index d82de21e..40703fdd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,16 @@ python: - "3.4" - "3.3" - "2.7" +addons: + apt: + packages: + - bash + - zsh + - fish + - tcsh +env: + - FUNCTIONAL=true + - BARE=true install: - pip install coveralls - pip install -r requirements.txt @@ -10,5 +20,5 @@ install: - rm -rf build script: - export COVERAGE_PYTHON_VERSION=python-${TRAVIS_PYTHON_VERSION:0:1} - - coverage run --source=thefuck,tests -m py.test -v + - coverage run --source=thefuck,tests -m py.test -v --capture=sys after_success: coveralls diff --git a/tests/functional/plots.py b/tests/functional/plots.py index aa5c7f4c..e541426c 100644 --- a/tests/functional/plots.py +++ b/tests/functional/plots.py @@ -1,5 +1,8 @@ def with_confirmation(proc): """Ensures that command can be fixed when confirmation enabled.""" + proc.sendline('mkdir -p ~/.thefuck') + proc.sendline('echo "require_confirmation = True" > ~/.thefuck/settings.py') + proc.sendline('ehco test') proc.sendline('fuck') @@ -13,6 +16,9 @@ def with_confirmation(proc): def refuse_with_confirmation(proc): """Ensures that fix can be refused when confirmation enabled.""" + proc.sendline('mkdir -p ~/.thefuck') + proc.sendline('echo "require_confirmation = True" > ~/.thefuck/settings.py') + proc.sendline('ehco test') proc.sendline('fuck') @@ -26,6 +32,9 @@ def refuse_with_confirmation(proc): def without_confirmation(proc): """Ensures that command can be fixed when confirmation disabled.""" + proc.sendline('mkdir -p ~/.thefuck') + proc.sendline('echo "require_confirmation = False" > ~/.thefuck/settings.py') + proc.sendline('ehco test') proc.sendline('fuck') diff --git a/tests/functional/test_bash.py b/tests/functional/test_bash.py index 5efdee74..deb6f118 100644 --- a/tests/functional/test_bash.py +++ b/tests/functional/test_bash.py @@ -1,29 +1,27 @@ import pytest -from tests.functional.plots import with_confirmation, without_confirmation,\ +from tests.functional.plots import with_confirmation, without_confirmation, \ refuse_with_confirmation -from tests.functional.utils import spawn, functional +from tests.functional.utils import spawn, functional, images -containers = [('ubuntu-python3-bash', ''' +containers = images(('ubuntu-python3-bash', ''' FROM ubuntu:latest RUN apt-get update RUN apt-get install -yy python3 python3-pip python3-dev RUN pip3 install -U setuptools RUN ln -s /usr/bin/pip3 /usr/bin/pip -CMD ["/bin/bash"] '''), - ('ubuntu-python2-bash', ''' + ('ubuntu-python2-bash', ''' FROM ubuntu:latest RUN apt-get update RUN apt-get install -yy python python-pip python-dev RUN pip2 install -U pip setuptools -CMD ["/bin/bash"] -''')] +''')) @functional @pytest.mark.parametrize('tag, dockerfile', containers) def test_with_confirmation(tag, dockerfile): - with spawn(tag, dockerfile) as proc: + with spawn(tag, dockerfile, 'bash') as proc: proc.sendline('eval $(thefuck-alias)') with_confirmation(proc) @@ -31,7 +29,7 @@ def test_with_confirmation(tag, dockerfile): @functional @pytest.mark.parametrize('tag, dockerfile', containers) def test_refuse_with_confirmation(tag, dockerfile): - with spawn(tag, dockerfile) as proc: + with spawn(tag, dockerfile, 'bash') as proc: proc.sendline('eval $(thefuck-alias)') refuse_with_confirmation(proc) @@ -39,7 +37,6 @@ def test_refuse_with_confirmation(tag, dockerfile): @functional @pytest.mark.parametrize('tag, dockerfile', containers) def test_without_confirmation(tag, dockerfile): - with spawn(tag, dockerfile) as proc: - proc.sendline('export THEFUCK_REQUIRE_CONFIRMATION=false') + with spawn(tag, dockerfile, 'bash') as proc: proc.sendline('eval $(thefuck-alias)') without_confirmation(proc) diff --git a/tests/functional/test_fish.py b/tests/functional/test_fish.py index af546bc6..f5faa5fe 100644 --- a/tests/functional/test_fish.py +++ b/tests/functional/test_fish.py @@ -1,30 +1,28 @@ import pytest from tests.functional.plots import with_confirmation, without_confirmation, \ refuse_with_confirmation -from tests.functional.utils import spawn, functional +from tests.functional.utils import spawn, functional, images -containers = [('ubuntu-python3-fish', ''' +containers = images(('ubuntu-python3-fish', ''' 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"] '''), - ('ubuntu-python2-fish', ''' + ('ubuntu-python2-fish', ''' 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') + with spawn(tag, dockerfile, 'fish') as proc: + proc.sendline('thefuck-alias > ~/.config/fish/config.fish') proc.sendline('fish') with_confirmation(proc) @@ -32,8 +30,8 @@ def test_with_confirmation(tag, dockerfile): @functional @pytest.mark.parametrize('tag, dockerfile', containers) def test_refuse_with_confirmation(tag, dockerfile): - with spawn(tag, dockerfile) as proc: - proc.sendline('thefuck-alias >> ~/.config/fish/config.fish') + with spawn(tag, dockerfile, 'fish') as proc: + proc.sendline('thefuck-alias > ~/.config/fish/config.fish') proc.sendline('fish') refuse_with_confirmation(proc) @@ -41,9 +39,7 @@ def test_refuse_with_confirmation(tag, dockerfile): @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') + with spawn(tag, dockerfile, 'fish') as proc: + proc.sendline('thefuck-alias > ~/.config/fish/config.fish') proc.sendline('fish') without_confirmation(proc) diff --git a/tests/functional/test_tcsh.py b/tests/functional/test_tcsh.py index febcfa21..0ad13a2c 100644 --- a/tests/functional/test_tcsh.py +++ b/tests/functional/test_tcsh.py @@ -1,29 +1,27 @@ import pytest -from tests.functional.utils import spawn, functional +from tests.functional.utils import spawn, functional, images from tests.functional.plots import with_confirmation, without_confirmation, \ refuse_with_confirmation -containers = [('ubuntu-python3-tcsh', ''' +containers = images(('ubuntu-python3-tcsh', ''' FROM ubuntu:latest RUN apt-get update RUN apt-get install -yy python3 python3-pip python3-dev tcsh RUN pip3 install -U setuptools RUN ln -s /usr/bin/pip3 /usr/bin/pip -CMD ["/usr/bin/tcsh"] '''), - ('ubuntu-python2-tcsh', ''' + ('ubuntu-python2-tcsh', ''' FROM ubuntu:latest RUN apt-get update RUN apt-get install -yy python python-pip python-dev tcsh RUN pip2 install -U pip setuptools -CMD ["/usr/bin/tcsh"] -''')] +''')) @functional @pytest.mark.parametrize('tag, dockerfile', containers) def test_with_confirmation(tag, dockerfile): - with spawn(tag, dockerfile) as proc: + with spawn(tag, dockerfile, 'tcsh') as proc: proc.sendline('tcsh') proc.sendline('eval `thefuck-alias`') with_confirmation(proc) @@ -32,7 +30,7 @@ def test_with_confirmation(tag, dockerfile): @functional @pytest.mark.parametrize('tag, dockerfile', containers) def test_refuse_with_confirmation(tag, dockerfile): - with spawn(tag, dockerfile) as proc: + with spawn(tag, dockerfile, 'tcsh') as proc: proc.sendline('tcsh') proc.sendline('eval `thefuck-alias`') refuse_with_confirmation(proc) @@ -41,9 +39,7 @@ def test_refuse_with_confirmation(tag, dockerfile): @functional @pytest.mark.parametrize('tag, dockerfile', containers) def test_without_confirmation(tag, dockerfile): - with spawn(tag, dockerfile) as proc: + with spawn(tag, dockerfile, 'tcsh') as proc: proc.sendline('tcsh') - proc.sendline('mkdir ~/.thefuck') - proc.sendline('echo "require_confirmation = False" >> ~/.thefuck/settings.py') proc.sendline('eval `thefuck-alias`') without_confirmation(proc) diff --git a/tests/functional/test_zsh.py b/tests/functional/test_zsh.py index 3fbfce23..71847518 100644 --- a/tests/functional/test_zsh.py +++ b/tests/functional/test_zsh.py @@ -1,29 +1,27 @@ import pytest -from tests.functional.utils import spawn, functional +from tests.functional.utils import spawn, functional, images from tests.functional.plots import with_confirmation, without_confirmation,\ refuse_with_confirmation -containers = [('ubuntu-python3-zsh', ''' +containers = images(('ubuntu-python3-zsh', ''' FROM ubuntu:latest RUN apt-get update RUN apt-get install -yy python3 python3-pip python3-dev zsh RUN pip3 install -U setuptools RUN ln -s /usr/bin/pip3 /usr/bin/pip -CMD ["/bin/zsh"] '''), ('ubuntu-python2-zsh', ''' FROM ubuntu:latest RUN apt-get update RUN apt-get install -yy python python-pip python-dev zsh RUN pip2 install -U pip setuptools -CMD ["/bin/zsh"] -''')] +''')) @functional @pytest.mark.parametrize('tag, dockerfile', containers) def test_with_confirmation(tag, dockerfile): - with spawn(tag, dockerfile) as proc: + with spawn(tag, dockerfile, 'zsh') as proc: proc.sendline('eval $(thefuck-alias)') with_confirmation(proc) @@ -31,7 +29,7 @@ def test_with_confirmation(tag, dockerfile): @functional @pytest.mark.parametrize('tag, dockerfile', containers) def test_refuse_with_confirmation(tag, dockerfile): - with spawn(tag, dockerfile) as proc: + with spawn(tag, dockerfile, 'zsh') as proc: proc.sendline('eval $(thefuck-alias)') refuse_with_confirmation(proc) @@ -39,7 +37,6 @@ def test_refuse_with_confirmation(tag, dockerfile): @functional @pytest.mark.parametrize('tag, dockerfile', containers) def test_without_confirmation(tag, dockerfile): - with spawn(tag, dockerfile) as proc: - proc.sendline('export THEFUCK_REQUIRE_CONFIRMATION=false') + with spawn(tag, dockerfile, 'zsh') as proc: proc.sendline('eval $(thefuck-alias)') without_confirmation(proc) diff --git a/tests/functional/utils.py b/tests/functional/utils.py index 3b4e18c6..e5457f73 100644 --- a/tests/functional/utils.py +++ b/tests/functional/utils.py @@ -9,6 +9,7 @@ import pexpect import pytest root = str(Path(__file__).parent.parent.parent.resolve()) +bare = os.environ.get('BARE') def build_container(tag, dockerfile): @@ -22,18 +23,29 @@ def build_container(tag, dockerfile): @contextmanager -def spawn(tag, dockerfile): - tag = 'thefuck/{}'.format(tag) - build_container(tag, dockerfile) - proc = pexpect.spawnu( - 'docker run --volume {}:/src --tty=true --interactive=true {}'.format(root, tag)) +def spawn(tag, dockerfile, cmd): + if bare: + proc = pexpect.spawnu(cmd) + else: + tag = 'thefuck/{}'.format(tag) + build_container(tag, dockerfile) + proc = pexpect.spawnu('docker run --volume {}:/src --tty=true ' + '--interactive=true {} {}'.format(root, tag, cmd)) + proc.sendline('pip install /src') + proc.logfile = sys.stdout - proc.sendline('pip install /src') try: yield proc finally: - proc.terminate() + proc.terminate(force=bare) + + +def images(*items): + if bare: + return [items[0]] + else: + return items functional = pytest.mark.skipif(