use std::io::Cursor; use lsdata::ParseError::*; use lsdata::LSD; #[test] fn unexpected_char_at_file_end() { assert!(matches!( LSD::parse(Cursor::new(r#"[] test"#)), Err(UnexpectedCharAtFileEnd) )); assert!(matches!( LSD::parse(Cursor::new(r#"{} test"#)), Err(UnexpectedCharAtFileEnd) )); } #[test] fn unexpected_string_end() { assert!(matches!( LSD::parse(Cursor::new(r#"test ""#)), Err(UnexpectedStringEnd) )); assert!(matches!( LSD::parse(Cursor::new(r#"test "\u"#)), Err(UnexpectedStringEnd) )); assert!(matches!( LSD::parse(Cursor::new(r#"test "\udfff"#)), Err(UnexpectedStringEnd) )); assert!(matches!( LSD::parse(Cursor::new(r#"test "\x"#)), Err(UnexpectedStringEnd) )); assert!(matches!( LSD::parse(Cursor::new(r#"test "\xff"#)), Err(UnexpectedStringEnd) )); } #[test] fn unexpected_char_escape_end() { assert!(matches!( LSD::parse(Cursor::new(r#"test "\"#)), Err(UnexpectedCharEscapeEnd) )); assert!(matches!( LSD::parse(Cursor::new(r#"test "\j"#)), Err(UnexpectedCharEscapeEnd) )); } #[test] fn unexpected_char_in_byte_escape() { assert!(matches!( LSD::parse(Cursor::new(r#"test "\xffNO"#)), Err(UnexpectedCharInByteEscape) )); assert!(matches!( LSD::parse(Cursor::new( r#"test "\xf0\x00\x00\x00\x00""# )), Err(UnexpectedCharInByteEscape) )); } #[test] fn unexpected_char_in_unicode_escape() { assert!(matches!( LSD::parse(Cursor::new( r#"test "\udfffNO""# )), Err(UnexpectedCharInUnicodeEscape) )); assert!(matches!( LSD::parse(Cursor::new( r#"test "\udfff\udfff""# )), Err(UnexpectedCharInUnicodeEscape) )); } #[test] fn expected_key_or_end() { assert!(matches!( LSD::parse(Cursor::new(r#"{"#)), Err(ExpectedKeyOrEnd) )); } #[test] fn expected_key_part_after_key_separator() { assert!(matches!( LSD::parse(Cursor::new(r#"{a."#)), Err(ExpectedKeyPartAfterKeySeparator) )); } #[test] fn expected_lsd_after_key() { assert!(matches!( LSD::parse(Cursor::new(r#"{a "#)), Err(ExpectedLSDAfterKey) )); } #[test] fn expected_list_item_or_end() { assert!(matches!( LSD::parse(Cursor::new(r#"["#)), Err(ExpectedListLSDOrEnd) )); } #[test] fn key_collision_should_be_level_but_is_not() { assert!(matches!( LSD::parse(Cursor::new( r#" a 10 a.b 20 "# )), Err(KeyCollisionShouldBeLevelButIsNot) )); } #[test] fn key_collision_key_already_exists() { assert!(matches!( LSD::parse(Cursor::new( r#" a 10 a 20 "# )), Err(KeyCollisionKeyAlreadyExists( .. )) )); }