blob: 19bc17733a1d06e6219f2980b89f11ed0681e926 [file] [log] [blame]
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()
}
}