function! Normal(s) execute 'silent!' 'normal' a:s endfunction describe 'textobj#user#map' before new end after close! end it 'defines key mappings to use text objects' call textobj#user#map('datetime', { \ 'time1': { \ 'select': [' aT', ' iT', ' y'], \ 'move-n': ' j', \ } \ }) Expect maparg('aT', 'n') ==# '' Expect maparg('aT', 'o') ==# '(textobj-datetime-time1)' Expect maparg('aT', 's') ==# '' Expect maparg('aT', 'x') ==# '(textobj-datetime-time1)' Expect maparg('iT', 'n') ==# '' Expect maparg('iT', 'o') ==# '(textobj-datetime-time1)' Expect maparg('iT', 's') ==# '' Expect maparg('iT', 'x') ==# '(textobj-datetime-time1)' Expect maparg('y', 'n') ==# '' Expect maparg('y', 'o') ==# '(textobj-datetime-time1)' Expect maparg('y', 's') ==# '(textobj-datetime-time1)' Expect maparg('y', 'x') ==# '(textobj-datetime-time1)' Expect maparg('j', 'n') ==# '(textobj-datetime-time1-n)' Expect maparg('j', 'o') ==# '(textobj-datetime-time1-n)' Expect maparg('j', 's') ==# '' Expect maparg('j', 'x') ==# '(textobj-datetime-time1-n)' end it 'defines failsafe key mappings for unexisting text objects' Expect maparg('(textobj-datetime-time2)', 'o') == '' Expect maparg('(textobj-datetime-time2)', 's') == '' Expect maparg('(textobj-datetime-time2)', 'x') == '' call textobj#user#map('datetime', { \ 'time2': { \ 'select': [' aT', ' iT'], \ } \ }) Expect maparg('(textobj-datetime-time2)', 'o') != '' Expect maparg('(textobj-datetime-time2)', 's') != '' Expect maparg('(textobj-datetime-time2)', 'x') != '' Expect expr { Normal("vaT\") } to_throw 'Text object.*not defined' Expect expr { Normal("daT") } to_throw 'Text object.*not defined' noremap (textobj-datetime-time2) Expect expr { Normal("vaT\") } not to_throw Expect expr { Normal("daT") } not to_throw end it 'does not define failsafe key mappings for existing text objects' noremap (textobj-datetime-time3) call textobj#user#map('datetime', { \ 'time3': { \ 'select': [' aT', ' iT'], \ } \ }) Expect expr { Normal("vaT\") } not to_throw Expect expr { Normal("daT") } not to_throw end end