Skip to content

Commit

Permalink
Add new tests for deserializing primitives
Browse files Browse the repository at this point in the history
failures (72):
    trivial::cdata::char_::field
    trivial::cdata::char_::primitive
    trivial::cdata::f32_::field
    trivial::cdata::f32_::primitive
    trivial::cdata::f64_::field
    trivial::cdata::f64_::primitive
    trivial::cdata::false_::field
    trivial::cdata::false_::primitive
    trivial::cdata::i128_::field
    trivial::cdata::i128_::primitive
    trivial::cdata::i16_::field
    trivial::cdata::i16_::primitive
    trivial::cdata::i32_::field
    trivial::cdata::i32_::primitive
    trivial::cdata::i64_::field
    trivial::cdata::i64_::primitive
    trivial::cdata::i8_::field
    trivial::cdata::i8_::primitive
    trivial::cdata::isize_::field
    trivial::cdata::isize_::primitive
    trivial::cdata::string::field
    trivial::cdata::string::primitive
    trivial::cdata::true_::field
    trivial::cdata::true_::primitive
    trivial::cdata::u128_::field
    trivial::cdata::u128_::primitive
    trivial::cdata::u16_::field
    trivial::cdata::u16_::primitive
    trivial::cdata::u32_::field
    trivial::cdata::u32_::primitive
    trivial::cdata::u64_::field
    trivial::cdata::u64_::primitive
    trivial::cdata::u8_::field
    trivial::cdata::u8_::primitive
    trivial::cdata::usize_::field
    trivial::cdata::usize_::primitive
    trivial::text::char_::field
    trivial::text::char_::primitive
    trivial::text::f32_::field
    trivial::text::f32_::primitive
    trivial::text::f64_::field
    trivial::text::f64_::primitive
    trivial::text::false_::field
    trivial::text::false_::primitive
    trivial::text::i128_::field
    trivial::text::i128_::primitive
    trivial::text::i16_::field
    trivial::text::i16_::primitive
    trivial::text::i32_::field
    trivial::text::i32_::primitive
    trivial::text::i64_::field
    trivial::text::i64_::primitive
    trivial::text::i8_::field
    trivial::text::i8_::primitive
    trivial::text::isize_::field
    trivial::text::isize_::primitive
    trivial::text::string::field
    trivial::text::string::primitive
    trivial::text::true_::field
    trivial::text::true_::primitive
    trivial::text::u128_::field
    trivial::text::u128_::primitive
    trivial::text::u16_::field
    trivial::text::u16_::primitive
    trivial::text::u32_::field
    trivial::text::u32_::primitive
    trivial::text::u64_::field
    trivial::text::u64_::primitive
    trivial::text::u8_::field
    trivial::text::u8_::primitive
    trivial::text::usize_::field
    trivial::text::usize_::primitive
  • Loading branch information
Mingun committed Oct 6, 2023
1 parent 8987d15 commit 14a63d7
Showing 1 changed file with 82 additions and 1 deletion.
83 changes: 82 additions & 1 deletion tests/serde-de.rs
Original file line number Diff line number Diff line change
Expand Up @@ -189,11 +189,87 @@ mod trivial {
use super::*;
use pretty_assertions::assert_eq;

#[test]
fn naked() {
let item: $type = from_str(&format!("<root>{}</root>", $value)).unwrap();
let expected: $type = $expected;
assert_eq!(item, expected);

match from_str::<$type>(&format!("<root><nested>{}</nested></root>", $value)) {
// Expected unexpected start element `<nested>`
Err(DeError::UnexpectedStart(tag)) => assert_eq!(tag, b"nested"),
x => panic!(
r#"Expected `Err(DeError::UnexpectedStart("nested"))`, but got `{:?}`"#,
x
),
}

match from_str::<$type>(&format!("<root>{}<something-else/></root>", $value)) {
// Expected unexpected start element `<something-else>`
Err(DeError::UnexpectedStart(tag)) => assert_eq!(tag, b"something-else"),
x => panic!(
r#"Expected `Err(DeError::UnexpectedStart("something-else"))`, but got `{:?}`"#,
x
),
}

match from_str::<$type>(&format!("<root><something-else/>{}</root>", $value)) {
// Expected unexpected start element `<something-else>`
Err(DeError::UnexpectedStart(tag)) => assert_eq!(tag, b"something-else"),
x => panic!(
r#"Expected `Err(DeError::UnexpectedStart("something-else"))`, but got `{:?}`"#,
x
),
}
}

#[test]
fn field() {
let item: Field<$type> = from_str(&format!("<root><value>{}</value></root>", $value)).unwrap();
assert_eq!(item, Field { value: $expected });

match from_str::<Field<$type>>(&format!("<root><value><nested>{}</nested></value></root>", $value)) {
// Expected unexpected start element `<nested>`
Err(DeError::UnexpectedStart(tag)) => assert_eq!(tag, b"nested"),
x => panic!(
r#"Expected `Err(DeError::UnexpectedStart("nested"))`, but got `{:?}`"#,
x
),
}

match from_str::<Field<$type>>(&format!("<root><value>{}<something-else/></value></root>", $value)) {
// Expected unexpected start element `<something-else>`
Err(DeError::UnexpectedStart(tag)) => assert_eq!(tag, b"something-else"),
x => panic!(
r#"Expected `Err(DeError::UnexpectedStart("something-else"))`, but got `{:?}`"#,
x
),
}

match from_str::<Field<$type>>(&format!("<root><value><something-else/>{}</value></root>", $value)) {
// Expected unexpected start element `<something-else>`
Err(DeError::UnexpectedStart(tag)) => assert_eq!(tag, b"something-else"),
x => panic!(
r#"Expected `Err(DeError::UnexpectedStart("something-else"))`, but got `{:?}`"#,
x
),
}
}

/// Tests deserialization from top-level tag content: `<root>...content...</root>`
#[test]
fn struct_() {
fn text() {
let item: Trivial<$type> = from_str(&format!("<root>{}</root>", $value)).unwrap();
assert_eq!(item, Trivial { value: $expected });

// Unlike `naked` test, here we have a struct that is serialized to XML with
// an implicit field `$text` and some other field "something-else" which not interested
// for us in the Trivial structure. If you want the same behavior as for naked primitive,
// use `$value` field which would consume all data, unless a dedicated field would present
let item: Trivial<$type> = from_str(&format!("<root>{}<something-else/></root>", $value)).unwrap();
assert_eq!(item, Trivial { value: $expected });

let item: Trivial<$type> = from_str(&format!("<root><something-else/>{}</root>", $value)).unwrap();
assert_eq!(item, Trivial { value: $expected });

match from_str::<Trivial<$type>>(&format!("<root><nested>{}</nested></root>", $value)) {
Expand All @@ -209,6 +285,11 @@ mod trivial {
};
}

#[derive(Debug, Deserialize, PartialEq)]
struct Field<T> {
value: T,
}

/// Well-formed XML must have a single tag at the root level.
/// Any XML tag can be modeled as a struct, and content of this tag are modeled as
/// fields of this struct.
Expand Down

0 comments on commit 14a63d7

Please sign in to comment.