test infra

This commit is contained in:
nora 2022-12-20 20:47:51 +01:00
parent 1398d3d211
commit 75108c8553
6 changed files with 145 additions and 36 deletions

View file

@ -1,11 +1,51 @@
use anyhow::Result;
use std::process::Command;
use anyhow::{bail, Result};
use cargo_minimize::Options;
fn canonicalize(code: &str) -> Result<String> {
let ast = syn::parse_file(code)?;
Ok(prettyplease::unparse(&ast))
}
pub fn run_test(code: &str, minimizes_to: &str, options: impl FnOnce(&mut Options)) -> Result<()> {
let dir = tempfile::tempdir()?;
let mut cargo = Command::new("cargo");
cargo.args(["new", "project"]);
cargo.current_dir(dir.path());
let output = cargo.output()?;
if !output.status.success() {
bail!(
"Failed to create cargo project, {}",
String::from_utf8(output.stderr)?
);
}
let cargo_dir = dir.path().join("project");
let main_rs = cargo_dir.join("src/main.rs");
std::fs::write(&main_rs, code)?;
let mut opts = Options::default();
let path = cargo_dir.join("src");
opts.project_dir = Some(cargo_dir);
opts.path = path;
options(&mut opts);
cargo_minimize::minimize(opts)?;
let minimized_main_rs = std::fs::read_to_string(main_rs)?;
let actual = canonicalize(&minimized_main_rs)?;
let expectecd = canonicalize(minimizes_to)?;
assert_eq!(actual, expectecd);
fn run_test(_: &str) -> Result<()> {
let _ = tempfile::tempdir()?;
Ok(())
}
#[test]
fn smoke() {
run_test("").unwrap();
}

24
tests/minimize.rs Normal file
View file

@ -0,0 +1,24 @@
mod helper;
use anyhow::Result;
use helper::run_test;
#[test]
fn hello_world_no_verify() -> Result<()> {
run_test(
r##"
fn main() {
println!("Hello, world!");
}
"##,
r##"
fn main() {
loop {}
}
"##,
|opts| {
opts.no_verify = true;
},
)
}