forked from assert-rs/assert_cli
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdiff.rs
More file actions
58 lines (50 loc) · 2.12 KB
/
diff.rs
File metadata and controls
58 lines (50 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
use std::fmt;
use difference::Difference;
use ansi_term::Colour::{Green, Red};
pub fn render(changeset: &[Difference]) -> Result<String, fmt::Error> {
use std::fmt::Write;
let mut t = String::new();
for change in changeset {
match *change {
Difference::Same(ref x) => {
for line in x.lines() {
try!(writeln!(t, " {}", line));
}
}
Difference::Add(ref x) => {
try!(write!(t, "{}", Green.paint("+")));
try!(writeln!(t, "{}", Green.paint(x)));
}
Difference::Rem(ref x) => {
try!(write!(t, "{}", Red.paint("-")));
try!(writeln!(t, "{}", Red.paint(x)));
}
}
}
Ok(t)
}
#[cfg(test)]
mod tests {
use difference::diff;
use super::*;
#[test]
fn basic_diff() {
let (_, diff) = diff("lol", "yay", "\n");
assert_eq!(render(&diff).unwrap(),
"\u{1b}[31m-\u{1b}[0m\u{1b}[31mlol\u{1b}[0m\n\u{1b}[32m+\u{1b}[0m\u{1b}[32myay\
\u{1b}[0m\n")
}
#[test]
fn multiline_diff() {
let (_, diff) = diff("Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.",
"Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor **incididunt** ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.",
"\n");
assert_eq!(render(&diff).unwrap(), " Lorem ipsum dolor sit amet, consectetur adipisicing elit,\n\u{1b}[31m-\u{1b}[0m\u{1b}[31msed do eiusmod tempor incididunt ut labore et dolore magna\u{1b}[0m\n\u{1b}[32m+\u{1b}[0m\u{1b}[32msed do eiusmod tempor **incididunt** ut labore et dolore magna\u{1b}[0m\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation\n ullamco laboris nisi ut aliquip ex ea commodo consequat.\n");
}
}