rho-coding-agent 1.7.0

A lightweight agent harness inspired by Pi
Documentation
use super::*;

fn line_text(line: &Line<'_>) -> String {
    line.spans
        .iter()
        .map(|span| span.content.as_ref())
        .collect()
}

#[test]
fn loading_spinner_advances_frames() {
    let started_at = Instant::now();
    let spinner = LoadingSpinner {
        started_at: Some(started_at),
    };

    assert_eq!(spinner.frame_at(started_at), "");
    assert_eq!(
        spinner.frame_at(started_at + LoadingSpinner::FRAME_INTERVAL),
        ""
    );
}

#[test]
fn loading_spinner_line_separates_frame_from_text() {
    let started_at = Instant::now();
    let spinner = LoadingSpinner {
        started_at: Some(started_at),
    };

    assert_eq!(
        line_text(&spinner.line(started_at, 40, ActivityStatus::Working)),
        "⠋ working"
    );
}

#[test]
fn activity_line_combines_parent_and_subagent_work() {
    let spinner = LoadingSpinner::default();

    assert_eq!(
        line_text(&spinner.line(Instant::now(), 40, ActivityStatus::WorkingWithSubagents(2),)),
        "⠋ working  ·  2 agents"
    );
    assert_eq!(
        line_text(&spinner.line(Instant::now(), 40, ActivityStatus::Subagents(2))),
        "⠋ 2 agents working"
    );
}

#[test]
fn spinner_line_compacts_to_available_width() {
    let spinner = LoadingSpinner::default();
    let rendered =
        line_text(&spinner.line(Instant::now(), 1, ActivityStatus::WorkingWithSubagents(2)));

    assert_eq!(rendered, "");
    assert_eq!(
        activity_width(1, ActivityStatus::WorkingWithSubagents(2)),
        1
    );
    assert_eq!(
        activity_width(40, ActivityStatus::WorkingWithSubagents(2)),
        display_width("⠋ working  ·  2 agents")
    );
}