#!/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])