+++ /dev/null
-Test for mappings and abbreviations
-
-STARTTEST
-:so small.vim
-:so mbyte.vim
-:set encoding=utf-8
-: " abbreviations with р (0x80) should work
-:inoreab чкпр vim
-GAчкпр
-\e
-:" mapping of ctrl-c in Insert mode
-:set cpo-=< cpo-=k
-:inoremap <c-c> <ctrl-c>
-:cnoremap <c-c> dummy
-:cunmap <c-c>
-GA
-TEST2: CTRL-C |\ 3A|
-\e
-:unmap <c-c>
-:unmap! <c-c>
-:"
-:" mapping of ctrl-c in Visual mode
-:vnoremap <c-c> :<C-u>$put ='vmap works'
-GV\ 3
-:vunmap <c-c>
-:"
-:" langmap should not get remapped in insert mode
-:inoremap { FAIL_ilangmap
-:set langmap=+{ langnoremap
-o+\e
-:" Insert-mode expr mapping with langmap
-:inoremap <expr> { "FAIL_iexplangmap"
-o+\e
-:" langmap should not get remapped in Command-line mode
-:cnoremap { FAIL_clangmap
-:call append(line('$'), '+')
-:cunmap {
-:" Command-line mode expr mapping with langmap
-:cnoremap <expr> { "FAIL_cexplangmap"
-:call append(line('$'), '+')
-:cunmap {
-:"
-:" issue #212 (feedkeys insert mapping at current position)
-:nnoremap . :call feedkeys(".", "in")<cr>
-:/^a b
-0qqdw.ifoo\eqj0@q\e:unmap .
-
-:" <c-g>U<cursor> works only within a single line
-:imapclear
-:imap ( ()<c-g>U<left>
-G2o\eki
-Test1: text with a (here some more text\ek.
-:" test undo
-G2o\eki
-Test2: text wit a (here some more text [und undo]\au\ek.u
-:"
-:imapclear
-:set whichwrap=<,>,[,]
-G3o\e2k
-:exe ":norm! iTest3: text with a (parenthesis here\<C-G>U\<Right>new line here\<esc>\<up>\<up>."
-
-
-
-:/^test/,$w! test.out
-:qa!
-ENDTEST
-
-test starts here:
-
-a b c d
-a b c d
-
--- /dev/null
+" Tests for mappings and abbreviations
+
+if !has('multi_byte')
+ finish
+endif
+
+func Test_abbreviation()
+ " abbreviation with 0x80 should work
+ inoreab чкпр vim
+ call feedkeys("Goчкпр \<Esc>", "xt")
+ call assert_equal('vim ', getline('$'))
+ iunab чкпр
+ set nomodified
+endfunc
+
+func Test_map_ctrl_c_insert()
+ " mapping of ctrl-c in Insert mode
+ set cpo-=< cpo-=k
+ inoremap <c-c> <ctrl-c>
+ cnoremap <c-c> dummy
+ cunmap <c-c>
+ call feedkeys("GoTEST2: CTRL-C |\<C-C>A|\<Esc>", "xt")
+ call assert_equal('TEST2: CTRL-C |<ctrl-c>A|', getline('$'))
+ unmap! <c-c>
+ set nomodified
+endfunc
+
+func Test_map_ctrl_c_visual()
+ " mapping of ctrl-c in Visual mode
+ vnoremap <c-c> :<C-u>$put ='vmap works'
+ call feedkeys("GV\<C-C>\<CR>", "xt")
+ call assert_equal('vmap works', getline('$'))
+ vunmap <c-c>
+ set nomodified
+endfunc
+
+func Test_map_langmap()
+ " langmap should not get remapped in insert mode
+ inoremap { FAIL_ilangmap
+ set langmap=+{ langnoremap
+ call feedkeys("Go+\<Esc>", "xt")
+ call assert_equal('+', getline('$'))
+
+ " Insert-mode expr mapping with langmap
+ inoremap <expr> { "FAIL_iexplangmap"
+ call feedkeys("Go+\<Esc>", "xt")
+ call assert_equal('+', getline('$'))
+ iunmap <expr> {
+
+ " langmap should not get remapped in Command-line mode
+ cnoremap { FAIL_clangmap
+ call feedkeys(":call append(line('$'), '+')\<CR>", "xt")
+ call assert_equal('+', getline('$'))
+ cunmap {
+
+ " Command-line mode expr mapping with langmap
+ cnoremap <expr> { "FAIL_cexplangmap"
+ call feedkeys(":call append(line('$'), '+')\<CR>", "xt")
+ call assert_equal('+', getline('$'))
+ cunmap {
+ set nomodified
+endfunc
+
+func Test_map_feedkeys()
+ " issue #212 (feedkeys insert mapping at current position)
+ nnoremap . :call feedkeys(".", "in")<cr>
+ call setline('$', ['a b c d', 'a b c d'])
+ $-1
+ call feedkeys("0qqdw.ifoo\<Esc>qj0@q\<Esc>", "xt")
+ call assert_equal(['fooc d', 'fooc d'], getline(line('$') - 1, line('$')))
+ unmap .
+ set nomodified
+endfunc
+
+func Test_map_cursor()
+ " <c-g>U<cursor> works only within a single line
+ imapclear
+ imap ( ()<c-g>U<left>
+ call feedkeys("G2o\<Esc>ki\<CR>Test1: text with a (here some more text\<Esc>k.", "xt")
+ call assert_equal('Test1: text with a (here some more text)', getline(line('$') - 2))
+ call assert_equal('Test1: text with a (here some more text)', getline(line('$') - 1))
+
+ " test undo
+ call feedkeys("G2o\<Esc>ki\<CR>Test2: text wit a (here some more text [und undo]\<C-G>u\<Esc>k.u", "xt")
+ call assert_equal('', getline(line('$') - 2))
+ call assert_equal('Test2: text wit a (here some more text [und undo])', getline(line('$') - 1))
+ set nomodified
+ imapclear
+endfunc
+
+" This isn't actually testing a mapping, but similar use of CTRL-G U as above.
+func Test_break_undo()
+ :set whichwrap=<,>,[,]
+ call feedkeys("G4o\e2k", "xt")
+ exe ":norm! iTest3: text with a (parenthesis here\<C-G>U\<Right>new line here\<esc>\<up>\<up>."
+ call assert_equal('new line here', getline(line('$') - 3))
+ call assert_equal('Test3: text with a (parenthesis here', getline(line('$') - 2))
+ call assert_equal('new line here', getline(line('$') - 1))
+ set nomodified
+endfunc