@@ -654,63 +654,67 @@ pub fn merge_keys(mut config: Config) -> Config {
654654 config
655655}
656656
657−#[test]
658−fn merge_partial_keys() {
659− let config = Config {
660− keys: Keymaps(hashmap! {
661− Mode::Normal => Keymap::new(
662− keymap!({ "Normal mode"
663− "i" => normal_mode,
664− "无" => insert_mode,
665− "z" => jump_backward,
666− "g" => { "Merge into goto mode"
667− "$" => goto_line_end,
668− "g" => delete_char_forward,
669− },
670− })
671− )
672− }),
673− ..Default::default()
674− };
675− let mut merged_config = merge_keys(config.clone());
676− assert_ne!(config, merged_config);
677−
678− let keymap = merged_config.keys.0.get_mut(&Mode::Normal).unwrap();
679− assert_eq!(
680− keymap.get(key!('i')).kind,
681− KeymapResultKind::Matched(Command::normal_mode),
682− "Leaf should replace leaf"
683− );
684− assert_eq!(
685− keymap.get(key!('无')).kind,
686− KeymapResultKind::Matched(Command::insert_mode),
687− "New leaf should be present in merged keymap"
688− );
689− // Assumes that z is a node in the default keymap
690− assert_eq!(
691− keymap.get(key!('z')).kind,
692− KeymapResultKind::Matched(Command::jump_backward),
693− "Leaf should replace node"
694− );
695− // Assumes that `g` is a node in default keymap
696− assert_eq!(
697− keymap.root().search(&[key!('g'), key!('$')]).unwrap(),
698− &KeyTrie::Leaf(Command::goto_line_end),
699− "Leaf should be present in merged subnode"
700− );
701− // Assumes that `gg` is in default keymap
702− assert_eq!(
703− keymap.root().search(&[key!('g'), key!('g')]).unwrap(),
704− &KeyTrie::Leaf(Command::delete_char_forward),
705− "Leaf should replace old leaf in merged subnode"
706− );
707− // Assumes that `ge` is in default keymap
708− assert_eq!(
709− keymap.root().search(&[key!('g'), key!('e')]).unwrap(),
710− &KeyTrie::Leaf(Command::goto_last_line),
711− "Old leaves in subnode should be present in merged node"
712− );
713−
714− assert!(merged_config.keys.0.get(&Mode::Normal).unwrap().len() > 1);
715− assert!(merged_config.keys.0.get(&Mode::Insert).unwrap().len() > 0);
657+#[cfg(test)]
658+mod tests {
659+ use super::*;
660+ #[test]
661+ fn merge_partial_keys() {
662+ let config = Config {
663+ keys: Keymaps(hashmap! {
664+ Mode::Normal => Keymap::new(
665+ keymap!({ "Normal mode"
666+ "i" => normal_mode,
667+ "无" => insert_mode,
668+ "z" => jump_backward,
669+ "g" => { "Merge into goto mode"
670+ "$" => goto_line_end,
671+ "g" => delete_char_forward,
672+ },
673+ })
674+ )
675+ }),
676+ ..Default::default()
677+ };
678+ let mut merged_config = merge_keys(config.clone());
679+ assert_ne!(config, merged_config);
680+
681+ let keymap = merged_config.keys.0.get_mut(&Mode::Normal).unwrap();
682+ assert_eq!(
683+ keymap.get(key!('i')).kind,
684+ KeymapResultKind::Matched(Command::normal_mode),
685+ "Leaf should replace leaf"
686+ );
687+ assert_eq!(
688+ keymap.get(key!('无')).kind,
689+ KeymapResultKind::Matched(Command::insert_mode),
690+ "New leaf should be present in merged keymap"
691+ );
692+ // Assumes that z is a node in the default keymap
693+ assert_eq!(
694+ keymap.get(key!('z')).kind,
695+ KeymapResultKind::Matched(Command::jump_backward),
696+ "Leaf should replace node"
697+ );
698+ // Assumes that `g` is a node in default keymap
699+ assert_eq!(
700+ keymap.root().search(&[key!('g'), key!('$')]).unwrap(),
701+ &KeyTrie::Leaf(Command::goto_line_end),
702+ "Leaf should be present in merged subnode"
703+ );
704+ // Assumes that `gg` is in default keymap
705+ assert_eq!(
706+ keymap.root().search(&[key!('g'), key!('g')]).unwrap(),
707+ &KeyTrie::Leaf(Command::delete_char_forward),
708+ "Leaf should replace old leaf in merged subnode"
709+ );
710+ // Assumes that `ge` is in default keymap
711+ assert_eq!(
712+ keymap.root().search(&[key!('g'), key!('e')]).unwrap(),
713+ &KeyTrie::Leaf(Command::goto_last_line),
714+ "Old leaves in subnode should be present in merged node"
715+ );
716+
717+ assert!(merged_config.keys.0.get(&Mode::Normal).unwrap().len() > 1);
718+ assert!(merged_config.keys.0.get(&Mode::Insert).unwrap().len() > 0);
719+ }
716720}