diff options
| author | Laurenz <laurmaedje@gmail.com> | 2024-08-16 12:53:12 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-16 10:53:12 +0000 |
| commit | d97d71948ebadebe87341649eeb4aae69c746ae1 (patch) | |
| tree | 360b51c938b5187928797ffe6148116bf018b22b /tests/src | |
| parent | feb0c913954d385a3f906f9d9d8ec33cbcf2b2d0 (diff) | |
Fix document set rules (#4768)
Diffstat (limited to 'tests/src')
| -rw-r--r-- | tests/src/custom.rs | 46 | ||||
| -rw-r--r-- | tests/src/run.rs | 13 | ||||
| -rw-r--r-- | tests/src/tests.rs | 1 |
3 files changed, 60 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() +} diff --git a/tests/src/run.rs b/tests/src/run.rs index 9681ae4c..c65f5e38 100644 --- a/tests/src/run.rs +++ b/tests/src/run.rs @@ -89,6 +89,7 @@ impl<'a> Runner<'a> { log!(self, "no document, but also no errors"); } + self.check_custom(doc.as_ref()); self.check_document(doc.as_ref()); for error in &errors { @@ -129,6 +130,18 @@ impl<'a> Runner<'a> { } } + /// Run custom checks for which it is not worth to create special + /// annotations. + fn check_custom(&mut self, doc: Option<&Document>) { + let errors = crate::custom::check(self.test, &self.world, doc); + if !errors.is_empty() { + log!(self, "custom check failed"); + for line in errors.lines() { + log!(self, " {line}"); + } + } + } + /// Check that the document output is correct. fn check_document(&mut self, document: Option<&Document>) { let live_path = format!("{}/render/{}.png", crate::STORE_PATH, self.test.name); diff --git a/tests/src/tests.rs b/tests/src/tests.rs index 3e29c0ff..77c8b210 100644 --- a/tests/src/tests.rs +++ b/tests/src/tests.rs @@ -2,6 +2,7 @@ mod args; mod collect; +mod custom; mod logger; mod run; mod world; |
