From 46c8ccd7792b76b6be02c0d1b9c76eedf9626b66 Mon Sep 17 00:00:00 2001 From: Hojun-Cho Date: Fri, 14 Aug 2026 02:50:58 +0900 Subject: [PATCH] tests: bound generator subprocesses --- tests/mkemoji_test.py | 5 ++++- tests/mkhanja_test.py | 2 ++ tests/skk2ktrans_test.py | 16 +++++++++++----- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/tests/mkemoji_test.py b/tests/mkemoji_test.py index 852287e..de79d83 100644 --- a/tests/mkemoji_test.py +++ b/tests/mkemoji_test.py @@ -9,13 +9,16 @@ from pathlib import Path ROOT = Path(__file__).resolve().parents[1] MKEMOJI = ROOT / "map" / "mkemoji" +TIMEOUT = 10 def generate(source=None): args = [sys.executable, "-B", str(MKEMOJI)] if source is not None: args.append(str(source)) - return subprocess.run(args, capture_output=True, text=True, check=False) + return subprocess.run( + args, capture_output=True, text=True, check=False, timeout=TIMEOUT + ) def table(output): diff --git a/tests/mkhanja_test.py b/tests/mkhanja_test.py index c1c06ee..afe7ad8 100644 --- a/tests/mkhanja_test.py +++ b/tests/mkhanja_test.py @@ -11,6 +11,7 @@ from pathlib import Path ROOT = Path(__file__).resolve().parents[1] IMPORT = ROOT / "map" / "libhangul2hanja" GENERATE = ROOT / "map" / "mkhanja" +TIMEOUT = 10 def run(program, source=None, stdin=None, hostile=False): @@ -29,6 +30,7 @@ def run(program, source=None, stdin=None, hostile=False): encoding="utf-8", env=env, check=False, + timeout=TIMEOUT, ) diff --git a/tests/skk2ktrans_test.py b/tests/skk2ktrans_test.py index 100cc04..d0811ea 100755 --- a/tests/skk2ktrans_test.py +++ b/tests/skk2ktrans_test.py @@ -9,6 +9,7 @@ from pathlib import Path ROOT = Path(__file__).resolve().parents[1] CONVERTER = ROOT / "map" / "skk2ktrans" FIXTURES = Path(__file__).parent / "data" / "skk" +TIMEOUT = 10 class Skk2KtransTest(unittest.TestCase): @@ -19,27 +20,31 @@ class Skk2KtransTest(unittest.TestCase): input_path = Path(directory) / "source.skk" input_path.write_bytes(source.encode("euc_jp")) result = subprocess.run( - [CONVERTER, input_path], capture_output=True, check=False) + [CONVERTER, input_path], capture_output=True, check=False, + timeout=TIMEOUT) self.assertEqual(result.returncode, 0, result.stderr.decode()) self.assertEqual(result.stdout, expected) def test_invalid_euc_jp_is_rejected(self): result = subprocess.run( - [CONVERTER], input=b"\xff\xff\n", capture_output=True, check=False) + [CONVERTER], input=b"\xff\xff\n", capture_output=True, check=False, + timeout=TIMEOUT) self.assertNotEqual(result.returncode, 0) self.assertTrue(result.stderr) def test_escaped_candidate_is_rejected(self): source = b"key /escaped\\/slash/\n" result = subprocess.run( - [CONVERTER], input=source, capture_output=True, check=False) + [CONVERTER], input=source, capture_output=True, check=False, + timeout=TIMEOUT) self.assertNotEqual(result.returncode, 0) self.assertIn(b"escaped candidates are unsupported", result.stderr) def test_expression_candidate_is_rejected(self): source = b'key /(concat "a/b")/literal/\n' result = subprocess.run( - [CONVERTER], input=source, capture_output=True, check=False) + [CONVERTER], input=source, capture_output=True, check=False, + timeout=TIMEOUT) self.assertNotEqual(result.returncode, 0) self.assertIn(b"expression candidates are unsupported", result.stderr) @@ -50,7 +55,8 @@ class Skk2KtransTest(unittest.TestCase): first.write_bytes(b"a /A/") second.write_bytes(b"b /B/\n") result = subprocess.run( - [CONVERTER, first, second], capture_output=True, check=False) + [CONVERTER, first, second], capture_output=True, check=False, + timeout=TIMEOUT) self.assertEqual(result.returncode, 0, result.stderr.decode()) self.assertEqual(result.stdout, b"a\tA\nb\tB\n")