diff --git a/src/protocol/tests/parser_literals.rs b/src/protocol/tests/parser_literals.rs index de343928abfb66f8f8b6cc0399badfa476c205b4..9560cbfe1a33d149a16f4d475688938e841f86ae 100644 --- a/src/protocol/tests/parser_literals.rs +++ b/src/protocol/tests/parser_literals.rs @@ -69,6 +69,47 @@ fn test_string_literals() { ").error(|e| { e.assert_msg_has(0, "non-ASCII character in string literal"); }); } +#[test] +fn test_bytestring_literals() { + Tester::new_single_source_expect_ok("valid", " + func test() -> u8[] { + auto v1 = b\"Hello, world!\"; + auto v2 = b\"\\t\\r\\n\\\\\"; // why hello there, confusing thing + auto v3 = b\"\"; + return b\"No way, dude!\"; + } + ").for_function("test", |f| { f + .for_variable("v1", |v| { v.assert_concrete_type("u8[]"); }) + .for_variable("v2", |v| { v.assert_concrete_type("u8[]"); }) + .for_variable("v3", |v| { v.assert_concrete_type("u8[]"); }); + }); + + Tester::new_single_source_expect_err("unterminated simple", " + func test() -> u8[] { return b\"'; } + ").error(|e| { e + .assert_num(1) + .assert_occurs_at(0, "b\"") + .assert_msg_has(0, "unterminated"); + }); + + Tester::new_single_source_expect_err("unterminated with preceding escaped", " + func test() -> u8[] { return b\"\\\"; } + ").error(|e| { e + .assert_num(1) + .assert_occurs_at(0, "b\"\\") + .assert_msg_has(0, "unterminated"); + }); + + Tester::new_single_source_expect_err("invalid escaped character", " + func test() -> u8[] { return b\"\\y\"; } + ").error(|e| { e.assert_msg_has(0, "unsupported escape character 'y'"); }); + + // Note sure if this should always be in here... + Tester::new_single_source_expect_err("non-ASCII string", " + func test() -> u8[] { return b\"💧\"; } + ").error(|e| { e.assert_msg_has(0, "non-ASCII character in string literal"); }); +} + #[test] fn test_tuple_literals() { Tester::new_single_source_expect_ok("zero tuples", "