use crate::{
Direction::{Click, Press, Release},
Enigo, Key, Keyboard, Settings,
};
use std::thread;
#[test]
fn unit_text() {
thread::sleep(super::get_delay());
let mut enigo = Enigo::new(&Settings::default()).unwrap();
let sequences = vec![
"",
"a", "z", "9", "%", "𝕊", "❤️", "abcde", "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
"اَلْعَرَبِيَّةُ", "中文", "日本語", "aaaaaaaaaaaaaaaaaaa𝕊𝕊", "aaaaaaaaaaaaaaaaaaa❤️❤️", "𝕊𝕊𝕊𝕊𝕊𝕊𝕊𝕊𝕊𝕊𝕊𝕊𝕊𝕊𝕊𝕊𝕊𝕊𝕊𝕊𝕊𝕊", "اَلْعَرَبِيَّةُاَلْعَرَبِيَّةُاَلْعَرَبِيَّةُاَلْعَرَبِيَّةُاَلْعَرَبِيَّةُاَلْعَرَبِيَّةُ", "中文中文中文中文中文中文", "日本語日本語日本語日本語日本語日本語日本語", "H3llo World ❤️💯. What'𝕊 üp {}#𝄞\\日本語اَلْعَرَبِيَّةُ",
];
for sequence in sequences {
enigo.text(sequence).unwrap();
}
}
#[ignore] #[test]
fn unit_text_all_utf16() {
thread::sleep(super::get_delay());
let mut enigo = Enigo::new(&Settings::default()).unwrap();
for c in 0x0000..0x0010_FFFF {
if let Some(character) = char::from_u32(c) {
let string = character.to_string();
assert_eq!(
enigo.text(&string),
Ok(()),
"Didn't expect an error for string: {string}"
);
}
}
}
#[test]
fn unit_key() {
use strum::IntoEnumIterator;
thread::sleep(super::get_delay());
let mut enigo = Enigo::new(&Settings::default()).unwrap();
for key in Key::iter() {
assert_eq!(
enigo.key(key, Press),
Ok(()),
"Didn't expect an error for key: {key:?}"
);
assert_eq!(
enigo.key(key, Release),
Ok(()),
"Didn't expect an error for key: {key:?}"
);
assert_eq!(
enigo.key(key, Click),
Ok(()),
"Didn't expect an error for key: {key:?}"
);
}
}
#[ignore]
#[test]
fn unit_key_unicode_all_utf16() {
thread::sleep(super::get_delay());
let mut enigo = Enigo::new(&Settings::default()).unwrap();
for c in 0x0000..=0x0010_FFFF {
if let Some(character) = char::from_u32(c) {
assert_eq!(
enigo.key(Key::Unicode(character), Press),
Ok(()),
"Didn't expect an error for character: {character}"
);
assert_eq!(
enigo.key(Key::Unicode(character), Release),
Ok(()),
"Didn't expect an error for character: {character}"
);
assert_eq!(
enigo.key(Key::Unicode(character), Click),
Ok(()),
"Didn't expect an error for character: {character}"
);
}
}
}
#[ignore]
#[test]
fn unit_key_other_all_keycodes() {
use crate::InputError;
thread::sleep(super::get_delay());
let mut enigo = Enigo::new(&Settings::default()).unwrap();
let max = if cfg!(target_os = "windows") {
u16::MAX as u32
} else {
u32::MAX
};
for raw_keycode in 0..=max {
assert_eq!(
enigo.key(Key::Other(raw_keycode), Press),
Ok(()),
"Didn't expect an error for keycode: {raw_keycode}"
);
assert_eq!(
enigo.key(Key::Other(raw_keycode), Release),
Ok(()),
"Didn't expect an error for keycode: {raw_keycode}"
);
assert_eq!(
enigo.key(Key::Other(raw_keycode), Click),
Ok(()),
"Didn't expect an error for keycode: {raw_keycode}"
);
}
for raw_keycode in max..=u32::MAX {
assert_eq!(
enigo.key(Key::Other(raw_keycode), Press),
Err(InputError::InvalidInput(
"virtual keycodes on Windows have to fit into u16"
)),
"Expected an error for keycode: {raw_keycode}"
);
assert_eq!(
enigo.key(Key::Other(raw_keycode), Release),
Err(InputError::InvalidInput(
"virtual keycodes on Windows have to fit into u16"
)),
"Expected an error for keycode: {raw_keycode}"
);
assert_eq!(
enigo.key(Key::Other(raw_keycode), Click),
Err(InputError::InvalidInput(
"virtual keycodes on Windows have to fit into u16"
)),
"Expected an error for keycode: {raw_keycode}"
);
}
}