diff options
author | Dan Davison <dandavison7@gmail.com> | 2020-12-26 20:03:28 +0000 |
---|---|---|
committer | Dan Davison <dandavison7@gmail.com> | 2020-12-26 22:05:06 +0000 |
commit | fba8df385cc7d444927a6dbc4ab95303653c97ad (patch) | |
tree | b70be2c978b676ed090ee86bdfdcb2b951b0709d | |
parent | 446ecbe3fb6daa6388283976528c35eb24060719 (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.rs | 67 |
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 } } |