blob: b685ff9ad4e75d45b36b20c33a01bb352af02cf0 [file] [log] [blame]
use snapbox::assert_data_eq;
use snapbox::prelude::*;
use snapbox::str;
#[test]
fn incomplete_inline_table_issue_296() {
let err = "native = {".parse::<toml_edit::DocumentMut>().unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 1, column 11
|
1 | native = {
| ^
invalid inline table
expected `}`
"#]]
.raw()
);
}
#[test]
fn bare_value_disallowed_issue_293() {
let err = "value=zzz".parse::<toml_edit::DocumentMut>().unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 1, column 7
|
1 | value=zzz
| ^
invalid string
expected `"`, `'`
"#]]
.raw()
);
}
#[test]
fn bare_value_in_array_disallowed_issue_293() {
let err = "value=[zzz]".parse::<toml_edit::DocumentMut>().unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 1, column 8
|
1 | value=[zzz]
| ^
invalid array
expected `]`
"#]]
.raw()
);
}
#[test]
fn duplicate_table_after_dotted_key_issue_509() {
let err = "
[dependencies.foo]
version = \"0.16\"
[dependencies]
libc = \"0.2\"
[dependencies]
rand = \"0.3.14\"
"
.parse::<toml_edit::DocumentMut>()
.unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 8, column 1
|
8 | [dependencies]
| ^
invalid table header
duplicate key `dependencies` in document root
"#]]
.raw()
);
}
#[test]
fn bad() {
let toml_input = "a = 01";
let err = toml_input.parse::<toml_edit::DocumentMut>().unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 1, column 6
|
1 | a = 01
| ^
expected newline, `#`
"#]]
.raw()
);
let toml_input = "a = 1__1";
let err = toml_input.parse::<toml_edit::DocumentMut>().unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 1, column 7
|
1 | a = 1__1
| ^
invalid integer
expected digit
"#]]
.raw()
);
let toml_input = "a = 1_";
let err = toml_input.parse::<toml_edit::DocumentMut>().unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 1, column 7
|
1 | a = 1_
| ^
invalid integer
expected digit
"#]]
.raw()
);
let toml_input = "''";
let err = toml_input.parse::<toml_edit::DocumentMut>().unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 1, column 3
|
1 | ''
| ^
expected `.`, `=`
"#]]
.raw()
);
let toml_input = "a = 9e99999";
let err = toml_input.parse::<toml_edit::DocumentMut>().unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 1, column 5
|
1 | a = 9e99999
| ^
invalid floating-point number
"#]]
.raw()
);
let toml_input = "a = \"\u{7f}\"";
let err = toml_input.parse::<toml_edit::DocumentMut>().unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 1, column 6
|
1 | a = ""
| ^
invalid basic string
"#]]
.raw()
);
let toml_input = "a = '\u{7f}'";
let err = toml_input.parse::<toml_edit::DocumentMut>().unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 1, column 6
|
1 | a = ''
| ^
invalid literal string
"#]]
.raw()
);
let toml_input = "a = -0x1";
let err = toml_input.parse::<toml_edit::DocumentMut>().unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 1, column 7
|
1 | a = -0x1
| ^
expected newline, `#`
"#]]
.raw()
);
let toml_input = "a = 0x-1";
let err = toml_input.parse::<toml_edit::DocumentMut>().unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 1, column 7
|
1 | a = 0x-1
| ^
invalid hexadecimal integer
"#]]
.raw()
);
// Dotted keys.
let toml_input = "a.b.c = 1
a.b = 2
";
let err = toml_input.parse::<toml_edit::DocumentMut>().unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 2, column 10
|
2 | a.b = 2
| ^
duplicate key `b` in document root
"#]]
.raw()
);
let toml_input = "a = 1
a.b = 2";
let err = toml_input.parse::<toml_edit::DocumentMut>().unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 2, column 10
|
2 | a.b = 2
| ^
dotted key `a` attempted to extend non-table type (integer)
"#]]
.raw()
);
let toml_input = "a = {k1 = 1, k1.name = \"joe\"}";
let err = toml_input.parse::<toml_edit::DocumentMut>().unwrap_err();
assert_data_eq!(
err.to_string(),
str![[r#"
TOML parse error at line 1, column 6
|
1 | a = {k1 = 1, k1.name = "joe"}
| ^
dotted key `k1` attempted to extend non-table type (integer)
"#]]
.raw()
);
}
#[test]
fn emoji_error_span() {
let input = "😀";
let err = input.parse::<toml_edit::DocumentMut>().unwrap_err();
dbg!(err.span());
let actual = &input[err.span().unwrap()];
assert_eq!(actual, input);
}
#[test]
fn text_error_span() {
let input = "asdf";
let err = input.parse::<toml_edit::DocumentMut>().unwrap_err();
dbg!(err.span());
let actual = &input[err.span().unwrap()];
assert_eq!(actual, "");
}
#[test]
fn fuzzed_68144_error_span() {
let input = "\"\\ᾂr\"";
let err = input.parse::<toml_edit::DocumentMut>().unwrap_err();
dbg!(err.span());
let actual = &input[err.span().unwrap()];
assert_eq!(actual, "ᾂ");
}