1
0
forked from aniani/vim

patch 8.2.5030: autocmd_add() can only handle one event and pattern

Problem:    autocmd_add() can only handle one event and pattern.
Solution:   Support a list of events and patterns. (Yegappan Lakshmanan,
            closes #10483)
This commit is contained in:
Yegappan Lakshmanan
2022-05-27 18:05:33 +01:00
committed by Bram Moolenaar
parent cfe456543e
commit e0ff3a7de6
5 changed files with 222 additions and 47 deletions

View File

@@ -3429,6 +3429,83 @@ func Test_autocmd_add()
\ cmd: 'echo "bufadd"'}]
call assert_fails('call autocmd_add(l)', 'E216:')
" Test for using a list of events and patterns
call autocmd_delete([#{group: 'TestAcSet'}])
let l = [#{group: 'TestAcSet', event: ['BufEnter', 'BufLeave'],
\ pattern: ['*.py', '*.sh'], cmd: 'echo "bufcmds"'}]
call autocmd_add(l)
call assert_equal([
\ #{cmd: 'echo "bufcmds"', group: 'TestAcSet', pattern: '*.py',
\ nested: v:false, once: v:false, event: 'BufEnter'},
\ #{cmd: 'echo "bufcmds"', group: 'TestAcSet', pattern: '*.sh',
\ nested: v:false, once: v:false, event: 'BufEnter'},
\ #{cmd: 'echo "bufcmds"', group: 'TestAcSet', pattern: '*.py',
\ nested: v:false, once: v:false, event: 'BufLeave'},
\ #{cmd: 'echo "bufcmds"', group: 'TestAcSet', pattern: '*.sh',
\ nested: v:false, once: v:false, event: 'BufLeave'}],
\ autocmd_get(#{group: 'TestAcSet'}))
" Test for invalid values for 'event' item
call autocmd_delete([#{group: 'TestAcSet'}])
let l = [#{group: 'TestAcSet', event: test_null_string(),
\ pattern: "*.py", cmd: 'echo "bufcmds"'}]
call assert_fails('call autocmd_add(l)', 'E928:')
let l = [#{group: 'TestAcSet', event: test_null_list(),
\ pattern: "*.py", cmd: 'echo "bufcmds"'}]
call assert_fails('call autocmd_add(l)', 'E714:')
let l = [#{group: 'TestAcSet', event: {},
\ pattern: "*.py", cmd: 'echo "bufcmds"'}]
call assert_fails('call autocmd_add(l)', 'E777:')
let l = [#{group: 'TestAcSet', event: [{}],
\ pattern: "*.py", cmd: 'echo "bufcmds"'}]
call assert_fails('call autocmd_add(l)', 'E928:')
let l = [#{group: 'TestAcSet', event: [test_null_string()],
\ pattern: "*.py", cmd: 'echo "bufcmds"'}]
call assert_fails('call autocmd_add(l)', 'E928:')
let l = [#{group: 'TestAcSet', event: 'BufEnter,BufLeave',
\ pattern: '*.py', cmd: 'echo "bufcmds"'}]
call assert_fails('call autocmd_add(l)', 'E216:')
let l = [#{group: 'TestAcSet', event: [],
\ pattern: "*.py", cmd: 'echo "bufcmds"'}]
call autocmd_add(l)
let l = [#{group: 'TestAcSet', event: [""],
\ pattern: "*.py", cmd: 'echo "bufcmds"'}]
call assert_fails('call autocmd_add(l)', 'E216:')
let l = [#{group: 'TestAcSet', event: "",
\ pattern: "*.py", cmd: 'echo "bufcmds"'}]
call autocmd_add(l)
call assert_equal([], autocmd_get(#{group: 'TestAcSet'}))
" Test for invalid values for 'pattern' item
let l = [#{group: 'TestAcSet', event: "BufEnter",
\ pattern: test_null_string(), cmd: 'echo "bufcmds"'}]
let l = [#{group: 'TestAcSet', event: "BufEnter",
\ pattern: test_null_list(), cmd: 'echo "bufcmds"'}]
call assert_fails('call autocmd_add(l)', 'E714:')
let l = [#{group: 'TestAcSet', event: "BufEnter",
\ pattern: {}, cmd: 'echo "bufcmds"'}]
call assert_fails('call autocmd_add(l)', 'E777:')
let l = [#{group: 'TestAcSet', event: "BufEnter",
\ pattern: [{}], cmd: 'echo "bufcmds"'}]
call assert_fails('call autocmd_add(l)', 'E928:')
let l = [#{group: 'TestAcSet', event: "BufEnter",
\ pattern: [test_null_string()], cmd: 'echo "bufcmds"'}]
call assert_fails('call autocmd_add(l)', 'E928:')
let l = [#{group: 'TestAcSet', event: "BufEnter",
\ pattern: [], cmd: 'echo "bufcmds"'}]
call autocmd_add(l)
let l = [#{group: 'TestAcSet', event: "BufEnter",
\ pattern: [""], cmd: 'echo "bufcmds"'}]
call autocmd_add(l)
let l = [#{group: 'TestAcSet', event: "BufEnter",
\ pattern: "", cmd: 'echo "bufcmds"'}]
call autocmd_add(l)
call assert_equal([], autocmd_get(#{group: 'TestAcSet'}))
let l = [#{group: 'TestAcSet', event: 'BufEnter,abc,BufLeave',
\ pattern: '*.py', cmd: 'echo "bufcmds"'}]
call assert_fails('call autocmd_add(l)', 'E216:')
call assert_fails("call autocmd_add({})", 'E1211:')
call assert_equal(v:false, autocmd_add(test_null_list()))
call assert_true(autocmd_add([[]]))