Merge pull request #199 from vitiral/empty-fails

demonstrate failing test for 'empty' values
This commit is contained in:
Alex Crichton 2017-07-27 11:29:00 -05:00 committed by GitHub
commit 0344559a07
5 changed files with 44 additions and 0 deletions

View file

@ -930,6 +930,15 @@ impl<'a, 'b> ser::SerializeStruct for SerializeTable<'a, 'b> {
}
fn end(self) -> Result<(), Error> {
match self {
SerializeTable::Datetime(_) => {},
SerializeTable::Table { mut ser, first, .. } => {
if first.get() {
let state = ser.state.clone();
ser.emit_table_header(&state)?;
}
}
}
Ok(())
}
}

View file

@ -554,3 +554,25 @@ fn newtypes2() {
}),
}
}
#[derive(Debug, Default, PartialEq, Serialize, Deserialize)]
struct CanBeEmpty {
a: Option<String>,
b: Option<String>,
}
#[test]
fn table_structs_empty() {
let text = "[bar]\n\n[baz]\n\n[bazv]\na = \"foo\"\n\n[foo]\n";
let value: BTreeMap<String, CanBeEmpty> = toml::from_str(text).unwrap();
let mut expected: BTreeMap<String, CanBeEmpty> = BTreeMap::new();
expected.insert("bar".to_string(), CanBeEmpty::default());
expected.insert("baz".to_string(), CanBeEmpty::default());
expected.insert(
"bazv".to_string(),
CanBeEmpty {a: Some("foo".to_string()), b: None},
);
expected.insert("foo".to_string(), CanBeEmpty::default());
assert_eq!(value, expected);
assert_eq!(toml::to_string(&value).unwrap(), text);
}

View file

@ -162,6 +162,9 @@ test!(table_empty,
test!(table_sub_empty,
include_str!("valid/table-sub-empty.toml"),
include_str!("valid/table-sub-empty.json"));
test!(table_multi_empty,
include_str!("valid/table-multi-empty.toml"),
include_str!("valid/table-multi-empty.json"));
test!(table_whitespace,
include_str!("valid/table-whitespace.toml"),
include_str!("valid/table-whitespace.json"));

View file

@ -0,0 +1,5 @@
{
"a": { "b": {} },
"b": {},
"c": { "a": {} }
}

View file

@ -0,0 +1,5 @@
[a]
[a.b]
[b]
[c]
[c.a]