use super::*;
#[test]
fn unclosed_flow_body_recovers() {
let p = assert_lossless("flow greet() {\n Hello\n");
assert!(!p.errors().is_empty());
}
#[test]
fn stray_closing_brace_recovers() {
let p = assert_lossless("}\n");
assert!(!p.errors().is_empty());
}
#[test]
fn keyword_as_prose_falls_through() {
let src = "flow through the garden and see what grows.\n";
let p = assert_lossless(src);
assert!(p.errors().is_empty(), "errors: {:?}", p.errors());
}
#[test]
fn decl_keyword_followed_by_ident_and_brace_is_a_decl() {
let src = "flow gardenfulofdanger {\n}\n";
let p = assert_lossless(src);
assert!(p.errors().is_empty(), "errors: {:?}", p.errors());
}
#[test]
fn decl_keyword_followed_by_ident_alone_is_still_prose() {
let src = "flow gardenfulofdanger\n";
let p = assert_lossless(src);
assert!(p.errors().is_empty(), "errors: {:?}", p.errors());
}
#[test]
fn garbage_tokens_never_panic() {
let src = "flow {}}}{{{ @[ ( ) -> -> -> :: :: match if if if\n";
let p = assert_lossless(src);
let _ = p.errors();
}
#[test]
fn deeply_nested_interpolation_does_not_overflow_stack() {
let mut src = String::new();
for _ in 0..2000 {
src.push('(');
}
src.push('1');
for _ in 0..2000 {
src.push(')');
}
let wrapped = format!("var x = {src}\n");
let p = assert_lossless(&wrapped);
let _ = p.errors();
}