diff options
author | Catherine Noll <noll.catherine@gmail.com> | 2021-03-20 22:54:53 -0500 |
---|---|---|
committer | Catherine Noll <noll.catherine@gmail.com> | 2021-03-20 22:54:53 -0500 |
commit | cc1bf64939f3ae6af21dc258e4a5aeb78d202ecb (patch) | |
tree | d3529e66774c8d473637eaeb9f3c4f0677b1ed27 | |
parent | e561a51371365da845e13b91617cc0aaa2d92ef1 (diff) |
Use a sample diff for displaying themes
-rw-r--r-- | src/main.rs | 31 | ||||
-rw-r--r-- | src/sample_diff.rs | 224 |
2 files changed, 236 insertions, 19 deletions
diff --git a/src/main.rs b/src/main.rs index 82e41536..b03b95a3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,6 +22,7 @@ mod options; mod paint; mod parse; mod parse_style; +mod sample_diff; mod style; mod syntect_color; mod tests; @@ -315,27 +316,19 @@ const THEMES: [&'static str; 4] = [ fn show_themes() -> std::io::Result<()> { use bytelines::ByteLines; use std::io::BufReader; - let input = b"\ -diff --git a/example.rs b/example.rs -index f38589a..0f1bb83 100644 ---- a/example.rs -+++ b/example.rs -@@ -1,5 +1,5 @@ --// Output the square of a number. --fn print_square(num: f64) { -- let result = f64::powf(num, 2.0); -- println!(\"The square of {:.2} is {:.2}.\", num, result); -+// Output the cube of a number. -+fn print_cube(num: f64) { -+ let result = f64::powf(num, 3.0); -+ println!(\"The cube of {:.2} is {:.2}.\", num, result); -" - .to_vec(); + use sample_diff::DIFF; + let input = &DIFF.to_vec(); + + let mut git_config = git_config::GitConfig::try_create(); + let opt = cli::Opt::from_iter_and_git_config( + &["", "", "--navigate"], + &mut git_config, + ); let mut output_type = OutputType::from_mode( - PagingMode::QuitIfOneScreen, + PagingMode::Always, None, - &config::Config::from(cli::Opt::default()), + &config::Config::from(opt), ) .unwrap(); let title_style = ansi_term::Style::new().bold(); @@ -345,7 +338,7 @@ index f38589a..0f1bb83 100644 writeln!(writer, "\n\nTheme: {}\n", title_style.paint(*theme))?; let opt = cli::Opt::from_iter_and_git_config( &["", "", "--features", theme], - &mut git_config::GitConfig::try_create(), + &mut git_config, ); let config = config::Config::from(opt); if let Err(error) = delta(ByteLines::new(BufReader::new(&input[0..])), writer, &config) { diff --git a/src/sample_diff.rs b/src/sample_diff.rs new file mode 100644 index 00000000..2481f8d3 --- /dev/null +++ b/src/sample_diff.rs @@ -0,0 +1,224 @@ +pub const DIFF: &[u8; 8715] = b"\ +commit dc267979a46caee4d79ed2e3d17af9bd513c4e39 +Author: Dan Davison <dandavison7@gmail.com> +Date: Fri Jan 8 10:33:55 2021 -0500 + + Prevent tests setting env vars from affecting other tests + +diff --git a/src/git_config/git_config.rs b/src/git_config/git_config.rs +index 9620960..d95a6b1 100644 +--- a/src/git_config/git_config.rs ++++ b/src/git_config/git_config.rs +@@ -42,10 +42,14 @@ impl GitConfig { + } + + #[cfg(test)] +- pub fn from_path(path: &Path) -> Self { ++ pub fn from_path(path: &Path, honor_env_var: bool) -> Self { + Self { + config: git2::Config::open(path).unwrap(), +- config_from_env_var: parse_config_from_env_var(), ++ config_from_env_var: if honor_env_var { ++ parse_config_from_env_var() ++ } else { ++ HashMap::new() ++ }, + repo: None, + enabled: true, + } +diff --git a/src/options/get.rs b/src/options/get.rs +index f19c329..a36987c 100644 +--- a/src/options/get.rs ++++ b/src/options/get.rs +@@ -117,8 +117,13 @@ pub mod tests { + + use crate::tests::integration_test_utils::integration_test_utils; + ++ // TODO: the followig tests are collapsed into one since they all set the same env var and thus ++ // could affect each other if allowed to run concurrently. ++ + #[test] +- fn test_simple_string_env_var_overrides_git_config() { ++ fn test_env_var_overrides_git_config() { ++ // ---------------------------------------------------------------------------------------- ++ // simple string + let git_config_contents = b\" + [delta] + plus-style = blue +@@ -133,7 +138,7 @@ pub mod tests { + assert_eq!(opt.plus_style, \"blue\"); + + env::set_var(\"GIT_CONFIG_PARAMETERS\", \"'delta.plus-style=green'\"); +- let opt = integration_test_utils::make_options_from_args_and_git_config( ++ let opt = integration_test_utils::make_options_from_args_and_git_config_honoring_env_var( + &[], + Some(git_config_contents), + Some(git_config_path), +@@ -141,10 +146,9 @@ pub mod tests { + assert_eq!(opt.plus_style, \"green\"); + + remove_file(git_config_path).unwrap(); +- } + +- #[test] +- fn test_complex_string_env_var_overrides_git_config() { ++ // ---------------------------------------------------------------------------------------- ++ // complex string + let git_config_contents = br##\" + [delta] + minus-style = red bold ul \"#ffeeee\" +@@ -162,7 +166,7 @@ pub mod tests { + \"GIT_CONFIG_PARAMETERS\", + r##\"'delta.minus-style=magenta italic ol \"#aabbcc\"'\"##, + ); +- let opt = integration_test_utils::make_options_from_args_and_git_config( ++ let opt = integration_test_utils::make_options_from_args_and_git_config_honoring_env_var( + &[], + Some(git_config_contents), + Some(git_config_path), +@@ -170,10 +174,9 @@ pub mod tests { + assert_eq!(opt.minus_style, r##\"magenta italic ol \"#aabbcc\"\"##,); + + remove_file(git_config_path).unwrap(); +- } + +- #[test] +- fn test_option_string_env_var_overrides_git_config() { ++ // ---------------------------------------------------------------------------------------- ++ // option string + let git_config_contents = b\" + [delta] + plus-style = blue +@@ -188,7 +191,7 @@ pub mod tests { + assert_eq!(opt.plus_style, \"blue\"); + + env::set_var(\"GIT_CONFIG_PARAMETERS\", \"'delta.plus-style=green'\"); +- let opt = integration_test_utils::make_options_from_args_and_git_config( ++ let opt = integration_test_utils::make_options_from_args_and_git_config_honoring_env_var( + &[], + Some(git_config_contents), + Some(git_config_path), +@@ -196,10 +199,9 @@ pub mod tests { + assert_eq!(opt.plus_style, \"green\"); + + remove_file(git_config_path).unwrap(); +- } + +- #[test] +- fn test_bool_env_var_overrides_git_config() { ++ // ---------------------------------------------------------------------------------------- ++ // bool + let git_config_contents = b\" + [delta] + side-by-side = true +@@ -214,7 +216,7 @@ pub mod tests { + assert_eq!(opt.side_by_side, true); + + env::set_var(\"GIT_CONFIG_PARAMETERS\", \"'delta.side-by-side=false'\"); +- let opt = integration_test_utils::make_options_from_args_and_git_config( ++ let opt = integration_test_utils::make_options_from_args_and_git_config_honoring_env_var( + &[], + Some(git_config_contents), + Some(git_config_path), +@@ -222,10 +224,9 @@ pub mod tests { + assert_eq!(opt.side_by_side, false); + + remove_file(git_config_path).unwrap(); +- } + +- #[test] +- fn test_int_env_var_overrides_git_config() { ++ // ---------------------------------------------------------------------------------------- ++ // int + let git_config_contents = b\" + [delta] + max-line-length = 1 +@@ -240,7 +241,7 @@ pub mod tests { + assert_eq!(opt.max_line_length, 1); + + env::set_var(\"GIT_CONFIG_PARAMETERS\", \"'delta.max-line-length=2'\"); +- let opt = integration_test_utils::make_options_from_args_and_git_config( ++ let opt = integration_test_utils::make_options_from_args_and_git_config_honoring_env_var( + &[], + Some(git_config_contents), + Some(git_config_path), +@@ -248,17 +249,16 @@ pub mod tests { + assert_eq!(opt.max_line_length, 2); + + remove_file(git_config_path).unwrap(); +- } + +- #[test] +- fn test_float_env_var_overrides_git_config() { ++ // ---------------------------------------------------------------------------------------- ++ // float + let git_config_contents = b\" + [delta] + max-line-distance = 0.6 + \"; + let git_config_path = \"delta__test_float_env_var_overrides_git_config.gitconfig\"; + +- let opt = integration_test_utils::make_options_from_args_and_git_config( ++ let opt = integration_test_utils::make_options_from_args_and_git_config_honoring_env_var( + &[], + Some(git_config_contents), + Some(git_config_path), +@@ -266,7 +266,7 @@ pub mod tests { + assert_eq!(opt.max_line_distance, 0.6); + + env::set_var(\"GIT_CONFIG_PARAMETERS\", \"'delta.max-line-distance=0.7'\"); +- let opt = integration_test_utils::make_options_from_args_and_git_config( ++ let opt = integration_test_utils::make_options_from_args_and_git_config_honoring_env_var( + &[], + Some(git_config_contents), + Some(git_config_path), +diff --git a/src/tests/integration_test_utils.rs b/src/tests/integration_test_utils.rs +index 37ae057..8eb3674 100644 +--- a/src/tests/integration_test_utils.rs ++++ b/src/tests/integration_test_utils.rs +@@ -17,12 +17,29 @@ pub mod integration_test_utils { + args: &[&str], + git_config_contents: Option<&[u8]>, + git_config_path: Option<&str>, ++ ) -> cli::Opt { ++ _make_options_from_args_and_git_config(args, git_config_contents, git_config_path, false) ++ } ++ ++ pub fn make_options_from_args_and_git_config_honoring_env_var( ++ args: &[&str], ++ git_config_contents: Option<&[u8]>, ++ git_config_path: Option<&str>, ++ ) -> cli::Opt { ++ _make_options_from_args_and_git_config(args, git_config_contents, git_config_path, true) ++ } ++ ++ fn _make_options_from_args_and_git_config( ++ args: &[&str], ++ git_config_contents: Option<&[u8]>, ++ git_config_path: Option<&str>, ++ honor_env_var: bool, + ) -> cli::Opt { + let mut args: Vec<&str> = itertools::chain(&[\"/dev/null\", \"/dev/null\"], args) + .map(|s| *s) + .collect(); + let mut git_config = match (git_config_contents, git_config_path) { +- (Some(contents), Some(path)) => Some(make_git_config(contents, path)), ++ (Some(contents), Some(path)) => Some(make_git_config(contents, path, honor_env_var)), + _ => { + args.push(\"--no-gitconfig\"); + None +@@ -52,11 +69,11 @@ pub mod integration_test_utils { + config::Config::from(make_options_from_args(args)) + } + +- fn make_git_config(contents: &[u8], path: &str) -> GitConfig { ++ fn make_git_config(contents: &[u8], path: &str, honor_env_var: bool) -> GitConfig { + let path = Path::new(path); + let mut file = File::create(path).unwrap(); + file.write_all(contents).unwrap(); +- GitConfig::from_path(&path) ++ GitConfig::from_path(&path, honor_env_var) + } + + pub fn get_line_of_code_from_delta( +"; |