test-case 1.1.0

Provides #[test_case(...)] procedural macro attribute for generating parametrized test cases easily
Documentation
#![cfg(test)]

mod acceptance {
    use itertools::Itertools;
    use std::env;
    use std::path::PathBuf;
    use std::process::Command;

    #[test]
    fn basic() {
        let output = Command::new("cargo")
            .current_dir(PathBuf::from("acceptance_tests").join("basic"))
            .args(&["test"])
            .output()
            .expect("cargo command failed to start");

        let lines = String::from_utf8_lossy(&output.stdout)
            .to_string()
            .lines()
            .sorted()
            .join("\n");
        insta::assert_display_snapshot!(lines);
    }

    #[test]
    fn hamcrest_assertions() {
        let output = Command::new("cargo")
            .current_dir(PathBuf::from("acceptance_tests").join("hamcrest_assertions"))
            .args(&["test"])
            .output()
            .expect("cargo command failed to start");

        let lines = String::from_utf8_lossy(&output.stdout)
            .to_string()
            .lines()
            .sorted()
            .join("\n");
        insta::assert_display_snapshot!(lines);
    }

    #[test]
    fn r#async() {
        let output = Command::new("cargo")
            .current_dir(PathBuf::from("acceptance_tests").join("async"))
            .args(&["test"])
            .output()
            .expect("cargo command failed to start");

        let lines = String::from_utf8_lossy(&output.stdout)
            .to_string()
            .lines()
            .sorted()
            .join("\n");
        insta::assert_display_snapshot!(lines);
    }
}