xref: /vim-8.2.3635/src/testdir/test_mapping.vim (revision 7571d55f)
1" Tests for mappings and abbreviations
2
3if !has('multi_byte')
4  finish
5endif
6
7func Test_abbreviation()
8  " abbreviation with 0x80 should work
9  inoreab чкпр   vim
10  call feedkeys("Goчкпр \<Esc>", "xt")
11  call assert_equal('vim ', getline('$'))
12  iunab чкпр
13  set nomodified
14endfunc
15
16func Test_map_ctrl_c_insert()
17  " mapping of ctrl-c in Insert mode
18  set cpo-=< cpo-=k
19  inoremap <c-c> <ctrl-c>
20  cnoremap <c-c> dummy
21  cunmap <c-c>
22  call feedkeys("GoTEST2: CTRL-C |\<C-C>A|\<Esc>", "xt")
23  call assert_equal('TEST2: CTRL-C |<ctrl-c>A|', getline('$'))
24  unmap! <c-c>
25  set nomodified
26endfunc
27
28func Test_map_ctrl_c_visual()
29  " mapping of ctrl-c in Visual mode
30  vnoremap <c-c> :<C-u>$put ='vmap works'
31  call feedkeys("GV\<C-C>\<CR>", "xt")
32  call assert_equal('vmap works', getline('$'))
33  vunmap <c-c>
34  set nomodified
35endfunc
36
37func Test_map_langmap()
38  " langmap should not get remapped in insert mode
39  inoremap { FAIL_ilangmap
40  set langmap=+{ langnoremap
41  call feedkeys("Go+\<Esc>", "xt")
42  call assert_equal('+', getline('$'))
43
44  " Insert-mode expr mapping with langmap
45  inoremap <expr> { "FAIL_iexplangmap"
46  call feedkeys("Go+\<Esc>", "xt")
47  call assert_equal('+', getline('$'))
48  iunmap <expr> {
49
50  " langmap should not get remapped in Command-line mode
51  cnoremap { FAIL_clangmap
52  call feedkeys(":call append(line('$'), '+')\<CR>", "xt")
53  call assert_equal('+', getline('$'))
54  cunmap {
55
56  " Command-line mode expr mapping with langmap
57  cnoremap <expr> { "FAIL_cexplangmap"
58  call feedkeys(":call append(line('$'), '+')\<CR>", "xt")
59  call assert_equal('+', getline('$'))
60  cunmap {
61  set nomodified
62endfunc
63
64func Test_map_feedkeys()
65  " issue #212 (feedkeys insert mapping at current position)
66  nnoremap . :call feedkeys(".", "in")<cr>
67  call setline('$', ['a b c d', 'a b c d'])
68  $-1
69  call feedkeys("0qqdw.ifoo\<Esc>qj0@q\<Esc>", "xt")
70  call assert_equal(['fooc d', 'fooc d'], getline(line('$') - 1, line('$')))
71  unmap .
72  set nomodified
73endfunc
74
75func Test_map_cursor()
76  " <c-g>U<cursor> works only within a single line
77  imapclear
78  imap ( ()<c-g>U<left>
79  call feedkeys("G2o\<Esc>ki\<CR>Test1: text with a (here some more text\<Esc>k.", "xt")
80  call assert_equal('Test1: text with a (here some more text)', getline(line('$') - 2))
81  call assert_equal('Test1: text with a (here some more text)', getline(line('$') - 1))
82
83  " test undo
84  call feedkeys("G2o\<Esc>ki\<CR>Test2: text wit a (here some more text [und undo]\<C-G>u\<Esc>k.u", "xt")
85  call assert_equal('', getline(line('$') - 2))
86  call assert_equal('Test2: text wit a (here some more text [und undo])', getline(line('$') - 1))
87  set nomodified
88  imapclear
89endfunc
90
91" This isn't actually testing a mapping, but similar use of CTRL-G U as above.
92func Test_break_undo()
93  :set whichwrap=<,>,[,]
94  call feedkeys("G4o2k", "xt")
95  exe ":norm! iTest3: text with a (parenthesis here\<C-G>U\<Right>new line here\<esc>\<up>\<up>."
96  call assert_equal('new line here', getline(line('$') - 3))
97  call assert_equal('Test3: text with a (parenthesis here', getline(line('$') - 2))
98  call assert_equal('new line here', getline(line('$') - 1))
99  set nomodified
100endfunc
101
102func Test_map_meta_quotes()
103  imap <M-"> foo
104  call feedkeys("Go-\<M-\">-\<Esc>", "xt")
105  call assert_equal("-foo-", getline('$'))
106  set nomodified
107  iunmap <M-">
108endfunc
109