diff --git a/yaserde/tests/der_default.rs b/yaserde/tests/der_default.rs
new file mode 100644
index 0000000..dc34a04
--- /dev/null
+++ b/yaserde/tests/der_default.rs
@@ -0,0 +1,89 @@
+#[macro_use]
+extern crate log;
+extern crate xml;
+extern crate yaserde;
+#[macro_use]
+extern crate yaserde_derive;
+
+use std::io::Read;
+use yaserde::de::from_str;
+use yaserde::YaDeserialize;
+
+macro_rules! convert_and_validate {
+ ($content: expr, $struct: tt, $model: expr) => {
+ let loaded: Result<$struct, String> = from_str($content);
+ assert_eq!(loaded, Ok($model));
+ };
+}
+
+#[test]
+fn de_default_field_string() {
+ fn default_string() -> String {
+ "my_default_value".to_string()
+ }
+
+ #[derive(YaDeserialize, PartialEq, Debug)]
+ #[yaserde(root = "base")]
+ pub struct XmlStruct {
+ #[yaserde(default = "default_string")]
+ background: String,
+ }
+
+ let content =
+ "";
+ convert_and_validate!(
+ content,
+ XmlStruct,
+ XmlStruct {
+ background: "my_default_value".to_string(),
+ }
+ );
+}
+
+#[test]
+fn de_default_field_boolean() {
+ fn default_boolean() -> bool {
+ true
+ }
+
+ #[derive(YaDeserialize, PartialEq, Debug)]
+ #[yaserde(root = "base")]
+ pub struct XmlStruct {
+ #[yaserde(default = "default_boolean")]
+ background: bool,
+ }
+
+ let content =
+ "";
+ convert_and_validate!(
+ content,
+ XmlStruct,
+ XmlStruct {
+ background: true,
+ }
+ );
+}
+
+#[test]
+fn de_default_field_number() {
+ fn default_number() -> u8 {
+ 6
+ }
+
+ #[derive(YaDeserialize, PartialEq, Debug)]
+ #[yaserde(root = "base")]
+ pub struct XmlStruct {
+ #[yaserde(default = "default_number")]
+ background: u8,
+ }
+
+ let content =
+ "";
+ convert_and_validate!(
+ content,
+ XmlStruct,
+ XmlStruct {
+ background: 6,
+ }
+ );
+}