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)