//! Baseline pin (Embedding-ABI M1, spec Testing-strategy item 0): //! `ail build` (default executable mode) on a `main`-free module //! surfaces `CodegenError::MissingEntryMain` at the CLI build-path //! layer. The staticlib emit-mode (Task 5/6) is *defined* as //! suppressing exactly this rejection; this pin guards the baseline //! at the layer the suppression branches on. The codegen-unit layer //! is independently pinned by //! `crates/ailang-codegen/src/lib.rs` `missing_entry_main_is_error`. //! //! Pure reader: writes nothing to the repo. use ailang_test_support::workspace_root; use std::process::Command; fn ail_bin() -> &'static str { env!("CARGO_BIN_EXE_ail") } #[test] fn ail_build_on_main_free_module_is_rejected_at_cli() { let fixture = workspace_root() .join("examples") .join("embed_noentry_baseline.ail"); assert!(fixture.exists(), "missing fixture {fixture:?}"); let out_bin = std::env::temp_dir().join(format!( "ailang-embed-baseline-{}", std::process::id() )); let output = Command::new(ail_bin()) .args([ "build", fixture.to_str().unwrap(), "-o", out_bin.to_str().unwrap(), ]) .output() .expect("run `ail build`"); assert!( !output.status.success(), "ail build of a main-free module unexpectedly succeeded; \ stdout={} stderr={}", String::from_utf8_lossy(&output.stdout), String::from_utf8_lossy(&output.stderr), ); let stderr = String::from_utf8_lossy(&output.stderr); assert!( stderr.contains("has no `main` def"), "expected the MissingEntryMain message \ (`entry module ... has no `main` def`); got stderr: {stderr}", ); assert!( !out_bin.exists(), "no binary should be produced for a main-free module", ); }