use std::path::Path;
fn read(rel: &str) -> String {
let root = Path::new(env!("CARGO_MANIFEST_DIR"));
std::fs::read_to_string(root.join(rel)).unwrap_or_else(|e| panic!("read {rel}: {e}"))
}
fn rust_default(name: &str) -> i32 {
let src = read("src/rustlite/loader.rs");
let needle = format!("pub const {name}: i32 = ");
let start = src.find(&needle).unwrap_or_else(|| panic!("{needle} not found")) + needle.len();
let rest = &src[start..];
let end = rest.find(';').expect("terminating semicolon");
rest[..end].trim().parse().expect("an integer default")
}
#[test]
fn worker_default_dims_match_rust() {
let worker = read("web/cartridge-worker.js");
for (name, value) in [
("FB_W_DEFAULT", rust_default("DEFAULT_FB_W")),
("FB_H_DEFAULT", rust_default("DEFAULT_FB_H")),
] {
let decl = format!("const {name} = {value};");
assert!(
worker.contains(&decl),
"web/cartridge-worker.js must declare `{decl}` to match \
rustlite::loader::{name} — the worker sizes the real framebuffer"
);
}
}
#[test]
fn no_stale_320x240_claim_in_model_facing_text() {
for file in [
"src/builtins/run_cartridge.rs",
"src/builtins/render_html.rs",
"web/cartridge-worker.js",
"web/llms.txt",
] {
let text = read(file);
assert!(
!text.contains("320x240") && !text.contains("320×240"),
"{file} still claims a 320x240 framebuffer; the default is {}x{}",
rust_default("DEFAULT_FB_W"),
rust_default("DEFAULT_FB_H"),
);
}
}