[fix] keyboard bug

This commit is contained in:
2025-02-16 12:09:17 +00:00
parent f56426a9ec
commit 9b39560d43

View File

@@ -50,7 +50,7 @@ impl Keyboard {
/// Query if key is down
pub fn query_key_down(&self, key_num: u8) -> bool {
(self.bitflags | 1 << key_num) == (1 << key_num)
(self.bitflags & (1 << key_num)) == (1 << key_num)
}
fn update_keyboard_state(&mut self, keyboard_event: KeyboardEvent) {
@@ -67,11 +67,53 @@ impl Keyboard {
#[cfg(test)]
mod tests {
use super::Key;
use super::{Key, Keyboard};
#[test]
fn test_key_assignment(){
assert_eq!(0,Key::K0 as u16);
assert_eq!(15,Key::KF as u16);
}
#[test]
fn test_key_at_nothing_pressed(){
let (_sender,receiver) = std::sync::mpsc::sync_channel(1);
let keyboard = Keyboard::new(receiver);
assert_no_key_pressed(&keyboard);
}
#[test]
fn test_key_down_then_up(){
let (sender,receiver) = std::sync::mpsc::sync_channel(1);
let mut keyboard = Keyboard::new(receiver);
assert_no_key_pressed(&keyboard);
sender.try_send(super::KeyboardEvent::KeyDown(Key::K0)).expect("Could not send");
keyboard.update_keyboard_registers().expect("Could not update keyboard");
assert_eq!(1,keyboard.bitflags);
assert_eq!(true,keyboard.query_key_down(0));
for i in 1..=0xF {
assert_eq!(false,keyboard.query_key_down(i));
}
sender.try_send(super::KeyboardEvent::KeyUp(Key::K0)).expect("Could not send");
keyboard.update_keyboard_registers().expect("Could not update keyboard");
assert_no_key_pressed(&keyboard);
}
fn assert_no_key_pressed(keyboard: &Keyboard){
assert_eq!(0,keyboard.bitflags);
for i in 0..=0xF {
assert_eq!(false,keyboard.query_key_down(i),"Failed to match at index {}, bitflags at {}",i,keyboard.bitflags);
}
}
}