patch 7.4.1837
Problem: The BufUnload event is triggered twice, when :bunload is used with
set to or .
Solution: Do not trigger the event when ml_mfp is NULL. (Hirohito Higashi)
diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim
index d3e0981..1dceb70 100644
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -7,29 +7,56 @@
" becomes one.
endfunc
-if !has('timers')
- finish
+if has('timers')
+ func ExitInsertMode(id)
+ call feedkeys("\<Esc>")
+ endfunc
+
+ func Test_cursorhold_insert()
+ let g:triggered = 0
+ au CursorHoldI * let g:triggered += 1
+ set updatetime=20
+ call timer_start(100, 'ExitInsertMode')
+ call feedkeys('a', 'x!')
+ call assert_equal(1, g:triggered)
+ endfunc
+
+ func Test_cursorhold_insert_ctrl_x()
+ let g:triggered = 0
+ au CursorHoldI * let g:triggered += 1
+ set updatetime=20
+ call timer_start(100, 'ExitInsertMode')
+ " CursorHoldI does not trigger after CTRL-X
+ call feedkeys("a\<C-X>", 'x!')
+ call assert_equal(0, g:triggered)
+ endfunc
endif
-func ExitInsertMode(id)
- call feedkeys("\<Esc>")
-endfunc
+function Test_bufunload()
+ augroup test_bufunload_group
+ autocmd!
+ autocmd BufUnload * call add(s:li, "bufunload")
+ autocmd BufDelete * call add(s:li, "bufdelete")
+ autocmd BufWipeout * call add(s:li, "bufwipeout")
+ augroup END
-func Test_cursorhold_insert()
- let g:triggered = 0
- au CursorHoldI * let g:triggered += 1
- set updatetime=20
- call timer_start(100, 'ExitInsertMode')
- call feedkeys('a', 'x!')
- call assert_equal(1, g:triggered)
-endfunc
+ let s:li=[]
+ new
+ setlocal bufhidden=
+ bunload
+ call assert_equal(["bufunload", "bufdelete"], s:li)
-func Test_cursorhold_insert_ctrl_x()
- let g:triggered = 0
- au CursorHoldI * let g:triggered += 1
- set updatetime=20
- call timer_start(100, 'ExitInsertMode')
- " CursorHoldI does not trigger after CTRL-X
- call feedkeys("a\<C-X>", 'x!')
- call assert_equal(0, g:triggered)
+ let s:li=[]
+ new
+ setlocal bufhidden=delete
+ bunload
+ call assert_equal(["bufunload", "bufdelete"], s:li)
+
+ let s:li=[]
+ new
+ setlocal bufhidden=unload
+ bwipeout
+ call assert_equal(["bufunload", "bufdelete", "bufwipeout"], s:li)
+
+ augroup! test_bufunload_group
endfunc