From 79ea90fcb6722a79d52729adbbeec8830714aa5e Mon Sep 17 00:00:00 2001 From: Edbert Chan Date: Sat, 12 Sep 2026 19:57:15 -0700 Subject: [PATCH] test(llm-judge): inbox and post-tool-use tests use the shared test base Replaces their hand-rolled state-folder isolation with JudgeTestCase. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_013smxPCr4XeE7R77zVtN1u4 Change-Id: I10db361f66a5a832388cfddcf3d8d3e25a1dcb8f --- engine/hooks/llm-judge/tests/test_inbox.py | 14 +++++--------- engine/hooks/llm-judge/tests/test_post_tool_use.py | 13 +++++-------- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/engine/hooks/llm-judge/tests/test_inbox.py b/engine/hooks/llm-judge/tests/test_inbox.py index b142bdcb..4a942ef2 100644 --- a/engine/hooks/llm-judge/tests/test_inbox.py +++ b/engine/hooks/llm-judge/tests/test_inbox.py @@ -17,6 +17,7 @@ import cursor_session # noqa: E402 import inbox # noqa: E402 import judge # noqa: E402 +from judge_test_base import JudgeTestCase # noqa: E402 PY = sys.executable ON_HIT = "demo-hook: the last reply took back an earlier check; run reflect on it" @@ -26,25 +27,20 @@ MISSING = ["ghost", ["catstack-llm-judge-no-such-binary", "{prompt}"]] -class InboxTestCase(unittest.TestCase): +class InboxTestCase(JudgeTestCase): def setUp(self): - self.state = tempfile.TemporaryDirectory() + super().setUp() self.work = tempfile.TemporaryDirectory() - self.env = patch.dict(os.environ, {judge.STATE_ENV: self.state.name}) - self.env.start() - os.environ.pop(judge.CHILD_ENV, None) - os.environ.pop(judge.RUNNERS_ENV, None) self.transcript = os.path.join(self.work.name, "session.jsonl") with open(self.transcript, "w", encoding="utf-8") as handle: handle.write("{}\n") def tearDown(self): - self.env.stop() - self.state.cleanup() self.work.cleanup() + super().tearDown() def seed(self, *runner_entries, job_id="job-1"): - os.environ[judge.RUNNERS_ENV] = json.dumps(list(runner_entries)) + self.use_runners(*runner_entries) job_path = os.path.join(self.state.name, "jobs", f"{job_id}.json") judge.write_json_atomic(job_path, { "id": job_id, diff --git a/engine/hooks/llm-judge/tests/test_post_tool_use.py b/engine/hooks/llm-judge/tests/test_post_tool_use.py index a6a5b9eb..f02ed9e7 100644 --- a/engine/hooks/llm-judge/tests/test_post_tool_use.py +++ b/engine/hooks/llm-judge/tests/test_post_tool_use.py @@ -7,32 +7,29 @@ import sys import tempfile import unittest -from unittest.mock import patch LIB_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, LIB_DIR) import judge +from judge_test_base import JudgeTestCase PY = sys.executable ON_HIT = "judge hit text" -class PostToolUseTestCase(unittest.TestCase): +class PostToolUseTestCase(JudgeTestCase): def setUp(self): - self.state = tempfile.TemporaryDirectory() + super().setUp() self.work = tempfile.TemporaryDirectory() - self.patch_env = patch.dict(os.environ, {judge.STATE_ENV: self.state.name}) - self.patch_env.start() self.transcript = os.path.join(self.work.name, "session.jsonl") with open(self.transcript, "w", encoding="utf-8") as handle: handle.write("{}\n") - self.env = dict(os.environ, **{judge.STATE_ENV: self.state.name}) + self.env = dict(os.environ) def tearDown(self): - self.patch_env.stop() - self.state.cleanup() self.work.cleanup() + super().tearDown() def plant_hit(self): judge.write_json_atomic(os.path.join(judge.verdict_dir(self.transcript), "hit.json"), {