summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Davison <dandavison7@gmail.com>2021-01-08 10:33:55 -0500
committerDan Davison <dandavison7@gmail.com>2021-01-08 10:33:55 -0500
commitdc267979a46caee4d79ed2e3d17af9bd513c4e39 (patch)
treedc6e5918e1a497a803bc52a3b5771407e5ca4e95
parentba0d36cb2de1be6e8c4332d37f796393ccc07b15 (diff)
Prevent tests setting env vars from affecting other tests
-rw-r--r--src/git_config/git_config.rs8
-rw-r--r--src/options/get.rs46
-rw-r--r--src/tests/integration_test_utils.rs23
3 files changed, 49 insertions, 28 deletions
diff --git a/src/git_config/git_config.rs b/src/git_config/git_config.rs
index 96209603..d95a6b1a 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 f19c3293..a36987ca 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 37ae0575..8eb36748 100644
--- a/src/tests/integration_test_utils.rs
+++ b/src/tests/integration_test_utils.rs
@@ -18,11 +18,28 @@ pub mod integration_test_utils {
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(