Move let-binding tests to integration 🚚

This commit is contained in:
Laurenz 2021-01-14 17:41:13 +01:00
parent 73b25bdad0
commit 469d78d610
4 changed files with 22 additions and 40 deletions

View File

@ -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]
fn test_parse_raw() {
// Basic, mostly tested in tokenizer and resolver.
@ -345,26 +330,3 @@ fn test_parse_values() {
nodes: [],
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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

20
tests/typ/lang/let.typ Normal file
View 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

View File

@ -204,14 +204,14 @@ fn test_part(i: usize, src: &str, env: &SharedEnv) -> (bool, Vec<Frame>) {
for diag in &diags {
if !ref_diags.contains(diag) {
print!(" Unexpected | ");
print!(" Not annotated | ");
print_diag(diag, &map);
}
}
for diag in &ref_diags {
if !diags.contains(diag) {
print!(" Missing | ");
print!(" Not emitted | ");
print_diag(diag, &map);
}
}