cargo-test-fuzz 0.1.0-alpha.12

cargo-test-fuzz
use assert_cmd::prelude::*;
use dirs::corpus_directory_from_target;
use std::{
    fs::{read_dir, remove_dir_all},
    process::Command,
};

const TEST_DIR: &str = "../examples";
const CRATE: &str = "assert";
const TARGET: &str = "assert::target";
const TIMEOUT: &str = "60";

#[test]
fn consolidate() {
    let corpus = corpus_directory_from_target(CRATE, TARGET);

    remove_dir_all(&corpus).unwrap_or_default();

    Command::new("cargo")
        .current_dir(TEST_DIR)
        .args(&["test", "--", "--test", TARGET])
        .assert()
        .success();

    assert_eq!(read_dir(&corpus).unwrap().count(), 1);

    Command::cargo_bin("cargo-test-fuzz")
        .unwrap()
        .current_dir(TEST_DIR)
        .args(&[
            "test-fuzz",
            "--target",
            TARGET,
            "--no-ui",
            "--run-until-crash",
            "--",
            "-V",
            TIMEOUT,
        ])
        .assert()
        .success();

    Command::cargo_bin("cargo-test-fuzz")
        .unwrap()
        .current_dir(TEST_DIR)
        .args(&["test-fuzz", "--target", TARGET, "--consolidate"])
        .assert()
        .success();

    assert!(read_dir(&corpus).unwrap().count() > 1);
}