use xot::Xot;
use crate::apply::apply_diff;
use crate::comparison::Comparison;
impl Comparison {
pub(crate) fn verify(&mut self, xot: &mut Xot) -> Result<(), String> {
let diff = self.diff(xot);
apply_diff(xot, diff);
if !xot.compare(self.doc_b, diff) {
let result_xml = xot.serialize_to_string(diff);
return Err(result_xml);
}
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
use xot::Error;
#[test]
fn test_verify() -> Result<(), Error> {
let mut xot = Xot::new();
let xml_a = concat!(
"<book><chapter><title>Text 1</title><para>Text 2</para></chapter>",
"<chapter><title>Text 4</title><para>Text 5</para></chapter>",
"<chapter><title>Text 6</title><para>Text 7<img/>Text 8</para></chapter>",
"<chapter><title>Text 9</title><para>Text 10</para></chapter>",
"<chapter><para>Text 11</para><para>Text 12</para></chapter></book>"
);
let xml_b = concat!(
"<book><chapter><para>Text 2</para></chapter>",
"<chapter><title>Text 4</title><para>Text 25</para><para>Text 11</para></chapter>",
"<chapter><title>Text 6</title><para>Text 7<img/>Text 8</para></chapter>",
"<chapter><title>Text 9</title><para>Text 10</para></chapter>",
"<chapter><para>Text 12</para></chapter></book>"
);
let mut comparison = Comparison::from_xml(&mut xot, xml_a, xml_b)?;
assert!(comparison.verify(&mut xot).is_ok());
Ok(())
}
}