use tearup::tearup;
use crate::helper::{FirstFullContext, FirstProof, SecondProof};
#[test]
fn it_gives_access_to_variables() {
it_uses_some_variables();
}
#[tearup(FirstFullContext)]
fn it_uses_some_variables(mut a: FirstProof, b: SecondProof) {
assert_eq!(a.0, "first_proof");
a.0 = "mutable".to_owned();
assert_eq!(a.0, "mutable");
assert_eq!(b.0, "second_proof");
}
#[cfg(feature = "async")]
mod asyncc {
use async_trait::async_trait;
use lazy_static::lazy_static;
use std::time::{Duration, SystemTime};
use tearup::{tearup, AsyncContext, AsyncSharedContext};
use tokio::time::sleep;
use crate::helper::{assert_async_order, AsyncCheckpoint};
lazy_static! {
static ref SETUP_CHECKPOINT: AsyncCheckpoint = None.into();
static ref TEARDOWN_CHECKPOINT: AsyncCheckpoint = None.into();
}
#[tokio::test]
async fn it_pass_through_setup_then_teardown() {
teardown_panic().await;
assert_async_order(&SETUP_CHECKPOINT, &TEARDOWN_CHECKPOINT).await;
}
struct NiceContext;
#[async_trait]
impl AsyncContext<'_> for NiceContext {
async fn setup(_shared_context: AsyncSharedContext) -> Self {
let mut checkpoint = SETUP_CHECKPOINT.lock().await;
*checkpoint = Some(SystemTime::now());
sleep(Duration::from_millis(10)).await;
Self {}
}
async fn teardown(mut self, _shared_context: AsyncSharedContext) {
let mut checkpoint = TEARDOWN_CHECKPOINT.lock().await;
*checkpoint = Some(SystemTime::now());
}
}
#[tearup(NiceContext)]
async fn teardown_panic() {}
}