use macro for unit tests
This commit is contained in:
parent
c22df74dd3
commit
b852f52a5e
@ -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()
|
||||||
}
|
}
|
||||||
}));
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user