diff --git a/src/rewritable_units/tokens/text_chunk.rs b/src/rewritable_units/tokens/text_chunk.rs index d160f3f9..6afdc53f 100644 --- a/src/rewritable_units/tokens/text_chunk.rs +++ b/src/rewritable_units/tokens/text_chunk.rs @@ -413,15 +413,6 @@ mod tests { }; } - macro_rules! skip_eof_chunk { - ($c:ident) => { - if $c.last_in_text_node() { - assert!($c.as_str().is_empty()); - return; - } - }; - } - #[test] fn parsed() { test!(|_| {}, HTML); @@ -429,15 +420,20 @@ mod tests { #[test] fn with_prepends_and_appends() { + let mut first = true; test!( |c| { - skip_eof_chunk!(c); - c.before("", ContentType::Text); - c.before("
Hey
", ContentType::Html); - c.before("", ContentType::Html); - c.after("", ContentType::Html); - c.after("", ContentType::Html); - c.after("", ContentType::Text); + let is_first = std::mem::replace(&mut first, c.last_in_text_node()); + if is_first { + c.before("", ContentType::Text); + c.before("
Hey
", ContentType::Html); + c.before("", ContentType::Html); + } + if c.last_in_text_node() { + c.after("", ContentType::Html); + c.after("", ContentType::Html); + c.after("", ContentType::Text); + } }, concat!( "<span>
Hey
", @@ -452,17 +448,22 @@ mod tests { #[test] fn removed() { + let mut first = true; test!( |c| { - skip_eof_chunk!(c); + let is_first = std::mem::replace(&mut first, c.last_in_text_node()); assert!(!c.removed()); c.remove(); assert!(c.removed()); - c.before("", ContentType::Html); - c.after("", ContentType::Html); + if is_first { + c.before("", ContentType::Html); + } + if c.last_in_text_node() { + c.after("", ContentType::Html); + } }, "" ); @@ -472,17 +473,20 @@ mod tests { fn replaced_with_text() { test!( |c| { - skip_eof_chunk!(c); - c.before("", ContentType::Html); - c.after("", ContentType::Html); + if c.last_in_text_node() { + c.before("", ContentType::Html); + c.after("", ContentType::Html); - assert!(!c.removed()); + assert!(!c.removed()); - c.replace("
", ContentType::Html); - c.replace("", ContentType::Html); - c.replace("", ContentType::Text); + c.replace("
", ContentType::Html); + c.replace("", ContentType::Html); + c.replace("", ContentType::Text); - assert!(c.removed()); + assert!(c.removed()); + } else { + c.remove(); + } }, "<foo & bar>" ); @@ -492,17 +496,20 @@ mod tests { fn replaced_with_html() { test!( |c| { - skip_eof_chunk!(c); - c.before("", ContentType::Html); - c.after("", ContentType::Html); + if c.last_in_text_node() { + c.before("", ContentType::Html); + c.after("", ContentType::Html); - assert!(!c.removed()); + assert!(!c.removed()); - c.replace("
", ContentType::Html); - c.replace("", ContentType::Html); - c.replace("", ContentType::Html); + c.replace("
", ContentType::Html); + c.replace("", ContentType::Html); + c.replace("", ContentType::Html); - assert!(c.removed()); + assert!(c.removed()); + } else { + c.remove(); + } }, "" );