56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
from __future__ import annotations
|
|||
|
|
|
||
|
|
import subprocess
|
||
|
|
import sys
|
||
|
|
import time
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
REPO_ROOT = Path(__file__).resolve().parent.parent
|
||
|
|
DEMO_TUI = REPO_ROOT / "examples" / "demo_tui.py"
|
||
|
|
|
||
|
|
|
||
|
|
def run_cli(*args: str) -> subprocess.CompletedProcess:
|
||
|
|
return subprocess.run(
|
||
|
|
[sys.executable, "-m", "tmux_shot.cli", *args],
|
||
|
|
capture_output=True,
|
||
|
|
text=True,
|
||
|
|
timeout=15,
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
def test_cli_full_lifecycle(session_name: str, out_dir: Path) -> None:
|
||
|
|
try:
|
||
|
|
result = run_cli("new", session_name, "--command", f"python3 {DEMO_TUI}", "--width", "80", "--height", "24")
|
||
|
|
assert result.returncode == 0, result.stderr
|
||
|
|
assert "ready" in result.stdout
|
||
|
|
|
||
|
|
time.sleep(0.3)
|
||
|
|
|
||
|
|
text_result = run_cli("text", session_name)
|
||
|
|
assert text_result.returncode == 0, text_result.stderr
|
||
|
|
assert "tmux-shot demo TUI" in text_result.stdout
|
||
|
|
|
||
|
|
shot_path = out_dir / "cli_shot.png"
|
||
|
|
shot_result = run_cli("shot", session_name, str(shot_path))
|
||
|
|
assert shot_result.returncode == 0, shot_result.stderr
|
||
|
|
assert shot_path.exists()
|
||
|
|
assert shot_path.stat().st_size > 0
|
||
|
|
|
||
|
|
send_result = run_cli("send", session_name, "Down", "--no-enter")
|
||
|
|
assert send_result.returncode == 0, send_result.stderr
|
||
|
|
finally:
|
||
|
|
run_cli("kill", session_name)
|
||
|
|
|
||
|
|
|
||
|
|
def test_cli_gif_command_stitches_frames(out_dir: Path) -> None:
|
||
|
|
from tmux_shot.render import render_ansi_to_png
|
||
|
|
|
||
|
|
frames = [
|
||
|
|
render_ansi_to_png("frame a", out_dir / "a.png", cols=8, rows=1),
|
||
|
|
render_ansi_to_png("frame b", out_dir / "b.png", cols=8, rows=1),
|
||
|
|
]
|
||
|
|
gif_path = out_dir / "movie.gif"
|
||
|
|
result = run_cli("gif", *frames, str(gif_path), "--duration-ms", "150")
|
||
|
|
assert result.returncode == 0, result.stderr
|
||
|
|
assert gif_path.exists()
|