mod common;
use common::*;
use tempfile::tempdir;
#[test]
fn build_streams_cargo_output_and_phase_headers() {
let dir = tempdir().unwrap();
scaffold(dir.path(), "stream_proj");
let out = largo_in(dir.path(), &["build"]);
assert_eq!(out.status.code(), Some(0), "build failed:\n{}", stderr(&out));
let err = strip_ansi(&stderr(&out));
assert!(
err.contains("Compiling stream_proj"),
"largo must print its own Compiling phase header:\n{err}"
);
assert!(
err.contains("Compiling logicaffeine-data"),
"cargo's own compile lines must stream through:\n{err}"
);
assert!(err.contains("Finished"), "must end with a Finished header:\n{err}");
}
#[test]
fn bad_requires_dependency_reports_friendly_error() {
let dir = tempdir().unwrap();
std::fs::create_dir_all(dir.path().join("src")).unwrap();
std::fs::write(
dir.path().join("Largo.toml"),
"[package]\nname = \"bad_requires\"\nversion = \"0.1.0\"\nentry = \"src/main.lg\"\n",
)
.unwrap();
std::fs::write(
dir.path().join("src/main.lg"),
"# Main\n\n## Requires\n The \"this-crate-does-not-exist-largo-e2e\" crate version \"99\".\n\n## Main\n\nShow 1.\n",
)
.unwrap();
let out = largo_in(dir.path(), &["build"]);
assert_eq!(out.status.code(), Some(1), "build must fail");
let err = strip_ansi(&stderr(&out));
assert!(
err.contains("could not be resolved"),
"must frame the failure as dependency resolution:\n{err}"
);
assert!(
err.contains("## Requires"),
"must point back at the `## Requires` block:\n{err}"
);
}
#[test]
fn quiet_build_suppresses_phase_headers() {
let dir = tempdir().unwrap();
scaffold(dir.path(), "quiet_build");
let out = largo_in(dir.path(), &["build", "-q"]);
assert_eq!(out.status.code(), Some(0), "build failed:\n{}", stderr(&out));
let err = strip_ansi(&stderr(&out));
assert!(
!err.contains("Compiling quiet_build"),
"-q must suppress largo's phase headers:\n{err}"
);
assert_eq!(stdout(&out), "", "-q build must print nothing on stdout");
}