tauri_hotkey_sys/
lib.rs

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}