add shift test

Junkui Zhang created

Change summary

crates/gpui/src/platform/linux/keyboard.rs | 74 +++++++++++++++++++++++
1 file changed, 71 insertions(+), 3 deletions(-)

Detailed changes

crates/gpui/src/platform/linux/keyboard.rs 🔗

@@ -198,7 +198,7 @@ fn insert_letters_if_missing(
         let keycode = Keycode::new(*scan_code as u32);
         let key = scan_code.to_str();
         if !inserted.contains(key) {
-            code_to_key.insert(keycode, key.to_string());
+            code_to_key.insert(keycode, key.to_owned());
         }
     }
 }
@@ -343,6 +343,61 @@ impl LinuxScanCodes {
             LinuxScanCodes::IntlRo => "unknown",
         }
     }
+
+    #[cfg(test)]
+    fn to_shifted(&self) -> &str {
+        match self {
+            LinuxScanCodes::A => "a",
+            LinuxScanCodes::B => "b",
+            LinuxScanCodes::C => "c",
+            LinuxScanCodes::D => "d",
+            LinuxScanCodes::E => "e",
+            LinuxScanCodes::F => "f",
+            LinuxScanCodes::G => "g",
+            LinuxScanCodes::H => "h",
+            LinuxScanCodes::I => "i",
+            LinuxScanCodes::J => "j",
+            LinuxScanCodes::K => "k",
+            LinuxScanCodes::L => "l",
+            LinuxScanCodes::M => "m",
+            LinuxScanCodes::N => "n",
+            LinuxScanCodes::O => "o",
+            LinuxScanCodes::P => "p",
+            LinuxScanCodes::Q => "q",
+            LinuxScanCodes::R => "r",
+            LinuxScanCodes::S => "s",
+            LinuxScanCodes::T => "t",
+            LinuxScanCodes::U => "u",
+            LinuxScanCodes::V => "v",
+            LinuxScanCodes::W => "w",
+            LinuxScanCodes::X => "x",
+            LinuxScanCodes::Y => "y",
+            LinuxScanCodes::Z => "z",
+            LinuxScanCodes::Digit0 => ")",
+            LinuxScanCodes::Digit1 => "!",
+            LinuxScanCodes::Digit2 => "@",
+            LinuxScanCodes::Digit3 => "#",
+            LinuxScanCodes::Digit4 => "$",
+            LinuxScanCodes::Digit5 => "%",
+            LinuxScanCodes::Digit6 => "^",
+            LinuxScanCodes::Digit7 => "&",
+            LinuxScanCodes::Digit8 => "*",
+            LinuxScanCodes::Digit9 => "(",
+            LinuxScanCodes::Backquote => "~",
+            LinuxScanCodes::Minus => "_",
+            LinuxScanCodes::Equal => "+",
+            LinuxScanCodes::LeftBracket => "{",
+            LinuxScanCodes::RightBracket => "}",
+            LinuxScanCodes::Backslash => "|",
+            LinuxScanCodes::Semicolon => ":",
+            LinuxScanCodes::Quote => "\"",
+            LinuxScanCodes::Comma => "<",
+            LinuxScanCodes::Period => ">",
+            LinuxScanCodes::Slash => "?",
+            LinuxScanCodes::IntlBackslash => "unknown",
+            LinuxScanCodes::IntlRo => "unknown",
+        }
+    }
 }
 
 #[cfg(all(test, any(feature = "wayland", feature = "x11")))]
@@ -388,8 +443,21 @@ mod tests {
                 continue;
             }
             let keycode = xkbcommon::xkb::Keycode::new(scan_code as u32);
-            let key = mapper.get_key(keycode, &mut crate::Modifiers::default());
-            assert_eq!(key, Some(scan_code.to_str().to_string()));
+            let key = mapper
+                .get_key(keycode, &mut crate::Modifiers::default())
+                .unwrap();
+            assert_eq!(key.as_str(), scan_code.to_str());
+
+            let shifted_key = mapper
+                .get_key(
+                    keycode,
+                    &mut crate::Modifiers {
+                        shift: true,
+                        ..Default::default()
+                    },
+                )
+                .unwrap();
+            assert_eq!(shifted_key.as_str(), scan_code.to_shifted());
         }
     }
 }