1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
#[cfg(target_os = "linux")] mod linux; #[cfg(target_os = "macos")] mod macos; #[cfg(target_os = "windows")] mod windows; mod traits; pub use traits::{HotkeyError, HotkeyListener, ListenerHotkey}; #[cfg(target_os = "linux")] pub use linux::keys; #[cfg(target_os = "linux")] pub use linux::modifiers; #[cfg(target_os = "linux")] pub use linux::Listener; #[cfg(target_os = "macos")] pub use macos::keys; #[cfg(target_os = "macos")] pub use macos::modifiers; #[cfg(target_os = "macos")] pub use macos::Listener; #[cfg(target_os = "windows")] pub use windows::keys; #[cfg(target_os = "windows")] pub use windows::modifiers; #[cfg(target_os = "windows")] pub use windows::Listener; #[cfg(test)] mod tests { use super::*; #[test] fn register_unregister_hotkey_test() { let mut listener = Listener::new(); assert_eq!(listener.registered_hotkeys().len(), 0); let hotkey1 = ListenerHotkey::new(modifiers::ALT, keys::A); assert_eq!(listener.register_hotkey(hotkey1, || {}), Ok(())); assert_eq!(listener.registered_hotkeys()[0], hotkey1); assert_eq!(listener.registered_hotkeys().len(), 1); let hotkey2 = ListenerHotkey::new(modifiers::CONTROL, keys::B); assert_eq!(listener.register_hotkey(hotkey2, || {}), Ok(())); assert!(listener.registered_hotkeys().iter().any(|h| *h == hotkey1)); assert!(listener.registered_hotkeys().iter().any(|h| *h == hotkey2)); assert_eq!(listener.registered_hotkeys().len(), 2); assert_eq!(listener.unregister_hotkey(hotkey1), Ok(())); assert_eq!(listener.registered_hotkeys().len(), 1); assert_eq!(listener.registered_hotkeys()[0], hotkey2); assert_eq!(listener.unregister_hotkey(hotkey2), Ok(())); assert_eq!(listener.registered_hotkeys().len(), 0); let hotkey3 = ListenerHotkey::new( modifiers::CONTROL | modifiers::SUPER | modifiers::ALT, keys::P, ); assert_eq!(listener.register_hotkey(hotkey3, || {}), Ok(())); assert_eq!(listener.registered_hotkeys()[0], hotkey3); assert_eq!(listener.registered_hotkeys().len(), 1); assert_eq!(listener.unregister_hotkey(hotkey3), Ok(())); assert_eq!(listener.registered_hotkeys().len(), 0); assert_eq!(listener.register_hotkey(hotkey1, || {}), Ok(())); assert_eq!(listener.registered_hotkeys()[0], hotkey1); assert_eq!(listener.registered_hotkeys().len(), 1); assert_eq!(listener.unregister_hotkey(hotkey1), Ok(())); assert_eq!(listener.registered_hotkeys().len(), 0); } #[test] fn unregister_invalid_hotkey_test() { let mut listener = Listener::new(); assert_eq!(listener.registered_hotkeys().len(), 0); let hotkey = ListenerHotkey::new(modifiers::ALT, keys::A); assert_eq!( listener.unregister_hotkey(hotkey), Err(HotkeyError::HotkeyNotRegistered(hotkey)) ); assert_eq!(listener.registered_hotkeys().len(), 0); } #[test] fn reregister_hotkey_test() { let mut listener = Listener::new(); assert_eq!(listener.registered_hotkeys().len(), 0); let hotkey = ListenerHotkey::new(modifiers::ALT, keys::B); assert_eq!(listener.register_hotkey(hotkey, || {}), Ok(())); assert_eq!(listener.registered_hotkeys()[0], hotkey); assert_eq!(listener.registered_hotkeys().len(), 1); assert_eq!( listener.register_hotkey(hotkey, || {}), Err(HotkeyError::HotkeyAlreadyRegistered(hotkey)) ); assert_eq!(listener.registered_hotkeys()[0], hotkey); assert_eq!(listener.registered_hotkeys().len(), 1); assert_eq!(listener.unregister_hotkey(hotkey), Ok(())); assert_eq!(listener.registered_hotkeys().len(), 0); } }