1#![cfg(not(miri))]
2#![cfg(not(careful))]
3#![warn(rust_2018_idioms, single_use_lifetimes)]
4
5use std::{
6 env,
7 process::{Command, ExitStatus, Stdio},
8};
9
10const PATH: &str = "tests/expand/**/*.rs";
11
12#[rustversion::attr(not(nightly), ignore)]
13#[test]
14fn expandtest() {
15 let is_ci = env::var_os("CI").is_some();
16 let cargo = &*env::var("CARGO").unwrap_or_else(|_| "cargo".into());
17 if !has_command(&[cargo, "expand"]) {
18 if is_ci {
19 panic!("expandtest requires cargo-expand");
20 }
21 return;
22 }
23
24 let args = &["--all-features"];
25 if is_ci {
26 macrotest::expand_without_refresh_args(PATH, args);
27 } else {
28 env::set_var("MACROTEST", "overwrite");
29 macrotest::expand_args(PATH, args);
30 }
31}
32
33fn has_command(command: &[&str]) -> bool {
34 Command::new(command[0])
35 .args(&command[1..])
36 .arg("--version")
37 .stdin(Stdio::null())
38 .stdout(Stdio::null())
39 .stderr(Stdio::null())
40 .status()
41 .as_ref()
42 .map(ExitStatus::success)
43 .unwrap_or(false)
44}
45