#!/usr/bin/env python3 import subprocess import tempfile import unittest 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): def test_euc_jp_conversion_is_stable_and_literal(self): source = (FIXTURES / "source.skk.utf8").read_text(encoding="utf-8") expected = (FIXTURES / "expected.tsv").read_bytes() with tempfile.TemporaryDirectory() as directory: 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, 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, 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, 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, timeout=TIMEOUT) self.assertNotEqual(result.returncode, 0) self.assertIn(b"expression candidates are unsupported", result.stderr) def test_files_have_distinct_row_boundaries(self): with tempfile.TemporaryDirectory() as directory: first = Path(directory) / "first.skk" second = Path(directory) / "second.skk" first.write_bytes(b"a /A/") second.write_bytes(b"b /B/\n") result = subprocess.run( [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") if __name__ == "__main__": unittest.main()