1
0
mirror of https://github.com/nvbn/thefuck.git synced 2025-01-31 02:01:13 +00:00

Add BARE option for running functional tests without docker

This commit is contained in:
nvbn 2015-07-25 03:01:03 +03:00
parent d7c8a43bbb
commit 2da3d02361
7 changed files with 70 additions and 53 deletions

View File

@ -3,6 +3,16 @@ python:
- "3.4" - "3.4"
- "3.3" - "3.3"
- "2.7" - "2.7"
addons:
apt:
packages:
- bash
- zsh
- fish
- tcsh
env:
- FUNCTIONAL=true
- BARE=true
install: install:
- pip install coveralls - pip install coveralls
- pip install -r requirements.txt - pip install -r requirements.txt
@ -10,5 +20,5 @@ install:
- rm -rf build - rm -rf build
script: script:
- export COVERAGE_PYTHON_VERSION=python-${TRAVIS_PYTHON_VERSION:0:1} - 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 after_success: coveralls

View File

@ -1,5 +1,8 @@
def with_confirmation(proc): def with_confirmation(proc):
"""Ensures that command can be fixed when confirmation enabled.""" """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('ehco test')
proc.sendline('fuck') proc.sendline('fuck')
@ -13,6 +16,9 @@ def with_confirmation(proc):
def refuse_with_confirmation(proc): def refuse_with_confirmation(proc):
"""Ensures that fix can be refused when confirmation enabled.""" """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('ehco test')
proc.sendline('fuck') proc.sendline('fuck')
@ -26,6 +32,9 @@ def refuse_with_confirmation(proc):
def without_confirmation(proc): def without_confirmation(proc):
"""Ensures that command can be fixed when confirmation disabled.""" """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('ehco test')
proc.sendline('fuck') proc.sendline('fuck')

View File

@ -1,29 +1,27 @@
import pytest import pytest
from tests.functional.plots import with_confirmation, without_confirmation,\ from tests.functional.plots import with_confirmation, without_confirmation, \
refuse_with_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 FROM ubuntu:latest
RUN apt-get update RUN apt-get update
RUN apt-get install -yy python3 python3-pip python3-dev RUN apt-get install -yy python3 python3-pip python3-dev
RUN pip3 install -U setuptools RUN pip3 install -U setuptools
RUN ln -s /usr/bin/pip3 /usr/bin/pip RUN ln -s /usr/bin/pip3 /usr/bin/pip
CMD ["/bin/bash"]
'''), '''),
('ubuntu-python2-bash', ''' ('ubuntu-python2-bash', '''
FROM ubuntu:latest FROM ubuntu:latest
RUN apt-get update RUN apt-get update
RUN apt-get install -yy python python-pip python-dev RUN apt-get install -yy python python-pip python-dev
RUN pip2 install -U pip setuptools RUN pip2 install -U pip setuptools
CMD ["/bin/bash"] '''))
''')]
@functional @functional
@pytest.mark.parametrize('tag, dockerfile', containers) @pytest.mark.parametrize('tag, dockerfile', containers)
def test_with_confirmation(tag, dockerfile): def test_with_confirmation(tag, dockerfile):
with spawn(tag, dockerfile) as proc: with spawn(tag, dockerfile, 'bash') as proc:
proc.sendline('eval $(thefuck-alias)') proc.sendline('eval $(thefuck-alias)')
with_confirmation(proc) with_confirmation(proc)
@ -31,7 +29,7 @@ def test_with_confirmation(tag, dockerfile):
@functional @functional
@pytest.mark.parametrize('tag, dockerfile', containers) @pytest.mark.parametrize('tag, dockerfile', containers)
def test_refuse_with_confirmation(tag, dockerfile): 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)') proc.sendline('eval $(thefuck-alias)')
refuse_with_confirmation(proc) refuse_with_confirmation(proc)
@ -39,7 +37,6 @@ def test_refuse_with_confirmation(tag, dockerfile):
@functional @functional
@pytest.mark.parametrize('tag, dockerfile', containers) @pytest.mark.parametrize('tag, dockerfile', containers)
def test_without_confirmation(tag, dockerfile): def test_without_confirmation(tag, dockerfile):
with spawn(tag, dockerfile) as proc: with spawn(tag, dockerfile, 'bash') as proc:
proc.sendline('export THEFUCK_REQUIRE_CONFIRMATION=false')
proc.sendline('eval $(thefuck-alias)') proc.sendline('eval $(thefuck-alias)')
without_confirmation(proc) without_confirmation(proc)

View File

@ -1,30 +1,28 @@
import pytest import pytest
from tests.functional.plots import with_confirmation, without_confirmation, \ from tests.functional.plots import with_confirmation, without_confirmation, \
refuse_with_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 FROM ubuntu:latest
RUN apt-get update RUN apt-get update
RUN apt-get install -yy python3 python3-pip python3-dev fish RUN apt-get install -yy python3 python3-pip python3-dev fish
RUN pip3 install -U setuptools RUN pip3 install -U setuptools
RUN ln -s /usr/bin/pip3 /usr/bin/pip RUN ln -s /usr/bin/pip3 /usr/bin/pip
CMD ["/usr/bin/fish"]
'''), '''),
('ubuntu-python2-fish', ''' ('ubuntu-python2-fish', '''
FROM ubuntu:latest FROM ubuntu:latest
RUN apt-get update RUN apt-get update
RUN apt-get install -yy python python-pip python-dev fish RUN apt-get install -yy python python-pip python-dev fish
RUN pip2 install -U pip setuptools RUN pip2 install -U pip setuptools
CMD ["/usr/bin/fish"] '''))
''')]
@functional @functional
@pytest.mark.parametrize('tag, dockerfile', containers) @pytest.mark.parametrize('tag, dockerfile', containers)
def test_with_confirmation(tag, dockerfile): def test_with_confirmation(tag, dockerfile):
with spawn(tag, dockerfile) as proc: with spawn(tag, dockerfile, 'fish') as proc:
proc.sendline('thefuck-alias >> ~/.config/fish/config.fish') proc.sendline('thefuck-alias > ~/.config/fish/config.fish')
proc.sendline('fish') proc.sendline('fish')
with_confirmation(proc) with_confirmation(proc)
@ -32,8 +30,8 @@ def test_with_confirmation(tag, dockerfile):
@functional @functional
@pytest.mark.parametrize('tag, dockerfile', containers) @pytest.mark.parametrize('tag, dockerfile', containers)
def test_refuse_with_confirmation(tag, dockerfile): def test_refuse_with_confirmation(tag, dockerfile):
with spawn(tag, dockerfile) as proc: with spawn(tag, dockerfile, 'fish') as proc:
proc.sendline('thefuck-alias >> ~/.config/fish/config.fish') proc.sendline('thefuck-alias > ~/.config/fish/config.fish')
proc.sendline('fish') proc.sendline('fish')
refuse_with_confirmation(proc) refuse_with_confirmation(proc)
@ -41,9 +39,7 @@ def test_refuse_with_confirmation(tag, dockerfile):
@functional @functional
@pytest.mark.parametrize('tag, dockerfile', containers) @pytest.mark.parametrize('tag, dockerfile', containers)
def test_without_confirmation(tag, dockerfile): def test_without_confirmation(tag, dockerfile):
with spawn(tag, dockerfile) as proc: with spawn(tag, dockerfile, 'fish') as proc:
proc.sendline('thefuck-alias >> ~/.config/fish/config.fish') proc.sendline('thefuck-alias > ~/.config/fish/config.fish')
proc.sendline('mkdir ~/.thefuck')
proc.sendline('echo "require_confirmation = False" >> ~/.thefuck/settings.py')
proc.sendline('fish') proc.sendline('fish')
without_confirmation(proc) without_confirmation(proc)

View File

@ -1,29 +1,27 @@
import pytest 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, \ from tests.functional.plots import with_confirmation, without_confirmation, \
refuse_with_confirmation refuse_with_confirmation
containers = [('ubuntu-python3-tcsh', ''' containers = images(('ubuntu-python3-tcsh', '''
FROM ubuntu:latest FROM ubuntu:latest
RUN apt-get update RUN apt-get update
RUN apt-get install -yy python3 python3-pip python3-dev tcsh RUN apt-get install -yy python3 python3-pip python3-dev tcsh
RUN pip3 install -U setuptools RUN pip3 install -U setuptools
RUN ln -s /usr/bin/pip3 /usr/bin/pip RUN ln -s /usr/bin/pip3 /usr/bin/pip
CMD ["/usr/bin/tcsh"]
'''), '''),
('ubuntu-python2-tcsh', ''' ('ubuntu-python2-tcsh', '''
FROM ubuntu:latest FROM ubuntu:latest
RUN apt-get update RUN apt-get update
RUN apt-get install -yy python python-pip python-dev tcsh RUN apt-get install -yy python python-pip python-dev tcsh
RUN pip2 install -U pip setuptools RUN pip2 install -U pip setuptools
CMD ["/usr/bin/tcsh"] '''))
''')]
@functional @functional
@pytest.mark.parametrize('tag, dockerfile', containers) @pytest.mark.parametrize('tag, dockerfile', containers)
def test_with_confirmation(tag, dockerfile): def test_with_confirmation(tag, dockerfile):
with spawn(tag, dockerfile) as proc: with spawn(tag, dockerfile, 'tcsh') as proc:
proc.sendline('tcsh') proc.sendline('tcsh')
proc.sendline('eval `thefuck-alias`') proc.sendline('eval `thefuck-alias`')
with_confirmation(proc) with_confirmation(proc)
@ -32,7 +30,7 @@ def test_with_confirmation(tag, dockerfile):
@functional @functional
@pytest.mark.parametrize('tag, dockerfile', containers) @pytest.mark.parametrize('tag, dockerfile', containers)
def test_refuse_with_confirmation(tag, dockerfile): 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('tcsh')
proc.sendline('eval `thefuck-alias`') proc.sendline('eval `thefuck-alias`')
refuse_with_confirmation(proc) refuse_with_confirmation(proc)
@ -41,9 +39,7 @@ def test_refuse_with_confirmation(tag, dockerfile):
@functional @functional
@pytest.mark.parametrize('tag, dockerfile', containers) @pytest.mark.parametrize('tag, dockerfile', containers)
def test_without_confirmation(tag, dockerfile): def test_without_confirmation(tag, dockerfile):
with spawn(tag, dockerfile) as proc: with spawn(tag, dockerfile, 'tcsh') as proc:
proc.sendline('tcsh') proc.sendline('tcsh')
proc.sendline('mkdir ~/.thefuck')
proc.sendline('echo "require_confirmation = False" >> ~/.thefuck/settings.py')
proc.sendline('eval `thefuck-alias`') proc.sendline('eval `thefuck-alias`')
without_confirmation(proc) without_confirmation(proc)

View File

@ -1,29 +1,27 @@
import pytest 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,\ from tests.functional.plots import with_confirmation, without_confirmation,\
refuse_with_confirmation refuse_with_confirmation
containers = [('ubuntu-python3-zsh', ''' containers = images(('ubuntu-python3-zsh', '''
FROM ubuntu:latest FROM ubuntu:latest
RUN apt-get update RUN apt-get update
RUN apt-get install -yy python3 python3-pip python3-dev zsh RUN apt-get install -yy python3 python3-pip python3-dev zsh
RUN pip3 install -U setuptools RUN pip3 install -U setuptools
RUN ln -s /usr/bin/pip3 /usr/bin/pip RUN ln -s /usr/bin/pip3 /usr/bin/pip
CMD ["/bin/zsh"]
'''), '''),
('ubuntu-python2-zsh', ''' ('ubuntu-python2-zsh', '''
FROM ubuntu:latest FROM ubuntu:latest
RUN apt-get update RUN apt-get update
RUN apt-get install -yy python python-pip python-dev zsh RUN apt-get install -yy python python-pip python-dev zsh
RUN pip2 install -U pip setuptools RUN pip2 install -U pip setuptools
CMD ["/bin/zsh"] '''))
''')]
@functional @functional
@pytest.mark.parametrize('tag, dockerfile', containers) @pytest.mark.parametrize('tag, dockerfile', containers)
def test_with_confirmation(tag, dockerfile): def test_with_confirmation(tag, dockerfile):
with spawn(tag, dockerfile) as proc: with spawn(tag, dockerfile, 'zsh') as proc:
proc.sendline('eval $(thefuck-alias)') proc.sendline('eval $(thefuck-alias)')
with_confirmation(proc) with_confirmation(proc)
@ -31,7 +29,7 @@ def test_with_confirmation(tag, dockerfile):
@functional @functional
@pytest.mark.parametrize('tag, dockerfile', containers) @pytest.mark.parametrize('tag, dockerfile', containers)
def test_refuse_with_confirmation(tag, dockerfile): 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)') proc.sendline('eval $(thefuck-alias)')
refuse_with_confirmation(proc) refuse_with_confirmation(proc)
@ -39,7 +37,6 @@ def test_refuse_with_confirmation(tag, dockerfile):
@functional @functional
@pytest.mark.parametrize('tag, dockerfile', containers) @pytest.mark.parametrize('tag, dockerfile', containers)
def test_without_confirmation(tag, dockerfile): def test_without_confirmation(tag, dockerfile):
with spawn(tag, dockerfile) as proc: with spawn(tag, dockerfile, 'zsh') as proc:
proc.sendline('export THEFUCK_REQUIRE_CONFIRMATION=false')
proc.sendline('eval $(thefuck-alias)') proc.sendline('eval $(thefuck-alias)')
without_confirmation(proc) without_confirmation(proc)

View File

@ -9,6 +9,7 @@ import pexpect
import pytest import pytest
root = str(Path(__file__).parent.parent.parent.resolve()) root = str(Path(__file__).parent.parent.parent.resolve())
bare = os.environ.get('BARE')
def build_container(tag, dockerfile): def build_container(tag, dockerfile):
@ -22,18 +23,29 @@ def build_container(tag, dockerfile):
@contextmanager @contextmanager
def spawn(tag, dockerfile): def spawn(tag, dockerfile, cmd):
tag = 'thefuck/{}'.format(tag) if bare:
build_container(tag, dockerfile) proc = pexpect.spawnu(cmd)
proc = pexpect.spawnu( else:
'docker run --volume {}:/src --tty=true --interactive=true {}'.format(root, tag)) 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.logfile = sys.stdout
proc.sendline('pip install /src')
try: try:
yield proc yield proc
finally: finally:
proc.terminate() proc.terminate(force=bare)
def images(*items):
if bare:
return [items[0]]
else:
return items
functional = pytest.mark.skipif( functional = pytest.mark.skipif(