diff --git a/src/prepare.rs b/src/prepare.rs index cf778ce..703bbab 100644 --- a/src/prepare.rs +++ b/src/prepare.rs @@ -57,14 +57,12 @@ impl<'a> Prepare<'a> { return Err(PrepareError::MissingCargoToml.into()); } - let res = Command::new(self.workspace, self.toolchain.cargo()) + Command::new(self.workspace, self.toolchain.cargo()) .args(["metadata", "--manifest-path", "Cargo.toml", "--no-deps"]) .current_directory(self.source_dir) .log_output(false) - .run(); - if res.is_err() { - return Err(PrepareError::InvalidCargoTomlSyntax.into()); - } + .run_capture() + .context(PrepareError::InvalidCargoTomlSyntax)?; Ok(()) } diff --git a/tests/buildtest/mod.rs b/tests/buildtest/mod.rs index 07ff16a..f55d1ed 100644 --- a/tests/buildtest/mod.rs +++ b/tests/buildtest/mod.rs @@ -374,11 +374,29 @@ test_prepare_error!( InvalidCargoTomlSyntax ); -test_prepare_error!( - test_invalid_cargotoml_content, - "invalid-cargotoml-content", - InvalidCargoTomlSyntax -); +#[test] +fn test_invalid_cargotoml_content() { + runner::run("invalid-cargotoml-content", |run| { + let error = run + .run(crate::utils::sandbox_builder(), |_| Ok(())) + .err() + .expect("invalid package name should fail manifest validation"); + assert!(matches!( + error.downcast_ref::(), + Some(rustwide::PrepareError::InvalidCargoTomlSyntax) + )); + + let diagnostic = "invalid character `!` in package name"; + assert!(matches!( + error.downcast_ref::(), + Some(rustwide::cmd::CommandError::ExecutionFailed { stderr, .. }) + if stderr.contains(diagnostic) + )); + let output = format!("{error:#}"); + assert!(output.contains(diagnostic), "output: {output}"); + Ok(()) + }); +} test_prepare_error_stderr!( test_checksum_mismatch,