14c9243f9SBram Moolenaar" Tests for maparg(), mapcheck() and mapset(). 2292eff0cSBram Moolenaar" Also test utf8 map with a 0x80 byte. 3a1449836SBram Moolenaar" Also test mapcheck() 4292eff0cSBram Moolenaar 54c9243f9SBram Moolenaarfunc s:SID() 6292eff0cSBram Moolenaar return str2nr(matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze_SID$')) 74c9243f9SBram Moolenaarendfunc 8292eff0cSBram Moolenaar 9c94c1467SBram Moolenaarfunc Test_maparg() 10292eff0cSBram Moolenaar new 11292eff0cSBram Moolenaar set cpo-=< 12292eff0cSBram Moolenaar set encoding=utf8 13292eff0cSBram Moolenaar " Test maparg() with a string result 14f29c1c6aSBram Moolenaar let sid = s:SID() 15f29c1c6aSBram Moolenaar let lnum = expand('<sflnum>') 16292eff0cSBram Moolenaar map foo<C-V> is<F4>foo 17292eff0cSBram Moolenaar vnoremap <script> <buffer> <expr> <silent> bar isbar 18292eff0cSBram Moolenaar call assert_equal("is<F4>foo", maparg('foo<C-V>')) 192da0f0c4SBram Moolenaar call assert_equal({'silent': 0, 'noremap': 0, 'script': 0, 'lhs': 'foo<C-V>', 209c65253fSBram Moolenaar \ 'lhsraw': "foo\x80\xfc\x04V", 'lhsrawalt': "foo\x16", 21f29c1c6aSBram Moolenaar \ 'mode': ' ', 'nowait': 0, 'expr': 0, 'sid': sid, 'lnum': lnum + 1, 229c65253fSBram Moolenaar \ 'rhs': 'is<F4>foo', 'buffer': 0}, 23f29c1c6aSBram Moolenaar \ maparg('foo<C-V>', '', 0, 1)) 249c65253fSBram Moolenaar call assert_equal({'silent': 1, 'noremap': 1, 'script': 1, 'lhs': 'bar', 259c65253fSBram Moolenaar \ 'lhsraw': 'bar', 'mode': 'v', 26f29c1c6aSBram Moolenaar \ 'nowait': 0, 'expr': 1, 'sid': sid, 'lnum': lnum + 2, 279c65253fSBram Moolenaar \ 'rhs': 'isbar', 'buffer': 1}, 28a1449836SBram Moolenaar \ 'bar'->maparg('', 0, 1)) 29f29c1c6aSBram Moolenaar let lnum = expand('<sflnum>') 30292eff0cSBram Moolenaar map <buffer> <nowait> foo bar 319c65253fSBram Moolenaar call assert_equal({'silent': 0, 'noremap': 0, 'script': 0, 'lhs': 'foo', 329c65253fSBram Moolenaar \ 'lhsraw': 'foo', 'mode': ' ', 33f29c1c6aSBram Moolenaar \ 'nowait': 1, 'expr': 0, 'sid': sid, 'lnum': lnum + 1, 'rhs': 'bar', 349c65253fSBram Moolenaar \ 'buffer': 1}, 35292eff0cSBram Moolenaar \ maparg('foo', '', 0, 1)) 3614371ed6SBram Moolenaar let lnum = expand('<sflnum>') 3714371ed6SBram Moolenaar tmap baz foo 389c65253fSBram Moolenaar call assert_equal({'silent': 0, 'noremap': 0, 'script': 0, 'lhs': 'baz', 399c65253fSBram Moolenaar \ 'lhsraw': 'baz', 'mode': 't', 4014371ed6SBram Moolenaar \ 'nowait': 0, 'expr': 0, 'sid': sid, 'lnum': lnum + 1, 'rhs': 'foo', 419c65253fSBram Moolenaar \ 'buffer': 0}, 4214371ed6SBram Moolenaar \ maparg('baz', 't', 0, 1)) 43292eff0cSBram Moolenaar 44292eff0cSBram Moolenaar map abc x<char-114>x 45f88a5bc1SBram Moolenaar call assert_equal("xrx", maparg('abc')) 46292eff0cSBram Moolenaar map abc y<S-char-114>y 47f88a5bc1SBram Moolenaar call assert_equal("yRy", maparg('abc')) 48f88a5bc1SBram Moolenaar 498ba6bb7cSBram Moolenaar omap { w 508ba6bb7cSBram Moolenaar let d = maparg('{', 'o', 0, 1) 518ba6bb7cSBram Moolenaar call assert_equal(['{', 'w', 'o'], [d.lhs, d.rhs, d.mode]) 528ba6bb7cSBram Moolenaar ounmap { 538ba6bb7cSBram Moolenaar 54c2a60ae1SBram Moolenaar lmap { w 55c2a60ae1SBram Moolenaar let d = maparg('{', 'l', 0, 1) 56c2a60ae1SBram Moolenaar call assert_equal(['{', 'w', 'l'], [d.lhs, d.rhs, d.mode]) 57c2a60ae1SBram Moolenaar lunmap { 58c2a60ae1SBram Moolenaar 59c2a60ae1SBram Moolenaar nmap { w 60c2a60ae1SBram Moolenaar let d = maparg('{', 'n', 0, 1) 61c2a60ae1SBram Moolenaar call assert_equal(['{', 'w', 'n'], [d.lhs, d.rhs, d.mode]) 62c2a60ae1SBram Moolenaar nunmap { 63c2a60ae1SBram Moolenaar 64c2a60ae1SBram Moolenaar xmap { w 65c2a60ae1SBram Moolenaar let d = maparg('{', 'x', 0, 1) 66c2a60ae1SBram Moolenaar call assert_equal(['{', 'w', 'x'], [d.lhs, d.rhs, d.mode]) 67c2a60ae1SBram Moolenaar xunmap { 68c2a60ae1SBram Moolenaar 69c2a60ae1SBram Moolenaar smap { w 70c2a60ae1SBram Moolenaar let d = maparg('{', 's', 0, 1) 71c2a60ae1SBram Moolenaar call assert_equal(['{', 'w', 's'], [d.lhs, d.rhs, d.mode]) 72c2a60ae1SBram Moolenaar sunmap { 73c2a60ae1SBram Moolenaar 74f88a5bc1SBram Moolenaar map abc <Nop> 75f88a5bc1SBram Moolenaar call assert_equal("<Nop>", maparg('abc')) 76f88a5bc1SBram Moolenaar unmap abc 77c2a60ae1SBram Moolenaar 78c2a60ae1SBram Moolenaar call feedkeys(":abbr esc \<C-V>\<C-V>\<C-V>\<C-V>\<C-V>\<Esc>\<CR>", "xt") 79c2a60ae1SBram Moolenaar let d = maparg('esc', 'i', 1, 1) 80c2a60ae1SBram Moolenaar call assert_equal(['esc', "\<C-V>\<C-V>\<Esc>", '!'], [d.lhs, d.rhs, d.mode]) 81c2a60ae1SBram Moolenaar abclear 824c9243f9SBram Moolenaarendfunc 83292eff0cSBram Moolenaar 844a6d1b66SBram Moolenaardef Test_vim9_maparg() 854a6d1b66SBram Moolenaar nmap { w 867a9cbca0SBram Moolenaar var one: string = maparg('{') 874a6d1b66SBram Moolenaar assert_equal('w', one) 887a9cbca0SBram Moolenaar var two: string = maparg('{', 'n') 894a6d1b66SBram Moolenaar assert_equal('w', two) 907a9cbca0SBram Moolenaar var three: string = maparg('{', 'n', 0) 914a6d1b66SBram Moolenaar assert_equal('w', three) 927a9cbca0SBram Moolenaar var four: dict<any> = maparg('{', 'n', 0, 1) 93d2c61705SBram Moolenaar assert_equal(['{', 'w', 'n'], [four.lhs, four.rhs, four.mode]) 944a6d1b66SBram Moolenaar nunmap { 954a6d1b66SBram Moolenaarenddef 964a6d1b66SBram Moolenaar 97a1449836SBram Moolenaarfunc Test_mapcheck() 98a1449836SBram Moolenaar call assert_equal('', mapcheck('a')) 99a1449836SBram Moolenaar call assert_equal('', mapcheck('abc')) 100a1449836SBram Moolenaar call assert_equal('', mapcheck('ax')) 101a1449836SBram Moolenaar call assert_equal('', mapcheck('b')) 102a1449836SBram Moolenaar 103a1449836SBram Moolenaar map a something 104a1449836SBram Moolenaar call assert_equal('something', mapcheck('a')) 105a1449836SBram Moolenaar call assert_equal('something', mapcheck('a', 'n')) 106a1449836SBram Moolenaar call assert_equal('', mapcheck('a', 'c')) 107a1449836SBram Moolenaar call assert_equal('', mapcheck('a', 'i')) 108a1449836SBram Moolenaar call assert_equal('something', 'abc'->mapcheck()) 109a1449836SBram Moolenaar call assert_equal('something', 'ax'->mapcheck()) 110a1449836SBram Moolenaar call assert_equal('', mapcheck('b')) 111a1449836SBram Moolenaar unmap a 112a1449836SBram Moolenaar 113a1449836SBram Moolenaar map ab foobar 114a1449836SBram Moolenaar call assert_equal('foobar', mapcheck('a')) 115a1449836SBram Moolenaar call assert_equal('foobar', mapcheck('abc')) 116a1449836SBram Moolenaar call assert_equal('', mapcheck('ax')) 117a1449836SBram Moolenaar call assert_equal('', mapcheck('b')) 118a1449836SBram Moolenaar unmap ab 119a1449836SBram Moolenaar 120a1449836SBram Moolenaar map abc barfoo 121a1449836SBram Moolenaar call assert_equal('barfoo', mapcheck('a')) 122a1449836SBram Moolenaar call assert_equal('barfoo', mapcheck('a', 'n', 0)) 123a1449836SBram Moolenaar call assert_equal('', mapcheck('a', 'n', 1)) 124a1449836SBram Moolenaar call assert_equal('barfoo', mapcheck('abc')) 125a1449836SBram Moolenaar call assert_equal('', mapcheck('ax')) 126a1449836SBram Moolenaar call assert_equal('', mapcheck('b')) 127a1449836SBram Moolenaar unmap abc 128a1449836SBram Moolenaar 129a1449836SBram Moolenaar abbr ab abbrev 130a1449836SBram Moolenaar call assert_equal('abbrev', mapcheck('a', 'i', 1)) 131a1449836SBram Moolenaar call assert_equal('', mapcheck('a', 'n', 1)) 132a1449836SBram Moolenaar call assert_equal('', mapcheck('a', 'i', 0)) 133a1449836SBram Moolenaar unabbr ab 134a1449836SBram Moolenaarendfunc 135a1449836SBram Moolenaar 1364c9243f9SBram Moolenaarfunc Test_range_map() 137292eff0cSBram Moolenaar new 138292eff0cSBram Moolenaar " Outside of the range, minimum 139292eff0cSBram Moolenaar inoremap <Char-0x1040> a 140292eff0cSBram Moolenaar execute "normal a\u1040\<Esc>" 141292eff0cSBram Moolenaar " Inside of the range, minimum 142292eff0cSBram Moolenaar inoremap <Char-0x103f> b 143292eff0cSBram Moolenaar execute "normal a\u103f\<Esc>" 144292eff0cSBram Moolenaar " Inside of the range, maximum 145292eff0cSBram Moolenaar inoremap <Char-0xf03f> c 146292eff0cSBram Moolenaar execute "normal a\uf03f\<Esc>" 147292eff0cSBram Moolenaar " Outside of the range, maximum 148292eff0cSBram Moolenaar inoremap <Char-0xf040> d 149292eff0cSBram Moolenaar execute "normal a\uf040\<Esc>" 150292eff0cSBram Moolenaar call assert_equal("abcd", getline(1)) 1514c9243f9SBram Moolenaarendfunc 1524c9243f9SBram Moolenaar 1534c9243f9SBram Moolenaarfunc One_mapset_test(keys) 1544c9243f9SBram Moolenaar exe 'nnoremap ' .. a:keys .. ' original<CR>' 1554c9243f9SBram Moolenaar let orig = maparg(a:keys, 'n', 0, 1) 1564c9243f9SBram Moolenaar call assert_equal(a:keys, orig.lhs) 1574c9243f9SBram Moolenaar call assert_equal('original<CR>', orig.rhs) 1584c9243f9SBram Moolenaar call assert_equal('n', orig.mode) 1594c9243f9SBram Moolenaar 1604c9243f9SBram Moolenaar exe 'nunmap ' .. a:keys 1614c9243f9SBram Moolenaar let d = maparg(a:keys, 'n', 0, 1) 1624c9243f9SBram Moolenaar call assert_equal({}, d) 1634c9243f9SBram Moolenaar 1644c9243f9SBram Moolenaar call mapset('n', 0, orig) 1654c9243f9SBram Moolenaar let d = maparg(a:keys, 'n', 0, 1) 1664c9243f9SBram Moolenaar call assert_equal(a:keys, d.lhs) 1674c9243f9SBram Moolenaar call assert_equal('original<CR>', d.rhs) 1684c9243f9SBram Moolenaar call assert_equal('n', d.mode) 1694c9243f9SBram Moolenaar 1704c9243f9SBram Moolenaar exe 'nunmap ' .. a:keys 1714c9243f9SBram Moolenaarendfunc 1724c9243f9SBram Moolenaar 1734c9243f9SBram Moolenaarfunc Test_mapset() 1744c9243f9SBram Moolenaar call One_mapset_test('K') 1754c9243f9SBram Moolenaar call One_mapset_test('<F3>') 176c94c1467SBram Moolenaar 177c94c1467SBram Moolenaar " Check <> key conversion 178c94c1467SBram Moolenaar new 179c94c1467SBram Moolenaar inoremap K one<Left>x 180c94c1467SBram Moolenaar call feedkeys("iK\<Esc>", 'xt') 181c94c1467SBram Moolenaar call assert_equal('onxe', getline(1)) 182c94c1467SBram Moolenaar 183c94c1467SBram Moolenaar let orig = maparg('K', 'i', 0, 1) 184c94c1467SBram Moolenaar call assert_equal('K', orig.lhs) 185c94c1467SBram Moolenaar call assert_equal('one<Left>x', orig.rhs) 186c94c1467SBram Moolenaar call assert_equal('i', orig.mode) 187c94c1467SBram Moolenaar 188c94c1467SBram Moolenaar iunmap K 189c94c1467SBram Moolenaar let d = maparg('K', 'i', 0, 1) 190c94c1467SBram Moolenaar call assert_equal({}, d) 191c94c1467SBram Moolenaar 192c94c1467SBram Moolenaar call mapset('i', 0, orig) 193c94c1467SBram Moolenaar call feedkeys("SK\<Esc>", 'xt') 194c94c1467SBram Moolenaar call assert_equal('onxe', getline(1)) 195c94c1467SBram Moolenaar 196c94c1467SBram Moolenaar iunmap K 197c94c1467SBram Moolenaar 198c94c1467SBram Moolenaar " Test literal <CR> using a backslash 199c94c1467SBram Moolenaar let cpo_save = &cpo 200c94c1467SBram Moolenaar set cpo-=B 201c94c1467SBram Moolenaar inoremap K one\<CR>two 202c94c1467SBram Moolenaar call feedkeys("SK\<Esc>", 'xt') 203c94c1467SBram Moolenaar call assert_equal('one<CR>two', getline(1)) 204c94c1467SBram Moolenaar 205c94c1467SBram Moolenaar let orig = maparg('K', 'i', 0, 1) 206c94c1467SBram Moolenaar call assert_equal('K', orig.lhs) 207c94c1467SBram Moolenaar call assert_equal('one\<CR>two', orig.rhs) 208c94c1467SBram Moolenaar call assert_equal('i', orig.mode) 209c94c1467SBram Moolenaar 210c94c1467SBram Moolenaar iunmap K 211c94c1467SBram Moolenaar let d = maparg('K', 'i', 0, 1) 212c94c1467SBram Moolenaar call assert_equal({}, d) 213c94c1467SBram Moolenaar 214c94c1467SBram Moolenaar call mapset('i', 0, orig) 215c94c1467SBram Moolenaar call feedkeys("SK\<Esc>", 'xt') 216c94c1467SBram Moolenaar call assert_equal('one<CR>two', getline(1)) 217c94c1467SBram Moolenaar 218c94c1467SBram Moolenaar iunmap K 219c94c1467SBram Moolenaar 220c94c1467SBram Moolenaar " Test literal <CR> using CTRL-V 221c94c1467SBram Moolenaar inoremap K one<CR>two 222c94c1467SBram Moolenaar call feedkeys("SK\<Esc>", 'xt') 223c94c1467SBram Moolenaar call assert_equal('one<CR>two', getline(1)) 224c94c1467SBram Moolenaar 225c94c1467SBram Moolenaar let orig = maparg('K', 'i', 0, 1) 226c94c1467SBram Moolenaar call assert_equal('K', orig.lhs) 227c94c1467SBram Moolenaar call assert_equal("one\x16<CR>two", orig.rhs) 228c94c1467SBram Moolenaar call assert_equal('i', orig.mode) 229c94c1467SBram Moolenaar 230c94c1467SBram Moolenaar iunmap K 231c94c1467SBram Moolenaar let d = maparg('K', 'i', 0, 1) 232c94c1467SBram Moolenaar call assert_equal({}, d) 233c94c1467SBram Moolenaar 234c94c1467SBram Moolenaar call mapset('i', 0, orig) 235c94c1467SBram Moolenaar call feedkeys("SK\<Esc>", 'xt') 236c94c1467SBram Moolenaar call assert_equal('one<CR>two', getline(1)) 237c94c1467SBram Moolenaar 238c94c1467SBram Moolenaar iunmap K 239c94c1467SBram Moolenaar let &cpo = cpo_save 240c94c1467SBram Moolenaar bwipe! 2411b912980SBram Moolenaar 2421b912980SBram Moolenaar call assert_fails('call mapset([], v:false, {})', 'E730:') 243a1070eaeSBram Moolenaar call assert_fails('call mapset("i", 0, "")', 'E716:') 244a1070eaeSBram Moolenaar call assert_fails('call mapset("i", 0, {})', 'E460:') 2454c9243f9SBram Moolenaarendfunc 2468ba6bb7cSBram Moolenaar 2479c65253fSBram Moolenaarfunc Check_ctrlb_map(d, check_alt) 2489c65253fSBram Moolenaar call assert_equal('<C-B>', a:d.lhs) 2499c65253fSBram Moolenaar if a:check_alt 2509c65253fSBram Moolenaar call assert_equal("\x80\xfc\x04B", a:d.lhsraw) 2519c65253fSBram Moolenaar call assert_equal("\x02", a:d.lhsrawalt) 2529c65253fSBram Moolenaar else 2539c65253fSBram Moolenaar call assert_equal("\x02", a:d.lhsraw) 2549c65253fSBram Moolenaar endif 2559c65253fSBram Moolenaarendfunc 2569c65253fSBram Moolenaar 257*7ba1e4d3SBram Moolenaarfunc Test_map_local() 258*7ba1e4d3SBram Moolenaar nmap a global 259*7ba1e4d3SBram Moolenaar nmap <buffer>a local 260*7ba1e4d3SBram Moolenaar 261*7ba1e4d3SBram Moolenaar let prev_map_list = split(execute('nmap a'), "\n") 262*7ba1e4d3SBram Moolenaar call assert_match('n\s*a\s*@local', prev_map_list[0]) 263*7ba1e4d3SBram Moolenaar call assert_match('n\s*a\s*global', prev_map_list[1]) 264*7ba1e4d3SBram Moolenaar 265*7ba1e4d3SBram Moolenaar let mapping = maparg('a', 'n', 0, 1) 266*7ba1e4d3SBram Moolenaar call assert_equal(1, mapping.buffer) 267*7ba1e4d3SBram Moolenaar let mapping.rhs = 'new_local' 268*7ba1e4d3SBram Moolenaar call mapset('n', 0, mapping) 269*7ba1e4d3SBram Moolenaar 270*7ba1e4d3SBram Moolenaar " Check that the global mapping is left untouched. 271*7ba1e4d3SBram Moolenaar let map_list = split(execute('nmap a'), "\n") 272*7ba1e4d3SBram Moolenaar call assert_match('n\s*a\s*@new_local', map_list[0]) 273*7ba1e4d3SBram Moolenaar call assert_match('n\s*a\s*global', map_list[1]) 274*7ba1e4d3SBram Moolenaar 275*7ba1e4d3SBram Moolenaar nunmap a 276*7ba1e4d3SBram Moolenaarendfunc 277*7ba1e4d3SBram Moolenaar 2789c65253fSBram Moolenaarfunc Test_map_restore() 2799c65253fSBram Moolenaar " Test restoring map with alternate keycode 2809c65253fSBram Moolenaar nmap <C-B> back 2819c65253fSBram Moolenaar let d = maparg('<C-B>', 'n', 0, 1) 2829c65253fSBram Moolenaar call Check_ctrlb_map(d, 1) 2839c65253fSBram Moolenaar let dsimp = maparg("\x02", 'n', 0, 1) 2849c65253fSBram Moolenaar call Check_ctrlb_map(dsimp, 0) 2859c65253fSBram Moolenaar nunmap <C-B> 2869c65253fSBram Moolenaar call mapset('n', 0, d) 2879c65253fSBram Moolenaar let d = maparg('<C-B>', 'n', 0, 1) 2889c65253fSBram Moolenaar call Check_ctrlb_map(d, 1) 2899c65253fSBram Moolenaar let dsimp = maparg("\x02", 'n', 0, 1) 2909c65253fSBram Moolenaar call Check_ctrlb_map(dsimp, 0) 2919c65253fSBram Moolenaar 2929c65253fSBram Moolenaar nunmap <C-B> 2939c65253fSBram Moolenaar 2949c65253fSBram Moolenaarendfunc 2959c65253fSBram Moolenaar 2968ba6bb7cSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 297