kdl-rs
kdl-rs copied to clipboard
`doc.to_string().parse()` is not idempotent
fn build_abc() -> KdlDocument {
let mut c = KdlNode::new("c");
c.ensure_children();
let mut b = KdlNode::new("b");
b.ensure_children().nodes_mut().push(c);
let mut a = KdlNode::new("a");
a.ensure_children().nodes_mut().push(b);
let mut doc = KdlDocument::new();
doc.nodes_mut().push(a);
doc.fmt();
doc
}
#[test]
fn parse_vs_build() -> miette::Result<()> {
let mut built = build_abc();
let mut parsed: KdlDocument = built.to_string().parse()?;
built.fmt();
parsed.fmt();
assert_eq!(built, parsed);
Ok(())
}
This test fails.
diff
Diff < left / right > :
KdlDocument {
< leading: None,
> leading: Some(
> "",
> ),
nodes: [
KdlNode {
< leading: None,
> leading: Some(
> "",
> ),
ty: None,
name: KdlIdentifier {
value: "a",
repr: None,
},
entries: [],
before_children: None,
children: Some(
KdlDocument {
< leading: None,
> leading: Some(
> "\n",
> ),
nodes: [
KdlNode {
< leading: None,
> leading: Some(
> " ",
> ),
ty: None,
name: KdlIdentifier {
value: "b",
repr: None,
},
entries: [],
before_children: None,
children: Some(
KdlDocument {
< leading: None,
> leading: Some(
> "\n",
> ),
nodes: [
KdlNode {
< leading: None,
> leading: Some(
> " ",
> ),
ty: None,
name: KdlIdentifier {
value: "c",
repr: None,
},
entries: [],
before_children: None,
children: Some(
KdlDocument {
< leading: None,
> leading: Some(
> "\n",
> ),
nodes: [],
< trailing: None,
> trailing: Some(
> "\n ",
> ),
},
),
< trailing: None,
> trailing: Some(
> "\n",
> ),
},
],
< trailing: None,
> trailing: Some(
> " ",
> ),
},
),
< trailing: None,
> trailing: Some(
> "\n",
> ),
},
],
< trailing: None,
> trailing: Some(
> "",
> ),
},
),
< trailing: None,
> trailing: Some(
> "\n",
> ),
},
],
< trailing: None,
> trailing: Some(
> "",
> ),
}