#![cfg(feature = "callback")]
use logfusion::{error, info, set_callback};
use std::sync::{Arc, Mutex};
#[test]
fn callback_receives_log_messages() {
use std::sync::atomic::{AtomicBool, Ordering};
static TEST_FLAG: AtomicBool = AtomicBool::new(false);
TEST_FLAG.store(true, Ordering::SeqCst);
let captured = Arc::new(Mutex::new(Vec::new()));
let captured_clone = captured.clone();
set_callback(Box::new(move |level, target, message| {
if TEST_FLAG.load(Ordering::SeqCst)
&& (message.contains("Callback test message")
|| message.contains("Callback error message"))
{
captured_clone.lock().unwrap().push((
level.to_string(),
target.to_string(),
message.to_string(),
));
}
}));
info!("Callback test message");
error!("Callback error message");
std::thread::sleep(std::time::Duration::from_millis(50));
TEST_FLAG.store(false, Ordering::SeqCst);
let logs = captured.lock().unwrap();
assert_eq!(logs.len(), 2, "Expected 2 log entries, got {}", logs.len());
assert!(
logs.iter()
.any(|log| log.0 == "info" && log.2.contains("Callback test message"))
);
assert!(
logs.iter()
.any(|log| log.0 == "error" && log.2.contains("Callback error message"))
);
}