neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

modechanged_spec.lua (1649B)


      1 local t = require('test.testutil')
      2 local n = require('test.functional.testnvim')()
      3 
      4 local clear, eval, eq = n.clear, n.eval, t.eq
      5 local feed, command = n.feed, n.command
      6 local exec_lua = n.exec_lua
      7 
      8 describe('ModeChanged', function()
      9  before_each(function()
     10    clear()
     11  end)
     12 
     13  it('picks up terminal mode changes', function()
     14    command('let g:count = 0')
     15    command('au ModeChanged * let g:event = copy(v:event)')
     16    command('au ModeChanged * let g:count += 1')
     17 
     18    command('term')
     19    feed('i')
     20    eq({
     21      old_mode = 'nt',
     22      new_mode = 't',
     23    }, eval('g:event'))
     24    feed('<c-\\><c-n>')
     25    eq({
     26      old_mode = 't',
     27      new_mode = 'nt',
     28    }, eval('g:event'))
     29    eq(3, eval('g:count'))
     30    command('bd!')
     31 
     32    -- v:event is cleared after the autocommand is done
     33    eq({}, eval('v:event'))
     34  end)
     35 
     36  it('does not repeatedly trigger for scheduled callback', function()
     37    exec_lua([[
     38      vim.g.s_count = 0
     39      vim.g.s_mode = ""
     40      vim.g.t_count = 0
     41      vim.g.t_mode = ""
     42      vim.api.nvim_create_autocmd("ModeChanged", {
     43        callback = function()
     44          vim.g.s_count = vim.g.s_count + 1
     45          vim.g.s_mode = vim.api.nvim_get_mode().mode
     46          vim.schedule(function()
     47            vim.g.t_count = vim.g.t_count + 1
     48            vim.g.t_mode = vim.api.nvim_get_mode().mode
     49          end)
     50        end,
     51      })
     52    ]])
     53 
     54    feed('d')
     55    eq(1, eval('g:s_count'))
     56    eq('no', eval('g:s_mode'))
     57    eq(1, eval('g:t_count'))
     58    eq('no', eval('g:t_mode'))
     59 
     60    feed('<Esc>')
     61    eq(2, eval('g:s_count'))
     62    eq('n', eval('g:s_mode'))
     63    eq(2, eval('g:t_count'))
     64    eq('n', eval('g:t_mode'))
     65  end)
     66 end)