Phase 6: Kompatibilitaetsabnahme abschliessen und archivieren

This commit is contained in:
2026-09-07 12:34:06 +02:00
parent 54ee427c1c
commit 993c3e7638
21 changed files with 752 additions and 58 deletions

View File

@@ -129,6 +129,66 @@ fn cli_meldet_physische_quellorte_auch_nach_verschachtelten_includes() {
std::fs::remove_dir_all(dir).unwrap();
}
#[test]
fn release_projekt_prueft_anfangsdateien_dateieffekte_und_include_fehler() {
struct Aufraeumen(std::path::PathBuf);
impl Drop for Aufraeumen {
fn drop(&mut self) {
let _ = std::fs::remove_dir_all(&self.0);
}
}
let dir = std::env::temp_dir().join(format!("tb-release-files-{}", std::process::id()));
{
std::fs::create_dir(&dir).unwrap();
let _cleanup = Aufraeumen(dir.clone());
std::fs::write(dir.join("main.bas"), "CALL Kopie\nEND\n").unwrap();
std::fs::write(dir.join("lib.bas"), "'$INCLUDE: 'OUTER.BI'\n").unwrap();
std::fs::write(dir.join("outer.bi"), "'$INCLUDE: 'INNER.BI'\n").unwrap();
std::fs::write(dir.join("inner.bi"), "SUB Kopie\nOPEN \"seed.txt\" FOR INPUT AS #1\nLINE INPUT #1, s$\nCLOSE #1\nOPEN \"result.txt\" FOR APPEND AS #2\nPRINT #2, s$\nCLOSE #2\n200 ERROR 6\nEND SUB\n").unwrap();
std::fs::write(dir.join("app.mak"), "MAIN.BAS\nLIB.BAS\n").unwrap();
let build = tbc(&dir, "build", "app.mak");
assert!(build.status.success(), "{build:?}");
for entry in ["app.mak", "app.tbc"] {
if entry == "app.tbc" {
for source in ["main.bas", "lib.bas", "outer.bi", "inner.bi", "app.mak"] {
std::fs::remove_file(dir.join(source)).unwrap();
}
}
for _ in 0..2 {
std::fs::write(dir.join("seed.txt"), "Grüße\n").unwrap();
std::fs::write(dir.join("result.txt"), "Start\n").unwrap();
let out = tbc(&dir, "run", entry);
assert_eq!(out.status.code(), Some(2), "{out:?}");
assert!(out.stdout.is_empty(), "{out:?}");
assert!(
String::from_utf8_lossy(&out.stderr)
.to_ascii_lowercase()
.contains("inner.bi:8:5:"),
"{out:?}"
);
assert_eq!(
std::fs::read(dir.join("seed.txt")).unwrap(),
"Grüße\n".as_bytes()
);
assert_eq!(
std::fs::read(dir.join("result.txt")).unwrap(),
"Start\nGrüße\n".as_bytes()
);
}
}
let mut files: Vec<_> = std::fs::read_dir(&dir)
.unwrap()
.map(|f| f.unwrap().file_name())
.collect();
files.sort();
assert_eq!(files, ["app.tbc", "result.txt", "seed.txt"]);
}
assert!(
!dir.exists(),
"Releaseprobe hat ihr Arbeitsverzeichnis nicht entfernt"
);
}
#[test]
fn erlaubte_grafik_und_benannte_nonfeatures_werden_per_cli_geprueft() {
let dir = std::env::temp_dir().join(format!("tb-graphics-check-{}", std::process::id()));