Skip to content
This repository was archived by the owner on Nov 24, 2023. It is now read-only.

Improve tests #31

Merged
merged 2 commits into from
May 18, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions tests/crates/libui-rs.sub-path
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ui
98 changes: 61 additions & 37 deletions tests/fixtures.rs
Original file line number Diff line number Diff line change
@@ -1,66 +1,90 @@
#[macro_use]
extern crate duct;

use std::io::{BufReader, BufRead};

#[test]
fn fixtures() {
// ignore if this fails
let _ = cmd!("cargo", "install", "clippy").stderr_capture().run();
let root_dir = std::env::current_dir().unwrap();

println!("looking for fixtures in directory: {:?}", root_dir);
println!("looking for fixtures in directory: {:?}\n", root_dir);

for fixture in std::fs::read_dir(root_dir.join("tests/crates")).unwrap() {
let fixture = fixture.unwrap();
if !fixture.file_type().unwrap().is_dir() {
continue;
}
let fixture_path = fixture.path();

// FIXME: don't expect the crate to be in the `ui` subdir
let dir = fixture_path.join("ui");
let tests = std::fs::read_dir(root_dir.join("tests/tests").join(fixture_path.file_name().unwrap())).unwrap();
let files: Vec<String> = std::fs::File::open(fixture_path.with_extension("sub-path"))
.and_then(|file| BufReader::new(file).lines().collect()).unwrap_or_default();
let dirs = if files.is_empty() {
vec![fixture_path.clone()]
} else {
files.into_iter().map(|file| fixture_path.join(file.trim())).collect()
};
for dir in dirs {
println!("====================================================================");
println!("Running tests for {:?}\n", dir);
let tests = std::fs::read_dir(root_dir.join("tests/tests").join(fixture_path.file_name().unwrap())).unwrap();

for entry in tests {
let test = entry.unwrap().path();
let yolo = test.file_name().unwrap() == "yolo";
for entry in tests {
let test = entry.unwrap().path();
let yolo = test.file_name().unwrap() == "yolo";

println!("---");
println!("Running test: {:?}", test);
println!("Running test: {}", test.file_name().unwrap().to_str().unwrap());

assert!(cmd!("git", "checkout", ".").dir(&dir).run().unwrap().status.success());
assert!(cmd!("cargo", "clean").dir(&dir).run().unwrap().status.success());
assert!(cmd!("git", "checkout", ".").dir(&dir).run().unwrap().status.success());
assert!(cmd!("cargo", "clean").dir(&dir).run().unwrap().status.success());
// we only want to rustfix the final project, not any dependencies
assert!(cmd!("cargo", "build").dir(&dir).run().unwrap().status.success());

let manifest = format!("{:?}", root_dir.join("Cargo.toml"));
let manifest = format!("{:?}", root_dir.join("Cargo.toml"));

println!("Checking {:?} with clippy", test);
println!("Running cargo clippy to obtain suggestions");

let manifest = format!("--manifest-path={}", &manifest[1..manifest.len() - 1]);
let cmd = if yolo {
cmd!("cargo", "run", manifest, "--quiet", "--", "--clippy", "--yolo")
} else {
cmd!("cargo", "run", manifest, "--quiet", "--", "--clippy")
};
cmd.dir(&dir)
.stdin(test.join("input.txt"))
.stdout(dir.join("output.txt"))
.run()
.unwrap();
let manifest = format!("--manifest-path={}", &manifest[1..manifest.len() - 1]);
let cmd = if yolo {
cmd!("cargo", "run", manifest, "--quiet", "--", "--clippy", "--yolo")
} else {
cmd!("cargo", "run", manifest, "--quiet", "--", "--clippy")
};
cmd.dir(&dir)
.stdin(test.join("input.txt"))
.stdout(dir.join("output.txt"))
.run()
.unwrap();

if std::env::var("APPLY_RUSTFIX").is_ok() {
std::fs::copy(dir.join("output.txt"), test.join("output.txt")).unwrap();
if std::env::var("APPLY_RUSTFIX").is_ok() {
std::fs::copy(dir.join("output.txt"), test.join("output.txt")).unwrap();

cmd!("git", "diff").dir(&dir).stdout(test.join("diff.diff")).run().unwrap();
} else {
cmd!("git", "diff").dir(&dir).stdout(dir.join("diff.diff")).run().unwrap();
cmd!("git", "diff").dir(&dir).stdout(test.join("diff.diff")).run().unwrap();
} else {
cmd!("git", "diff").dir(&dir).stdout(dir.join("diff.diff")).run().unwrap();

if !cmd!("diff", "-q", dir.join("diff.diff"), test.join("diff.diff")).dir(&dir).unchecked().run().unwrap().status.success() {
panic!("Unexpected changes applied by rustfix");
}
let diff = cmd!("diff", dir.join("diff.diff"), test.join("diff.diff"))
.dir(&dir)
.stdout_capture()
.unchecked()
.run().unwrap();
if !diff.status.success() {
panic!("Unexpected changes by rustfix:\n{}", std::str::from_utf8(&diff.stdout).unwrap());
}

if !cmd!("diff", "-q", dir.join("output.txt"), test.join("output.txt")).dir(&dir).unchecked().run().unwrap().status.success() {
panic!("Unexpected output by rustfix");
let output = cmd!("diff", dir.join("output.txt"), test.join("output.txt"))
.dir(&dir)
.stdout_capture()
.unchecked()
.run().unwrap();
if !output.status.success() {
panic!("Unexpected output by rustfix:\n{}", std::str::from_utf8(&output.stdout).unwrap());
}
}
}

println!("---");
println!("Success!");
println!("Success!\n");
}
}
}
}