aboutsummaryrefslogtreecommitdiff
path: root/test/functional/eval/map_functions_spec.lua
blob: a260522aa3ab89549e7c15cdfc7801fc0fe99a17 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120

local helpers = require('test.functional.helpers')(after_each)
local clear = helpers.clear
local eq = helpers.eq
local eval = helpers.eval
local funcs = helpers.funcs
local nvim = helpers.nvim
local source = helpers.source

describe('maparg()', function()
  before_each(clear)

  local foo_bar_map_table = {
      lhs='foo',
      silent=0,
      rhs='bar',
      expr=0,
      sid=0,
      buffer=0,
      nowait=0,
      mode='n',
      noremap=1,
    }

  it('returns a dictionary', function()
    nvim('command', 'nnoremap foo bar')
    eq('bar', funcs.maparg('foo'))
    eq(foo_bar_map_table, funcs.maparg('foo', 'n', false, true))
  end)

  it('returns 1 for silent when <silent> is used', function()
    nvim('command', 'nnoremap <silent> foo bar')
    eq(1, funcs.maparg('foo', 'n', false, true)['silent'])

    nvim('command', 'nnoremap baz bat')
    eq(0, funcs.maparg('baz', 'n', false, true)['silent'])
  end)

  it('returns an empty string when no map is present', function()
    eq('', funcs.maparg('not a mapping'))
  end)

  it('returns an empty dictionary when no map is present and dict is requested', function()
    eq({}, funcs.maparg('not a mapping', 'n', false, true))
  end)

  it('returns the same value for noremap and <script>', function()
    nvim('command', 'inoremap <script> hello world')
    nvim('command', 'inoremap this that')
    eq(
      funcs.maparg('hello', 'i', false, true)['noremap'],
      funcs.maparg('this', 'i', false, true)['noremap']
      )
  end)

  it('returns a boolean for buffer', function()
    -- Open enough windows to know we aren't on buffer number 1
    nvim('command', 'new')
    nvim('command', 'new')
    nvim('command', 'new')
    nvim('command', 'cnoremap <buffer> this that')
    eq(1, funcs.maparg('this', 'c', false, true)['buffer'])

    -- Global will return 0 always
    nvim('command', 'nnoremap other another')
    eq(0, funcs.maparg('other', 'n', false, true)['buffer'])
  end)

  it('returns script numbers', function()
    source([[
      function! s:maparg_test_function() abort
        return 'testing'
      endfunction

      nnoremap fizz :call <SID>maparg_test_function()<CR>
    ]])
    eq(1, funcs.maparg('fizz', 'n', false, true)['sid'])
    eq('testing', nvim('call_function', '<SNR>1_maparg_test_function', {}))
  end)

  it('works with <F12> and others', function()
    source([[
      let g:maparg_test_var = 0

      nnoremap <F12> :let g:maparg_test_var = 1<CR>
    ]])
    eq(0, eval('g:maparg_test_var'))
    source([[
      call feedkeys("\<F12>")
    ]])
    eq(1, eval('g:maparg_test_var'))

    eq(':let g:maparg_test_var = 1<CR>', funcs.maparg('<F12>', 'n', false, true)['rhs'])
  end)

  it('works with <expr>', function()
    source([[
      let counter = 0
      inoremap <expr> <C-L> ListItem()
      inoremap <expr> <C-R> ListReset()

      func ListItem()
        let g:counter += 1
        return g:counter . '. '
      endfunc

      func ListReset()
        let g:counter = 0
        return ''
      endfunc

      call feedkeys("i\<C-L>")
    ]])
    eq(1, eval('g:counter'))

    local map_dict = funcs.maparg('<C-L>', 'i', false, true)
    eq(1, map_dict['expr'])
    eq('i', map_dict['mode'])
  end)
end)