diff --git a/src/protocol/tests/parser_literals.rs b/src/protocol/tests/parser_literals.rs new file mode 100644 index 0000000000000000000000000000000000000000..cb21deeeac5996b32ef97fb50745c95619486f7c --- /dev/null +++ b/src/protocol/tests/parser_literals.rs @@ -0,0 +1,65 @@ +use super::*; + +#[test] +fn test_binary_literals() { + Tester::new_single_source_expect_ok("valid", " + func test() -> u32 { + u8 v1 = 0b0100_0010; + u16 v2 = 0b10101010; + u32 v3 = 0b10000001_01111110; + u64 v4 = 0b1001_0110_1001_0110; + + return 0b10110; + } + "); + + Tester::new_single_source_expect_err("invalid character", " + func test() -> u32 { + return 0b10011001_10012001; + } + ").error(|e| { e.assert_msg_has(0, "incorrectly formatted binary number"); }); + + Tester::new_single_source_expect_err("no characters", " + func test() -> u32 { return 0b; } + ").error(|e| { e.assert_msg_has(0, "incorrectly formatted binary number"); }); + + Tester::new_single_source_expect_err("only separators", " + func test() -> u32 { return 0b____; } + ").error(|e| { e.assert_msg_has(0, "incorrectly formatted binary number"); }); +} + +#[test] +fn test_string_literals() { + Tester::new_single_source_expect_ok("valid", " + func test() -> string { + auto v1 = \"Hello, world!\"; + auto v2 = \"\\t\\r\\n\\\\\"; // why hello there, confusing thing + auto v3 = \"\"; + return \"No way, dude!\"; + } + ").for_function("test", |f| { f + .for_variable("v1", |v| { v.assert_concrete_type("string"); }) + .for_variable("v2", |v| { v.assert_concrete_type("string"); }) + .for_variable("v3", |v| { v.assert_concrete_type("string"); }); + }); + + Tester::new_single_source_expect_err("unterminated simple", " + func test() -> string { return \"'; } + ").error(|e| { e + .assert_num(1) + .assert_occurs_at(0, "\"") + .assert_msg_has(0, "unterminated"); + }); + + Tester::new_single_source_expect_err("unterminated with preceding escaped", " + func test() -> string { return \"\\\"; } + ").error(|e| { e + .assert_num(1) + .assert_occurs_at(0, "\"\\") + .assert_msg_has(0, "unterminated"); + }); + + Tester::new_single_source_expect_err("invalid escaped character", " + func test() -> string { return \"\\y\"; } + ").error(|e| { e.assert_msg_has(0, "unsupported escape character 'y'"); }); +} \ No newline at end of file