mirror of
https://github.com/typst/typst
synced 2025-05-17 02:25:27 +08:00
47 lines
1.4 KiB
Rust
47 lines
1.4 KiB
Rust
use std::fmt::Write;
|
|
|
|
use typst::foundations::Smart;
|
|
use typst::model::{Document, DocumentInfo};
|
|
use typst::World;
|
|
|
|
use crate::collect::Test;
|
|
use crate::world::TestWorld;
|
|
|
|
/// We don't want to panic when there is a failure.
|
|
macro_rules! test_eq {
|
|
($sink:expr, $lhs:expr, $rhs:expr) => {
|
|
if $lhs != $rhs {
|
|
writeln!(&mut $sink, "{:?} != {:?}", $lhs, $rhs).unwrap();
|
|
}
|
|
};
|
|
}
|
|
|
|
/// Run special checks for specific tests for which it is not worth it to create
|
|
/// custom annotations.
|
|
pub fn check(test: &Test, world: &TestWorld, doc: Option<&Document>) -> String {
|
|
let mut sink = String::new();
|
|
match test.name.as_str() {
|
|
"document-set-author-date" => {
|
|
let info = info(doc);
|
|
test_eq!(sink, info.author, ["A", "B"]);
|
|
test_eq!(sink, info.date, Smart::Custom(world.today(None)));
|
|
}
|
|
"issue-4065-document-context" => {
|
|
let info = info(doc);
|
|
test_eq!(sink, info.title.as_deref(), Some("Top level"));
|
|
}
|
|
"issue-4769-document-context-conditional" => {
|
|
let info = info(doc);
|
|
test_eq!(sink, info.author, ["Changed"]);
|
|
test_eq!(sink, info.title.as_deref(), Some("Alternative"));
|
|
}
|
|
_ => {}
|
|
}
|
|
sink
|
|
}
|
|
|
|
/// Extract the document information.
|
|
fn info(doc: Option<&Document>) -> DocumentInfo {
|
|
doc.map(|doc| doc.info.clone()).unwrap_or_default()
|
|
}
|