Skip to content

Commit

Permalink
clipboard daemon done
Browse files Browse the repository at this point in the history
  • Loading branch information
ODAncona committed Feb 16, 2025
1 parent 5ecac21 commit 91b59ca
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 79 deletions.
9 changes: 0 additions & 9 deletions src/clipboard.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
use anyhow::{Context, Result};
use arboard::{Clipboard, LinuxClipboardKind};
use colored::*;
use log::info;
use std::process::{Command, Stdio};

Expand Down Expand Up @@ -98,13 +97,5 @@ pub fn serve_clipboard_daemon() -> anyhow::Result<()> {
.wait()
.text(content_from_stdin)
.context("Failed to set clipboard content")?;

println!(
"{}{}{} {}",
"[".bold().white(),
"✓".bold().green(),
"]".bold().white(),
"Copied to clipboard successfully.".green()
);
Ok(())
}
8 changes: 8 additions & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ fn main() -> Result<()> {
if args.clipboard_daemon {
info! {"Serving clipboard daemon..."};
serve_clipboard_daemon()?;
info! {"Shutting down gracefully..."};
return Ok(());
}
}
Expand Down Expand Up @@ -290,6 +291,13 @@ fn main() -> Result<()> {
#[cfg(target_os = "linux")]
{
spawn_clipboard_daemon(&rendered)?;
println!(
"{}{}{} {}",
"[".bold().white(),
"✓".bold().green(),
"]".bold().white(),
"Copied to clipboard successfully.".green()
);
}
#[cfg(not(target_os = "linux"))]
{
Expand Down
94 changes: 24 additions & 70 deletions tests/clipboard_test.rs
Original file line number Diff line number Diff line change
@@ -1,70 +1,24 @@
#[cfg(test)]
mod clipboard_tests {
use anyhow::Result;
use arboard::Clipboard;
use code2prompt::clipboard::spawn_clipboard_daemon;
use std::thread;
use std::time::Duration;

/// Test production du daemon sous Linux.
///
/// Ce test lance le daemon qui utilise `wait()`. Pour débloquer ce wait,
/// nous simulons un événement de remplacement en écrasant le presse‑papiers avec une valeur dummy.
/// Après l'overwrite, nous vérifions que le presse‑papiers contient bien la valeur dummy,
/// ce qui signifie que le daemon a terminé correctement.
#[test]
#[cfg(target_os = "linux")]
fn test_clipboard_daemon_production() -> Result<()> {
let test_content = "Test Clipboard Content for Linux";

// Lance le daemon (qui lit le contenu via STDIN et appelle wait())
spawn_clipboard_daemon(test_content)?;

// Attendre un court instant pour laisser le daemon s'installer
thread::sleep(Duration::from_millis(300));

// Simuler un overwrite après un court délai dans un thread séparé.
// Cela doit débloquer le wait() dans le daemon.
thread::spawn(|| {
// Attendre un peu pour être sûr que le daemon est en attente
thread::sleep(Duration::from_millis(500));
let mut clipboard = Clipboard::new().expect("Failed to open clipboard for overwrite");
clipboard
.set_text("dummy".to_string())
.expect("Failed to overwrite clipboard");
});

// Attendre suffisamment longtemps pour que le remplacement ait lieu
thread::sleep(Duration::from_millis(1000));

// Vérifier que le presse-papiers a bien été remplacé par "dummy".
let mut clipboard = Clipboard::new().expect("Failed to open clipboard");
let content = clipboard.get_text().expect("Failed to get clipboard text");
assert_eq!(
content, "dummy",
"Clipboard content should be overwritten by dummy"
);

Ok(())
}

/// Test du fonctionnement de la copie dans le presse-papiers sur les OS non-Linux
///
/// Ce test utilise la fonction simple `copy_to_clipboard` qui définit directement le contenu.
#[test]
#[cfg(not(target_os = "linux"))]
fn test_clipboard_copy() {
let test_content = "Test Clipboard Content for non-Linux";

// Utilise la fonction standard pour copier dans le presse-papiers.
copy_to_clipboard(test_content).expect("Failed to copy to clipboard");

// Vérifie que le contenu du presse-papiers correspond.
let mut clipboard = Clipboard::new().expect("Failed to open clipboard");
let content = clipboard.get_text().expect("Failed to get clipboard text");
assert_eq!(
content, test_content,
"Le contenu du presse-papiers doit être celui de test_content"
);
}
}
// #[cfg(test)]
// mod clipboard_tests {
// use arboard::Clipboard;
// use code2prompt::copy_text_to_clipboard;

// /// Test du fonctionnement de la copie dans le presse-papiers sur les OS non-Linux
// ///
// /// Ce test utilise la fonction simple `copy_to_clipboard` qui définit directement le contenu.
// #[test]
// fn test_clipboard_copy() {
// let test_content = "Test Clipboard Content for non-Linux";

// // Utilise la fonction standard pour copier dans le presse-papiers.
// copy_text_to_clipboard(test_content).expect("Failed to copy to clipboard");

// // Vérifie que le contenu du presse-papiers correspond.
// let mut clipboard = Clipboard::new().expect("Failed to open clipboard");
// let content = clipboard.get_text().expect("Failed to get clipboard text");
// assert_eq!(
// content, test_content,
// "Le contenu du presse-papiers doit être celui de test_content"
// );
// }
// }

0 comments on commit 91b59ca

Please sign in to comment.