mirror of
https://github.com/dandavison/delta.git
synced 2024-10-06 04:47:17 +03:00
Prevent tests setting env vars from affecting other tests
This commit is contained in:
parent
ba0d36cb2d
commit
dc267979a4
@ -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,
|
||||
}
|
||||
|
@ -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),
|
||||
|
@ -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(
|
||||
|
Loading…
Reference in New Issue
Block a user