refactor: format test/*

This commit is contained in:
Justin M. Keyes
2024-01-03 02:09:18 +01:00
parent 59d117ec99
commit 04f2f864e2
363 changed files with 30631 additions and 20833 deletions

View File

@@ -35,12 +35,12 @@ describe('put command', function()
before_each(reset)
local function visual_marks_zero()
for _,v in pairs(funcs.getpos("'<")) do
for _, v in pairs(funcs.getpos("'<")) do
if v ~= 0 then
return false
end
end
for _,v in pairs(funcs.getpos("'>")) do
for _, v in pairs(funcs.getpos("'>")) do
if v ~= 0 then
return false
end
@@ -51,10 +51,12 @@ describe('put command', function()
-- {{{ Where test definitions are run
local function run_test_variations(test_variations, extra_setup)
reset()
if extra_setup then extra_setup() end
if extra_setup then
extra_setup()
end
local init_contents = curbuf_contents()
local init_cursorpos = funcs.getcurpos()
local assert_no_change = function (exception_table, after_undo)
local assert_no_change = function(exception_table, after_undo)
expect(init_contents)
-- When putting the ". register forwards, undo doesn't move
-- the cursor back to where it was before.
@@ -69,7 +71,9 @@ describe('put command', function()
for _, test in pairs(test_variations) do
it(test.description, function()
if extra_setup then extra_setup() end
if extra_setup then
extra_setup()
end
local orig_dotstr = funcs.getreg('.')
helpers.ok(visual_marks_zero())
-- Make sure every test starts from the same conditions
@@ -115,8 +119,13 @@ describe('put command', function()
end -- run_test_variations()
-- }}}
local function create_test_defs(test_defs, command_base, command_creator, -- {{{
expect_base, expect_creator)
local function create_test_defs(
test_defs,
command_base,
command_creator, -- {{{
expect_base,
expect_creator
)
local rettab = {}
local exceptions
for _, v in pairs(test_defs) do
@@ -125,8 +134,7 @@ describe('put command', function()
else
exceptions = {}
end
table.insert(rettab,
{
table.insert(rettab, {
test_action = command_creator(command_base, v[1]),
test_assertions = expect_creator(expect_base, v[2]),
description = v[3],
@@ -146,7 +154,7 @@ describe('put command', function()
for linenum, line in pairs(funcs.split(expect_string, '\n', 1)) do
local column = line:find('x')
if column then
return {linenum, column}, expect_string:gsub('x', '')
return { linenum, column }, expect_string:gsub('x', '')
end
end
end -- find_cursor_position() }}}
@@ -186,7 +194,7 @@ describe('put command', function()
-- '.' command.
if not (exception_table.redo_position and after_redo) then
local actual_position = funcs.getcurpos()
eq(cursor_position, {actual_position[2], actual_position[5]})
eq(cursor_position, { actual_position[2], actual_position[5] })
end
end
end -- expect_creator() }}}
@@ -195,13 +203,13 @@ describe('put command', function()
local function copy_def(def)
local rettab = { '', {}, '', nil }
rettab[1] = def[1]
for k,v in pairs(def[2]) do
for k, v in pairs(def[2]) do
rettab[2][k] = v
end
rettab[3] = def[3]
if def[4] then
rettab[4] = {}
for k,v in pairs(def[4]) do
for k, v in pairs(def[4]) do
rettab[4][k] = v
end
end
@@ -211,52 +219,52 @@ describe('put command', function()
local normal_command_defs = {
{
'p',
{cursor_after = false, put_backwards = false, dot_register = false},
{ cursor_after = false, put_backwards = false, dot_register = false },
'pastes after cursor with p',
},
{
'gp',
{cursor_after = true, put_backwards = false, dot_register = false},
{ cursor_after = true, put_backwards = false, dot_register = false },
'leaves cursor after text with gp',
},
{
'".p',
{cursor_after = false, put_backwards = false, dot_register = true},
{ cursor_after = false, put_backwards = false, dot_register = true },
'works with the ". register',
},
{
'".gp',
{cursor_after = true, put_backwards = false, dot_register = true},
{ cursor_after = true, put_backwards = false, dot_register = true },
'gp works with the ". register',
{redo_position = true},
{ redo_position = true },
},
{
'P',
{cursor_after = false, put_backwards = true, dot_register = false},
{ cursor_after = false, put_backwards = true, dot_register = false },
'pastes before cursor with P',
},
{
'gP',
{cursor_after = true, put_backwards = true, dot_register = false},
{ cursor_after = true, put_backwards = true, dot_register = false },
'gP pastes before cursor and leaves cursor after text',
},
{
'".P',
{cursor_after = false, put_backwards = true, dot_register = true},
{ cursor_after = false, put_backwards = true, dot_register = true },
'P works with ". register',
},
{
'".gP',
{cursor_after = true, put_backwards = true, dot_register = true},
{ cursor_after = true, put_backwards = true, dot_register = true },
'gP works with ". register',
{redo_position = true},
{ redo_position = true },
},
}
-- Add a definition applying a count for each definition above.
-- Could do this for each transformation (p -> P, p -> gp etc), but I think
-- it's neater this way (balance between being explicit and too verbose).
for i = 1,#normal_command_defs do
for i = 1, #normal_command_defs do
local cur = normal_command_defs[i]
-- Make modified copy of current definition that includes a count.
@@ -279,35 +287,36 @@ describe('put command', function()
local ex_command_defs = {
{
'put',
{put_backwards = false, dot_register = false},
{ put_backwards = false, dot_register = false },
'pastes linewise forwards with :put',
},
{
'put!',
{put_backwards = true, dot_register = false},
{ put_backwards = true, dot_register = false },
'pastes linewise backwards with :put!',
},
{
'put .',
{put_backwards = false, dot_register = true},
{ put_backwards = false, dot_register = true },
'pastes linewise with the dot register',
},
{
'put! .',
{put_backwards = true, dot_register = true},
{ put_backwards = true, dot_register = true },
'pastes linewise backwards with the dot register',
},
}
local function non_dotdefs(def_table)
return filter(function(d) return not d[2].dot_register end, def_table)
return filter(function(d)
return not d[2].dot_register
end, def_table)
end
-- }}}
-- Conversion functions {{{
local function convert_charwise(expect_base, conversion_table,
virtualedit_end, visual_put)
local function convert_charwise(expect_base, conversion_table, virtualedit_end, visual_put)
expect_base = dedent(expect_base)
-- There is no difference between 'P' and 'p' when VIsual_active
if not visual_put then
@@ -324,7 +333,7 @@ describe('put command', function()
end
if conversion_table.count > 1 then
local rep_string = 'test_string"'
local extra_puts = rep_string:rep(conversion_table.count - 1)
local extra_puts = rep_string:rep(conversion_table.count - 1)
expect_base = expect_base:gsub('test_stringx"', extra_puts .. 'test_stringx"')
end
if conversion_table.cursor_after then
@@ -395,7 +404,7 @@ describe('put command', function()
indent = ''
end
local rep_string = indent .. p_str .. '\n'
local extra_puts = rep_string:rep(conversion_table.count - 1)
local extra_puts = rep_string:rep(conversion_table.count - 1)
local orig_string, new_string
if conversion_table.cursor_after then
orig_string = indent .. p_str .. '\nx'
@@ -420,8 +429,13 @@ describe('put command', function()
return orig_line:sub(1, prev_end - 1) .. 'x' .. orig_line:sub(prev_end)
end
local function convert_blockwise(expect_base, conversion_table, visual,
use_b, trailing_whitespace)
local function convert_blockwise(
expect_base,
conversion_table,
visual,
use_b,
trailing_whitespace
)
expect_base = dedent(expect_base)
local p_str = 'test_string"'
if use_b then
@@ -452,11 +466,9 @@ describe('put command', function()
if conversion_table.count and conversion_table.count > 1 then
local p_pattern = p_str:gsub('%.', '%%.')
expect_base = expect_base:gsub(p_pattern,
p_str:rep(conversion_table.count))
expect_base = expect_base:gsub('test_stringx([b".])',
p_str:rep(conversion_table.count - 1)
.. '%0')
expect_base = expect_base:gsub(p_pattern, p_str:rep(conversion_table.count))
expect_base =
expect_base:gsub('test_stringx([b".])', p_str:rep(conversion_table.count - 1) .. '%0')
end
if conversion_table.cursor_after then
@@ -496,8 +508,13 @@ describe('put command', function()
-- }}}
-- Convenience functions {{{
local function run_normal_mode_tests(test_string, base_map, extra_setup,
virtualedit_end, selection_string)
local function run_normal_mode_tests(
test_string,
base_map,
extra_setup,
virtualedit_end,
selection_string
)
local function convert_closure(e, c)
return convert_charwise(e, c, virtualedit_end, selection_string)
end
@@ -532,8 +549,12 @@ describe('put command', function()
local function run_linewise_tests(expect_base, base_command, extra_setup)
local linewise_test_defs = create_test_defs(
ex_command_defs, base_command,
create_put_action, expect_base, convert_linewiseer)
ex_command_defs,
base_command,
create_put_action,
expect_base,
convert_linewiseer
)
run_test_variations(linewise_test_defs, extra_setup)
end -- run_linewise_tests()
-- }}}
@@ -545,7 +566,8 @@ describe('put command', function()
Line of words 2]]
run_normal_mode_tests(expect_string, 'p')
run_linewise_tests([[
run_linewise_tests(
[[
Line of words 1
xtest_string"
Line of words 2]],
@@ -585,11 +607,12 @@ describe('put command', function()
run_test_variations(
create_test_defs(
linewise_put_defs,
'put a', create_put_action,
base_expect_string, convert_linewiseer
'put a',
create_put_action,
base_expect_string,
convert_linewiseer
)
)
end)
describe('blockwise register', function()
@@ -600,18 +623,13 @@ describe('put command', function()
test_stringb]]
local function expect_block_creator(expect_base, conversion_table)
return expect_creator(function(e,c) return convert_blockwise(e,c,nil,true) end,
expect_base, conversion_table)
return expect_creator(function(e, c)
return convert_blockwise(e, c, nil, true)
end, expect_base, conversion_table)
end
run_test_variations(
create_test_defs(
blockwise_put_defs,
'"bp',
create_p_action,
test_base,
expect_block_creator
)
create_test_defs(blockwise_put_defs, '"bp', create_p_action, test_base, expect_block_creator)
)
end)
@@ -632,17 +650,17 @@ describe('put command', function()
describe('linewise paste with autoindent', function()
-- luacheck: ignore
run_linewise_tests([[
run_linewise_tests(
[[
Line of words 1
Line of words 2
xtest_string"]],
'put'
,
'put',
function()
funcs.setline('$', ' Line of words 2')
-- Set curswant to '8' to be at the end of the tab character
-- This is where the cursor is put back after the 'u' command.
funcs.setpos('.', {0, 2, 1, 0, 8})
funcs.setpos('.', { 0, 2, 1, 0, 8 })
command('set autoindent')
end
)
@@ -655,7 +673,7 @@ describe('put command', function()
run_normal_mode_tests(test_string, 'p', function()
funcs.setline('$', ' Line of words 2')
command('setlocal virtualedit=all')
funcs.setpos('.', {0, 2, 1, 2, 3})
funcs.setpos('.', { 0, 2, 1, 2, 3 })
end)
end)
@@ -667,7 +685,7 @@ describe('put command', function()
run_normal_mode_tests(test_string, 'p', function()
funcs.setline('$', ' Line of words 2')
command('setlocal virtualedit=all')
funcs.setpos('.', {0, 1, 16, 1, 17})
funcs.setpos('.', { 0, 1, 16, 1, 17 })
end, true)
end)
@@ -679,12 +697,10 @@ describe('put command', function()
run_normal_mode_tests(test_string, 'v2ep', nil, nil, 'Line of')
end)
describe('over trailing newline', function()
local test_string = 'Line of test_stringx"Line of words 2'
local test_string = 'Line of test_stringx"Line of words 2'
run_normal_mode_tests(test_string, 'v$p', function()
funcs.setpos('.', {0, 1, 9, 0, 9})
end,
nil,
'words 1\n')
funcs.setpos('.', { 0, 1, 9, 0, 9 })
end, nil, 'words 1\n')
end)
describe('linewise mode', function()
local test_string = [[
@@ -693,8 +709,7 @@ describe('put command', function()
local function expect_vis_linewise(expect_base, conversion_table)
return expect_creator(function(e, c)
return convert_linewise(e, c, nil, nil)
end,
expect_base, conversion_table)
end, expect_base, conversion_table)
end
run_test_variations(
create_test_defs(
@@ -704,15 +719,16 @@ describe('put command', function()
test_string,
expect_vis_linewise
),
function() funcs.setpos('.', {0, 1, 1, 0, 1}) end
function()
funcs.setpos('.', { 0, 1, 1, 0, 1 })
end
)
describe('with whitespace at bol', function()
local function expect_vis_lineindented(expect_base, conversion_table)
local test_expect = expect_creator(function(e, c)
return convert_linewise(e, c, nil, nil, ' ')
end,
expect_base, conversion_table)
return convert_linewise(e, c, nil, nil, ' ')
end, expect_base, conversion_table)
return function(exception_table, after_redo)
test_expect(exception_table, after_redo)
if not conversion_table.put_backwards then
@@ -737,7 +753,6 @@ describe('put command', function()
end
)
end)
end)
describe('blockwise visual mode', function()
@@ -747,10 +762,10 @@ describe('put command', function()
local function expect_block_creator(expect_base, conversion_table)
local test_expect = expect_creator(function(e, c)
return convert_blockwise(e, c, true)
end, expect_base, conversion_table)
return function(e,c)
test_expect(e,c)
return convert_blockwise(e, c, true)
end, expect_base, conversion_table)
return function(e, c)
test_expect(e, c)
if not conversion_table.put_backwards then
eq('Lin\nLin', funcs.getreg('"'))
end
@@ -758,28 +773,26 @@ describe('put command', function()
end
local select_down_test_defs = create_test_defs(
normal_command_defs,
'<C-v>jllp',
create_p_action,
test_base,
expect_block_creator
normal_command_defs,
'<C-v>jllp',
create_p_action,
test_base,
expect_block_creator
)
run_test_variations(select_down_test_defs)
-- Undo and redo of a visual block put leave the cursor in the top
-- left of the visual block area no matter where the cursor was
-- when it started.
local undo_redo_no = map(function(table)
local rettab = copy_def(table)
if not rettab[4] then
rettab[4] = {}
end
rettab[4].undo_position = true
rettab[4].redo_position = true
return rettab
end,
normal_command_defs)
local rettab = copy_def(table)
if not rettab[4] then
rettab[4] = {}
end
rettab[4].undo_position = true
rettab[4].redo_position = true
return rettab
end, normal_command_defs)
-- Selection direction doesn't matter
run_test_variations(
@@ -790,7 +803,9 @@ describe('put command', function()
test_base,
expect_block_creator
),
function() funcs.setpos('.', {0, 2, 1, 0, 1}) end
function()
funcs.setpos('.', { 0, 2, 1, 0, 1 })
end
)
describe('blockwise cursor after undo', function()
@@ -800,62 +815,45 @@ describe('put command', function()
-- the same pattern as everything else.
-- Here we fix this by directly checking the undo/redo position
-- in the test_assertions of our test definitions.
local function assertion_creator(_,_)
return function(_,_)
local function assertion_creator(_, _)
return function(_, _)
feed('u')
-- Have to use feed('u') here to set curswant, because
-- ex_undo() doesn't do that.
eq({0, 1, 1, 0, 1}, funcs.getcurpos())
eq({ 0, 1, 1, 0, 1 }, funcs.getcurpos())
feed('<C-r>')
eq({0, 1, 1, 0, 1}, funcs.getcurpos())
eq({ 0, 1, 1, 0, 1 }, funcs.getcurpos())
end
end
run_test_variations(
create_test_defs(
undo_redo_no,
'<C-v>kllp',
create_p_action,
test_base,
assertion_creator
),
function() funcs.setpos('.', {0, 2, 1, 0, 1}) end
create_test_defs(undo_redo_no, '<C-v>kllp', create_p_action, test_base, assertion_creator),
function()
funcs.setpos('.', { 0, 2, 1, 0, 1 })
end
)
end)
end)
describe("with 'virtualedit'", function()
describe('splitting a tab character', function()
local base_expect_string = [[
Line of words 1
test_stringx" Line of words 2]]
run_normal_mode_tests(
base_expect_string,
'vp',
function()
funcs.setline('$', ' Line of words 2')
command('setlocal virtualedit=all')
funcs.setpos('.', {0, 2, 1, 2, 3})
end,
nil,
' '
)
run_normal_mode_tests(base_expect_string, 'vp', function()
funcs.setline('$', ' Line of words 2')
command('setlocal virtualedit=all')
funcs.setpos('.', { 0, 2, 1, 2, 3 })
end, nil, ' ')
end)
describe('after end of line', function()
local base_expect_string = [[
Line of words 1 test_stringx"
Line of words 2]]
run_normal_mode_tests(
base_expect_string,
'vp',
function()
command('setlocal virtualedit=all')
funcs.setpos('.', {0, 1, 16, 2, 18})
end,
true,
' '
)
run_normal_mode_tests(base_expect_string, 'vp', function()
command('setlocal virtualedit=all')
funcs.setpos('.', { 0, 1, 16, 2, 18 })
end, true, ' ')
end)
end)
end)
@@ -873,9 +871,12 @@ describe('put command', function()
Line of words 1
Line of words 2]])
feed('u1go<C-v>j".p')
eq([[
eq(
[[
ine of words 1
ine of words 2]], curbuf_contents())
ine of words 2]],
curbuf_contents()
)
end)
local screen
@@ -891,33 +892,42 @@ describe('put command', function()
end
helpers.ok(not screen.bell and not screen.visualbell)
actions()
screen:expect{condition=function()
if should_ring then
if not screen.bell and not screen.visualbell then
error('Bell was not rung after action')
screen:expect {
condition = function()
if should_ring then
if not screen.bell and not screen.visualbell then
error('Bell was not rung after action')
end
else
if screen.bell or screen.visualbell then
error('Bell was rung after action')
end
end
else
if screen.bell or screen.visualbell then
error('Bell was rung after action')
end
end
end, unchanged=(not should_ring)}
end,
unchanged = not should_ring,
}
screen.bell = false
screen.visualbell = false
end
it('should not ring the bell with gp at end of line', function()
bell_test(function() feed('$".gp') end)
bell_test(function()
feed('$".gp')
end)
-- Even if the last character is a multibyte character.
reset()
funcs.setline(1, 'helloม')
bell_test(function() feed('$".gp') end)
bell_test(function()
feed('$".gp')
end)
end)
it('should not ring the bell with gp and end of file', function()
funcs.setpos('.', {0, 2, 1, 0})
bell_test(function() feed('$vl".gp') end)
funcs.setpos('.', { 0, 2, 1, 0 })
bell_test(function()
feed('$vl".gp')
end)
end)
it('should ring the bell when deleting if not appropriate', function()
@@ -926,7 +936,9 @@ describe('put command', function()
expect([[
ine of words 1
Line of words 2]])
bell_test(function() feed('".P') end, true)
bell_test(function()
feed('".P')
end, true)
end)
it('should restore cursor position after undo of ".p', function()
@@ -946,4 +958,3 @@ describe('put command', function()
end)
end)
end)