mod apply_environment { use std::{borrow::Cow, path::Path}; use git_prompt::{Mode, Options}; use git_testtools::Env; use serial_test::serial; #[test] #[serial] fn git_askpass_overrides_everything_and_ssh_askpass_does_not() { let _env = Env::new() .set("GIT_ASKPASS", "override") .set("SSH_ASKPASS", "does not matter"); assert_eq!( Options { askpass: Some(Cow::Borrowed(Path::new("current"))), ..Default::default() } .apply_environment(true, true, false) .askpass .expect("set") .as_ref(), Path::new("override") ); } #[test] #[serial] fn git_askpass_is_used_first_and_sets_unset_askpass_values() { let _env = Env::new() .set("GIT_ASKPASS", "from-env") .set("SSH_ASKPASS", "does not matter"); assert_eq!( Options::default() .apply_environment(true, true, false) .askpass .expect("set") .as_ref(), Path::new("from-env") ); } #[test] #[serial] fn ssh_askpass_is_used_as_fallback() { let _env = Env::new().set("SSH_ASKPASS", "fallback"); assert_eq!( Options { mode: Mode::Visible, ..Default::default() } .apply_environment(true, true, false) .askpass .expect("set") .as_ref(), Path::new("fallback") ); } #[test] #[serial] fn ssh_askpass_does_not_override_current_value() { let _env = Env::new().set("SSH_ASKPASS", "fallback"); assert_eq!( Options { askpass: Some(Cow::Borrowed(Path::new("current"))), ..Default::default() } .apply_environment(true, true, false) .askpass .expect("set") .as_ref(), Path::new("current") ); } #[test] #[serial] fn mode_is_left_untouched_if_terminal_prompt_is_trueish() { let _env = Env::new().set("GIT_TERMINAL_PROMPT", "true"); assert_eq!( Options { mode: Mode::Hidden, ..Default::default() } .apply_environment(false, false, true) .mode, Mode::Hidden ); } #[test] #[serial] fn mode_is_disabled_if_terminal_prompt_is_falseish() { let _env = Env::new().set("GIT_TERMINAL_PROMPT", "0"); assert_eq!( Options { mode: Mode::Hidden, ..Default::default() } .apply_environment(false, false, true) .mode, Mode::Disable ); } #[test] #[serial] fn mode_is_unchanged_if_git_terminal_prompt_is_not_set() { assert_eq!( Options { mode: Mode::Hidden, ..Default::default() } .apply_environment(false, false, true) .mode, Mode::Hidden ); }}
mod apply_environment {
use std::{borrow::Cow, path::Path};
use git_prompt::{Mode, Options};
use git_testtools::Env;
use serial_test::serial;
#[test]
#[serial]
fn git_askpass_overrides_everything_and_ssh_askpass_does_not() {
let _env = Env::new()
.set("GIT_ASKPASS", "override")
.set("SSH_ASKPASS", "does not matter");
assert_eq!(
Options {
askpass: Some(Cow::Borrowed(Path::new("current"))),
..Default::default()
}
.apply_environment(true, true, false)
.askpass
.expect("set")
.as_ref(),
Path::new("override")
);
}
#[test]
#[serial]
fn git_askpass_is_used_first_and_sets_unset_askpass_values() {
let _env = Env::new()
.set("GIT_ASKPASS", "from-env")
.set("SSH_ASKPASS", "does not matter");
assert_eq!(
Options::default()
.apply_environment(true, true, false)
.askpass
.expect("set")
.as_ref(),
Path::new("from-env")
);
}
#[test]
#[serial]
fn ssh_askpass_is_used_as_fallback() {
let _env = Env::new().set("SSH_ASKPASS", "fallback");
assert_eq!(
Options {
mode: Mode::Visible,
..Default::default()
}
.apply_environment(true, true, false)
.askpass
.expect("set")
.as_ref(),
Path::new("fallback")
);
}
#[test]
#[serial]
fn ssh_askpass_does_not_override_current_value() {
let _env = Env::new().set("SSH_ASKPASS", "fallback");
assert_eq!(
Options {
askpass: Some(Cow::Borrowed(Path::new("current"))),
..Default::default()
}
.apply_environment(true, true, false)
.askpass
.expect("set")
.as_ref(),
Path::new("current")
);
}
#[test]
#[serial]
fn mode_is_left_untouched_if_terminal_prompt_is_trueish() {
let _env = Env::new().set("GIT_TERMINAL_PROMPT", "true");
assert_eq!(
Options {
mode: Mode::Hidden,
..Default::default()
}
.apply_environment(false, false, true)
.mode,
Mode::Hidden
);
}
#[test]
#[serial]
fn mode_is_disabled_if_terminal_prompt_is_falseish() {
let _env = Env::new().set("GIT_TERMINAL_PROMPT", "0");
assert_eq!(
Options {
mode: Mode::Hidden,
..Default::default()
}
.apply_environment(false, false, true)
.mode,
Mode::Disable
);
}
#[test]
#[serial]
fn mode_is_unchanged_if_git_terminal_prompt_is_not_set() {
assert_eq!(
Options {
mode: Mode::Hidden,
..Default::default()
}
.apply_environment(false, false, true)
.mode,
Mode::Hidden
);
}
}