elio 1.5.0

Snappy, batteries-included terminal file manager with rich previews, inline images, bulk actions, and trash support.
Documentation
use super::*;

#[test]
fn code_preview_includes_line_numbers() {
    let root = temp_path("code");
    fs::create_dir_all(&root).expect("failed to create temp root");
    let path = root.join("main.rs");
    fs::write(&path, "fn main() {}\n").expect("failed to write code");

    let preview = build_preview(&file_entry(path));

    assert_eq!(preview.kind, PreviewKind::Code);
    assert!(preview.lines[0].spans[0].content.contains("1"));

    fs::remove_dir_all(root).expect("failed to remove temp root");
}

mod custom;
mod registry;
mod shell;
mod syntect;

#[test]
fn code_preview_sanitizes_control_characters() {
    let root = temp_path("control-char-code");
    fs::create_dir_all(&root).expect("failed to create temp root");
    let path = root.join("main.c");
    let contents = "int main(void) {\n    puts(\"hello \u{1b} world\");\n    return 0;\n}\n";
    fs::write(&path, contents).expect("failed to write control-char source");

    let preview = build_preview(&file_entry(path));
    let line_texts: Vec<_> = preview.lines.iter().map(line_text).collect();
    assert!(
        line_texts.iter().any(|line| line.contains("^[ world")),
        "expected control characters to be rendered safely, got: {line_texts:?}"
    );

    fs::remove_dir_all(root).expect("failed to remove temp root");
}

#[test]
fn code_preview_respects_custom_line_limit() {
    let root = temp_path("code-line-limit");
    fs::create_dir_all(&root).expect("failed to create temp root");
    let path = root.join("main.rs");
    let text = (1..=12)
        .map(|index| format!("let value_{index} = {index};"))
        .collect::<Vec<_>>()
        .join("\n");
    fs::write(&path, text).expect("failed to write code");

    let preview = build_preview_with_options_and_code_line_limit(
        &file_entry(path),
        &PreviewRequestOptions::Default,
        4,
        4,
        false,
        false,
        &|| false,
    );
    let header = preview
        .header_detail(0, 20)
        .expect("header detail should be present");

    assert_eq!(preview.kind, PreviewKind::Code);
    assert_eq!(preview.lines.len(), 4);
    assert_eq!(
        preview.line_coverage.map(|coverage| coverage.shown_lines),
        Some(4)
    );
    assert!(
        header.contains("showing first 4 lines"),
        "unexpected header: {header}"
    );

    fs::remove_dir_all(root).expect("failed to remove temp root");
}