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:
parent
d7c8a43bbb
commit
2da3d02361
12
.travis.yml
12
.travis.yml
@ -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
|
||||||
|
@ -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')
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user