♻️ refactor(cli): validate startup arguments
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
#!/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,
|
||||
)
|
||||
|
||||
|
||||
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(0, 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])
|
||||
Reference in New Issue
Block a user