show_spec.lua (6326B)
1 local t = require('test.testutil') 2 local n = require('test.functional.testnvim')() 3 local Screen = require('test.functional.ui.screen') 4 5 local clear = n.clear 6 local command = n.command 7 local dedent = t.dedent 8 local eq = t.eq 9 local fn = n.fn 10 local eval = n.eval 11 local exec = n.exec 12 local feed = n.feed 13 14 describe(':autocmd', function() 15 before_each(function() 16 clear({ '-u', 'NONE' }) 17 end) 18 19 it('should not segfault when you just do autocmd', function() 20 command ':autocmd' 21 end) 22 23 it('should filter based on ++once', function() 24 command 'autocmd! BufEnter' 25 command "autocmd BufEnter * :echo 'Hello'" 26 command [[augroup TestingOne]] 27 command [[ autocmd BufEnter * :echo "Line 1"]] 28 command [[ autocmd BufEnter * :echo "Line 2"]] 29 command [[augroup END]] 30 31 eq( 32 dedent([[ 33 34 --- Autocommands --- 35 BufEnter 36 * :echo 'Hello' 37 TestingOne BufEnter 38 * :echo "Line 1" 39 :echo "Line 2"]]), 40 fn.execute('autocmd BufEnter') 41 ) 42 end) 43 44 it('should not show group information if interrupted', function() 45 local screen = Screen.new(50, 6) 46 screen:add_extra_attr_ids { 47 [100] = { foreground = Screen.colors.Magenta, bold = true }, 48 } 49 exec([[ 50 set more 51 autocmd! BufEnter 52 augroup test_1 53 autocmd BufEnter A echo 'A' 54 autocmd BufEnter B echo 'B' 55 autocmd BufEnter C echo 'C' 56 autocmd BufEnter D echo 'D' 57 autocmd BufEnter E echo 'E' 58 autocmd BufEnter F echo 'F' 59 augroup END 60 autocmd! BufLeave 61 augroup test_1 62 autocmd BufLeave A echo 'A' 63 autocmd BufLeave B echo 'B' 64 autocmd BufLeave C echo 'C' 65 autocmd BufLeave D echo 'D' 66 autocmd BufLeave E echo 'E' 67 autocmd BufLeave F echo 'F' 68 augroup END 69 ]]) 70 feed(':autocmd<CR>') 71 screen:expect([[ 72 :autocmd | 73 {100:--- Autocommands ---} | 74 {100:test_1} {100:BufEnter} | 75 A echo 'A' | 76 B echo 'B' | 77 {6:-- More --}^ | 78 ]]) 79 feed('q') 80 screen:expect([[ 81 ^ | 82 {1:~ }|*4 83 | 84 ]]) 85 end) 86 87 it('should not show group information for deleted pattern', function() 88 exec([[ 89 autocmd! BufEnter 90 augroup test_1 91 autocmd BufEnter A echo 'A' 92 autocmd BufEnter B echo 'B' 93 autocmd BufEnter C echo 'C' 94 augroup END 95 augroup test_2 96 autocmd BufEnter foo echo 'foo' 97 augroup END 98 augroup test_3 99 autocmd BufEnter D echo 'D' 100 autocmd BufEnter E echo 'E' 101 autocmd BufEnter F echo 'F' 102 augroup END 103 104 func Func() 105 autocmd! test_2 BufEnter 106 let g:output = execute('autocmd BufEnter') 107 endfunc 108 109 autocmd User foo call Func() 110 doautocmd User foo 111 ]]) 112 eq( 113 dedent([[ 114 115 --- Autocommands --- 116 test_1 BufEnter 117 A echo 'A' 118 B echo 'B' 119 C echo 'C' 120 test_3 BufEnter 121 D echo 'D' 122 E echo 'E' 123 F echo 'F']]), 124 eval('g:output') 125 ) 126 end) 127 128 it('can filter by pattern #17973', function() 129 exec([[ 130 autocmd! BufEnter 131 autocmd! User 132 augroup test_1 133 autocmd BufEnter A echo "A1" 134 autocmd BufEnter B echo "B1" 135 autocmd User A echo "A1" 136 autocmd User B echo "B1" 137 augroup END 138 augroup test_2 139 autocmd BufEnter A echo "A2" 140 autocmd BufEnter B echo "B2" 141 autocmd User A echo "A2" 142 autocmd User B echo "B2" 143 augroup END 144 augroup test_3 145 autocmd BufEnter A echo "A3" 146 autocmd BufEnter B echo "B3" 147 autocmd User A echo "A3" 148 autocmd User B echo "B3" 149 augroup END 150 ]]) 151 eq( 152 dedent([[ 153 154 --- Autocommands --- 155 test_1 User 156 A echo "A1" 157 test_2 User 158 A echo "A2" 159 test_3 User 160 A echo "A3"]]), 161 fn.execute('autocmd User A') 162 ) 163 eq( 164 dedent([[ 165 166 --- Autocommands --- 167 test_1 BufEnter 168 B echo "B1" 169 test_2 BufEnter 170 B echo "B2" 171 test_3 BufEnter 172 B echo "B3" 173 test_1 User 174 B echo "B1" 175 test_2 User 176 B echo "B2" 177 test_3 User 178 B echo "B3"]]), 179 fn.execute('autocmd * B') 180 ) 181 eq( 182 dedent([[ 183 184 --- Autocommands --- 185 test_3 BufEnter 186 B echo "B3" 187 test_3 User 188 B echo "B3"]]), 189 fn.execute('autocmd test_3 * B') 190 ) 191 eq( 192 dedent([[ 193 194 --- Autocommands ---]]), 195 fn.execute('autocmd * ,') 196 ) 197 eq( 198 dedent([[ 199 200 --- Autocommands ---]]), 201 fn.execute('autocmd * ,,,') 202 ) 203 end) 204 205 it('should skip consecutive patterns', function() 206 exec([[ 207 autocmd! BufEnter 208 augroup test_1 209 autocmd BufEnter A echo 'A' 210 autocmd BufEnter A echo 'B' 211 autocmd BufEnter A echo 'C' 212 autocmd BufEnter B echo 'D' 213 autocmd BufEnter B echo 'E' 214 autocmd BufEnter B echo 'F' 215 augroup END 216 augroup test_2 217 autocmd BufEnter C echo 'A' 218 autocmd BufEnter C echo 'B' 219 autocmd BufEnter C echo 'C' 220 autocmd BufEnter D echo 'D' 221 autocmd BufEnter D echo 'E' 222 autocmd BufEnter D echo 'F' 223 augroup END 224 225 let g:output = execute('autocmd BufEnter') 226 ]]) 227 eq( 228 dedent([[ 229 230 --- Autocommands --- 231 test_1 BufEnter 232 A echo 'A' 233 echo 'B' 234 echo 'C' 235 B echo 'D' 236 echo 'E' 237 echo 'F' 238 test_2 BufEnter 239 C echo 'A' 240 echo 'B' 241 echo 'C' 242 D echo 'D' 243 echo 'E' 244 echo 'F']]), 245 eval('g:output') 246 ) 247 end) 248 end)