use snapbox::assert_data_eq; use snapbox::prelude::*; use snapbox::str; #[test] fn incomplete_inline_table_issue_296() { let err = "native = {".parse::().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::().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::().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::() .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::().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::().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::().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::().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::().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::().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::().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::().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::().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::().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::().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::().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::().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::().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::().unwrap_err(); dbg!(err.span()); let actual = &input[err.span().unwrap()]; assert_eq!(actual, "ᾂ"); }