axbuild 0.4.16

An OS build lib toolkit used by arceos
Documentation
use std::fs;

use tempfile::tempdir;

use super::discover_apps;
use crate::starry::app::{
    StarryAppKind,
    test_support::{write_case_file, write_minimal_board_case},
};

#[test]
fn discovers_prebuild_apps_and_ignores_listed_names() {
    let root = tempdir().unwrap();
    write_case_file(
        root.path(),
        "codex-cli",
        "prebuild.sh",
        "#!/usr/bin/env bash\n",
    );
    write_case_file(
        root.path(),
        "picoclaw-cli",
        "prebuild.sh",
        "#!/usr/bin/env bash\n",
    );
    write_case_file(
        root.path(),
        "orangepi-5-plus-uvc",
        "prebuild.sh",
        "#!/usr/bin/env bash\n",
    );
    write_case_file(
        root.path(),
        "orangepi-5-plus-uvc-rknn",
        "prebuild.sh",
        "#!/usr/bin/env bash\n",
    );
    fs::write(
        root.path().join("apps/.ignore"),
        "apps/starry/orangepi-5-plus-uvc\napps/starry/orangepi-5-plus-uvc-rknn\n",
    )
    .unwrap();

    let apps = discover_apps(root.path()).unwrap();
    let names = apps.into_iter().map(|app| app.name).collect::<Vec<_>>();

    assert_eq!(names, vec!["codex-cli", "picoclaw-cli"]);
}

#[test]
fn infers_qemu_and_board_app_kinds() {
    let root = tempdir().unwrap();
    write_case_file(
        root.path(),
        "codex-cli",
        "prebuild.sh",
        "#!/usr/bin/env bash\n",
    );
    write_case_file(
        root.path(),
        "codex-cli",
        "qemu-x86_64-codex-help.toml",
        "args = []\n",
    );
    write_minimal_board_case(root.path(), "board-demo");

    let apps = discover_apps(root.path()).unwrap();

    assert_eq!(apps[0].name, "board-demo");
    assert_eq!(apps[0].kind, StarryAppKind::Board);
    assert_eq!(apps[1].name, "codex-cli");
    assert_eq!(apps[1].kind, StarryAppKind::Qemu);
}