use super::*;
#[test]
fn parse_interpolated_string_double_brace_begin() {
parse_errors(
r#"
_ = `{{oops}}`
"#,
)
.assert_first_message(
"Double braces are not permitted within interpolated strings; did you mean '\\{'?",
);
}
#[test]
fn parse_interpolated_string_double_brace_mid() {
parse_errors(
r#"
_ = `{nice} {{oops}}`
"#,
)
.assert_first_message(
"Double braces are not permitted within interpolated strings; did you mean '\\{'?",
);
}
#[test]
fn parse_interpolated_string_without_end_brace() {
for (source, column) in [(r#"_ = `{a`"#, 7), (r#"_ = `{abcdefg`"#, 13)] {
let errors = parse_errors(source);
assert_eq!(errors.len(), 1, "{source}");
assert_eq!(
errors[0].message, "Malformed interpolated string; did you forget to add a '}'?",
"{source}"
);
assert_eq!(errors[0].location.begin.column, column, "{source}");
}
assert_eq!(
parse_errors(r#"_ = `{a`"#)[0].location.begin.column,
parse_errors(r#"_ = `{abcdefg`"#)[0].location.begin.column
);
}
#[test]
fn parse_interpolated_string_without_end_brace_in_table() {
let errors = parse_errors(
r#"
_ = { `{a` }
"#,
);
assert_eq!(errors.len(), 2);
assert_eq!(
errors[0].message,
"Malformed interpolated string; did you forget to add a '}'?"
);
assert_eq!(
errors[1].message,
"Expected '}' (to close '{' at line 2), got <eof>"
);
}
#[test]
fn parse_interpolated_string_mid_without_end_brace_in_table() {
let errors = parse_errors(
r#"
_ = { `x {"y"} {z` }
"#,
);
assert_eq!(errors.len(), 2);
assert_eq!(
errors[0].message,
"Malformed interpolated string; did you forget to add a '}'?"
);
assert_eq!(
errors[1].message,
"Expected '}' (to close '{' at line 2), got <eof>"
);
}
#[test]
fn parse_interpolated_string_without_expression() {
for source in [r#"print(`{}`)"#, r#"print(`{}{1}`)"#] {
parse_errors(source)
.assert_first_message("Malformed interpolated string, expected expression inside '{}'");
}
}
#[test]
fn parse_interpolated_string_call_without_parens() {
parse_errors(
r#"
_ = print `{42}`
"#,
)
.assert_first_message("Expected identifier when parsing expression, got `{");
}
#[test]
fn parse_interpolated_string_weird_token() {
parse_errors(
r#"
local a = `??? {42 !!}`
"#,
)
.assert_first_message("Malformed interpolated string, got '!'");
}
#[test]
fn parse_interpolated_string_malformed_escape() {
parse_errors(
r#"
local a = `???\xQQ {1}`
"#,
)
.assert_first_message("Interpolated string literal contains malformed escape sequence");
}
#[test]
fn parse_interpolated_string_as_type_fail() {
with_parse(
r#"
local a: `what` = `???`
local b: `what {"the"}` = `???`
local c: `what {"the"} heck` = `???`
"#,
ParseOptions::default(),
|result| {
let result = result.unwrap();
let errors = result.metadata.errors;
assert_eq!(errors.len(), 3);
for error in errors {
assert_eq!(
error.message,
"Interpolated string literals cannot be used as types"
);
}
},
);
}