summaryrefslogtreecommitdiff
path: root/tests/src/custom.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2024-08-16 12:53:12 +0200
committerGitHub <noreply@github.com>2024-08-16 10:53:12 +0000
commitd97d71948ebadebe87341649eeb4aae69c746ae1 (patch)
tree360b51c938b5187928797ffe6148116bf018b22b /tests/src/custom.rs
parentfeb0c913954d385a3f906f9d9d8ec33cbcf2b2d0 (diff)
Fix document set rules (#4768)
Diffstat (limited to 'tests/src/custom.rs')
-rw-r--r--tests/src/custom.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/src/custom.rs b/tests/src/custom.rs
new file mode 100644
index 00000000..9a5fef03
--- /dev/null
+++ b/tests/src/custom.rs
@@ -0,0 +1,46 @@
+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()
+}