mirror of
https://github.com/rtic-rs/rtic.git
synced 2024-11-30 15:34:33 +01:00
60 lines
1.6 KiB
Rust
60 lines
1.6 KiB
Rust
|
use std::{fs, path::PathBuf, process::Command};
|
||
|
|
||
|
use compiletest_rs::{common::Mode, Config};
|
||
|
use tempdir::TempDir;
|
||
|
|
||
|
#[test]
|
||
|
fn cfail() {
|
||
|
let mut config = Config::default();
|
||
|
|
||
|
config.mode = Mode::CompileFail;
|
||
|
config.src_base = PathBuf::from("tests/cfail");
|
||
|
config.link_deps();
|
||
|
|
||
|
// remove duplicate and trailing `-L` flags
|
||
|
let mut s = String::new();
|
||
|
if let Some(flags) = config.target_rustcflags.as_mut() {
|
||
|
let mut iter = flags.split_whitespace().peekable();
|
||
|
|
||
|
while let Some(flag) = iter.next() {
|
||
|
if flag == "-L" && (iter.peek() == Some(&"-L") || iter.peek() == None) {
|
||
|
iter.next();
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
s += flag;
|
||
|
s += " ";
|
||
|
}
|
||
|
|
||
|
// path to proc-macro crate
|
||
|
s += "-L target/debug/deps ";
|
||
|
|
||
|
// avoid "error: language item required, but not found: `eh_personality`"
|
||
|
s += "-C panic=abort ";
|
||
|
}
|
||
|
|
||
|
let td = TempDir::new("rtfm").unwrap();
|
||
|
for f in fs::read_dir("tests/cpass").unwrap() {
|
||
|
let f = f.unwrap().path();
|
||
|
let name = f.file_stem().unwrap().to_str().unwrap();
|
||
|
|
||
|
assert!(
|
||
|
Command::new("rustc")
|
||
|
.args(s.split_whitespace())
|
||
|
.arg(f.display().to_string())
|
||
|
.arg("-o")
|
||
|
.arg(td.path().join(name).display().to_string())
|
||
|
.arg("-C")
|
||
|
.arg("linker=true")
|
||
|
.status()
|
||
|
.unwrap()
|
||
|
.success()
|
||
|
);
|
||
|
}
|
||
|
|
||
|
config.target_rustcflags = Some(s);
|
||
|
config.clean_rmeta();
|
||
|
|
||
|
compiletest_rs::run_tests(&config);
|
||
|
}
|