use crate::clear_override;
use crate::terminal::ColorLevel;
use crate::terminal::registry::{reset_cached_level, set_override};
use std::sync::{LazyLock, Mutex, MutexGuard};
static TEST_MUTEX: LazyLock<Mutex<()>> = LazyLock::new(|| Mutex::new(()));
pub(crate) struct MockTerminalGuard<'a> {
_lock: MutexGuard<'a, ()>,
}
impl<'a> MockTerminalGuard<'a> {
pub(crate) fn acquire(level: impl Into<Option<ColorLevel>>) -> Self {
let lock = TEST_MUTEX
.lock()
.unwrap_or_else(|poisoned| poisoned.into_inner());
reset_cached_level();
let level = level.into();
match level {
Some(level) => set_override(level),
None => clear_override(),
}
Self { _lock: lock }
}
}
impl<'a> Drop for MockTerminalGuard<'a> {
fn drop(&mut self) {
reset_cached_level();
}
}