my fork of dmp
Pretty-html for compat and effitiency and associated tests
| -rw-r--r-- | tests/test.rs | 100 |
1 files changed, 91 insertions, 9 deletions
diff --git a/tests/test.rs b/tests/test.rs index 0f0eca2..e4dc6a6 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -6,10 +6,6 @@ use diff_match_patch_rs::dmp::Diff; use diff_match_patch_rs::{Compat, DiffMatchPatch, Efficient, Error, Ops, PatchInput}; -// const tests = [ -// 'testDiffIsDestructurable', -// ]; - #[test] fn test_diff_levenshtein() { let dmp = DiffMatchPatch::new(); @@ -86,7 +82,7 @@ fn test_diff_pretty_html() -> Result<(), Error> { let new = "π€"; // [240, 159, 164, 148] let diffs = dmp.diff_main::<Efficient>(old, new)?; assert_eq!( - "<span></span><del style=\"background:#ffe6e6;\">π€ͺ</del><ins style=\"background:#e6ffe6;\">π€</ins>", + "<del style=\"background:#ffe6e6;\">π€ͺ</del><ins style=\"background:#e6ffe6;\">π€</ins>", dmp.diff_pretty_html(&diffs)? ); @@ -104,7 +100,7 @@ fn test_diff_pretty_html() -> Result<(), Error> { let new = "π"; // [240, 159, 140, 138] let diffs = dmp.diff_main::<Efficient>(old, new)?; assert_eq!( - "<span></span><del style=\"background:#ffe6e6;\">π</del><ins style=\"background:#e6ffe6;\">π</ins>", + "<del style=\"background:#ffe6e6;\">π</del><ins style=\"background:#e6ffe6;\">π</ins>", dmp.diff_pretty_html(&diffs)? ); @@ -122,7 +118,7 @@ fn test_diff_pretty_html() -> Result<(), Error> { let new = "π "; // [240, 150, 160, 138] let diffs = dmp.diff_main::<Efficient>(old, new)?; assert_eq!( - "<span></span><ins style=\"background:#e6ffe6;\">π </ins><del style=\"background:#ffe6e6;\">π </del>", + "<ins style=\"background:#e6ffe6;\">π </ins><del style=\"background:#ffe6e6;\">π </del>", dmp.diff_pretty_html(&diffs)? ); @@ -131,7 +127,7 @@ fn test_diff_pretty_html() -> Result<(), Error> { let new = std::str::from_utf8(&[240, 160, 158, 132]).unwrap(); // basically an undefined element `π `. Should still work let diffs = dmp.diff_main::<Efficient>(old, new)?; assert_eq!( - "<span></span><del style=\"background:#ffe6e6;\">π </del><ins style=\"background:#e6ffe6;\">π </ins>", + "<del style=\"background:#ffe6e6;\">π </del><ins style=\"background:#e6ffe6;\">π </ins>", dmp.diff_pretty_html(&diffs)? ); @@ -140,7 +136,7 @@ fn test_diff_pretty_html() -> Result<(), Error> { let new = "π"; // [240, 159, 140, 141] -- interesting revelation - last 2 bytes swapped and π becomes π. Guess the world is going `Bananas!!` let diffs = dmp.diff_main::<Efficient>(old, new)?; assert_eq!( - "<span></span><del style=\"background:#ffe6e6;\">π</del><ins style=\"background:#e6ffe6;\">π</ins>", + "<del style=\"background:#ffe6e6;\">π</del><ins style=\"background:#e6ffe6;\">π</ins>", dmp.diff_pretty_html(&diffs)? ); @@ -154,6 +150,92 @@ fn test_diff_pretty_html() -> Result<(), Error> { dmp.diff_pretty_html(&diffs)? ); + // Compat mode + // Basic + let diffs = [ + Diff::equal(&['a', '\n']), + Diff::delete(&"<B>b</B>".chars().collect::<Vec<_>>()[..]), + Diff::insert(&"c&d".chars().collect::<Vec<_>>()[..]), + ]; + assert_eq!("<span>a¶<br></span><del style=\"background:#ffe6e6;\"><B>b</B></del><ins style=\"background:#e6ffe6;\">c&d</ins>", dmp.diff_pretty_html(&diffs)?); + + // `Compat` mode shouldn't require monkey business atall + + // Case 1. Two similar emoticons + // In bytes representation, these would have the last u8 different + // Which means the the diff should an equality block of 3 bytes folloed by insert and delete + let old = "π€ͺ"; // [240, 159, 164, 170] + let new = "π€"; // [240, 159, 164, 148] + let diffs = dmp.diff_main::<Compat>(old, new)?; + assert_eq!( + "<del style=\"background:#ffe6e6;\">π€ͺ</del><ins style=\"background:#e6ffe6;\">π€</ins>", + dmp.diff_pretty_html(&diffs)? + ); + + // Now Case 1. but with some text before and after + let old = "I'm puzzledπ€ͺ or am I?"; + let new = "I'm puzzledπ€ or thinking I guess!"; + let diffs = dmp.diff_main::<Compat>(old, new)?; + assert_eq!( + "<span>I'm puzzled</span><del style=\"background:#ffe6e6;\">π€ͺ</del><ins style=\"background:#e6ffe6;\">π€</ins><span> or </span><del style=\"background:#ffe6e6;\">am I?</del><ins style=\"background:#e6ffe6;\">thinking I guess!</ins>", + dmp.diff_pretty_html(&diffs)? + ); + + // Case 2. Emoticons with the third position different + let old = "π"; // [240, 159, 141, 138] + let new = "π"; // [240, 159, 140, 138] + let diffs = dmp.diff_main::<Compat>(old, new)?; + assert_eq!( + "<del style=\"background:#ffe6e6;\">π</del><ins style=\"background:#e6ffe6;\">π</ins>", + dmp.diff_pretty_html(&diffs)? + ); + + // Now Case 2. but with some text, lets complicate this + let old = "π, aah orange is the new black!"; // [240, 159, 141, 138] + let new = "Aah orange!πis the new π"; // [240, 159, 140, 138] + let diffs = dmp.diff_main::<Compat>(old, new)?; + assert_eq!( + "<del style=\"background:#ffe6e6;\">π, a</del><ins style=\"background:#e6ffe6;\">A</ins><span>ah orange</span><del style=\"background:#ffe6e6;\"> </del><ins style=\"background:#e6ffe6;\">!π</ins><span>is the new </span><del style=\"background:#ffe6e6;\">black!</del><ins style=\"background:#e6ffe6;\">π</ins>", + dmp.diff_pretty_html(&diffs)? + ); + + // Case 3. with second and third different, but lets complicate this with an equality + let old = "π "; // [240, 160, 140, 138] + let new = "π "; // [240, 150, 160, 138] + let diffs = dmp.diff_main::<Compat>(old, new)?; + assert_eq!( + "<del style=\"background:#ffe6e6;\">π </del><ins style=\"background:#e6ffe6;\">π </ins>", + dmp.diff_pretty_html(&diffs)? + ); + + // Case 3. but let there be a swap + let old = "π "; // [240, 158, 160, 132] + let new = std::str::from_utf8(&[240, 160, 158, 132]).unwrap(); // basically an undefined element `π `. Should still work + let diffs = dmp.diff_main::<Compat>(old, new)?; + assert_eq!( + "<del style=\"background:#ffe6e6;\">π </del><ins style=\"background:#e6ffe6;\">π </ins>", + dmp.diff_pretty_html(&diffs)? + ); + + // Case 4. swap at the last 2 positions + let old = "π"; // [240, 159, 141, 140] -- FINALLY A BANANA + let new = "π"; // [240, 159, 140, 141] -- interesting revelation - last 2 bytes swapped and π becomes π. Guess the world is going `Bananas!!` + let diffs = dmp.diff_main::<Compat>(old, new)?; + assert_eq!( + "<del style=\"background:#ffe6e6;\">π</del><ins style=\"background:#e6ffe6;\">π</ins>", + dmp.diff_pretty_html(&diffs)? + ); + + // Let's do this with a slightly longish string + let old = "Now, let's explore some emotional extremes π.\nWe've got your ecstatic face π€©, your devastated face π, and your utterly confused face π€―. But that's not all! π€ We've also got some subtle emotions like π, π, and π."; + let new = "Let's start with some basics π.\nWe've got your standard smiley face π, your sad face βΉοΈ, and your angry face π . But wait, there's more! π€© We've also got some more complex emotions like π, π€€, and π. And let's not forget about the classics: π, π, and π."; + let diffs = dmp.diff_main::<Compat>(old, new)?; + + assert_eq!( + "<del style=\"background:#ffe6e6;\">Now, let's explore some emotional extreme</del><ins style=\"background:#e6ffe6;\">Let's start with some basic</ins><span>s </span><del style=\"background:#ffe6e6;\">π</del><ins style=\"background:#e6ffe6;\">π</ins><span>.¶<br>We've got your </span><del style=\"background:#ffe6e6;\">ec</del><span>sta</span><del style=\"background:#ffe6e6;\">tic</del><ins style=\"background:#e6ffe6;\">ndard smiley</ins><span> face </span><del style=\"background:#ffe6e6;\">π€©</del><ins style=\"background:#e6ffe6;\">π</ins><span>, your </span><del style=\"background:#ffe6e6;\">devastate</del><ins style=\"background:#e6ffe6;\">sa</ins><span>d face </span><del style=\"background:#ffe6e6;\">π</del><ins style=\"background:#e6ffe6;\">βΉοΈ</ins><span>, and your </span><del style=\"background:#ffe6e6;\">utterly confused</del><ins style=\"background:#e6ffe6;\">angry</ins><span> face </span><del style=\"background:#ffe6e6;\">π€―</del><ins style=\"background:#e6ffe6;\">π </ins><span>. But </span><del style=\"background:#ffe6e6;\">that's not all</del><ins style=\"background:#e6ffe6;\">wait, there's more</ins><span>! </span><del style=\"background:#ffe6e6;\">π€</del><ins style=\"background:#e6ffe6;\">π€©</ins><span> We've also got some </span><del style=\"background:#ffe6e6;\">subt</del><ins style=\"background:#e6ffe6;\">more comp</ins><span>le</span><ins style=\"background:#e6ffe6;\">x</ins><span> emotions like </span><del style=\"background:#ffe6e6;\">π</del><ins style=\"background:#e6ffe6;\">π, π€€, and π. And let's not forget about the classics: π</ins><span>, </span><del style=\"background:#ffe6e6;\">π</del><ins style=\"background:#e6ffe6;\">π</ins><span>, and </span><del style=\"background:#ffe6e6;\">π</del><ins style=\"background:#e6ffe6;\">π</ins><span>.</span>", + dmp.diff_pretty_html(&diffs)? + ); + Ok(()) } |