mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +00:00
50 lines
1.2 KiB
Rust
50 lines
1.2 KiB
Rust
use std::path::PathBuf;
|
|
|
|
use cargo_test_support::{compare, ArgLineCommandExt, Execs, Project, TestEnvCommandExt};
|
|
|
|
pub trait CargoProjectExt {
|
|
/// Creates a `ProcessBuilder` to run cargo.
|
|
///
|
|
/// Arguments can be separated by spaces.
|
|
///
|
|
/// For `cargo run`, see [`Project::rename_run`].
|
|
///
|
|
/// # Example:
|
|
///
|
|
/// ```no_run
|
|
/// # let p = cargo_test_support::project().build();
|
|
/// p.cargo("build --bin foo").run();
|
|
/// ```
|
|
fn cargo(&self, cmd: &str) -> Execs;
|
|
}
|
|
|
|
impl CargoProjectExt for Project {
|
|
fn cargo(&self, cmd: &str) -> Execs {
|
|
let cargo = cargo_exe();
|
|
let mut execs = self.process(&cargo);
|
|
execs.env("CARGO", cargo);
|
|
execs.arg_line(cmd);
|
|
execs
|
|
}
|
|
}
|
|
|
|
/// Path to the cargo binary
|
|
pub fn cargo_exe() -> PathBuf {
|
|
snapbox::cmd::cargo_bin!("cargo").to_path_buf()
|
|
}
|
|
|
|
/// Test the cargo command
|
|
pub trait CargoCommandExt {
|
|
fn cargo_ui() -> Self;
|
|
}
|
|
|
|
impl CargoCommandExt for snapbox::cmd::Command {
|
|
fn cargo_ui() -> Self {
|
|
Self::new(cargo_exe())
|
|
.with_assert(compare::assert_ui())
|
|
.env("CARGO_TERM_COLOR", "always")
|
|
.env("CARGO_TERM_HYPERLINKS", "true")
|
|
.test_env()
|
|
}
|
|
}
|