Files
superpowers/evals/tests/test_session.py
Jesse Vincent 3c046f579e Lift drill into evals/ at 013fcb8b7dbefd6d3fa4653493e5d2ec8e7f985b
rsync of obra/drill@013fcb8b7d into superpowers/evals/, excluding
.git/, .venv/, results/, .env/, __pycache__/, *.egg-info/,
.private-journal/.

The drill repo is unaffected by this commit; archival is a separate
manual step after this PR merges.

Source SHA recorded at evals/.drill-source-sha for divergence
detection.
2026-05-06 12:15:46 -07:00

95 lines
3.0 KiB
Python

import subprocess
import time
from unittest.mock import call, patch
from drill.session import TmuxSession
class TestTmuxSession:
def test_create_and_kill(self):
session = TmuxSession(name="drill-test-create", cols=80, rows=24)
session.create()
result = subprocess.run(
["tmux", "has-session", "-t", "drill-test-create"],
capture_output=True,
)
assert result.returncode == 0
session.kill()
result = subprocess.run(
["tmux", "has-session", "-t", "drill-test-create"],
capture_output=True,
)
assert result.returncode != 0
def test_send_keys_and_capture(self):
session = TmuxSession(name="drill-test-keys", cols=80, rows=24)
session.create()
try:
session.send_keys("echo hello-drill-test")
time.sleep(0.5)
output = session.capture()
assert "hello-drill-test" in output
finally:
session.kill()
def test_send_keys_pastes_text_then_submits(self):
session = TmuxSession(name="drill-test-command-shape")
with (
patch("drill.session.subprocess.run") as run,
patch("drill.session.time.sleep") as sleep,
):
session.send_keys("hello `weird` text")
assert run.call_args_list == [
call(
[
"tmux",
"set-buffer",
"-b",
"drill-test-command-shape-input",
"hello `weird` text",
],
check=True,
),
call(
[
"tmux",
"paste-buffer",
"-d",
"-b",
"drill-test-command-shape-input",
"-t",
"drill-test-command-shape",
],
check=True,
),
call(["tmux", "send-keys", "-t", "drill-test-command-shape", "Enter"], check=True),
]
sleep.assert_called_once_with(0.1)
def test_launch_command(self, tmp_path):
session = TmuxSession(name="drill-test-launch", cols=80, rows=24)
session.create()
try:
session.launch(["python3", "-c", "import time; time.sleep(30)"], cwd=str(tmp_path))
time.sleep(0.5)
assert session.is_process_alive()
finally:
session.kill()
def test_send_special_key(self, tmp_path):
session = TmuxSession(name="drill-test-special", cols=80, rows=24)
proof_file = tmp_path / "after-ctrl-c"
session.create()
try:
session.send_keys("cat")
time.sleep(0.3)
session.send_special_key("ctrl-c")
time.sleep(0.3)
session.send_keys(f"touch {proof_file}")
time.sleep(0.3)
assert proof_file.exists()
finally:
session.kill()