mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-10 13:56:48 +00:00
63 lines
1.9 KiB
Rust
63 lines
1.9 KiB
Rust
#![allow(unused)]
|
|
|
|
use std::path::PathBuf;
|
|
use std::process::Command;
|
|
use std::process::Output;
|
|
use std::sync::LazyLock;
|
|
|
|
#[macro_export]
|
|
macro_rules! run_cargo_component_cmd {
|
|
() => ({
|
|
let file = file!();
|
|
let path = std::path::PathBuf::from(file);
|
|
let filename = path.file_name().unwrap().to_string_lossy();
|
|
let test_name = format!("{}_test", filename.trim_end_matches(".rs"));
|
|
test_utils::run_cargo_component(&test_name)
|
|
});
|
|
}
|
|
|
|
static CARGO_COMPONENT_PATH: LazyLock<PathBuf> = LazyLock::new(|| {
|
|
let mut path = std::env::current_exe().unwrap();
|
|
assert!(path.pop()); // deps
|
|
path.set_file_name("cargo-component");
|
|
path
|
|
});
|
|
|
|
pub fn run_cargo_component(test_name: &str) -> String {
|
|
let root_dir = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap());
|
|
let target_dir = root_dir.join("target").join(test_name);
|
|
let cwd = root_dir.join("tests").join(test_name);
|
|
let output = cargo_clean(&cwd, &target_dir);
|
|
assert!(output.status.success());
|
|
|
|
let output = cargo_component(&cwd, &target_dir);
|
|
let stderr = String::from_utf8_lossy(&output.stderr).to_string();
|
|
println!("stderr: {stderr}");
|
|
clean_after_test(&cwd, &target_dir);
|
|
stderr
|
|
}
|
|
|
|
fn cargo_clean(cwd: &PathBuf, target_dir: &PathBuf) -> Output {
|
|
Command::new("cargo")
|
|
.arg("clean")
|
|
.current_dir(cwd)
|
|
.env("CARGO_TARGET_DIR", target_dir)
|
|
.output()
|
|
.unwrap()
|
|
}
|
|
|
|
fn cargo_component(cwd: &PathBuf, target_dir: &PathBuf) -> Output {
|
|
Command::new(&*CARGO_COMPONENT_PATH)
|
|
.current_dir(cwd)
|
|
.env("CARGO_INCREMENTAL", "0")
|
|
.env("CARGO_TARGET_DIR", target_dir)
|
|
.output()
|
|
.unwrap()
|
|
}
|
|
|
|
fn clean_after_test(cwd: &PathBuf, target_dir: &PathBuf) {
|
|
cargo_clean(cwd, target_dir);
|
|
let cargo_lock = cwd.join("Cargo.lock");
|
|
std::fs::remove_file(cargo_lock);
|
|
}
|