1
0
mirror of https://github.com/nvbn/thefuck.git synced 2025-01-18 12:06:04 +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.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

View File

@ -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')

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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(