Files @ 3ebc282f2d0e
Branch filter:

Location: CSY/reowolf/src/protocol/tests/parser_literals.rs - annotation

3ebc282f2d0e 2.2 KiB application/rls-services+xml Show Source Show as Raw Download as Raw
mh
String literal testing, fix string escaping bug
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'"); });
}