diff --git a/src/bin/cargo/commands/bench.rs b/src/bin/cargo/commands/bench.rs index 84681e6bde7..1ce0e5d9855 100644 --- a/src/bin/cargo/commands/bench.rs +++ b/src/bin/cargo/commands/bench.rs @@ -82,17 +82,9 @@ pub fn exec(config: &mut Config, args: &ArgMatches<'_>) -> CliResult { compile_opts, }; - let mut bench_args = vec![]; - bench_args.extend( - args.value_of("BENCHNAME") - .into_iter() - .map(|s| s.to_string()), - ); - bench_args.extend( - args.values_of("args") - .unwrap_or_default() - .map(|s| s.to_string()), - ); + let bench_args = args.value_of("BENCHNAME").into_iter(); + let bench_args = bench_args.chain(args.values_of("args").unwrap_or_default()); + let bench_args = bench_args.collect::>(); let err = ops::run_benches(&ws, &ops, &bench_args)?; match err { diff --git a/src/bin/cargo/commands/test.rs b/src/bin/cargo/commands/test.rs index e77aaa547bb..34073e51a38 100644 --- a/src/bin/cargo/commands/test.rs +++ b/src/bin/cargo/commands/test.rs @@ -97,13 +97,9 @@ pub fn exec(config: &mut Config, args: &ArgMatches<'_>) -> CliResult { // `TESTNAME` is actually an argument of the test binary, but it's // important, so we explicitly mention it and reconfigure. let test_name: Option<&str> = args.value_of("TESTNAME"); - let mut test_args = vec![]; - test_args.extend(test_name.into_iter().map(|s| s.to_string())); - test_args.extend( - args.values_of("args") - .unwrap_or_default() - .map(|s| s.to_string()), - ); + let test_args = args.value_of("TESTNAME").into_iter(); + let test_args = test_args.chain(args.values_of("args").unwrap_or_default()); + let test_args = test_args.collect::>(); let no_run = args.is_present("no-run"); let doc = args.is_present("doc"); diff --git a/src/cargo/ops/cargo_test.rs b/src/cargo/ops/cargo_test.rs index d335a80a800..daca6ba5939 100644 --- a/src/cargo/ops/cargo_test.rs +++ b/src/cargo/ops/cargo_test.rs @@ -15,7 +15,7 @@ pub struct TestOptions<'a> { pub fn run_tests( ws: &Workspace<'_>, options: &TestOptions<'_>, - test_args: &[String], + test_args: &[&str], ) -> CargoResult> { let compilation = compile_tests(ws, options)?; @@ -42,16 +42,19 @@ pub fn run_tests( pub fn run_benches( ws: &Workspace<'_>, options: &TestOptions<'_>, - args: &[String], + args: &[&str], ) -> CargoResult> { - let mut args = args.to_vec(); - args.push("--bench".to_string()); let compilation = compile_tests(ws, options)?; if options.no_run { return Ok(None); } + + let mut args = args.to_vec(); + args.push("--bench"); + let (test, errors) = run_unit_tests(options, &args, &compilation)?; + match errors.len() { 0 => Ok(None), _ => Ok(Some(CargoTestError::new(test, errors))), @@ -72,7 +75,7 @@ fn compile_tests<'a>( /// Runs the unit and integration tests of a package. fn run_unit_tests( options: &TestOptions<'_>, - test_args: &[String], + test_args: &[&str], compilation: &Compilation<'_>, ) -> CargoResult<(Test, Vec)> { let config = options.compile_opts.config; @@ -125,7 +128,7 @@ fn run_unit_tests( fn run_doc_tests( options: &TestOptions<'_>, - test_args: &[String], + test_args: &[&str], compilation: &Compilation<'_>, ) -> CargoResult<(Test, Vec)> { let mut errors = Vec::new(); diff --git a/src/cargo/util/command_prelude.rs b/src/cargo/util/command_prelude.rs index d004f5561e3..d36f602afb0 100644 --- a/src/cargo/util/command_prelude.rs +++ b/src/cargo/util/command_prelude.rs @@ -481,10 +481,7 @@ impl<'a> ArgMatchesExt for ArgMatches<'a> { } pub fn values(args: &ArgMatches<'_>, name: &str) -> Vec { - args.values_of(name) - .unwrap_or_default() - .map(|s| s.to_string()) - .collect() + args._values_of(name) } #[derive(PartialEq, PartialOrd, Eq, Ord)]