From 51efb0f4d69943e290d977673970cd3c8ada306f Mon Sep 17 00:00:00 2001 From: Laurenz Date: Sat, 16 Jan 2021 15:08:03 +0100 Subject: [PATCH] =?UTF-8?q?Port=20remaining=20parser=20tests=20?= =?UTF-8?q?=F0=9F=9A=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/eval/state.rs | 10 +- src/font.rs | 1 + src/geom/length.rs | 6 +- src/parse/mod.rs | 3 - src/parse/tests.rs | 291 -------------------------------- src/parse/tokens.rs | 16 +- src/syntax/span.rs | 1 + tests/ref/lang/blocks.png | Bin 0 -> 1363 bytes tests/ref/lang/bracket-call.png | Bin 22962 -> 22257 bytes tests/ref/lang/expressions.png | Bin 0 -> 2351 bytes tests/ref/lang/raw.png | Bin 0 -> 4212 bytes tests/ref/lang/values.png | Bin 24313 -> 8531 bytes tests/typ/lang/blocks.typ | 21 +++ tests/typ/lang/bracket-call.typ | 15 ++ tests/typ/lang/expressions.typ | 37 ++++ tests/typ/lang/raw.typ | 23 +++ 16 files changed, 121 insertions(+), 303 deletions(-) delete mode 100644 src/parse/tests.rs create mode 100644 tests/ref/lang/blocks.png create mode 100644 tests/ref/lang/expressions.png create mode 100644 tests/ref/lang/raw.png create mode 100644 tests/typ/lang/blocks.typ create mode 100644 tests/typ/lang/expressions.typ create mode 100644 tests/typ/lang/raw.typ diff --git a/src/eval/state.rs b/src/eval/state.rs index a88dfd070..21fb7fb6c 100644 --- a/src/eval/state.rs +++ b/src/eval/state.rs @@ -11,15 +11,15 @@ use crate::paper::{Paper, PaperClass, PAPER_A4}; /// The evaluation state. #[derive(Debug, Clone, PartialEq)] pub struct State { - /// The current page state. + /// The current page settings. pub page: PageSettings, - /// The current paragraph state. + /// The current paragraph settings. pub par: ParSettings, - /// The current font state. + /// The current font settings. pub font: FontSettings, - /// The current directions. + /// The current layouting directions. pub dirs: LayoutDirs, - /// The current alignments. + /// The current alignments of an item in its parent. pub align: ChildAlign, } diff --git a/src/font.rs b/src/font.rs index 01ea48c00..e57183316 100644 --- a/src/font.rs +++ b/src/font.rs @@ -51,6 +51,7 @@ impl ContainsChar for FaceBuf { } } +/// Simplify font loader construction from an [`FsIndex`]. #[cfg(feature = "fs")] pub trait FsIndexExt { /// Create a font loader backed by a boxed [`FsSource`] which serves all diff --git a/src/geom/length.rs b/src/geom/length.rs index 00803e13c..1a45c63c1 100644 --- a/src/geom/length.rs +++ b/src/geom/length.rs @@ -99,10 +99,12 @@ impl Length { impl Display for Length { fn fmt(&self, f: &mut Formatter) -> fmt::Result { + use LengthUnit::*; + // Format with the unit that yields the shortest output, preferring - // larger units when tied. + // larger / metrics units when tied. let mut buf = ryu::Buffer::new(); - let unit = [LengthUnit::Cm, LengthUnit::Mm, LengthUnit::Pt] + let unit = [Cm, Mm, In, Pt] .iter() .copied() .min_by_key(|&unit| buf.format(self.to_unit(unit)).len()) diff --git a/src/parse/mod.rs b/src/parse/mod.rs index 5fdaa4ce0..b6836d384 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -412,6 +412,3 @@ fn expr_let(p: &mut Parser) -> Option { p.end_group(); pat.map(|pat| Expr::Let(ExprLet { pat, expr: rhs })) } - -#[cfg(test)] -mod tests; diff --git a/src/parse/tests.rs b/src/parse/tests.rs deleted file mode 100644 index 9a35f5522..000000000 --- a/src/parse/tests.rs +++ /dev/null @@ -1,291 +0,0 @@ -#![allow(non_snake_case)] - -use std::fmt::Debug; - -use super::parse; -use crate::diag::{Diag, Level, Pass}; -use crate::geom::LengthUnit; -use crate::syntax::*; - -use BinOp::*; -use Expr::{Float, Int, Length}; -use Node::{Space, Strong}; -use UnOp::{Neg, Pos}; - -macro_rules! t { - ($src:literal - nodes: [$($node:expr),* $(,)?] - $(, errors: [$($err:expr),* $(,)?])? - $(, warnings: [$($warn:expr),* $(,)?])? - $(, spans: $spans:expr)? - $(,)? - ) => {{ - #[allow(unused)] - let mut spans = false; - $(spans = $spans;)? - - let Pass { output, feedback } = parse($src); - check($src, Template![@$($node),*], output, spans); - check( - $src, - vec![ - $($(into!($err).map(|s: &str| Diag::new(Level::Error, s)),)*)? - $($(into!($warn).map(|s: &str| Diag::new(Level::Warning, s)),)*)? - ], - feedback.diags, - true, - ); - }}; - - ($src:literal $($node:expr),* $(,)?) => { - t!($src nodes: [$($node),*]); - }; -} - -/// Assert that expected and found are equal, printing both and the source of -/// the test case if they aren't. -/// -/// When `cmp_spans` is false, spans are ignored. -#[track_caller] -pub fn check(src: &str, exp: T, found: T, cmp_spans: bool) -where - T: Debug + PartialEq, -{ - Span::set_cmp(cmp_spans); - - if exp != found { - println!("source: {:?}", src); - println!("expected: {:#?}", exp); - println!("found: {:#?}", found); - panic!("test failed"); - } - - Span::set_cmp(true); -} - -/// Shorthand for `Spanned::new`. -fn S(span: impl Into, v: T) -> Spanned { - Spanned::new(v, span) -} - -// Enables tests to optionally specify spans. -impl From for Spanned { - fn from(t: T) -> Self { - Spanned::zero(t) - } -} - -/// Shorthand for `Into::>::into`. -macro_rules! into { - ($val:expr) => { - Into::>::into($val) - }; -} - -fn Text(text: &str) -> Node { - Node::Text(text.into()) -} - -fn Raw(lang: Option<&str>, lines: &[&str], inline: bool) -> Node { - Node::Raw(NodeRaw { - lang: lang.map(|id| Ident(id.into())), - lines: lines.iter().map(ToString::to_string).collect(), - inline, - }) -} - -fn Id(ident: &str) -> Expr { - Expr::Ident(Ident(ident.to_string())) -} - -fn Str(string: &str) -> Expr { - Expr::Str(string.to_string()) -} - -fn Binary( - lhs: impl Into>, - op: impl Into>, - rhs: impl Into>, -) -> Expr { - Expr::Binary(ExprBinary { - lhs: Box::new(lhs.into()), - op: op.into(), - rhs: Box::new(rhs.into()), - }) -} - -fn Unary(op: impl Into>, expr: impl Into>) -> Expr { - Expr::Unary(ExprUnary { - op: op.into(), - expr: Box::new(expr.into()), - }) -} - -fn Group(expr: Expr) -> Expr { - Expr::Group(Box::new(expr)) -} - -macro_rules! Call { - (@@$name:expr) => { - Call!(@@$name, Args![]) - }; - (@@$name:expr, $args:expr) => { - ExprCall { - name: into!($name).map(|s: &str| Ident(s.into())), - args: into!($args), - } - }; - (@$($tts:tt)*) => { - Expr::Call(Call!(@@$($tts)*)) - }; - ($($tts:tt)*) => { - Node::Expr(Call!(@$($tts)*)) - }; -} - -macro_rules! Args { - (@$a:expr) => { - Argument::Pos(into!($a)) - }; - (@$a:expr => $b:expr) => { - Argument::Named(Named { - name: into!($a).map(|s: &str| Ident(s.into())), - expr: into!($b) - }) - }; - ($($a:expr $(=> $b:expr)?),* $(,)?) => { - vec![$(Args!(@$a $(=> $b)?)),*] - }; -} - -macro_rules! Array { - (@$($expr:expr),* $(,)?) => { - vec![$(into!($expr)),*] - }; - ($($tts:tt)*) => { - Expr::Array(Array![@$($tts)*]) - }; -} - -macro_rules! Template { - (@$($node:expr),* $(,)?) => { - vec![$(into!($node)),*] - }; - ($($tts:tt)*) => { - Expr::Template(Template![@$($tts)*]) - }; -} - -macro_rules! Block { - (@$expr:expr) => { - Expr::Block(Box::new($expr)) - }; - ($expr:expr) => { - Node::Expr(Block!(@$expr)) - }; -} - -#[test] -fn test_parse_raw() { - // Basic, mostly tested in tokenizer and resolver. - t!("`py`" nodes: [S(0..4, Raw(None, &["py"], true))], spans: true); - t!("`endless" - nodes: [Raw(None, &["endless"], true)], - errors: [S(8..8, "expected backtick(s)")]); -} - -#[test] -fn test_parse_groups() { - // Test paren group. - t!("{({1) + 3}" - nodes: [Block!(Binary(Group(Block!(@Int(1))), Add, Int(3)))], - errors: [S(4..4, "expected closing brace")]); - - // Test bracket group. - t!("[)" - nodes: [Call!("")], - errors: [S(1..2, "expected function name, found closing paren"), - S(2..2, "expected closing bracket")]); - - t!("[v [*]" - nodes: [Call!("v", Args![Template![Strong]])], - errors: [S(6..6, "expected closing bracket")]); - - // Test brace group. - t!("{1 + [}" - nodes: [Block!(Binary(Int(1), Add, Template![]))], - errors: [S(6..6, "expected closing bracket")]); - - // Test subheader group. - t!("[v (|u )]" - nodes: [Call!("v", Args![Array![], Template![Call!("u")]])], - errors: [S(4..4, "expected closing paren"), - S(7..8, "expected expression, found closing paren")]); -} - -#[test] -fn test_parse_blocks() { - // Basic with spans. - t!("{1}" nodes: [S(0..3, Block!(Int(1)))], spans: true); - - // Function calls. - t!("{f()}" Block!(Call!(@"f"))); - t!("{[[f]]}" Block!(Template![Call!("f")])); - - // Missing or bad value. - t!("{}{1u}" - nodes: [], - errors: [S(1..1, "expected expression"), - S(3..5, "expected expression, found invalid token")]); - - // Too much stuff. - t!("{1 #{} end" - nodes: [Block!(Int(1)), Space, Text("end")], - errors: [S(3..4, "unexpected hex value"), - S(4..5, "unexpected opening brace")]); -} - -#[test] -fn test_parse_expressions() { - // Parentheses. - t!("{(x)}{(1)}" Block!(Group(Id("x"))), Block!(Group(Int(1)))); - - // Unary operations. - t!("{+1}" Block!(Unary(Pos, Int(1)))); - t!("{-1}" Block!(Unary(Neg, Int(1)))); - t!("{--1}" Block!(Unary(Neg, Unary(Neg, Int(1))))); - - // Binary operations. - t!(r#"{"x"+"y"}"# Block!(Binary(Str("x"), Add, Str("y")))); - t!("{1-2}" Block!(Binary(Int(1), Sub, Int(2)))); - t!("{a * b}" Block!(Binary(Id("a"), Mul, Id("b")))); - t!("{12pt/.4}" Block!(Binary(Length(12.0, LengthUnit::Pt), Div, Float(0.4)))); - - // Associativity. - t!("{1+2+3}" Block!(Binary(Binary(Int(1), Add, Int(2)), Add, Int(3)))); - t!("{1/2*3}" Block!(Binary(Binary(Int(1), Div, Int(2)), Mul, Int(3)))); - - // Precedence. - t!("{1+2*-3}" Block!(Binary( - Int(1), Add, Binary(Int(2), Mul, Unary(Neg, Int(3))), - ))); - - // Confusion with floating-point literal. - t!("{1e-3-4e+4}" Block!(Binary(Float(1e-3), Sub, Float(4e+4)))); - - // Spans + parentheses winning over precedence. - t!("{(1+2)*3}" - nodes: [S(0..9, Block!(Binary( - S(1..6, Group(Binary(S(2..3, Int(1)), S(3..4, Add), S(4..5, Int(2))))), - S(6..7, Mul), - S(7..8, Int(3)), - )))], - spans: true); - - // Errors. - t!("{-}{1+}{2*}" - nodes: [Block!(Int(1)), Block!(Int(2))], - errors: [S(2..2, "expected expression"), - S(6..6, "expected expression"), - S(10..10, "expected expression")]); -} diff --git a/src/parse/tokens.rs b/src/parse/tokens.rs index 85fc49780..68b31a876 100644 --- a/src/parse/tokens.rs +++ b/src/parse/tokens.rs @@ -441,7 +441,6 @@ impl Debug for Tokens<'_> { #[allow(non_snake_case)] mod tests { use super::*; - use crate::parse::tests::check; use Option::None; use Token::{Ident, *}; @@ -539,10 +538,23 @@ mod tests { let src = $src; let exp = vec![$($token),*]; let found = Tokens::new(&src, $mode).collect::>(); - check(&src, exp, found, false); + check(&src, exp, found); }}; } + #[track_caller] + fn check(src: &str, exp: T, found: T) + where + T: Debug + PartialEq, + { + if exp != found { + println!("source: {:?}", src); + println!("expected: {:#?}", exp); + println!("found: {:#?}", found); + panic!("test failed"); + } + } + #[test] fn test_tokenize_brackets() { // Test in markup. diff --git a/src/syntax/span.rs b/src/syntax/span.rs index e924b03b1..fbde35afa 100644 --- a/src/syntax/span.rs +++ b/src/syntax/span.rs @@ -150,6 +150,7 @@ impl Span { /// When set to `false` comparisons with `PartialEq` ignore spans. #[cfg(test)] + #[allow(unused)] pub(crate) fn set_cmp(cmp: bool) { CMP_SPANS.with(|cell| cell.set(cmp)); } diff --git a/tests/ref/lang/blocks.png b/tests/ref/lang/blocks.png new file mode 100644 index 0000000000000000000000000000000000000000..ca826c1b90a9b0905ba071b027d100c7201f32de GIT binary patch literal 1363 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 diff --git a/tests/ref/lang/expressions.png b/tests/ref/lang/expressions.png new file mode 100644 index 0000000000000000000000000000000000000000..309c32f1ac329984c7ed94d30be2263e2b510fff GIT binary patch literal 2351 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 literal 24313 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 CW-2fM diff --git a/tests/typ/lang/blocks.typ b/tests/typ/lang/blocks.typ new file mode 100644 index 000000000..cadd30dd1 --- /dev/null +++ b/tests/typ/lang/blocks.typ @@ -0,0 +1,21 @@ +{1} + +// Function calls. +{f(1)} +{[[f 1]]} + +// Error: 1:2-1:2 expected expression +{} + +// Error: 1:2-1:4 expected expression, found invalid token +{1u} + +// Error: 1:5-1:5 expected closing brace +{({1) + 2} + +// Error: 1:12-1:12 expected closing bracket +{[*] + [ok*} + +// Error: 2:4-2:5 unexpected hex value +// Error: 1:5-1:6 unexpected opening brace +{1 #{} _end_ diff --git a/tests/typ/lang/bracket-call.typ b/tests/typ/lang/bracket-call.typ index 642d6426a..79667e610 100644 --- a/tests/typ/lang/bracket-call.typ +++ b/tests/typ/lang/bracket-call.typ @@ -41,6 +41,10 @@ // Error: 1:6-1:6 expected function name [f 1|] +// Error: 2:5-2:5 expected closing paren +// Error: 1:8-1:9 expected expression, found closing paren +[f (|f )] + // With actual functions. [box width: 1cm | image "res/rhino.png"] @@ -65,6 +69,7 @@ [f (x):1] --- +// Ref: false // Error: 2:2-2:3 a value of type string is not callable #let x = "string"; [x] @@ -76,6 +81,16 @@ // Error: 3:1-3:1 expected closing bracket [ +--- +// Ref: false +// Error: 2:2-2:3 expected function name, found closing paren +// Error: 3:1-3:1 expected closing bracket +[) + +--- +// Error: 3:1-3:1 expected closing bracket +[f [*] + --- // Error: 3:1-3:1 expected closing bracket [f][`a]` diff --git a/tests/typ/lang/expressions.typ b/tests/typ/lang/expressions.typ new file mode 100644 index 000000000..017252892 --- /dev/null +++ b/tests/typ/lang/expressions.typ @@ -0,0 +1,37 @@ +#let a = 2; +#let b = 4; + +// Unary operations. +{+1} +{-1} +{--1} + +// Binary operations. +{"a"+"b"} +{1-2} +{a * b} +{12pt/.4} + +// Associativity. +{1+2+3} +{1/2*3} + +// Precedence. +{1+2*-3} + +// Parentheses. +{(a)} +{(2)} +{(1+2)*3} + +// Confusion with floating-point literal. +{1e+2-1e-2} + +// Error: 1:3-1:3 expected expression +{-} + +// Error: 1:4-1:4 expected expression +{1+} + +// Error: 1:4-1:4 expected expression +{2*} diff --git a/tests/typ/lang/raw.typ b/tests/typ/lang/raw.typ new file mode 100644 index 000000000..22eda139a --- /dev/null +++ b/tests/typ/lang/raw.typ @@ -0,0 +1,23 @@ +The keyword ``rust let``. + +`#let x = 1` +`[f 1]` + +--- +[font 6pt] + +``py +import this + +def say_hi(): + print("Hello World!") +`` + +--- +```` +```backticks``` +```` + +--- +// Error: 2:1-2:1 expected backtick(s) +`endless