diff --git a/src/protocol/tests/parser_validation.rs b/src/protocol/tests/parser_validation.rs index 7d516ce640715f9c74acc159ac56a7ed8307bef9..e80f6a90615d914fc5882c72c00d9534292360c8 100644 --- a/src/protocol/tests/parser_validation.rs +++ b/src/protocol/tests/parser_validation.rs @@ -565,6 +565,29 @@ fn test_incorrect_modifying_operators() { ).error(|e| { e.assert_msg_has(0, "assignments are statements"); }); } +#[test] +fn test_variable_introduction_in_scope() { + Tester::new_single_source_expect_err( + "variable use before declaration", + "func f() -> u8 { return thing; auto thing = 5; }" + ).error(|e| { e.assert_msg_has(0, "unresolved variable"); }); + + Tester::new_single_source_expect_err( + "variable use in declaration", + "func f() -> u8 { auto thing = 5 + thing; return thing; }" + ).error(|e| { e.assert_msg_has(0, "unresolved variable"); }); + + Tester::new_single_source_expect_ok( + "variable use after declaration", + "func f() -> u8 { auto thing = 5; return thing; }" + ); + + Tester::new_single_source_expect_err( + "variable use of closed scope", + "func f() -> u8 { { auto thing = 5; } return thing; }" + ).error(|e| { e.assert_msg_has(0, "unresolved variable"); }); +} + #[test] fn test_correct_select_statement() { Tester::new_single_source_expect_ok( @@ -575,7 +598,6 @@ fn test_correct_select_statement() { sync select { outer_value = get(input) -> outer_value = 0; auto new_value = get(input) -> { - f(); outer_value = new_value; } get(input) + get(input) ->