mirror of
https://github.com/beetbox/beets.git
synced 2025-12-06 16:42:42 +01:00
Moved tests related to ui into own folder. Moved 'modify' command tests into own file. Moved 'write' command tests into own file. Moved 'fields' command tests into own file. Moved 'do_query' test into own file. Moved 'list' command tests into own file. Moved 'remove' command tests into own file. Moved 'move' command tests into own file. Moved 'update' command tests into own file. Moved 'show_change' test into test_import file. Moved 'summarize_items' test into test_import file. Moved 'completion' command test into own file.
64 lines
2.3 KiB
Python
64 lines
2.3 KiB
Python
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
import pytest
|
|
|
|
from beets.test import _common
|
|
from beets.test.helper import IOMixin, has_program
|
|
from beets.ui.commands.completion import BASH_COMPLETION_PATHS
|
|
from beets.util import syspath
|
|
|
|
from ..test_ui import TestPluginTestCase
|
|
|
|
|
|
@_common.slow_test()
|
|
@pytest.mark.xfail(
|
|
os.environ.get("GITHUB_ACTIONS") == "true" and sys.platform == "linux",
|
|
reason="Completion is for some reason unhappy on Ubuntu 24.04 in CI",
|
|
)
|
|
class CompletionTest(IOMixin, TestPluginTestCase):
|
|
def test_completion(self):
|
|
# Do not load any other bash completion scripts on the system.
|
|
env = dict(os.environ)
|
|
env["BASH_COMPLETION_DIR"] = os.devnull
|
|
env["BASH_COMPLETION_COMPAT_DIR"] = os.devnull
|
|
|
|
# Open a `bash` process to run the tests in. We'll pipe in bash
|
|
# commands via stdin.
|
|
cmd = os.environ.get("BEETS_TEST_SHELL", "/bin/bash --norc").split()
|
|
if not has_program(cmd[0]):
|
|
self.skipTest("bash not available")
|
|
tester = subprocess.Popen(
|
|
cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, env=env
|
|
)
|
|
|
|
# Load bash_completion library.
|
|
for path in BASH_COMPLETION_PATHS:
|
|
if os.path.exists(syspath(path)):
|
|
bash_completion = path
|
|
break
|
|
else:
|
|
self.skipTest("bash-completion script not found")
|
|
try:
|
|
with open(syspath(bash_completion), "rb") as f:
|
|
tester.stdin.writelines(f)
|
|
except OSError:
|
|
self.skipTest("could not read bash-completion script")
|
|
|
|
# Load completion script.
|
|
self.run_command("completion", lib=None)
|
|
completion_script = self.io.getoutput().encode("utf-8")
|
|
self.io.restore()
|
|
tester.stdin.writelines(completion_script.splitlines(True))
|
|
|
|
# Load test suite.
|
|
test_script_name = os.path.join(_common.RSRC, b"test_completion.sh")
|
|
with open(test_script_name, "rb") as test_script_file:
|
|
tester.stdin.writelines(test_script_file)
|
|
out, err = tester.communicate()
|
|
assert tester.returncode == 0
|
|
assert out == b"completion tests passed\n", (
|
|
"test/test_completion.sh did not execute properly. "
|
|
f"Output:{out.decode('utf-8')}"
|
|
)
|