tests: bound generator subprocesses

This commit is contained in:
2026-08-14 02:50:58 +09:00
parent d7115c5eb5
commit 46c8ccd779
3 changed files with 17 additions and 6 deletions

View File

@@ -9,13 +9,16 @@ from pathlib import Path
ROOT = Path(__file__).resolve().parents[1] ROOT = Path(__file__).resolve().parents[1]
MKEMOJI = ROOT / "map" / "mkemoji" MKEMOJI = ROOT / "map" / "mkemoji"
TIMEOUT = 10
def generate(source=None): def generate(source=None):
args = [sys.executable, "-B", str(MKEMOJI)] args = [sys.executable, "-B", str(MKEMOJI)]
if source is not None: if source is not None:
args.append(str(source)) 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): def table(output):

View File

@@ -11,6 +11,7 @@ from pathlib import Path
ROOT = Path(__file__).resolve().parents[1] ROOT = Path(__file__).resolve().parents[1]
IMPORT = ROOT / "map" / "libhangul2hanja" IMPORT = ROOT / "map" / "libhangul2hanja"
GENERATE = ROOT / "map" / "mkhanja" GENERATE = ROOT / "map" / "mkhanja"
TIMEOUT = 10
def run(program, source=None, stdin=None, hostile=False): 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", encoding="utf-8",
env=env, env=env,
check=False, check=False,
timeout=TIMEOUT,
) )

View File

@@ -9,6 +9,7 @@ from pathlib import Path
ROOT = Path(__file__).resolve().parents[1] ROOT = Path(__file__).resolve().parents[1]
CONVERTER = ROOT / "map" / "skk2ktrans" CONVERTER = ROOT / "map" / "skk2ktrans"
FIXTURES = Path(__file__).parent / "data" / "skk" FIXTURES = Path(__file__).parent / "data" / "skk"
TIMEOUT = 10
class Skk2KtransTest(unittest.TestCase): class Skk2KtransTest(unittest.TestCase):
@@ -19,27 +20,31 @@ class Skk2KtransTest(unittest.TestCase):
input_path = Path(directory) / "source.skk" input_path = Path(directory) / "source.skk"
input_path.write_bytes(source.encode("euc_jp")) input_path.write_bytes(source.encode("euc_jp"))
result = subprocess.run( 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.returncode, 0, result.stderr.decode())
self.assertEqual(result.stdout, expected) self.assertEqual(result.stdout, expected)
def test_invalid_euc_jp_is_rejected(self): def test_invalid_euc_jp_is_rejected(self):
result = subprocess.run( 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.assertNotEqual(result.returncode, 0)
self.assertTrue(result.stderr) self.assertTrue(result.stderr)
def test_escaped_candidate_is_rejected(self): def test_escaped_candidate_is_rejected(self):
source = b"key /escaped\\/slash/\n" source = b"key /escaped\\/slash/\n"
result = subprocess.run( 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.assertNotEqual(result.returncode, 0)
self.assertIn(b"escaped candidates are unsupported", result.stderr) self.assertIn(b"escaped candidates are unsupported", result.stderr)
def test_expression_candidate_is_rejected(self): def test_expression_candidate_is_rejected(self):
source = b'key /(concat "a/b")/literal/\n' source = b'key /(concat "a/b")/literal/\n'
result = subprocess.run( 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.assertNotEqual(result.returncode, 0)
self.assertIn(b"expression candidates are unsupported", result.stderr) self.assertIn(b"expression candidates are unsupported", result.stderr)
@@ -50,7 +55,8 @@ class Skk2KtransTest(unittest.TestCase):
first.write_bytes(b"a /A/") first.write_bytes(b"a /A/")
second.write_bytes(b"b /B/\n") second.write_bytes(b"b /B/\n")
result = subprocess.run( 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.returncode, 0, result.stderr.decode())
self.assertEqual(result.stdout, b"a\tA\nb\tB\n") self.assertEqual(result.stdout, b"a\tA\nb\tB\n")