Phase 5: Ausführung und Output implementieren und archivieren
This commit is contained in:
@@ -183,3 +183,54 @@ fn erlaubte_grafik_und_benannte_nonfeatures_werden_per_cli_geprueft() {
|
||||
assert!(out.status.success(), "{out:?}");
|
||||
std::fs::remove_dir_all(dir).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn explicit_startup_order_and_form_selection_survive_tbc() {
|
||||
let dir = std::env::temp_dir().join(format!("tb-startup-{}", std::process::id()));
|
||||
std::fs::create_dir_all(&dir).unwrap();
|
||||
std::fs::write(dir.join("a.bas"), "PRINT \"A\"\n").unwrap();
|
||||
std::fs::write(dir.join("b.bas"), "PRINT \"B\"\n").unwrap();
|
||||
for (file, name) in [("one.frm", "One"), ("two.frm", "Two")] {
|
||||
std::fs::write(
|
||||
dir.join(file),
|
||||
format!("VERSION 1.00\nBEGIN Form {name}\nEND\n"),
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
for startup in [None, Some("b.bas"), Some("two.frm")] {
|
||||
std::fs::write(
|
||||
dir.join("p.mak"),
|
||||
format!(
|
||||
"a.bas\nb.bas\none.frm\ntwo.frm\n{}",
|
||||
startup
|
||||
.map(|s| format!("' $STARTUP: \"{s}\"\n"))
|
||||
.unwrap_or_default()
|
||||
),
|
||||
)
|
||||
.unwrap();
|
||||
let out = tbc(&dir, "build", "p.mak");
|
||||
assert!(out.status.success(), "{out:?}");
|
||||
let m =
|
||||
tb_vm::bytecode::CompiledModule::from_tbc(&std::fs::read(dir.join("p.tbc")).unwrap())
|
||||
.unwrap();
|
||||
let chosen = m
|
||||
.startup_form
|
||||
.map(|i| m.objects[i as usize].name.to_ascii_uppercase());
|
||||
assert_eq!(
|
||||
chosen.as_deref(),
|
||||
match startup {
|
||||
None => Some("ONE"),
|
||||
Some("two.frm") => Some("TWO"),
|
||||
_ => None,
|
||||
}
|
||||
);
|
||||
if startup == Some("b.bas") {
|
||||
let direct = tbc(&dir, "run", "p.mak");
|
||||
let serialized = tbc(&dir, "run", "p.tbc");
|
||||
assert!(direct.status.success() && serialized.status.success());
|
||||
assert_eq!(direct.stdout, b"B\nA\n");
|
||||
assert_eq!(direct.stdout, serialized.stdout);
|
||||
}
|
||||
}
|
||||
std::fs::remove_dir_all(dir).unwrap();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user