diff --git a/src/rustfmt_diff.rs b/src/rustfmt_diff.rs index 3fb22865385..c0aca68fe2f 100644 --- a/src/rustfmt_diff.rs +++ b/src/rustfmt_diff.rs @@ -47,7 +47,7 @@ pub fn make_diff(expected: &str, actual: &str, context_size: usize) -> Vec { - if lines_since_mismatch >= context_size { + if lines_since_mismatch >= context_size && lines_since_mismatch > 0 { results.push(mismatch); mismatch = Mismatch::new(line_number - context_queue.len() as u32); } @@ -60,7 +60,7 @@ pub fn make_diff(expected: &str, actual: &str, context_size: usize) -> Vec { - if lines_since_mismatch >= context_size { + if lines_since_mismatch >= context_size && lines_since_mismatch > 0 { results.push(mismatch); mismatch = Mismatch::new(line_number - context_queue.len() as u32); } @@ -80,7 +80,7 @@ pub fn make_diff(expected: &str, actual: &str, context_size: usize) -> Vec 0 { context_queue.push_back(str); } @@ -162,3 +162,75 @@ where } } } + +#[cfg(test)] +mod test { + use super::{make_diff, Mismatch}; + use super::DiffLine::*; + + #[test] + fn diff_simple() { + let src = "one\ntwo\nthree\nfour\nfive\n"; + let dest = "one\ntwo\ntrois\nfour\nfive\n"; + let diff = make_diff(src, dest, 1); + assert_eq!( + diff, + vec![ + Mismatch { + line_number: 2, + lines: vec![ + Context("two".into()), + Resulting("three".into()), + Expected("trois".into()), + Context("four".into()), + ], + }, + ] + ); + } + + #[test] + fn diff_simple2() { + let src = "one\ntwo\nthree\nfour\nfive\nsix\nseven\n"; + let dest = "one\ntwo\ntrois\nfour\ncinq\nsix\nseven\n"; + let diff = make_diff(src, dest, 1); + assert_eq!( + diff, + vec![ + Mismatch { + line_number: 2, + lines: vec![ + Context("two".into()), + Resulting("three".into()), + Expected("trois".into()), + Context("four".into()), + ], + }, + Mismatch { + line_number: 5, + lines: vec![ + Resulting("five".into()), + Expected("cinq".into()), + Context("six".into()), + ], + }, + ] + ); + } + + #[test] + fn diff_zerocontext() { + let src = "one\ntwo\nthree\nfour\nfive\n"; + let dest = "one\ntwo\ntrois\nfour\nfive\n"; + let diff = make_diff(src, dest, 0); + assert_eq!( + diff, + vec![ + Mismatch { + line_number: 3, + lines: vec![Resulting("three".into()), Expected("trois".into())], + }, + ] + ); + } +}