mirror of
https://github.com/typst/typst
synced 2025-05-14 04:56:26 +08:00
Move let-binding tests to integration 🚚
This commit is contained in:
parent
73b25bdad0
commit
469d78d610
@ -186,21 +186,6 @@ macro_rules! Block {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! Let {
|
|
||||||
(@$pat:expr $(=> $expr:expr)?) => {{
|
|
||||||
#[allow(unused)]
|
|
||||||
let mut expr = None;
|
|
||||||
$(expr = Some(Box::new(into!($expr)));)?
|
|
||||||
Expr::Let(ExprLet {
|
|
||||||
pat: into!($pat).map(|s: &str| Ident(s.into())),
|
|
||||||
expr
|
|
||||||
})
|
|
||||||
}};
|
|
||||||
($($tts:tt)*) => {
|
|
||||||
Node::Expr(Let!(@$($tts)*))
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_parse_raw() {
|
fn test_parse_raw() {
|
||||||
// Basic, mostly tested in tokenizer and resolver.
|
// Basic, mostly tested in tokenizer and resolver.
|
||||||
@ -345,26 +330,3 @@ fn test_parse_values() {
|
|||||||
nodes: [],
|
nodes: [],
|
||||||
errors: [S(1..3, "expected expression, found invalid token")]);
|
errors: [S(1..3, "expected expression, found invalid token")]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_parse_let_bindings() {
|
|
||||||
// Basic let.
|
|
||||||
t!("#let x;" Let!("x"));
|
|
||||||
t!("#let _y=1;" Let!("_y" => Int(1)));
|
|
||||||
|
|
||||||
// Followed by text.
|
|
||||||
t!("#let x = 1\n+\n2;\nHi there"
|
|
||||||
Let!("x" => Binary(Int(1), Add, Int(2))),
|
|
||||||
Space, Text("Hi"), Space, Text("there"));
|
|
||||||
|
|
||||||
// Missing semicolon.
|
|
||||||
t!("#let x = a\nHi"
|
|
||||||
nodes: [Let!("x" => Id("a"))],
|
|
||||||
errors: [S(11..13, "unexpected identifier"),
|
|
||||||
S(13..13, "expected semicolon")]);
|
|
||||||
|
|
||||||
// Missing identifier.
|
|
||||||
t!("#let 1;"
|
|
||||||
nodes: [],
|
|
||||||
errors: [S(5..6, "expected identifier, found integer")])
|
|
||||||
}
|
|
||||||
|
BIN
tests/ref/lang/let.png
Normal file
BIN
tests/ref/lang/let.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
20
tests/typ/lang/let.typ
Normal file
20
tests/typ/lang/let.typ
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// Automatically initialized with `none`.
|
||||||
|
#let x;
|
||||||
|
{(x,)}
|
||||||
|
|
||||||
|
// Can start with underscore.
|
||||||
|
#let _y=1;
|
||||||
|
{_y}
|
||||||
|
|
||||||
|
// Multiline.
|
||||||
|
#let z = "world"
|
||||||
|
+ " 🌏"; Hello, {z}!
|
||||||
|
|
||||||
|
// Error: 1:6-1:7 expected identifier, found integer
|
||||||
|
#let 1;
|
||||||
|
|
||||||
|
// Error: 4:1-4:3 unexpected identifier
|
||||||
|
// Error: 3:4-3:9 unexpected identifier
|
||||||
|
// Error: 3:1-3:1 expected semicolon
|
||||||
|
#let x = ""
|
||||||
|
Hi there
|
@ -204,14 +204,14 @@ fn test_part(i: usize, src: &str, env: &SharedEnv) -> (bool, Vec<Frame>) {
|
|||||||
|
|
||||||
for diag in &diags {
|
for diag in &diags {
|
||||||
if !ref_diags.contains(diag) {
|
if !ref_diags.contains(diag) {
|
||||||
print!(" Unexpected | ");
|
print!(" Not annotated | ");
|
||||||
print_diag(diag, &map);
|
print_diag(diag, &map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for diag in &ref_diags {
|
for diag in &ref_diags {
|
||||||
if !diags.contains(diag) {
|
if !diags.contains(diag) {
|
||||||
print!(" Missing | ");
|
print!(" Not emitted | ");
|
||||||
print_diag(diag, &map);
|
print_diag(diag, &map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user