From 7823b9b39c486aedf830783329abdc3bd9664ba4 Mon Sep 17 00:00:00 2001 From: Jeffery To Date: Thu, 9 Nov 2023 17:51:21 +0800 Subject: [PATCH 2/2] Add support for ash (Almquist shell) --- tests/docker/debian | 2 +- tests/test_ash.py | 65 +++++++++++++++++++++++++++++++++++++++++++++ userpath/shells.py | 5 ++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 tests/test_ash.py --- a/tests/docker/debian +++ b/tests/docker/debian @@ -2,7 +2,7 @@ ARG PYTHON_VERSION FROM python:${PYTHON_VERSION} RUN apt-get update \ - && apt-get --no-install-recommends -y install fish zsh + && apt-get --no-install-recommends -y install ash fish zsh COPY requirements.txt / RUN pip install -r requirements.txt --- /dev/null +++ b/tests/test_ash.py @@ -0,0 +1,65 @@ +import pytest +import userpath + +from .utils import SKIP_WINDOWS_CI, get_random_path + +SHELL_NAME = 'ash' + +pytestmark = [SKIP_WINDOWS_CI, pytest.mark.ash] + + +@pytest.mark.usefixtures('shell_test') +class TestDebian(object): + DOCKERFILE = 'debian' + + def test_prepend(self, request, shell_test): + if shell_test is None: + location = get_random_path() + assert not userpath.in_current_path(location) + assert userpath.prepend(location, check=True) + assert userpath.in_new_path(location) + assert userpath.need_shell_restart(location) + else: + process = shell_test(request.node.name) + stdout, stderr = process.communicate() + + assert process.returncode == 0, (stdout + stderr).decode('utf-8') + + def test_prepend_multiple(self, request, shell_test): + if shell_test is None: + locations = [get_random_path(), get_random_path()] + assert not userpath.in_current_path(locations) + assert userpath.prepend(locations, check=True) + assert userpath.in_new_path(locations) + assert userpath.need_shell_restart(locations) + else: + process = shell_test(request.node.name) + stdout, stderr = process.communicate() + + assert process.returncode == 0, (stdout + stderr).decode('utf-8') + + def test_append(self, request, shell_test): + if shell_test is None: + location = get_random_path() + assert not userpath.in_current_path(location) + assert userpath.append(location, check=True) + assert userpath.in_new_path(location) + assert userpath.need_shell_restart(location) + else: + process = shell_test(request.node.name) + stdout, stderr = process.communicate() + + assert process.returncode == 0, (stdout + stderr).decode('utf-8') + + def test_append_multiple(self, request, shell_test): + if shell_test is None: + locations = [get_random_path(), get_random_path()] + assert not userpath.in_current_path(locations) + assert userpath.append(locations, check=True) + assert userpath.in_new_path(locations) + assert userpath.need_shell_restart(locations) + else: + process = shell_test(request.node.name) + stdout, stderr = process.communicate() + + assert process.returncode == 0, (stdout + stderr).decode('utf-8') --- a/userpath/shells.py +++ b/userpath/shells.py @@ -37,6 +37,10 @@ class Sh(Shell): return [cls._interactive_login_show_path_command()] +class Ash(Sh): + name = 'ash' + + class Bash(Sh): name = 'bash' @@ -114,6 +118,7 @@ class Zsh(Sh): SHELLS = { + 'ash': Ash, 'bash': Bash, 'fish': Fish, 'sh': Sh,