Files
tsl-devkit/lsp-server/test/test_cli_startup.py
T
2026-07-14 12:09:50 +08:00

62 lines
2.0 KiB
Python

#!/usr/bin/env python3
import argparse
import subprocess
import tempfile
import unittest
from pathlib import Path
SERVER: Path
def run_server(*arguments: str) -> subprocess.CompletedProcess[bytes]:
return subprocess.run(
[str(SERVER), *arguments],
input=b"",
capture_output=True,
check=False,
timeout=5,
)
class CliStartupTest(unittest.TestCase):
def test_help_uses_real_newlines(self) -> None:
result = run_server("--help")
self.assertEqual(0, result.returncode)
self.assertIn(b"\n\nOptions:\n", result.stdout)
self.assertNotIn(b"\\n", result.stdout)
def test_invalid_threads_return_argument_error(self) -> None:
for argument in ("--threads=", "--threads=-1", "--threads=12junk"):
with self.subTest(argument=argument):
result = run_server(argument)
self.assertEqual(2, result.returncode)
self.assertIn(b"--threads", result.stderr)
self.assertNotIn(b"TSL-LSP server starting", result.stderr)
def test_removed_stdout_flag_is_rejected(self) -> None:
result = run_server("--log-stdout")
self.assertEqual(2, result.returncode)
self.assertEqual(b"", result.stdout)
def test_default_logger_never_writes_stdout(self) -> None:
result = run_server()
self.assertEqual(1, result.returncode)
self.assertEqual(b"", result.stdout)
self.assertIn(b"TSL-LSP server starting", result.stderr)
def test_log_file_failure_is_controlled(self) -> None:
with tempfile.TemporaryDirectory() as temp_dir:
result = run_server(f"--log-file={temp_dir}")
self.assertEqual(1, result.returncode)
self.assertIn(b"Failed to initialize logger", result.stderr)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--server", type=Path, required=True)
args, unittest_args = parser.parse_known_args()
SERVER = args.server.resolve()
unittest.main(argv=[__file__, *unittest_args])