xref: /vim-8.2.3635/src/testdir/test_maparg.vim (revision 7ba1e4d3)
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