Files
ElyOffice/crates/ely-lok/src/client/tests/check.rs
T
ZacharyZhang-NY b7fca0146d Ely Office: six offline-first desktop apps in Rust and GPUI
ElyDoc, ElyTable, ElyShow (LibreOfficeKit), ElyPDF (MuPDF), ElyTree (Git),
ElyMark (Milkdown and CodeMirror in CEF). ElyMail and ElyAgent follow.
2026-10-08 21:20:08 -04:00

49 lines
2.3 KiB
Rust

use super::*;
use crate::show;
/// A lost font, a lost linked picture, an empty object.
fn trouble() -> std::path::PathBuf {
std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("../../tests/fixtures/show/trouble.fodp")
}
#[test]
fn the_check_finds_fonts_links_and_broken_objects_by_slide() {
if install().is_none() {
eprintln!("SKIP: no pinned LOK build");
return;
}
let dir = tempfile::tempdir().expect("a temp dir");
let mut worker = Worker::spawn(&install().expect("LOK"), &dir.path().join("p")).expect("up");
// Beside it: an undecodable picture, a linked text.
let path = dir.path().join("trouble.fodp");
std::fs::copy(trouble(), &path).expect("copies");
std::fs::write(dir.path().join("broken.png"), "not a valid image").expect("writes");
let linked = dir.path().join("linked.odt");
let blank = worker.load("private:factory/swriter").expect("a text");
blank.save_as(&mut worker, &crate::file_url(&linked), "odt").expect("saves");
worker.close_doc(blank).expect("closes");
let doc = worker.load(&crate::file_url(&path)).expect("loads");
let json = worker.values(&doc, show::SLIDE_CHECK).expect("reads");
let found = show::check(&json).expect("parses");
assert_eq!(found.slides.len(), 5);
assert!(found.slides[0].fonts.iter().any(|f| f == "Nowhere Sans"), "{json}");
assert!(!found.slides[1].fonts.iter().any(|f| f == "Nowhere Sans"));
assert_eq!(found.slides[1].links, [("file:///nowhere/gone.png".to_string(), true)], "{json}");
assert!(found.slides[1].broken.is_empty(), "said once, as a link");
assert_eq!(found.slides[2].broken, ["Empty"], "{json}");
assert!(!found.masters.is_empty());
let mut bad = found.slides[3].broken.clone();
bad.sort();
assert_eq!(bad, ["Bad", "Junk"], "{json}");
assert_eq!(found.slides[3].links.iter().map(|(_, m)| *m).collect::<Vec<_>>(), [false]);
let ole = |worker: &mut Worker| {
let json = worker.values(&doc, show::SLIDE_CHECK).expect("reads");
show::check(&json).expect("parses").slides[4].links.clone()
};
let there = ole(&mut worker);
assert_eq!(there.len(), 1, "the object is a link");
assert!(there[0].0.ends_with("linked.odt") && !there[0].1);
std::fs::remove_file(&linked).expect("deletes");
assert!(ole(&mut worker)[0].1, "a deleted source is missing");
}