62 lines
2.0 KiB
Python
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])
|