s_test_fixture 0.1.7

s_test_fixture or simple test fixture is a macro library to implement test fixture with no hassle
Documentation
#[cfg(test)]
mod tests_after {
    use s_test_fixture::after;
    use std::fs::{remove_file, File, OpenOptions};
    use std::io::prelude::*;

    #[test]
    #[after(validate_simple_test(1))]
    fn simple_test_after() {
        File::create(format!("{}.txt", 1)).unwrap();
        something(1);
    }

    #[test]
    #[after(validate_branch_test(2))]
    fn branch_test_after() {
        File::create(format!("{}.txt", 2)).unwrap();
        something(2);
        if 1 == 0 {
            something(2);
            ()
        } else if 1 == 2 {
            something(2);
            return ();
        } else {
            something(2);
            ()
        }
    }

    #[test]
    #[after(validate_returning_a_result(3))]
    fn test_returning_a_result_after() -> Result<(), ()> {
        File::create(format!("{}.txt", 3)).unwrap();
        something(3);
        something(3);
        something(3);
        something(3);
        Ok(())
    }

    #[test]
    #[after(validate_simple_test(4))]
    #[allow(unused_attributes)]
    #[should_panic]
    fn test_panic_after() {
        File::create(format!("{}.txt", 4)).unwrap();
        something(4);
        panic!("I panic")
    }

    fn something(n: i32) {
        let mut file = OpenOptions::new()
            .write(true)
            .append(true)
            .open(format!("{}.txt", n))
            .unwrap();

        writeln!(file, "{}", MSG).unwrap();
    }

    fn read_and_delete_test_file(n: i32) -> String {
        let mut file = File::open(format!("{}.txt", n)).unwrap();
        let mut contents = String::new();
        file.read_to_string(&mut contents).unwrap();
        remove_file(format!("{}.txt", n)).unwrap();
        contents
    }

    fn validate_simple_test(n: i32) {
        let statement = format!(
            "{msg}\n{msg_fixture}\n",
            msg = MSG,
            msg_fixture = MSG_FIXTURE
        );
        function_to_run(n, statement);
    }

    fn validate_branch_test(n: i32) {
        let statement = format!(
            "{msg}\n{msg}\n{msg_fixture}\n",
            msg = MSG,
            msg_fixture = MSG_FIXTURE
        );
        function_to_run(n, statement);
    }

    fn validate_returning_a_result(n: i32) {
        let statement = format!(
            "{msg}\n{msg}\n{msg}\n{msg}\n{msg_fixture}\n",
            msg = MSG,
            msg_fixture = MSG_FIXTURE
        );
        function_to_run(n, statement);
    }

    fn function_to_run(n: i32, statement: String) {
        let msg = format!("{}\n", MSG_FIXTURE);

        let mut file = OpenOptions::new()
            .write(true)
            .append(true)
            .open(format!("{}.txt", n))
            .unwrap();

        write!(file, "{}", msg).unwrap();

        assert_eq!(statement, read_and_delete_test_file(n));
    }

    const MSG: &'static str = "something was done";
    const MSG_FIXTURE: &'static str = "after fixture";
}