mirror of
https://github.com/typst/typst
synced 2025-05-14 17:15:28 +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 {
|
macro_rules! Template {
|
||||||
(@$($node:expr),* $(,)?) => {
|
(@$($node:expr),* $(,)?) => {
|
||||||
vec![$(into!($node)),*]
|
vec![$(into!($node)),*]
|
||||||
@ -395,85 +383,6 @@ fn test_parse_arguments() {
|
|||||||
errors: [S(3..6, "expected identifier")]);
|
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]
|
#[test]
|
||||||
fn test_parse_expressions() {
|
fn test_parse_expressions() {
|
||||||
// Parentheses.
|
// 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