2021-03-14 21:43:47 +01:00
|
|
|
use std::process::Command;
|
|
|
|
|
|
|
|
use crate_root::root;
|
|
|
|
|
2021-03-20 01:46:19 +01:00
|
|
|
struct Fixture {
|
|
|
|
name: &'static str,
|
|
|
|
exit_code: i32,
|
|
|
|
expected_output: &'static str,
|
|
|
|
}
|
|
|
|
|
|
|
|
const FIXTURES: &[Fixture] = &[
|
|
|
|
Fixture {
|
|
|
|
name: "simple",
|
|
|
|
exit_code: 5,
|
|
|
|
expected_output: "",
|
|
|
|
},
|
2021-03-20 23:14:23 +01:00
|
|
|
Fixture {
|
|
|
|
name: "functions",
|
|
|
|
exit_code: 9,
|
|
|
|
expected_output: "",
|
|
|
|
},
|
2021-03-20 01:46:19 +01:00
|
|
|
Fixture {
|
|
|
|
name: "externs",
|
|
|
|
exit_code: 0,
|
|
|
|
expected_output: "foobar\n",
|
|
|
|
},
|
2021-03-28 19:28:49 +02:00
|
|
|
Fixture {
|
|
|
|
name: "units",
|
|
|
|
exit_code: 0,
|
|
|
|
expected_output: "hi\n",
|
|
|
|
},
|
2021-03-20 01:46:19 +01:00
|
|
|
];
|
2021-03-14 21:43:47 +01:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn compile_and_run_files() {
|
|
|
|
let ach = root().unwrap().join("ach");
|
|
|
|
|
2021-03-14 22:01:25 +01:00
|
|
|
println!("Running: `make clean`");
|
|
|
|
assert!(
|
|
|
|
Command::new("make")
|
|
|
|
.arg("clean")
|
|
|
|
.current_dir(&ach)
|
|
|
|
.spawn()
|
|
|
|
.unwrap()
|
|
|
|
.wait()
|
|
|
|
.unwrap()
|
|
|
|
.success(),
|
|
|
|
"make clean failed"
|
|
|
|
);
|
|
|
|
|
2021-03-20 01:46:19 +01:00
|
|
|
for Fixture {
|
|
|
|
name,
|
|
|
|
exit_code,
|
|
|
|
expected_output,
|
|
|
|
} in FIXTURES
|
|
|
|
{
|
|
|
|
println!(">>> Testing: {}", name);
|
2021-03-14 21:43:47 +01:00
|
|
|
|
2021-03-20 01:46:19 +01:00
|
|
|
println!(" Running: `make {}`", name);
|
2021-03-14 21:43:47 +01:00
|
|
|
assert!(
|
|
|
|
Command::new("make")
|
2021-03-20 01:46:19 +01:00
|
|
|
.arg(name)
|
2021-03-14 21:43:47 +01:00
|
|
|
.current_dir(&ach)
|
|
|
|
.spawn()
|
|
|
|
.unwrap()
|
|
|
|
.wait()
|
|
|
|
.unwrap()
|
|
|
|
.success(),
|
|
|
|
"make failed"
|
|
|
|
);
|
|
|
|
|
2021-03-20 01:46:19 +01:00
|
|
|
let out_path = ach.join(name);
|
2021-03-14 21:43:47 +01:00
|
|
|
println!(" Running: `{}`", out_path.to_str().unwrap());
|
2021-03-20 01:46:19 +01:00
|
|
|
let output = Command::new(out_path).output().unwrap();
|
|
|
|
assert_eq!(output.status.code().unwrap(), *exit_code,);
|
|
|
|
assert_eq!(output.stdout, expected_output.as_bytes());
|
2021-03-14 21:43:47 +01:00
|
|
|
println!(" OK");
|
|
|
|
}
|
|
|
|
}
|