use std::any::Any;
use std::sync::Arc;
use crate::fixture::FixturePool;
use crate::model::{TestFailure, TestInfo};
#[derive(Clone)]
pub struct TestContext {
pool: FixturePool,
}
impl TestContext {
pub fn new(pool: FixturePool) -> Self {
Self { pool }
}
pub async fn page(&self) -> Result<Arc<ferridriver::Page>, TestFailure> {
self
.pool
.get::<ferridriver::Page>("page")
.await
.map_err(TestFailure::from)
}
pub async fn browser(&self) -> Result<Arc<ferridriver::Browser>, TestFailure> {
self
.pool
.get::<ferridriver::Browser>("browser")
.await
.map_err(TestFailure::from)
}
pub async fn browser_context(&self) -> Result<Arc<ferridriver::ContextRef>, TestFailure> {
self
.pool
.get::<ferridriver::ContextRef>("context")
.await
.map_err(TestFailure::from)
}
pub async fn test_info(&self) -> Result<Arc<TestInfo>, TestFailure> {
self.pool.get::<TestInfo>("test_info").await.map_err(TestFailure::from)
}
pub async fn get<T: Any + Send + Sync>(&self, name: &str) -> Result<Arc<T>, TestFailure> {
self.pool.get::<T>(name).await.map_err(TestFailure::from)
}
pub fn pool(&self) -> &FixturePool {
&self.pool
}
}