mirror of
https://github.com/typst/typst
synced 2025-05-13 20:46:23 +08:00
Move array and dictionary tests to integration 🚚
This commit is contained in:
parent
6efa6c7891
commit
2aa4c5bfc6
@ -168,18 +168,6 @@ macro_rules! Array {
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! Dict {
|
||||
(@$($name:expr => $expr:expr),* $(,)?) => {
|
||||
vec![$(Named {
|
||||
name: into!($name).map(|s: &str| Ident(s.into())),
|
||||
expr: into!($expr)
|
||||
}),*]
|
||||
};
|
||||
($($tts:tt)*) => {
|
||||
Expr::Dict(Dict![@$($tts)*])
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! Template {
|
||||
(@$($node:expr),* $(,)?) => {
|
||||
vec![$(into!($node)),*]
|
||||
@ -395,85 +383,6 @@ fn test_parse_arguments() {
|
||||
errors: [S(3..6, "expected identifier")]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_arrays() {
|
||||
// Empty array.
|
||||
t!("{()}" Block!(Array![]));
|
||||
|
||||
// Array with one item and trailing comma + spans.
|
||||
t!("{-(1,)}"
|
||||
nodes: [S(0..7, Block!(Unary(
|
||||
S(1..2, Neg),
|
||||
S(2..6, Array![S(3..4, Int(1))])
|
||||
)))],
|
||||
spans: true);
|
||||
|
||||
// Array with three items and trailing comma.
|
||||
t!(r#"{("one", 2, #003,)}"# Block!(Array![
|
||||
Str("one"),
|
||||
Int(2),
|
||||
Color(RgbaColor::new(0, 0, 0x33, 0xff))
|
||||
]));
|
||||
|
||||
// Unclosed.
|
||||
t!("{(}"
|
||||
nodes: [Block!(Array![])],
|
||||
errors: [S(2..2, "expected closing paren")]);
|
||||
|
||||
// Missing comma + invalid token.
|
||||
t!("{(1*/2)}"
|
||||
nodes: [Block!(Array![Int(1), Int(2)])],
|
||||
errors: [S(3..5, "expected expression, found end of block comment"),
|
||||
S(3..3, "expected comma")]);
|
||||
|
||||
// Invalid token.
|
||||
t!("{(1, 1u 2)}"
|
||||
nodes: [Block!(Array![Int(1), Int(2)])],
|
||||
errors: [S(5..7, "expected expression, found invalid token")]);
|
||||
|
||||
// Coerced to expression with leading comma.
|
||||
t!("{(,1)}"
|
||||
nodes: [Block!(Group(Int(1)))],
|
||||
errors: [S(2..3, "expected expression, found comma")]);
|
||||
|
||||
// Missing expression after name makes this an array.
|
||||
t!("{(a:)}"
|
||||
nodes: [Block!(Array![])],
|
||||
errors: [S(4..4, "expected expression")]);
|
||||
|
||||
// Expected expression, found named pair.
|
||||
t!("{(1, b: 2)}"
|
||||
nodes: [Block!(Array![Int(1)])],
|
||||
errors: [S(5..9, "expected expression, found named pair")]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_dictionaries() {
|
||||
// Empty dictionary.
|
||||
t!("{(:)}" Block!(Dict![]));
|
||||
|
||||
// Dictionary with two pairs + spans.
|
||||
t!("{(one: 1, two: 2)}"
|
||||
nodes: [S(0..18, Block!(Dict![
|
||||
S(2..5, "one") => S(7..8, Int(1)),
|
||||
S(10..13, "two") => S(15..16, Int(2)),
|
||||
]))],
|
||||
spans: true);
|
||||
|
||||
// Expected named pair, found expression.
|
||||
t!("{(a: 1, b)}"
|
||||
nodes: [Block!(Dict!["a" => Int(1)])],
|
||||
errors: [S(8..9, "expected named pair, found expression")]);
|
||||
|
||||
// Dictionary marker followed by more stuff.
|
||||
t!("{(:1 b:[], true::)}"
|
||||
nodes: [Block!(Dict!["b" => Template![]])],
|
||||
errors: [S(3..4, "expected named pair, found expression"),
|
||||
S(4..4, "expected comma"),
|
||||
S(11..15, "expected identifier"),
|
||||
S(16..17, "expected expression, found colon")]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_expressions() {
|
||||
// Parentheses.
|
||||
|
BIN
tests/ref/arrays.png
Normal file
BIN
tests/ref/arrays.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
BIN
tests/ref/dictionaries.png
Normal file
BIN
tests/ref/dictionaries.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
37
tests/typ/arrays.typ
Normal file
37
tests/typ/arrays.typ
Normal file
@ -0,0 +1,37 @@
|
||||
// Empty.
|
||||
{()}
|
||||
|
||||
// One item and trailing comma.
|
||||
{(-1,)}
|
||||
|
||||
// No trailing comma.
|
||||
{(true, false)}
|
||||
|
||||
// Multiple lines and items and trailing comma.
|
||||
{("one"
|
||||
, 2
|
||||
, #003
|
||||
,)}
|
||||
|
||||
---
|
||||
// Test errors.
|
||||
//
|
||||
// error: 2:3-2:3 expected closing paren
|
||||
// error: 4:4-4:6 expected expression, found end of block comment
|
||||
// error: 4:4-4:4 expected comma
|
||||
// error: 6:6-6:8 expected expression, found invalid token
|
||||
// error: 8:3-8:4 expected expression, found comma
|
||||
// error: 10:5-10:5 expected expression
|
||||
// error: 12:6-12:10 expected expression, found named pair
|
||||
|
||||
{(}
|
||||
|
||||
{(1*/2)}
|
||||
|
||||
{(1, 1u 2)}
|
||||
|
||||
{(,1)}
|
||||
|
||||
{(a:)}
|
||||
|
||||
{(1, b: 2)}
|
18
tests/typ/dictionaries.typ
Normal file
18
tests/typ/dictionaries.typ
Normal file
@ -0,0 +1,18 @@
|
||||
// Empty
|
||||
{(:)}
|
||||
|
||||
// Two pairs.
|
||||
{(one: 1, two: 2)}
|
||||
|
||||
---
|
||||
// Test errors.
|
||||
//
|
||||
// error: 2:9-2:10 expected named pair, found expression
|
||||
// error: 4:4-4:5 expected named pair, found expression
|
||||
// error: 4:5-4:5 expected comma
|
||||
// error: 4:12-4:16 expected identifier
|
||||
// error: 4:17-4:18 expected expression, found colon
|
||||
|
||||
{(a: 1, b)}
|
||||
|
||||
{(:1 b:[], true::)}
|
Loading…
x
Reference in New Issue
Block a user