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