@@ -2258,6 +2258,80 @@ describe('useVim hook', async () => {
22582258 } ) ;
22592259 } ) ;
22602260
2261+ describe ( 'should handle unmapped keys in Normal mode' , ( ) => {
2262+ type UnmappedKeyCase = {
2263+ char : string ;
2264+ insertable : boolean ;
2265+ } ;
2266+ it . each < UnmappedKeyCase > ( [
2267+ { char : 'm' , insertable : true } ,
2268+ { char : 'n' , insertable : true } ,
2269+ { char : 'p' , insertable : true } ,
2270+ { char : 'q' , insertable : true } ,
2271+ { char : 's' , insertable : true } ,
2272+ { char : 'v' , insertable : true } ,
2273+ { char : 'y' , insertable : true } ,
2274+ { char : 'z' , insertable : true } ,
2275+ { char : 'H' , insertable : true } ,
2276+ { char : 'J' , insertable : true } ,
2277+ { char : 'K' , insertable : true } ,
2278+ { char : 'L' , insertable : true } ,
2279+ { char : 'M' , insertable : true } ,
2280+ { char : 'N' , insertable : true } ,
2281+ { char : 'P' , insertable : true } ,
2282+ { char : 'Q' , insertable : true } ,
2283+ { char : 'R' , insertable : true } ,
2284+ { char : 'S' , insertable : true } ,
2285+ { char : 'U' , insertable : true } ,
2286+ { char : 'V' , insertable : true } ,
2287+ { char : 'Y' , insertable : true } ,
2288+ { char : 'Z' , insertable : true } ,
2289+ { char : '/' , insertable : true } ,
2290+ { char : '#' , insertable : true } ,
2291+ { char : '%' , insertable : true } ,
2292+ { char : '&' , insertable : true } ,
2293+ { char : "'" , insertable : true } ,
2294+ { char : '(' , insertable : true } ,
2295+ { char : ')' , insertable : true } ,
2296+ { char : '*' , insertable : true } ,
2297+ { char : '+' , insertable : true } ,
2298+ { char : '-' , insertable : true } ,
2299+ { char : '/' , insertable : true } ,
2300+ { char : ':' , insertable : true } ,
2301+ { char : '<' , insertable : true } ,
2302+ { char : '=' , insertable : true } ,
2303+ { char : '>' , insertable : true } ,
2304+ { char : '@' , insertable : true } ,
2305+ { char : '[' , insertable : true } ,
2306+ { char : '\\' , insertable : true } ,
2307+ { char : ']' , insertable : true } ,
2308+ { char : '_' , insertable : true } ,
2309+ { char : '`' , insertable : true } ,
2310+ { char : '{' , insertable : true } ,
2311+ { char : '|' , insertable : true } ,
2312+ { char : '}' , insertable : true } ,
2313+ ] ) (
2314+ '$char: should be swallowed and do nothing in Normal mode' ,
2315+ async ( { char, insertable } ) => {
2316+ const { result } = await renderVimHook ( ) ;
2317+ exitInsertMode ( result ) ;
2318+
2319+ let handled = false ;
2320+ act ( ( ) => {
2321+ handled = result . current . handleInput (
2322+ createKey ( { sequence : char , name : char , insertable } ) ,
2323+ ) ;
2324+ } ) ;
2325+
2326+ expect ( handled ) . toBe ( true ) ;
2327+ expect ( mockVimContext . setVimMode ) . not . toHaveBeenCalledWith ( 'INSERT' ) ;
2328+
2329+ expect ( mockBuffer . vimFindCharForward ) . not . toHaveBeenCalled ( ) ;
2330+ expect ( mockBuffer . vimFindCharBackward ) . not . toHaveBeenCalled ( ) ;
2331+ } ,
2332+ ) ;
2333+ } ) ;
2334+
22612335 describe ( 'Operator + find motions (df, dt, dF, dT, cf, ct, cF, cT)' , async ( ) => {
22622336 it ( 'df{char}: executes delete-to-char, not a dangling operator' , async ( ) => {
22632337 const { result } = await renderVimHook ( ) ;
0 commit comments