[fix] keyboard bug
This commit is contained in:
@@ -50,7 +50,7 @@ impl Keyboard {
|
|||||||
|
|
||||||
/// Query if key is down
|
/// Query if key is down
|
||||||
pub fn query_key_down(&self, key_num: u8) -> bool {
|
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) {
|
fn update_keyboard_state(&mut self, keyboard_event: KeyboardEvent) {
|
||||||
@@ -67,11 +67,53 @@ impl Keyboard {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::Key;
|
use super::{Key, Keyboard};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_key_assignment(){
|
fn test_key_assignment(){
|
||||||
assert_eq!(0,Key::K0 as u16);
|
assert_eq!(0,Key::K0 as u16);
|
||||||
assert_eq!(15,Key::KF 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user