neovim

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

range_spec.lua (2671B)


      1 -- Test suite for vim.range
      2 local t = require('test.testutil')
      3 local n = require('test.functional.testnvim')()
      4 local eq = t.eq
      5 
      6 local clear = n.clear
      7 local exec_lua = n.exec_lua
      8 local insert = n.insert
      9 
     10 describe('vim.range', function()
     11  before_each(clear)
     12 
     13  it('creates a range with or without optional fields', function()
     14    local range = exec_lua(function()
     15      return vim.range(3, 5, 4, 6)
     16    end)
     17    eq(3, range.start.row)
     18    eq(5, range.start.col)
     19    eq(4, range.end_.row)
     20    eq(6, range.end_.col)
     21    eq(nil, range.start.buf)
     22    eq(nil, range.end_.buf)
     23    local buf = exec_lua(function()
     24      return vim.api.nvim_create_buf(false, true)
     25    end)
     26    range = exec_lua(function()
     27      return vim.range(3, 5, 4, 6, { buf = buf })
     28    end)
     29    eq(buf, range.start.buf)
     30    eq(buf, range.end_.buf)
     31  end)
     32 
     33  it('creates a range from two positions when optional fields are not matched', function()
     34    local range = exec_lua(function()
     35      return vim.range(vim.pos(3, 5), vim.pos(4, 6))
     36    end)
     37    eq(3, range.start.row)
     38    eq(5, range.start.col)
     39    eq(4, range.end_.row)
     40    eq(6, range.end_.col)
     41    eq(nil, range.start.buf)
     42    eq(nil, range.end_.buf)
     43 
     44    local buf1 = exec_lua(function()
     45      return vim.api.nvim_create_buf(false, true)
     46    end)
     47    range = exec_lua(function()
     48      return vim.range(vim.pos(3, 5, { buf = buf1 }), vim.pos(4, 6, { buf = buf1 }))
     49    end)
     50    eq(buf1, range.start.buf)
     51    eq(buf1, range.end_.buf)
     52 
     53    local buf2 = exec_lua(function()
     54      return vim.api.nvim_create_buf(false, true)
     55    end)
     56    local success = exec_lua(function()
     57      return pcall(function()
     58        return vim.range(vim.pos(3, 5, { buf = buf1 }), vim.pos(4, 6, { buf = buf2 }))
     59      end)
     60    end)
     61    eq(success, false)
     62  end)
     63 
     64  it('converts between vim.Range and lsp.Range', function()
     65    local buf = exec_lua(function()
     66      return vim.api.nvim_get_current_buf()
     67    end)
     68    insert('Neovim 是 Vim 的分支,专注于扩展性和可用性。')
     69    local lsp_range = exec_lua(function()
     70      local range = vim.range(0, 10, 0, 36, { buf = buf })
     71      return range:to_lsp('utf-16')
     72    end)
     73    eq({
     74      ['start'] = { line = 0, character = 8 },
     75      ['end'] = { line = 0, character = 20 },
     76    }, lsp_range)
     77    local range = exec_lua(function()
     78      return vim.range.lsp(buf, lsp_range, 'utf-16')
     79    end)
     80    eq({
     81      start = { row = 0, col = 10, buf = buf },
     82      end_ = { row = 0, col = 36, buf = buf },
     83    }, range)
     84  end)
     85 
     86  it('checks whether a range contains a position', function()
     87    eq(
     88      true,
     89      exec_lua(function()
     90        return vim.range(0, 0, 1, 5):has(vim.pos(0, 1))
     91      end)
     92    )
     93  end)
     94 end)