From b2e0c729ff737ec5a5deccf68a1986fba0a1e3e3 Mon Sep 17 00:00:00 2001 From: Dima Kudosh Date: Sun, 28 Feb 2016 19:47:48 +0300 Subject: [PATCH] Add ability to restore sequence after differ --- src/differ.rs | 22 ++++++++++++++++++++++ src/lib.rs | 2 +- tests/test.rs | 10 ++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/differ.rs b/src/differ.rs index 77d916b..7c34d37 100644 --- a/src/differ.rs +++ b/src/differ.rs @@ -181,6 +181,28 @@ impl Differ{ res } + pub fn restore(delta: &Vec, which: usize) -> Vec { + if !(which == 1 || which == 2) { + panic!("Second parameter must be 1 or 2"); + } + let mut res = Vec::new(); + let mut tag = String::new(); + if which == 1 { + tag = "- ".to_string(); + } else { + tag = "+ ".to_string(); + } + let prefixes = vec![tag, " ".to_string()]; + for line in delta { + for prefix in &prefixes { + if line.starts_with(prefix) { + res.push( line.split_at(2).1.to_string() ); + } + } + } + res + } + } #[test] diff --git a/src/lib.rs b/src/lib.rs index 52c2150..15bb5c2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -124,4 +124,4 @@ pub fn context_diff(first_sequence: &T, second_sequence: &T, from_f } } res -} \ No newline at end of file +} diff --git a/tests/test.rs b/tests/test.rs index b0f5051..1b330bd 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -102,6 +102,16 @@ fn test_differ_compare() { assert_eq!(result, "- one\n? ^\n+ ore\n? ^\n- two\n- three\n? -\n+ tree\n+ emu\n"); } +#[test] +fn test_differ_restore() { + let first_text = vec!["one\n", "two\n", "three\n"]; + let second_text = vec!["ore\n", "tree\n", "emu\n"]; + let differ = Differ::new(); + let diff = differ.compare(&first_text, &second_text); + assert_eq!(first_text, Differ::restore(&diff, 1)); + assert_eq!(second_text, Differ::restore(&diff, 2)); +} + #[test] fn test_unified_diff() { let first_text = "one two three four".split(" ").collect::>();