neovim

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

linked_editing_range_spec.lua (2980B)


      1 local t = require('test.testutil')
      2 local n = require('test.functional.testnvim')()
      3 local t_lsp = require('test.functional.plugin.lsp.testutil')
      4 
      5 local eq = t.eq
      6 local exec_lua = n.exec_lua
      7 local insert = n.insert
      8 local feed = n.feed
      9 
     10 local clear_notrace = t_lsp.clear_notrace
     11 local create_server_definition = t_lsp.create_server_definition
     12 
     13 describe('vim.lsp.linked_editing_range', function()
     14  before_each(function()
     15    clear_notrace()
     16 
     17    insert([[
     18    hello
     19    hello
     20    hello]])
     21 
     22    exec_lua(create_server_definition)
     23    exec_lua(function()
     24      vim.lsp.linked_editing_range.enable()
     25 
     26      _G.server = _G._create_server({
     27        capabilities = {
     28          linkedEditingRangeProvider = true,
     29        },
     30        handlers = {
     31          ['textDocument/linkedEditingRange'] = function(_, _, callback)
     32            callback(nil, {
     33              ranges = {
     34                { start = { line = 0, character = 0 }, ['end'] = { line = 0, character = 5 } },
     35                { start = { line = 1, character = 0 }, ['end'] = { line = 1, character = 5 } },
     36                { start = { line = 2, character = 0 }, ['end'] = { line = 2, character = 5 } },
     37              },
     38            })
     39          end,
     40        },
     41      })
     42 
     43      _G.server_id = vim.lsp.start({ name = 'dummy', cmd = _G.server.cmd })
     44    end)
     45  end)
     46 
     47  it('initiates linked editing', function()
     48    exec_lua(function()
     49      local win = vim.api.nvim_get_current_win()
     50      vim.api.nvim_win_set_cursor(win, { 1, 0 })
     51    end)
     52    -- Deletion
     53    feed('ldw')
     54    eq(
     55      {
     56        'h',
     57        'h',
     58        'h',
     59      },
     60      exec_lua(function()
     61        return vim.api.nvim_buf_get_lines(0, 0, -1, false)
     62      end)
     63    )
     64    -- Insertion
     65    feed('Apt<Esc>')
     66    eq(
     67      {
     68        'hpt',
     69        'hpt',
     70        'hpt',
     71      },
     72      exec_lua(function()
     73        return vim.api.nvim_buf_get_lines(0, 0, -1, false)
     74      end)
     75    )
     76    -- Undo/redo
     77    feed('0xx')
     78    eq(
     79      {
     80        't',
     81        't',
     82        't',
     83      },
     84      exec_lua(function()
     85        return vim.api.nvim_buf_get_lines(0, 0, -1, false)
     86      end)
     87    )
     88    feed('u')
     89    eq(
     90      {
     91        'pt',
     92        'pt',
     93        'pt',
     94      },
     95      exec_lua(function()
     96        return vim.api.nvim_buf_get_lines(0, 0, -1, false)
     97      end)
     98    )
     99    feed('u')
    100    eq(
    101      {
    102        'hpt',
    103        'hpt',
    104        'hpt',
    105      },
    106      exec_lua(function()
    107        return vim.api.nvim_buf_get_lines(0, 0, -1, false)
    108      end)
    109    )
    110    feed('<C-r><C-r>')
    111    eq(
    112      {
    113        't',
    114        't',
    115        't',
    116      },
    117      exec_lua(function()
    118        return vim.api.nvim_buf_get_lines(0, 0, -1, false)
    119      end)
    120    )
    121    -- Disabling
    122    exec_lua(function()
    123      vim.lsp.linked_editing_range.enable(false, { client_id = _G.server_id })
    124    end)
    125    feed('Ipp<Esc>')
    126    eq(
    127      {
    128        'ppt',
    129        't',
    130        't',
    131      },
    132      exec_lua(function()
    133        return vim.api.nvim_buf_get_lines(0, 0, -1, false)
    134      end)
    135    )
    136  end)
    137 end)