use macro for unit tests

This commit is contained in:
Marc-Antoine Arnaud 2018-04-10 10:23:51 +02:00
parent c22df74dd3
commit b852f52a5e
2 changed files with 42 additions and 53 deletions

View File

@ -6,7 +6,16 @@ extern crate xml;
use std::io::Read;
use xml::reader::EventReader;
use yaserde::{YaDeserialize};
use yaserde::YaDeserialize;
macro_rules! convert_and_validate {
($content:expr, $model:expr) => {
let mut parser = EventReader::from_str($content);
let loaded = XmlStruct::derive_deserialize(&mut parser, None);
assert_eq!(loaded, Ok($model));
}
}
#[test]
fn de_basic() {
@ -16,13 +25,10 @@ fn de_basic() {
item: String
}
let content = "<base><item>something</item></base>".to_string();
let mut parser = EventReader::from_str(content.as_str());
let loaded = XmlStruct::derive_deserialize(&mut parser, None);
assert_eq!(loaded, Ok(XmlStruct{
let content = "<base><item>something</item></base>";
convert_and_validate!(content, XmlStruct{
item: "something".to_string()
}));
});
}
#[test]
@ -33,16 +39,13 @@ fn de_list_of_items() {
items: Vec<String>
}
let content = "<base><items>something1</items><items>something2</items></base>".to_string();
let mut parser = EventReader::from_str(content.as_str());
let loaded = XmlStruct::derive_deserialize(&mut parser, None);
assert_eq!(loaded, Ok(XmlStruct{
let content = "<base><items>something1</items><items>something2</items></base>";
convert_and_validate!(content, XmlStruct{
items: vec![
"something1".to_string(),
"something2".to_string()
]
}));
});
}
#[test]
@ -70,16 +73,13 @@ fn de_attributes() {
}
}
let content = "<base item=\"something\"><sub subitem=\"sub-something\"></sub></base>".to_string();
let mut parser = EventReader::from_str(content.as_str());
let loaded = XmlStruct::derive_deserialize(&mut parser, None);
assert_eq!(loaded, Ok(XmlStruct{
let content = "<base item=\"something\"><sub subitem=\"sub-something\"></sub></base>";
convert_and_validate!(content, XmlStruct{
item: "something".to_string(),
sub: SubStruct{
subitem: "sub-something".to_string()
}
}));
});
}
#[test]
@ -108,16 +108,13 @@ fn de_rename() {
}
}
let content = "<base Item=\"something\"><sub sub_item=\"sub_something\"></sub></base>".to_string();
let mut parser = EventReader::from_str(content.as_str());
let loaded = XmlStruct::derive_deserialize(&mut parser, None);
assert_eq!(loaded, Ok(XmlStruct{
let content = "<base Item=\"something\"><sub sub_item=\"sub_something\"></sub></base>";
convert_and_validate!(content, XmlStruct{
item: "something".to_string(),
sub_struct: SubStruct{
subitem: "sub_something".to_string()
}
}));
});
}
#[test]
@ -149,15 +146,12 @@ fn de_text_content_with_attributes() {
}
}
let content = "<base Item=\"something\"><sub sub_item=\"sub_something\">text_content</sub></base>".to_string();
let mut parser = EventReader::from_str(content.as_str());
let loaded = XmlStruct::derive_deserialize(&mut parser, None);
assert_eq!(loaded, Ok(XmlStruct{
let content = "<base Item=\"something\"><sub sub_item=\"sub_something\">text_content</sub></base>";
convert_and_validate!(content, XmlStruct{
item: "something".to_string(),
sub_struct: SubStruct{
subitem: "sub_something".to_string(),
text: "text_content".to_string()
}
}));
});
}

View File

@ -8,7 +8,21 @@ use std::str;
use std::io::Cursor;
use std::io::Write;
use xml::writer::EventWriter;
use yaserde::{YaSerialize};
use yaserde::YaSerialize;
macro_rules! convert_and_validate {
($model:expr, $content:expr) => {
let mut buf = Cursor::new(Vec::new());
let mut writer = EventWriter::new(&mut buf);
let _status = $model.derive_serialize(&mut writer, None);
let buffer = writer.into_inner();
let cursor = buffer.get_ref();
let data = str::from_utf8(cursor).expect("Found invalid UTF-8");
assert_eq!(data, $content);
}
}
#[test]
fn ser_basic() {
@ -23,16 +37,7 @@ fn ser_basic() {
};
let content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><base><item>something</item></base>".to_string();
let mut buf = Cursor::new(Vec::new());
let mut writer = EventWriter::new(&mut buf);
let _status = model.derive_serialize(&mut writer, None);
let buffer = writer.into_inner();
let cursor = buffer.get_ref();
let data = str::from_utf8(cursor).expect("Found invalid UTF-8");
assert_eq!(data, content);
convert_and_validate!(model, content);
}
#[test]
@ -51,15 +56,5 @@ fn ser_list_of_items() {
};
let content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><base><items>something1</items><items>something2</items></base>".to_string();
let mut buf = Cursor::new(Vec::new());
let mut writer = EventWriter::new(&mut buf);
let _status = model.derive_serialize(&mut writer, None);
let buffer = writer.into_inner();
let cursor = buffer.get_ref();
let data = str::from_utf8(cursor).expect("Found invalid UTF-8");
assert_eq!(data, content);
convert_and_validate!(model, content);
}