Files
wgpu/xtask/src/test.rs
2023-10-25 16:51:36 -04:00

60 lines
1.5 KiB
Rust

use anyhow::Context;
use pico_args::Arguments;
pub fn run_tests(mut args: Arguments) -> anyhow::Result<()> {
let llvm_cov = args.contains("--llvm-cov");
// These needs to match the command in "run wgpu-info" in `.github/workflows/ci.yml`
let llvm_cov_flags: &[_] = if llvm_cov {
&["llvm-cov", "--no-cfg-coverage", "--no-report"]
} else {
&[]
};
let llvm_cov_nextest_flags: &[_] = if llvm_cov {
&["llvm-cov", "--no-cfg-coverage", "--no-report", "nextest"]
} else {
&["nextest", "run"]
};
let shell = xshell::Shell::new().context("Couldn't create xshell shell")?;
shell.change_dir(String::from(env!("CARGO_MANIFEST_DIR")) + "/..");
log::info!("Generating .gpuconfig file based on gpus on the system");
xshell::cmd!(
shell,
"cargo {llvm_cov_flags...} run --bin wgpu-info -- --json -o .gpuconfig"
)
.quiet()
.run()
.context("Failed to run wgpu-info to generate .gpuconfig")?;
let gpu_count = shell
.read_file(".gpuconfig")
.unwrap()
.lines()
.filter(|line| line.contains("name"))
.count();
log::info!(
"Found {} gpu{}",
gpu_count,
if gpu_count == 1 { "" } else { "s" }
);
log::info!("Running cargo tests");
xshell::cmd!(
shell,
"cargo {llvm_cov_nextest_flags...} --all-features --no-fail-fast --retries 2"
)
.args(args.finish())
.quiet()
.run()
.context("Tests failed")?;
log::info!("Finished tests");
Ok(())
}