spacevim/bundle/nvim-surround/tests/jumps_spec.lua
JIe 2bb7059579
Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
init
2024-08-21 14:17:26 +08:00

201 lines
5.5 KiB
Lua

local get_curpos = function()
local curpos = vim.api.nvim_win_get_cursor(0)
return { curpos[1], curpos[2] + 1 }
end
local set_curpos = function(pos)
vim.api.nvim_win_set_cursor(0, { pos[1], pos[2] - 1 })
end
local set_lines = function(lines)
vim.api.nvim_buf_set_lines(0, 0, -1, false, lines)
end
local check_lines = function(lines)
assert.are.same(lines, vim.api.nvim_buf_get_lines(0, 0, -1, false))
end
describe("jumps", function()
before_each(function()
local bufnr = vim.api.nvim_create_buf(true, true)
vim.api.nvim_win_set_buf(0, bufnr)
end)
it("can do lookahead/lookbehind", function()
set_lines({
[[And jump "forwards" and `backwards` to 'the' "nearest" surround.]],
})
set_curpos({ 1, 27 })
vim.cmd("normal dsq")
assert.are_not.same(get_curpos(), { 1, 27 })
check_lines({
[[And jump "forwards" and backwards to 'the' "nearest" surround.]],
})
vim.cmd("normal ysa'\"")
check_lines({
[[And jump "forwards" and backwards to "'the'" "nearest" surround.]],
})
vim.cmd("normal dsq")
assert.are_not.same(get_curpos(), { 1, 27 })
vim.cmd("normal! ..")
assert.are_not.same(get_curpos(), { 1, 27 })
check_lines({
[[And jump "forwards and backwards to the nearest" surround.]],
})
vim.cmd("normal csqb")
assert.are_not.same(get_curpos(), { 1, 27 })
check_lines({
[[And jump (forwards and backwards to the nearest) surround.]],
})
end)
it("can change multiple quotes on a line", function()
set_lines({
[["hello "world""]],
})
set_curpos({ 1, 10 })
vim.cmd("normal cs\"'")
check_lines({
[["hello 'world'"]],
})
set_curpos({ 1, 8 })
vim.cmd("normal cs'\"")
check_lines({
[["hello "world""]],
})
set_curpos({ 1, 14 })
vim.cmd("normal cs\"'")
check_lines({
[["hello "world'']],
})
end)
it("for quotes only target the current line", function()
set_lines({
[[This 'line' has quotes]],
[[While this does "not"]],
[[This `one` does as well]],
})
set_curpos({ 2, 7 })
vim.cmd("normal dsq")
check_lines({
[[This 'line' has quotes]],
[[While this does not]],
[[This `one` does as well]],
})
vim.cmd("normal! .")
check_lines({
[[This 'line' has quotes]],
[[While this does not]],
[[This `one` does as well]],
})
vim.cmd("normal cs'`")
vim.cmd("normal cs`'")
check_lines({
[[This 'line' has quotes]],
[[While this does not]],
[[This `one` does as well]],
})
end)
it("can jump to pattern-based surrounds", function()
set_lines({
[[int f(a, b, c)]],
})
vim.cmd("normal dsf")
check_lines({
[[int a, b, c]],
})
set_curpos({ 1, 1 })
set_lines({
[[// Some comment here]],
[[string function(vector<int> v) {}]],
})
vim.cmd("normal dsf")
set_lines({
[[// Some comment here]],
[[string function(vector<int> v) {}]],
})
set_lines({
[[outer_func(inner_func(some, args)) -- Comment]],
})
set_curpos({ 1, 11 })
vim.cmd("normal dsf")
set_lines({
[[inner_func(some, args) -- Comment]],
})
set_lines({
[[outer_func(inner_func(some, args)) -- Comment]],
})
set_curpos({ 1, 12 })
vim.cmd("normal dsf")
set_lines({
[[outer_func(some, args) -- Comment]],
})
set_lines({
[[outer_func(inner_func(some, args)) -- Comment]],
})
set_curpos({ 1, 33 })
vim.cmd("normal dsf")
set_lines({
[[outer_func(some, args) -- Comment]],
})
set_lines({
[[outer_func(inner_func(some, args)) -- Comment]],
})
set_curpos({ 1, 34 })
vim.cmd("normal dsf")
set_lines({
[[inner_func(some, args) -- Comment]],
})
set_lines({
[[outer_func(inner_func(some, args)) -- Comment]],
})
set_curpos({ 1, 39 })
vim.cmd("normal dsf")
set_lines({
[[inner_func(some, args) -- Comment]],
})
end)
it("has intended behavior for single-character delimiter pairs", function()
require("nvim-surround").buffer_setup({
surrounds = {
["*"] = {
find = "%*.-%*",
delete = "^(.)().-(.)()$",
change = {
target = "^(.)().-(.)()$",
},
},
},
})
set_lines({ "*hello*world*" })
vim.cmd("normal ds*")
check_lines({ "helloworld*" })
set_lines({ "*hello*world*" })
set_curpos({ 1, 6 })
vim.cmd("normal ds*")
check_lines({ "helloworld*" })
set_lines({ "*hello*world*" })
set_curpos({ 1, 7 })
vim.cmd("normal ds*")
check_lines({ "*helloworld" })
set_lines({ "*hello*world*end" })
set_curpos({ 1, 15 })
vim.cmd("normal ds*")
check_lines({ "*helloworldend" })
end)
end)