diff --git a/src/uu/dircolors/src/dircolors.rs b/src/uu/dircolors/src/dircolors.rs index 2bf8b517e44..39edca87611 100644 --- a/src/uu/dircolors/src/dircolors.rs +++ b/src/uu/dircolors/src/dircolors.rs @@ -37,9 +37,9 @@ pub enum OutputFmt { Unknown, } -pub fn guess_syntax() -> OutputFmt { - match env::var("SHELL") { - Ok(ref s) if !s.is_empty() => { +pub fn guess_syntax(env: Option) -> OutputFmt { + match env { + Some(s) if !s.is_empty() => { let shell_path: &Path = s.as_ref(); if let Some(name) = shell_path.file_name() { if name == "csh" || name == "tcsh" { @@ -165,7 +165,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { }; if out_format == OutputFmt::Unknown { - match guess_syntax() { + match guess_syntax(env::var_os("SHELL")) { OutputFmt::Unknown => { return Err(USimpleError::new( 1, diff --git a/tests/by-util/test_dircolors.rs b/tests/by-util/test_dircolors.rs index dd98e5d43ce..e2eb774604f 100644 --- a/tests/by-util/test_dircolors.rs +++ b/tests/by-util/test_dircolors.rs @@ -32,46 +32,14 @@ fn test_invalid_arg() { #[test] fn test_shell_syntax() { - use std::env; - let last = env::var("SHELL"); - unsafe { - env::set_var("SHELL", "/path/csh"); - } - assert_eq!(OutputFmt::CShell, guess_syntax()); - unsafe { - env::set_var("SHELL", "csh"); - } - assert_eq!(OutputFmt::CShell, guess_syntax()); - unsafe { - env::set_var("SHELL", "/path/bash"); - } - assert_eq!(OutputFmt::Shell, guess_syntax()); - unsafe { - env::set_var("SHELL", "bash"); - } - assert_eq!(OutputFmt::Shell, guess_syntax()); - unsafe { - env::set_var("SHELL", "/asd/bar"); - } - assert_eq!(OutputFmt::Shell, guess_syntax()); - unsafe { - env::set_var("SHELL", "foo"); - } - assert_eq!(OutputFmt::Shell, guess_syntax()); - unsafe { - env::set_var("SHELL", ""); - } - assert_eq!(OutputFmt::Unknown, guess_syntax()); - unsafe { - env::remove_var("SHELL"); - } - assert_eq!(OutputFmt::Unknown, guess_syntax()); - - if let Ok(s) = last { - unsafe { - env::set_var("SHELL", s); - } - } + assert_eq!(OutputFmt::CShell, guess_syntax(Some("/path/csh".into()))); + assert_eq!(OutputFmt::CShell, guess_syntax(Some("csh".into()))); + assert_eq!(OutputFmt::Shell, guess_syntax(Some("/path/bash".into()))); + assert_eq!(OutputFmt::Shell, guess_syntax(Some("bash".into()))); + assert_eq!(OutputFmt::Shell, guess_syntax(Some("/asd/bar".into()))); + assert_eq!(OutputFmt::Shell, guess_syntax(Some("foo".into()))); + assert_eq!(OutputFmt::Unknown, guess_syntax(Some(String::new().into()))); + assert_eq!(OutputFmt::Unknown, guess_syntax(None)); } #[test]