use crate::tui::app::clipboard_route::{
clipboard_info_fingerprint, clipboard_info_has_image, clipboard_info_has_text,
kinds_from_clipboard_info, kinds_from_mime_list, kinds_from_windows_probe,
};
const SCREENSHOT_INFO: &str = "«class PNGf», 22396, «class AVIF», 3219, «class 8BPS», 103000, \
GIF picture, 8071, «class jp2 », 16380, JPEG picture, 12842, TIFF picture, 1497170, \
«class BMP », 1493722, «class TPIC», 34885";
#[test]
fn a_screenshot_clipboard_is_image_only() {
assert!(kinds_from_clipboard_info(SCREENSHOT_INFO).is_image_only());
}
#[test]
fn an_image_with_a_text_flavor_is_not_image_only() {
let info = "«class PNGf», 22396, string, 42, «class utf8», 42, «class furl», 120";
assert!(clipboard_info_has_image(info));
assert!(clipboard_info_has_text(info));
assert!(!kinds_from_clipboard_info(info).is_image_only());
}
#[test]
fn text_only_clipboards_never_hint() {
assert!(clipboard_info_has_text(
"string, 5, «class utf8», 5, «class ut16», 5"
));
assert!(!clipboard_info_has_image("string, 5, «class utf8», 5"));
assert!(!kinds_from_clipboard_info("string, 5, «class utf8», 5").is_image_only());
}
#[test]
fn an_empty_clipboard_never_hints() {
assert!(!kinds_from_clipboard_info("").is_image_only());
assert!(!kinds_from_clipboard_info(" \n ").is_image_only());
}
#[test]
fn the_fingerprint_ignores_whitespace_but_not_content() {
let a = clipboard_info_fingerprint("«class PNGf», 22396, TIFF picture, 1497170");
let b = clipboard_info_fingerprint("«class PNGf», 22396, TIFF picture, 1497170");
let c = clipboard_info_fingerprint("«class PNGf», 99, TIFF picture, 1497170");
assert_eq!(a, b);
assert_ne!(a, c);
}
#[test]
fn mime_list_with_only_images_is_image_only() {
let list = "image/png\nimage/bmp\nimage/tiff\n";
let kinds = kinds_from_mime_list(list);
assert!(kinds.image);
assert!(!kinds.text);
assert!(kinds.is_image_only());
}
#[test]
fn mime_list_with_text_and_image_is_not_image_only() {
let kinds = kinds_from_mime_list("text/html\ntext/plain\nimage/png\n");
assert!(kinds.image);
assert!(kinds.text);
assert!(!kinds.is_image_only());
}
#[test]
fn mime_list_understands_x11_text_targets() {
assert!(kinds_from_mime_list("UTF8_STRING\nSTRING\n").text);
assert!(kinds_from_mime_list("text/plain;charset=utf-8\n").text);
}
#[test]
fn empty_probe_is_not_image_only() {
let kinds = kinds_from_mime_list("");
assert!(!kinds.image);
assert!(!kinds.text);
assert!(!kinds.is_image_only());
}
#[test]
fn windows_probe_parses_its_flags() {
let shot = kinds_from_windows_probe("image=True text=False\r\n");
assert!(shot.is_image_only());
let text_only = kinds_from_windows_probe("image=False text=True");
assert!(!text_only.image);
assert!(text_only.text);
assert!(!text_only.is_image_only());
let both = kinds_from_windows_probe("image=True text=True");
assert!(!both.is_image_only());
}
#[test]
fn macos_info_and_kinds_agree() {
let kinds = kinds_from_clipboard_info(SCREENSHOT_INFO);
assert!(kinds.image && !kinds.text && kinds.is_image_only());
}