use hcl_edit::parser::parse_body;
use indoc::indoc;
use pretty_assertions::assert_eq;
macro_rules! assert_error {
($hcl:expr, $msg:expr) => {
match parse_body($hcl) {
Ok(s) => panic!("parsed to: {:#?}", s),
Err(e) => assert_eq!($msg, e.to_string()),
}
};
}
#[test]
fn invalid_structures() {
assert_error!(
"foo = 1\nbar [",
indoc! {r#"
--> HCL parse error in line 2, column 5
|
2 | bar [
| ^---
|
= invalid structure; expected `{`, `=`, `"` or identifier"#}
);
assert_error!(
"foo = 1\nfoo = 2",
indoc! {r#"
--> HCL parse error in line 2, column 1
|
2 | foo = 2
| ^---
|
= invalid attribute; expected unique attribute key; found redefined attribute"#}
);
}
#[test]
fn invalid_blocks() {
assert_error!(
"ident {",
indoc! {r#"
--> HCL parse error in line 1, column 8
|
1 | ident {
| ^---
|
= invalid block body; expected `}`, newline or identifier"#}
);
assert_error!(
"ident \"label\" {",
indoc! {r#"
--> HCL parse error in line 1, column 16
|
1 | ident "label" {
| ^---
|
= invalid block body; expected `}`, newline or identifier"#}
);
assert_error!(
"ident { foo }",
indoc! {r#"
--> HCL parse error in line 1, column 13
|
1 | ident { foo }
| ^---
|
= invalid attribute; expected `=`"#}
);
assert_error!(
"ident { [ }",
indoc! {r#"
--> HCL parse error in line 1, column 9
|
1 | ident { [ }
| ^---
|
= invalid block body; expected `}`, newline or identifier"#}
);
}
#[test]
fn invalid_exprs() {
assert_error!(
"ident = ''",
indoc! {r#"
--> HCL parse error in line 1, column 9
|
1 | ident = ''
| ^---
|
= invalid expression; expected `"`, `[`, `{`, `-`, `!`, `(`, `_`, `<`, letter or digit"#}
);
assert_error!(
"ident = var.%",
indoc! {r#"
--> HCL parse error in line 1, column 13
|
1 | ident = var.%
| ^---
|
= invalid traversal operator; expected `*`, identifier or unsigned integer"#}
);
assert_error!(
"ident = { foo = \"\"\" }",
indoc! {r#"
--> HCL parse error in line 1, column 19
|
1 | ident = { foo = """ }
| ^---
|
= invalid object item; expected `}`, `,` or newline"#}
);
assert_error!(
"ident = foo::",
indoc! {r#"
--> HCL parse error in line 1, column 14
|
1 | ident = foo::
| ^---
|
= expected identifier"#}
);
assert_error!(
"ident = foo::bar",
indoc! {r#"
--> HCL parse error in line 1, column 17
|
1 | ident = foo::bar
| ^---
|
= expected `(`"#}
);
assert_error!(
"ident = foo( ",
indoc! {r#"
--> HCL parse error in line 1, column 14
|
1 | ident = foo(
| ^---
|
= expected `)` or expression"#}
);
assert_error!(
"unicodé_ident = '4",
indoc! {r#"
--> HCL parse error in line 1, column 17
|
1 | unicodé_ident = '4
| ^---
|
= invalid expression; expected `"`, `[`, `{`, `-`, `!`, `(`, `_`, `<`, letter or digit"#}
);
}