summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Davison <dandavison7@gmail.com>2020-12-26 20:03:28 +0000
committerDan Davison <dandavison7@gmail.com>2020-12-26 22:05:06 +0000
commitfba8df385cc7d444927a6dbc4ab95303653c97ad (patch)
treeb70be2c978b676ed090ee86bdfdcb2b951b0709d
parent446ecbe3fb6daa6388283976528c35eb24060719 (diff)
Refactor and strengthen tests of `delta file_a file_b`
This does not reproduce bug #463 (at least, not reliably).
-rw-r--r--src/main.rs67
1 files changed, 33 insertions, 34 deletions
diff --git a/src/main.rs b/src/main.rs
index 36239b67..a5c789b9 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -426,6 +426,7 @@ pub fn _list_syntax_themes_for_machines(writer: &mut dyn Write) -> std::io::Resu
#[cfg(test)]
mod main_tests {
use super::*;
+ use std::fs;
use std::io::{Cursor, Seek, SeekFrom};
use crate::ansi;
@@ -487,55 +488,53 @@ mod main_tests {
#[test]
#[cfg_attr(target_os = "windows", ignore)]
fn test_diff_same_empty_file() {
- let config = integration_test_utils::make_config_from_args(&[]);
- let mut writer = Cursor::new(vec![]);
- let exit_code = diff(
- Some(&PathBuf::from("/dev/null")),
- Some(&PathBuf::from("/dev/null")),
- &config,
- &mut writer,
- );
- assert_eq!(exit_code, 0);
- let mut s = String::new();
- writer.seek(SeekFrom::Start(0)).unwrap();
- writer.read_to_string(&mut s).unwrap();
- assert!(s.is_empty());
+ _do_diff_test("/dev/null", "/dev/null", false, None);
}
#[test]
#[cfg_attr(target_os = "windows", ignore)]
fn test_diff_same_non_empty_file() {
- let config = integration_test_utils::make_config_from_args(&[]);
- let mut writer = Cursor::new(vec![]);
- let exit_code = diff(
- Some(&PathBuf::from("/etc/passwd")),
- Some(&PathBuf::from("/etc/passwd")),
- &config,
- &mut writer,
- );
- assert_eq!(exit_code, 0);
- let mut s = String::new();
- writer.seek(SeekFrom::Start(0)).unwrap();
- writer.read_to_string(&mut s).unwrap();
- assert!(s.is_empty());
+ _do_diff_test("/etc/passwd", "/etc/passwd", false, None);
+ }
+
+ #[test]
+ #[cfg_attr(target_os = "windows", ignore)]
+ fn test_diff_empty_vs_non_empty_file() {
+ _do_diff_test("/dev/null", "/etc/passwd", true, Some("/etc/passwd"));
}
#[test]
#[cfg_attr(target_os = "windows", ignore)]
- fn test_diff_differing_files() {
+ fn test_diff_two_non_empty_files() {
+ _do_diff_test("/etc/group", "/etc/passwd", true, None);
+ }
+
+ fn _do_diff_test(file_a: &str, file_b: &str, expect_diff: bool, expected_diff: Option<&str>) {
let config = integration_test_utils::make_config_from_args(&[]);
let mut writer = Cursor::new(vec![]);
let exit_code = diff(
- Some(&PathBuf::from("/dev/null")),
- Some(&PathBuf::from("/etc/passwd")),
+ Some(&PathBuf::from(file_a)),
+ Some(&PathBuf::from(file_b)),
&config,
&mut writer,
);
- assert_eq!(exit_code, 1);
+ let s = ansi::strip_ansi_codes(&_read_to_string(&mut writer));
+ if expect_diff {
+ assert_eq!(exit_code, 1);
+ assert!(s.contains(&format!("comparing: {} ⟶ {}\n", file_a, file_b)));
+ if let Some(expected_diff) = expected_diff {
+ assert!(s.contains(&fs::read_to_string(expected_diff).unwrap()));
+ }
+ } else {
+ assert_eq!(exit_code, 0);
+ assert!(s.is_empty());
+ }
+ }
+
+ fn _read_to_string(cursor: &mut Cursor<Vec<u8>>) -> String {
let mut s = String::new();
- writer.seek(SeekFrom::Start(0)).unwrap();
- writer.read_to_string(&mut s).unwrap();
- let s = ansi::strip_ansi_codes(&s);
- assert!(s.contains("comparing: /dev/null ⟶ /etc/passwd\n"));
+ cursor.seek(SeekFrom::Start(0)).unwrap();
+ cursor.read_to_string(&mut s).unwrap();
+ s
}
}