Files
adolf/tests/use_cases/test_cli_startup.py
Alvis a35ba83db7 Add use_cases test category with CLI startup test
tests/use_cases/ holds scenario-driven tests run by the Claude Code agent,
which acts as both the test runner and mock user. Each test prints a
structured transcript; Claude evaluates correctness.

First test: test_cli_startup.py — spawns cli.py with a subprocess, reads
the welcome banner, sends EOF, and verifies exit code 0.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 16:10:04 +00:00

47 lines
1.1 KiB
Python

#!/usr/bin/env python3
"""
Use case: CLI startup and clean exit.
Starts the Adolf CLI, reads its welcome banner, then closes it by sending
EOF (simulating Ctrl+D). Prints a structured transcript for the Claude Code
agent to evaluate.
Expected:
- Banner line contains "Adolf CLI"
- Prompt "> " appears
- Process exits with code 0 after EOF
"""
import os
import subprocess
import sys
import time
CLI = os.path.join(os.path.dirname(__file__), "../../cli.py")
proc = subprocess.Popen(
[sys.executable, CLI, "--session", "use-case-cli-startup"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
)
# Give the process time to print its banner before closing stdin
time.sleep(0.3)
try:
stdout, stderr = proc.communicate(input="", timeout=10)
except subprocess.TimeoutExpired:
proc.kill()
stdout, stderr = proc.communicate()
print("RESULT: TIMEOUT — process did not exit within 10s after EOF")
sys.exit(1)
print("=== stdout ===")
print(stdout)
if stderr.strip():
print("=== stderr ===")
print(stderr)
print(f"=== exit code: {proc.returncode} ===")