diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-01-14 17:28:03 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-01-14 17:30:22 +0100 |
| commit | 73b25bdad0f0dda66f0a73c8b980e0ddb1a59553 (patch) | |
| tree | 307561099ae30c19a1a7515c0d3b65baed265b5e /tests | |
| parent | cfcb36b159e3f65aff8cbdac6b537b40c22507c0 (diff) | |
Move bracket function tests to integration 🚚
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/README.md | 14 | ||||
| -rw-r--r-- | tests/ref/lang/bracket-call.png | bin | 0 -> 22962 bytes | |||
| -rw-r--r-- | tests/ref/lang/comments.png | bin | 1332 -> 1148 bytes | |||
| -rw-r--r-- | tests/typ/lang/bracket-call.typ | 86 | ||||
| -rw-r--r-- | tests/typ/lang/comments.typ | 2 | ||||
| -rw-r--r-- | tests/typeset.rs | 36 |
6 files changed, 126 insertions, 12 deletions
diff --git a/tests/README.md b/tests/README.md index 429207a5..91bf8f49 100644 --- a/tests/README.md +++ b/tests/README.md @@ -1,10 +1,9 @@ # Tests +Directory structure: - `typ`: Input files. - `ref`: Reference images which the output is compared with to determine whether - a test passed or failed. To keep things small, please run - `oxipng -o max tests/ref/<img>` when creating or updating reference - images (note that `<img>` can be `*` to optimize all images). + a test passed or failed. - `res`: Resource files used by tests. - `png`: PNG files produced by tests. - `pdf`: PDF files produced by tests. @@ -13,3 +12,12 @@ The test files are split into three categories: - `full`: Tests of full documents. - `lang`: Tests for specific language features. - `library`: Tests for specific library functions. + +To keep things small, please optimize the reference images: +```bash +# One image +oxipng -o max tests/ref/image.png + +# All images +oxipng -r -o max tests/ref/* +``` diff --git a/tests/ref/lang/bracket-call.png b/tests/ref/lang/bracket-call.png Binary files differnew file mode 100644 index 00000000..e7ba46e3 --- /dev/null +++ b/tests/ref/lang/bracket-call.png diff --git a/tests/ref/lang/comments.png b/tests/ref/lang/comments.png Binary files differindex e3e42d23..df5e5b9c 100644 --- a/tests/ref/lang/comments.png +++ b/tests/ref/lang/comments.png diff --git a/tests/typ/lang/bracket-call.typ b/tests/typ/lang/bracket-call.typ new file mode 100644 index 00000000..642d6426 --- /dev/null +++ b/tests/typ/lang/bracket-call.typ @@ -0,0 +1,86 @@ +// Basic call, whitespace insignificant. +[f], [ f ], [ + f +] + +[f bold] + +[f 1,] + +[f a:2] + +[f 1, a: (3, 4), 2, b: "5"] + +--- +// Body and no body. +[f][[f]] + +// Lots of potential bodies. +[f][f][f] + +// Multi-paragraph body. +[box][ + First + + Second +] + +--- +// Chained. +[f | f] + +// Multi-chain. +[f|f|f] + +// With body. +[f | box][💕] + +// Error: 1:2-1:2 expected function name +[|f true] + +// Error: 1:6-1:6 expected function name +[f 1|] + +// With actual functions. +[box width: 1cm | image "res/rhino.png"] + +--- +// Error: 1:4-1:6 expected expression, found end of block comment +[f */] + +// Error: 1:7-1:8 expected expression, found colon +[f a:1:] + +// Error: 1:5-1:5 expected comma +[f 1 2] + +// Error: 2:4-2:5 expected identifier +// Error: 1:6-1:6 expected expression +[f 1:] + +// Error: 1:4-1:5 expected identifier +[f 1:2] + +// Error: 1:4-1:7 expected identifier +[f (x):1] + +--- +// Error: 2:2-2:3 a value of type string is not callable +#let x = "string"; +[x] + +// Error: 1:2-1:3 expected function name, found hex value +[# 1] + +// Error: 4:1-4:1 expected function name +// Error: 3:1-3:1 expected closing bracket +[ + +--- +// Error: 3:1-3:1 expected closing bracket +[f][`a]` + +--- +// Error: 3:1-3:1 expected quote +// Error: 2:1-2:1 expected closing bracket +[f "] diff --git a/tests/typ/lang/comments.typ b/tests/typ/lang/comments.typ index 56906d0c..c5b04967 100644 --- a/tests/typ/lang/comments.typ +++ b/tests/typ/lang/comments.typ @@ -8,7 +8,7 @@ C/* */D // Test in expressions. -[dump /*1*/ a: "b" // +[f /*1*/ a: "b" // , 1] // Error: 1:7-1:9 unexpected end of block comment diff --git a/tests/typeset.rs b/tests/typeset.rs index 79a884eb..3eaca6ed 100644 --- a/tests/typeset.rs +++ b/tests/typeset.rs @@ -16,12 +16,13 @@ use walkdir::WalkDir; use typst::diag::{Diag, Feedback, Level, Pass}; use typst::env::{Env, ImageResource, ResourceLoader, SharedEnv}; -use typst::eval::{Args, EvalContext, State, Value, ValueFunc}; +use typst::eval::{Args, EvalContext, Scope, State, Value, ValueFunc}; use typst::export::pdf; use typst::font::FontLoader; use typst::geom::{Length, Point, Sides, Size, Spec}; use typst::layout::{Element, Expansion, Frame, Image}; use typst::parse::{LineMap, Scanner}; +use typst::pretty::{Pretty, Printer}; use typst::shaping::Shaped; use typst::syntax::{Location, Pos, SpanVec, Spanned, WithSpan}; use typst::typeset; @@ -183,13 +184,7 @@ fn test_part(i: usize, src: &str, env: &SharedEnv) -> (bool, Vec<Frame>) { state.page.size = Size::new(Length::pt(120.0), Length::raw(f64::INFINITY)); state.page.expand = Spec::new(Expansion::Fill, Expansion::Fit); state.page.margins = Sides::uniform(Some(Length::pt(10.0).into())); - - pub fn dump(_: &mut EvalContext, args: &mut Args) -> Value { - let (array, dict) = args.drain(); - Value::Array(vec![Value::Array(array), Value::Dict(dict)]) - } - - Rc::make_mut(&mut state.scope).set("dump", ValueFunc::new("dump", dump)); + register_helpers(Rc::make_mut(&mut state.scope)); let Pass { output: mut frames, @@ -261,6 +256,31 @@ fn parse_metadata(src: &str, map: &LineMap) -> (bool, SpanVec<Diag>) { (compare_ref, diags) } +fn register_helpers(scope: &mut Scope) { + pub fn f(_: &mut EvalContext, args: &mut Args) -> Value { + let (array, dict) = args.drain(); + let iter = array + .into_iter() + .map(|v| (None, v)) + .chain(dict.into_iter().map(|(k, v)| (Some(k), v))); + + let mut p = Printer::new(); + p.push_str("f("); + p.join(iter, ", ", |(key, value), p| { + if let Some(key) = key { + p.push_str(&key); + p.push_str(": "); + } + value.pretty(p); + }); + p.push_str(")"); + + Value::Str(p.finish()) + } + + scope.set("f", ValueFunc::new("f", f)); +} + fn print_diag(diag: &Spanned<Diag>, map: &LineMap) { let start = map.location(diag.span.start).unwrap(); let end = map.location(diag.span.end).unwrap(); |
