tearup 0.3.0

Setup - teardown your tests
Documentation
use tearup::{tearup, ContextCombinator};

use crate::helper::{
    FirstFullContext, FirstProof, FourthProof, SecondFullContext, SecondProof, ThirdProof,
};

#[test]
fn it_gives_access_to_variables() {
    it_uses_some_variables();
}

type Combination = ContextCombinator<FirstFullContext, SecondFullContext>;

#[tearup(Combination)]
fn it_uses_some_variables(mut a: FirstProof, b: SecondProof, c: ThirdProof, d: FourthProof) {
    assert_eq!(a.0, "first_proof");
    a.0 = "mutable".to_owned();
    assert_eq!(a.0, "mutable");
    assert_eq!(b.0, "second_proof");
    assert_eq!(c.0, "ref_to_first_proof");
    assert_eq!(d.0, "another_ref_to_second_proof");
}

#[cfg(feature = "async")]
mod asyncc {
    use tearup::{tearup, AsyncContextCombinator};

    use crate::helper::{
        AsyncFirstFullContext, AsyncSecondFullContext, FirstProof, FourthProof, SecondProof,
        ThirdProof,
    };

    #[tokio::test]
    async fn it_gives_access_to_variables() {
        it_uses_some_variables().await;
    }

    type Combination = AsyncContextCombinator<AsyncFirstFullContext, AsyncSecondFullContext>;

    #[tearup(Combination)]
    async fn it_uses_some_variables(
        mut a: FirstProof,
        b: SecondProof,
        c: ThirdProof,
        d: FourthProof,
    ) {
        assert_eq!(a.0, "first_proof");
        a.0 = "mutable".to_owned();
        assert_eq!(a.0, "mutable");
        assert_eq!(b.0, "second_proof");
        assert_eq!(c.0, "ref_to_first_proof");
        assert_eq!(d.0, "another_ref_to_second_proof");
    }
}