From 1274163ffb6db12aead8e9adccd816ea6852a6b4 Mon Sep 17 00:00:00 2001 From: Daniel Hofstetter Date: Wed, 17 Apr 2024 07:42:14 +0200 Subject: [PATCH 1/4] ci: use -pcoreutils when running clippy instead of using -putil_1 -putil2 etc. --- .github/workflows/code-quality.yml | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml index 009cf788f83..bd34b721748 100644 --- a/.github/workflows/code-quality.yml +++ b/.github/workflows/code-quality.yml @@ -99,23 +99,6 @@ jobs: *) FAIL_ON_FAULT=true ; FAULT_TYPE=error ;; esac; outputs FAIL_ON_FAULT FAULT_TYPE - # target-specific options - # * CARGO_FEATURES_OPTION - CARGO_FEATURES_OPTION='--all-features' ; - if [ -n "${{ matrix.job.features }}" ]; then CARGO_FEATURES_OPTION='--features ${{ matrix.job.features }}' ; fi - outputs CARGO_FEATURES_OPTION - # * determine sub-crate utility list - UTILITY_LIST="$(./util/show-utils.sh ${CARGO_FEATURES_OPTION})" - echo UTILITY_LIST=${UTILITY_LIST} - CARGO_UTILITY_LIST_OPTIONS="$(for u in ${UTILITY_LIST}; do echo -n "-puu_${u} "; done;)" - outputs CARGO_UTILITY_LIST_OPTIONS - - name: Install/setup prerequisites - shell: bash - run: | - ## Install/setup prerequisites - case '${{ matrix.job.os }}' in - macos-latest) brew install coreutils ;; # needed for show-utils.sh - esac - name: "`cargo clippy` lint testing" uses: nick-fields/retry@v3 with: @@ -130,7 +113,7 @@ jobs: fault_type="${{ steps.vars.outputs.FAULT_TYPE }}" fault_prefix=$(echo "$fault_type" | tr '[:lower:]' '[:upper:]') # * convert any warnings to GHA UI annotations; ref: - S=$(cargo clippy --all-targets ${{ matrix.job.cargo-options }} ${{ steps.vars.outputs.CARGO_UTILITY_LIST_OPTIONS }} -- ${CLIPPY_FLAGS} -D warnings 2>&1) && printf "%s\n" "$S" || { printf "%s\n" "$S" ; printf "%s" "$S" | sed -E -n -e '/^error:/{' -e "N; s/^error:[[:space:]]+(.*)\\n[[:space:]]+-->[[:space:]]+(.*):([0-9]+):([0-9]+).*$/::${fault_type} file=\2,line=\3,col=\4::${fault_prefix}: \`cargo clippy\`: \1 (file:'\2', line:\3)/p;" -e '}' ; fault=true ; } + S=$(cargo clippy --all-targets --features ${{ matrix.job.features }} -pcoreutils -- ${CLIPPY_FLAGS} -D warnings 2>&1) && printf "%s\n" "$S" || { printf "%s\n" "$S" ; printf "%s" "$S" | sed -E -n -e '/^error:/{' -e "N; s/^error:[[:space:]]+(.*)\\n[[:space:]]+-->[[:space:]]+(.*):([0-9]+):([0-9]+).*$/::${fault_type} file=\2,line=\3,col=\4::${fault_prefix}: \`cargo clippy\`: \1 (file:'\2', line:\3)/p;" -e '}' ; fault=true ; } if [ -n "${{ steps.vars.outputs.FAIL_ON_FAULT }}" ] && [ -n "$fault" ]; then exit 1 ; fi style_spellcheck: From f2ffb7884c51416d6c9e338324a4f744dfecb14e Mon Sep 17 00:00:00 2001 From: Daniel Hofstetter Date: Wed, 17 Apr 2024 16:17:51 +0200 Subject: [PATCH 2/4] ci: remove unused CARGO_FEATURES_OPTION --- .github/workflows/code-quality.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml index bd34b721748..dca7ee59252 100644 --- a/.github/workflows/code-quality.yml +++ b/.github/workflows/code-quality.yml @@ -49,11 +49,6 @@ jobs: *) FAIL_ON_FAULT=true ; FAULT_TYPE=error ;; esac; outputs FAIL_ON_FAULT FAULT_TYPE - # target-specific options - # * CARGO_FEATURES_OPTION - CARGO_FEATURES_OPTION='' ; - if [ -n "${{ matrix.job.features }}" ]; then CARGO_FEATURES_OPTION='--features "${{ matrix.job.features }}"' ; fi - outputs CARGO_FEATURES_OPTION - name: "`cargo fmt` testing" shell: bash run: | From 3aa9583efc20f50be0135c38f909b47da063cfa8 Mon Sep 17 00:00:00 2001 From: Daniel Hofstetter Date: Wed, 17 Apr 2024 16:57:38 +0200 Subject: [PATCH 3/4] clippy: fix redundant_clone lint warnings in tests --- tests/by-util/test_chown.rs | 4 ++-- tests/by-util/test_chroot.rs | 2 +- tests/by-util/test_env.rs | 30 +++++++++++++++--------------- tests/by-util/test_install.rs | 2 +- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/tests/by-util/test_chown.rs b/tests/by-util/test_chown.rs index 0a2e23c6d32..f893d2611a3 100644 --- a/tests/by-util/test_chown.rs +++ b/tests/by-util/test_chown.rs @@ -471,7 +471,7 @@ fn test_chown_fail_id() { #[test] fn test_chown_only_user_id_nonexistent_user() { let ts = TestScenario::new(util_name!()); - let at = ts.fixtures.clone(); + let at = &ts.fixtures; at.touch("f"); if let Ok(result) = run_ucmd_as_root(&ts, &["12345", "f"]) { result.success().no_stdout().no_stderr(); @@ -537,7 +537,7 @@ fn test_chown_only_group_id() { #[test] fn test_chown_only_group_id_nonexistent_group() { let ts = TestScenario::new(util_name!()); - let at = ts.fixtures.clone(); + let at = &ts.fixtures; at.touch("f"); if let Ok(result) = run_ucmd_as_root(&ts, &[":12345", "f"]) { result.success().no_stdout().no_stderr(); diff --git a/tests/by-util/test_chroot.rs b/tests/by-util/test_chroot.rs index 128d0b812c1..bf6b2ce16f1 100644 --- a/tests/by-util/test_chroot.rs +++ b/tests/by-util/test_chroot.rs @@ -165,7 +165,7 @@ fn test_chroot_skip_chdir_not_root() { #[test] fn test_chroot_skip_chdir() { let ts = TestScenario::new(util_name!()); - let at = ts.fixtures.clone(); + let at = &ts.fixtures; let dirs = ["/", "/.", "/..", "isroot"]; at.symlink_file("/", "isroot"); for dir in dirs { diff --git a/tests/by-util/test_env.rs b/tests/by-util/test_env.rs index 0df1da752b2..94b73284dbe 100644 --- a/tests/by-util/test_env.rs +++ b/tests/by-util/test_env.rs @@ -7,7 +7,7 @@ #[cfg(target_os = "linux")] use crate::common::util::expected_result; use crate::common::util::TestScenario; -use ::env::native_int_str::{Convert, NCvt}; +use env::native_int_str::{Convert, NCvt}; use regex::Regex; use std::env; use std::path::Path; @@ -475,8 +475,8 @@ fn test_gnu_e20() { #[test] fn test_split_string_misc() { - use ::env::native_int_str::NCvt; - use ::env::parse_args_from_str; + use env::native_int_str::NCvt; + use env::parse_args_from_str; assert_eq!( NCvt::convert(vec!["A=B", "FOO=AR", "sh", "-c", "echo $A$FOO"]), @@ -692,13 +692,13 @@ fn test_env_overwrite_arg0() { fn test_env_arg_argv0_overwrite() { let ts = TestScenario::new(util_name!()); - let bin = ts.bin_path.clone(); + let bin = &ts.bin_path; // overwrite --argv0 by --argv0 ts.ucmd() .args(&["--argv0", "dirname"]) .args(&["--argv0", "echo"]) - .arg(&bin) + .arg(bin) .args(&["aa/bb/cc"]) .succeeds() .stdout_is("aa/bb/cc\n") @@ -708,7 +708,7 @@ fn test_env_arg_argv0_overwrite() { ts.ucmd() .args(&["-a", "dirname"]) .args(&["-a", "echo"]) - .arg(&bin) + .arg(bin) .args(&["aa/bb/cc"]) .succeeds() .stdout_is("aa/bb/cc\n") @@ -718,7 +718,7 @@ fn test_env_arg_argv0_overwrite() { ts.ucmd() .args(&["--argv0", "dirname"]) .args(&["-a", "echo"]) - .arg(&bin) + .arg(bin) .args(&["aa/bb/cc"]) .succeeds() .stdout_is("aa/bb/cc\n") @@ -728,7 +728,7 @@ fn test_env_arg_argv0_overwrite() { ts.ucmd() .args(&["-a", "dirname"]) .args(&["--argv0", "echo"]) - .arg(&bin) + .arg(bin) .args(&["aa/bb/cc"]) .succeeds() .stdout_is("aa/bb/cc\n") @@ -740,13 +740,13 @@ fn test_env_arg_argv0_overwrite() { fn test_env_arg_argv0_overwrite_mixed_with_string_args() { let ts = TestScenario::new(util_name!()); - let bin = ts.bin_path.clone(); + let bin = &ts.bin_path; // string arg following normal ts.ucmd() .args(&["-S--argv0 dirname"]) .args(&["--argv0", "echo"]) - .arg(&bin) + .arg(bin) .args(&["aa/bb/cc"]) .succeeds() .stdout_is("aa/bb/cc\n") @@ -756,7 +756,7 @@ fn test_env_arg_argv0_overwrite_mixed_with_string_args() { ts.ucmd() .args(&["-a", "dirname"]) .args(&["-S-a echo"]) - .arg(&bin) + .arg(bin) .args(&["aa/bb/cc"]) .succeeds() .stdout_is("aa/bb/cc\n") @@ -765,7 +765,7 @@ fn test_env_arg_argv0_overwrite_mixed_with_string_args() { // one large string arg ts.ucmd() .args(&["-S--argv0 dirname -a echo"]) - .arg(&bin) + .arg(bin) .args(&["aa/bb/cc"]) .succeeds() .stdout_is("aa/bb/cc\n") @@ -775,7 +775,7 @@ fn test_env_arg_argv0_overwrite_mixed_with_string_args() { ts.ucmd() .args(&["-S-a dirname"]) .args(&["-S--argv0 echo"]) - .arg(&bin) + .arg(bin) .args(&["aa/bb/cc"]) .succeeds() .stdout_is("aa/bb/cc\n") @@ -786,7 +786,7 @@ fn test_env_arg_argv0_overwrite_mixed_with_string_args() { .args(&["-a", "sleep"]) .args(&["-S-a dirname"]) .args(&["-a", "echo"]) - .arg(&bin) + .arg(bin) .args(&["aa/bb/cc"]) .succeeds() .stdout_is("aa/bb/cc\n") @@ -916,8 +916,8 @@ mod tests_split_iterator { use std::ffi::OsString; - use ::env::parse_error::ParseError; use env::native_int_str::{from_native_int_representation_owned, Convert, NCvt}; + use env::parse_error::ParseError; fn split(input: &str) -> Result, ParseError> { ::env::split_iterator::split(&NCvt::convert(input)).map(|vec| { diff --git a/tests/by-util/test_install.rs b/tests/by-util/test_install.rs index 5790c685fc2..b07da43dc75 100644 --- a/tests/by-util/test_install.rs +++ b/tests/by-util/test_install.rs @@ -1689,7 +1689,7 @@ fn test_target_file_ends_with_slash() { #[test] fn test_install_root_combined() { let ts = TestScenario::new(util_name!()); - let at = ts.fixtures.clone(); + let at = &ts.fixtures; at.touch("a"); at.touch("c"); From 347a3878111d7e3c79323c96f3a425e4e5fb2dcc Mon Sep 17 00:00:00 2001 From: Daniel Hofstetter Date: Wed, 17 Apr 2024 17:30:31 +0200 Subject: [PATCH 4/4] env: move unit tests to env.rs --- src/uu/env/src/env.rs | 36 ++++++++++++++++++++++++++++++++++++ tests/by-util/test_env.rs | 35 ----------------------------------- 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/src/uu/env/src/env.rs b/src/uu/env/src/env.rs index 3908e9e78e8..f4282326fef 100644 --- a/src/uu/env/src/env.rs +++ b/src/uu/env/src/env.rs @@ -606,3 +606,39 @@ fn apply_specified_env_vars(opts: &Options<'_>) { pub fn uumain(args: impl uucore::Args) -> UResult<()> { EnvAppData::default().run_env(args) } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_split_string_environment_vars_test() { + std::env::set_var("FOO", "BAR"); + assert_eq!( + NCvt::convert(vec!["FOO=bar", "sh", "-c", "echo xBARx =$FOO="]), + parse_args_from_str(&NCvt::convert(r#"FOO=bar sh -c "echo x${FOO}x =\$FOO=""#)) + .unwrap(), + ); + } + + #[test] + fn test_split_string_misc() { + assert_eq!( + NCvt::convert(vec!["A=B", "FOO=AR", "sh", "-c", "echo $A$FOO"]), + parse_args_from_str(&NCvt::convert(r#"A=B FOO=AR sh -c "echo \$A\$FOO""#)).unwrap(), + ); + assert_eq!( + NCvt::convert(vec!["A=B", "FOO=AR", "sh", "-c", "echo $A$FOO"]), + parse_args_from_str(&NCvt::convert(r#"A=B FOO=AR sh -c 'echo $A$FOO'"#)).unwrap() + ); + assert_eq!( + NCvt::convert(vec!["A=B", "FOO=AR", "sh", "-c", "echo $A$FOO"]), + parse_args_from_str(&NCvt::convert(r#"A=B FOO=AR sh -c 'echo $A$FOO'"#)).unwrap() + ); + + assert_eq!( + NCvt::convert(vec!["-i", "A=B ' C"]), + parse_args_from_str(&NCvt::convert(r#"-i A='B \' C'"#)).unwrap() + ); + } +} diff --git a/tests/by-util/test_env.rs b/tests/by-util/test_env.rs index 94b73284dbe..18edc5dd650 100644 --- a/tests/by-util/test_env.rs +++ b/tests/by-util/test_env.rs @@ -7,7 +7,6 @@ #[cfg(target_os = "linux")] use crate::common::util::expected_result; use crate::common::util::TestScenario; -use env::native_int_str::{Convert, NCvt}; use regex::Regex; use std::env; use std::path::Path; @@ -473,40 +472,6 @@ fn test_gnu_e20() { assert_eq!(out.stdout_str(), output); } -#[test] -fn test_split_string_misc() { - use env::native_int_str::NCvt; - use env::parse_args_from_str; - - assert_eq!( - NCvt::convert(vec!["A=B", "FOO=AR", "sh", "-c", "echo $A$FOO"]), - parse_args_from_str(&NCvt::convert(r#"A=B FOO=AR sh -c "echo \$A\$FOO""#)).unwrap(), - ); - assert_eq!( - NCvt::convert(vec!["A=B", "FOO=AR", "sh", "-c", "echo $A$FOO"]), - parse_args_from_str(&NCvt::convert(r#"A=B FOO=AR sh -c 'echo $A$FOO'"#)).unwrap() - ); - assert_eq!( - NCvt::convert(vec!["A=B", "FOO=AR", "sh", "-c", "echo $A$FOO"]), - parse_args_from_str(&NCvt::convert(r#"A=B FOO=AR sh -c 'echo $A$FOO'"#)).unwrap() - ); - - assert_eq!( - NCvt::convert(vec!["-i", "A=B ' C"]), - parse_args_from_str(&NCvt::convert(r#"-i A='B \' C'"#)).unwrap() - ); -} - -#[test] -fn test_split_string_environment_vars_test() { - std::env::set_var("FOO", "BAR"); - assert_eq!( - NCvt::convert(vec!["FOO=bar", "sh", "-c", "echo xBARx =$FOO="]), - ::env::parse_args_from_str(&NCvt::convert(r#"FOO=bar sh -c "echo x${FOO}x =\$FOO=""#)) - .unwrap(), - ); -} - #[macro_export] macro_rules! compare_with_gnu { ( $ts:expr, $args:expr ) => {{