use rpawomaster::setclip::copy_to_clipboard;
use arboard::Clipboard;
use std::env;
struct ClipboardGuard {
original_content: Option<String>,
clipboard: Clipboard,
}
impl ClipboardGuard {
fn new() -> Self {
let mut clipboard = Clipboard::new().expect("Failed to initialize clipboard");
let original_content = clipboard.get_text().ok();
Self { original_content, clipboard }
}
}
impl Drop for ClipboardGuard {
fn drop(&mut self) {
if let Some(original) = &self.original_content {
let _ = self.clipboard.set_text(original.clone());
}
}
}
#[test]
fn test_daemon_task_clears_only_unmodified_content() {
unsafe {
env::set_var("CLIPBOARD_DAEMON", "1");
env::set_var("DYNAMIC_INFO", "test_password_456");
}
let mut guard = ClipboardGuard::new();
let clipboard = &mut guard.clipboard;
clipboard.set_text("test_password_456").unwrap();
assert!(copy_to_clipboard("test_password_456", 1).is_ok());
let content_after = clipboard.get_text().unwrap_or_default();
assert_eq!(content_after, "", "Should clear unmodified content");
clipboard.set_text("different_content").unwrap();
assert!(copy_to_clipboard("test_password_456", 1).is_ok());
let content_after_modified = clipboard.get_text().unwrap_or_default();
assert_eq!(content_after_modified, "different_content", "Should not clear modified content");
unsafe {
env::remove_var("CLIPBOARD_DAEMON");
env::remove_var("DYNAMIC_INFO");
}
drop(guard);
}