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

View File

@ -8,7 +8,21 @@ use std::str;
use std::io::Cursor; use std::io::Cursor;
use std::io::Write; use std::io::Write;
use xml::writer::EventWriter; 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] #[test]
fn ser_basic() { 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 content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><base><item>something</item></base>".to_string();
convert_and_validate!(model, content);
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] #[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 content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><base><items>something1</items><items>something2</items></base>".to_string();
convert_and_validate!(model, content);
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);
} }