diff options
Diffstat (limited to 'test/functional')
-rw-r--r-- | test/functional/ex_cmds/source_spec.lua | 47 | ||||
-rw-r--r-- | test/functional/fixtures/fake-lsp-server.lua | 4 | ||||
-rw-r--r-- | test/functional/legacy/options_spec.lua | 47 | ||||
-rw-r--r-- | test/functional/lua/buffer_updates_spec.lua | 54 | ||||
-rw-r--r-- | test/functional/plugin/lsp/diagnostic_spec.lua | 63 | ||||
-rw-r--r-- | test/functional/plugin/lsp_spec.lua | 39 | ||||
-rw-r--r-- | test/functional/ui/decorations_spec.lua | 95 | ||||
-rw-r--r-- | test/functional/ui/fold_spec.lua | 367 |
8 files changed, 700 insertions, 16 deletions
diff --git a/test/functional/ex_cmds/source_spec.lua b/test/functional/ex_cmds/source_spec.lua new file mode 100644 index 0000000000..16d0dfb6a1 --- /dev/null +++ b/test/functional/ex_cmds/source_spec.lua @@ -0,0 +1,47 @@ +local helpers = require('test.functional.helpers')(after_each) +local command = helpers.command +local insert = helpers.insert +local eq = helpers.eq +local clear = helpers.clear +local meths = helpers.meths +local feed = helpers.feed +local feed_command = helpers.feed_command + +describe(':source', function() + before_each(function() + clear() + end) + + it('current buffer', function() + insert('let a = 2') + command('source') + eq('2', meths.exec('echo a', true)) + end) + + it('selection in current buffer', function() + insert( + 'let a = 2\n'.. + 'let a = 3\n'.. + 'let a = 4\n') + + -- Source the 2nd line only + feed('ggjV') + feed_command(':source') + eq('3', meths.exec('echo a', true)) + + -- Source from 2nd line to end of file + feed('ggjVG') + feed_command(':source') + eq('4', meths.exec('echo a', true)) + end) + + it('multiline heredoc command', function() + insert( + 'lua << EOF\n'.. + 'y = 4\n'.. + 'EOF\n') + + command('source') + eq('4', meths.exec('echo luaeval("y")', true)) + end) +end) diff --git a/test/functional/fixtures/fake-lsp-server.lua b/test/functional/fixtures/fake-lsp-server.lua index 252db88b6b..3bbb4c4517 100644 --- a/test/functional/fixtures/fake-lsp-server.lua +++ b/test/functional/fixtures/fake-lsp-server.lua @@ -70,11 +70,11 @@ local function expect_notification(method, params, ...) ..., "expect_notification", "message") end -local function expect_request(method, callback, ...) +local function expect_request(method, handler, ...) local req = read_message() assert_eq(method, req.method, ..., "expect_request", "method") - local err, result = callback(req.params) + local err, result = handler(req.params) respond(req.id, err, result) end diff --git a/test/functional/legacy/options_spec.lua b/test/functional/legacy/options_spec.lua index 1db7afc7a7..d7f5df3a1e 100644 --- a/test/functional/legacy/options_spec.lua +++ b/test/functional/legacy/options_spec.lua @@ -1,6 +1,10 @@ +-- See also: src/nvim/testdir/test_options.vim local helpers = require('test.functional.helpers')(after_each) local command, clear = helpers.command, helpers.clear local source, expect = helpers.source, helpers.expect +local exc_exec = helpers.exc_exec; +local matches = helpers.matches; +local Screen = require('test.functional.ui.screen') describe('options', function() setup(clear) @@ -11,7 +15,7 @@ describe('options', function() end) describe('set', function() - setup(clear) + before_each(clear) it("should keep two comma when 'path' is changed", function() source([[ @@ -24,4 +28,45 @@ describe('set', function() foo,,bar]]) end) + + it('winminheight works', function() + local screen = Screen.new(20, 11) + screen:attach() + source([[ + set wmh=0 stal=2 + below sp | wincmd _ + below sp | wincmd _ + below sp | wincmd _ + below sp + ]]) + matches('E36: Not enough room', exc_exec('set wmh=1')) + end) + + it('scroll works', function() + local screen = Screen.new(42, 16) + screen:attach() + source([[ + set scroll=2 + set laststatus=2 + ]]) + command('verbose set scroll?') + screen:expect([[ + | + ~ | + ~ | + ~ | + ~ | + ~ | + ~ | + ~ | + ~ | + ~ | + ~ | + ~ | + | + scroll=7 | + Last set from changed window size | + Press ENTER or type command to continue^ | + ]]) + end) end) diff --git a/test/functional/lua/buffer_updates_spec.lua b/test/functional/lua/buffer_updates_spec.lua index 8c5e936906..7a6b5be8bc 100644 --- a/test/functional/lua/buffer_updates_spec.lua +++ b/test/functional/lua/buffer_updates_spec.lua @@ -666,8 +666,62 @@ describe('lua: nvim_buf_attach on_bytes', function() } end) + it("sends events when undoing with undofile", function() + write_file("Xtest-undofile", dedent([[ + 12345 + hello world + ]])) + + command("e! Xtest-undofile") + command("set undodir=. | set undofile") + + local ns = helpers.request('nvim_create_namespace', "ns1") + meths.buf_set_extmark(0, ns, 0, 0, {}) + + eq({"12345", "hello world"}, meths.buf_get_lines(0, 0, -1, true)) + + -- splice + feed("gg0d2l") + + eq({"345", "hello world"}, meths.buf_get_lines(0, 0, -1, true)) + + -- move + command(".m+1") + + eq({"hello world", "345"}, meths.buf_get_lines(0, 0, -1, true)) + + -- reload undofile and undo changes + command("w") + command("set noundofile") + command("bw!") + command("e! Xtest-undofile") + + command("set undofile") + + local check_events = setup_eventcheck(verify, nil) + + feed("u") + eq({"345", "hello world"}, meths.buf_get_lines(0, 0, -1, true)) + + check_events { + { "test1", "bytes", 2, 6, 1, 0, 12, 1, 0, 4, 0, 0, 0 }, + { "test1", "bytes", 2, 6, 0, 0, 0, 0, 0, 0, 1, 0, 4 } + } + + feed("u") + eq({"12345", "hello world"}, meths.buf_get_lines(0, 0, -1, true)) + + check_events { + { "test1", "bytes", 2, 8, 0, 0, 0, 0, 0, 0, 0, 2, 2 } + } + command("bw!") + end) + + teardown(function() os.remove "Xtest-reload" + os.remove "Xtest-undofile" + os.remove ".Xtest-undofile.un~" end) end diff --git a/test/functional/plugin/lsp/diagnostic_spec.lua b/test/functional/plugin/lsp/diagnostic_spec.lua index 4705a76465..8c91c4ab2c 100644 --- a/test/functional/plugin/lsp/diagnostic_spec.lua +++ b/test/functional/plugin/lsp/diagnostic_spec.lua @@ -208,6 +208,69 @@ describe('vim.lsp.diagnostic', function() ]])) end) + describe('reset', function() + it('diagnostic count is 0 and displayed diagnostics are 0 after call', function() + -- 1 Error (1) + -- 1 Warning (2) + -- 1 Warning (2) + 1 Warning (1) + -- 2 highlights and 2 underlines (since error) + -- 1 highlight + 1 underline + local all_highlights = {1, 1, 2, 4, 2} + eq(all_highlights, exec_lua [[ + local server_1_diags = { + make_error("Error 1", 1, 1, 1, 5), + make_warning("Warning on Server 1", 2, 1, 2, 5), + } + local server_2_diags = { + make_warning("Warning 1", 2, 1, 2, 5), + } + + vim.lsp.diagnostic.on_publish_diagnostics(nil, nil, { uri = fake_uri, diagnostics = server_1_diags }, 1) + vim.lsp.diagnostic.on_publish_diagnostics(nil, nil, { uri = fake_uri, diagnostics = server_2_diags }, 2) + return { + vim.lsp.diagnostic.get_count(diagnostic_bufnr, "Error", 1), + vim.lsp.diagnostic.get_count(diagnostic_bufnr, "Warning", 2), + vim.lsp.diagnostic.get_count(diagnostic_bufnr, "Warning", nil), + count_of_extmarks_for_client(diagnostic_bufnr, 1), + count_of_extmarks_for_client(diagnostic_bufnr, 2), + } + ]]) + + -- Reset diagnostics from server 1 + exec_lua([[ vim.lsp.diagnostic.reset(1, { [ diagnostic_bufnr ] = { [ 1 ] = true ; [ 2 ] = true } } )]]) + + -- Make sure we have the right diagnostic count + eq({0, 1, 1, 0, 2} , exec_lua [[ + local diagnostic_count = {} + vim.wait(100, function () diagnostic_count = { + vim.lsp.diagnostic.get_count(diagnostic_bufnr, "Error", 1), + vim.lsp.diagnostic.get_count(diagnostic_bufnr, "Warning", 2), + vim.lsp.diagnostic.get_count(diagnostic_bufnr, "Warning", nil), + count_of_extmarks_for_client(diagnostic_bufnr, 1), + count_of_extmarks_for_client(diagnostic_bufnr, 2), + } end ) + return diagnostic_count + ]]) + + -- Reset diagnostics from server 2 + exec_lua([[ vim.lsp.diagnostic.reset(2, { [ diagnostic_bufnr ] = { [ 1 ] = true ; [ 2 ] = true } } )]]) + + -- Make sure we have the right diagnostic count + eq({0, 0, 0, 0, 0}, exec_lua [[ + local diagnostic_count = {} + vim.wait(100, function () diagnostic_count = { + vim.lsp.diagnostic.get_count(diagnostic_bufnr, "Error", 1), + vim.lsp.diagnostic.get_count(diagnostic_bufnr, "Warning", 2), + vim.lsp.diagnostic.get_count(diagnostic_bufnr, "Warning", nil), + count_of_extmarks_for_client(diagnostic_bufnr, 1), + count_of_extmarks_for_client(diagnostic_bufnr, 2), + } end ) + return diagnostic_count + ]]) + + end) + end) + describe('get_next_diagnostic_pos', function() it('can find the next pos with only one client', function() eq({1, 1}, exec_lua [[ diff --git a/test/functional/plugin/lsp_spec.lua b/test/functional/plugin/lsp_spec.lua index 981e2a96a8..8ac81daeef 100644 --- a/test/functional/plugin/lsp_spec.lua +++ b/test/functional/plugin/lsp_spec.lua @@ -41,10 +41,10 @@ local function fake_lsp_server_setup(test_name, timeout_ms) "-c", string.format("lua TIMEOUT = %d", timeout), "-c", "luafile "..fixture_filename, }; - callbacks = setmetatable({}, { + handlers = setmetatable({}, { __index = function(t, method) return function(...) - return vim.rpcrequest(1, 'callback', ...) + return vim.rpcrequest(1, 'handler', ...) end end; }); @@ -89,7 +89,7 @@ local function test_rpc_server(config) end return NIL end - if method == 'callback' then + if method == 'handler' then if config.on_callback then config.on_callback(unpack(args)) end @@ -205,7 +205,7 @@ describe('LSP', function() } test_rpc_server { test_name = "basic_init"; - on_init = function(client, _init_result) + on_init = function(client, _) -- client is a dummy object which will queue up commands to be run -- once the server initializes. It can't accept lua callbacks or -- other types that may be unserializable for now. @@ -333,6 +333,7 @@ describe('LSP', function() client.stop() local full_kind = exec_lua("return require'vim.lsp.protocol'.TextDocumentSyncKind.Full") eq(full_kind, client.resolved_capabilities().text_document_did_change) + eq(true, client.resolved_capabilities().text_document_save) end; on_exit = function(code, signal) eq(0, code, "exit code", fake_lsp_logfile) @@ -386,7 +387,7 @@ describe('LSP', function() exec_lua([=[ BUFFER = vim.api.nvim_get_current_buf() lsp.buf_attach_client(BUFFER, TEST_RPC_CLIENT_ID) - vim.lsp.callbacks['textDocument/typeDefinition'] = function(err, method) + vim.lsp.handlers['textDocument/typeDefinition'] = function(err, method) vim.lsp._last_lsp_callback = { err = err; method = method } end vim.lsp._unsupported_method = function(method) @@ -425,7 +426,7 @@ describe('LSP', function() test_name = "capabilities_for_client_supports_method"; on_setup = function() exec_lua([=[ - vim.lsp.callbacks['textDocument/typeDefinition'] = function(err, method) + vim.lsp.handlers['textDocument/typeDefinition'] = function(err, method) vim.lsp._last_lsp_callback = { err = err; method = method } end vim.lsp._unsupported_method = function(method) @@ -897,8 +898,8 @@ describe('LSP', function() eq(0, code, "exit code", fake_lsp_logfile) eq(0, signal, "exit signal", fake_lsp_logfile) end; - on_callback = function(err, method, params, client_id) - eq(table.remove(expected_callbacks), {err, method, params, client_id}, "expected callback") + on_handler = function(err, method, params, client_id) + eq(table.remove(expected_callbacks), {err, method, params, client_id}, "expected handler") end; } end) @@ -1032,6 +1033,20 @@ describe('LSP', function() 'å ä ɧ 汉语 ↥ 🤦 🦄'; }, buf_lines(1)) end) + it('applies text edits at the end of the document', function() + local edits = { + make_edit(5, 0, 5, 0, "foobar"); + } + exec_lua('vim.lsp.util.apply_text_edits(...)', edits, 1) + eq({ + 'First line of text'; + 'Second line of text'; + 'Third line of text'; + 'Fourth line of text'; + 'å å ɧ 汉语 ↥ 🤦 🦄'; + 'foobar'; + }, buf_lines(1)) + end) describe('with LSP end line after what Vim considers to be the end line', function() it('applies edits when the last linebreak is considered a new line', function() @@ -1765,8 +1780,8 @@ describe('LSP', function() uri = "file:///src/main.rs" } } } - local callback = require'vim.lsp.handlers'['callHierarchy/outgoingCalls'] - callback(nil, nil, rust_analyzer_response) + local handler = require'vim.lsp.handlers'['callHierarchy/outgoingCalls'] + handler(nil, nil, rust_analyzer_response) return vim.fn.getqflist() ]=]) @@ -1837,8 +1852,8 @@ describe('LSP', function() } } } } - local callback = require'vim.lsp.handlers'['callHierarchy/incomingCalls'] - callback(nil, nil, rust_analyzer_response) + local handler = require'vim.lsp.handlers'['callHierarchy/incomingCalls'] + handler(nil, nil, rust_analyzer_response) return vim.fn.getqflist() ]=]) diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua index 781fdf7203..7a87521a6b 100644 --- a/test/functional/ui/decorations_spec.lua +++ b/test/functional/ui/decorations_spec.lua @@ -302,3 +302,98 @@ describe('decorations providers', function() ]]} end) end) + +describe('extmark decorations', function() + local screen + before_each( function() + clear() + screen = Screen.new(50, 15) + screen:attach() + screen:set_default_attr_ids { + [1] = {bold=true, foreground=Screen.colors.Blue}; + [2] = {foreground = Screen.colors.Brown}; + [3] = {bold = true, foreground = Screen.colors.SeaGreen}; + [4] = {background = Screen.colors.Red1, foreground = Screen.colors.Gray100}; + } + end) + + it('can have virtual text of overlay style', function() + insert [[ +for _,item in ipairs(items) do + local text, hl_id_cell, count = unpack(item) + if hl_id_cell ~= nil then + hl_id = hl_id_cell + end + for _ = 1, (count or 1) do + local cell = line[colpos] + cell.text = text + cell.hl_id = hl_id + colpos = colpos+1 + end +end]] + feed 'gg' + + local ns = meths.create_namespace 'test' + for i = 1,9 do + meths.buf_set_extmark(0, ns, i, 0, { virt_text={{'|', 'LineNr'}}, virt_text_pos='overlay'}) + if i == 3 or (i >= 6 and i <= 9) then + meths.buf_set_extmark(0, ns, i, 4, { virt_text={{'|', 'NonText'}}, virt_text_pos='overlay'}) + end + end + meths.buf_set_extmark(0, ns, 9, 10, { virt_text={{'foo'}, {'bar', 'MoreMsg'}, {'!!', 'ErrorMsg'}}, virt_text_pos='overlay'}) + + -- can "float" beyond end of line + meths.buf_set_extmark(0, ns, 5, 28, { virt_text={{'loopy', 'ErrorMsg'}}, virt_text_pos='overlay'}) + -- bound check: right edge of window + meths.buf_set_extmark(0, ns, 2, 26, { virt_text={{'bork bork bork ' }, {'bork bork bork', 'ErrorMsg'}}, virt_text_pos='overlay'}) + + screen:expect{grid=[[ + ^for _,item in ipairs(items) do | + {2:|} local text, hl_id_cell, count = unpack(item) | + {2:|} if hl_id_cell ~= nil tbork bork bork {4:bork bork}| + {2:|} {1:|} hl_id = hl_id_cell | + {2:|} end | + {2:|} for _ = 1, (count or 1) {4:loopy} | + {2:|} {1:|} local cell = line[colpos] | + {2:|} {1:|} cell.text = text | + {2:|} {1:|} cell.hl_id = hl_id | + {2:|} {1:|} cofoo{3:bar}{4:!!}olpos+1 | + end | + end | + {1:~ }| + {1:~ }| + | + ]]} + + + -- handles broken lines + screen:try_resize(22, 25) + screen:expect{grid=[[ + ^for _,item in ipairs(i| + tems) do | + {2:|} local text, hl_id_| + cell, count = unpack(i| + tem) | + {2:|} if hl_id_cell ~= n| + il tbork bork bork {4:bor}| + {2:|} {1:|} hl_id = hl_id_| + cell | + {2:|} end | + {2:|} for _ = 1, (count | + or 1) {4:loopy} | + {2:|} {1:|} local cell = l| + ine[colpos] | + {2:|} {1:|} cell.text = te| + xt | + {2:|} {1:|} cell.hl_id = h| + l_id | + {2:|} {1:|} cofoo{3:bar}{4:!!}olpo| + s+1 | + end | + end | + {1:~ }| + {1:~ }| + | + ]]} + end) +end) diff --git a/test/functional/ui/fold_spec.lua b/test/functional/ui/fold_spec.lua index 6ce8b33a63..d3b1d33956 100644 --- a/test/functional/ui/fold_spec.lua +++ b/test/functional/ui/fold_spec.lua @@ -38,7 +38,9 @@ describe("folded lines", function() [6] = {background = Screen.colors.Yellow}, [7] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.WebGray}, [8] = {foreground = Screen.colors.Brown }, - [9] = {bold = true, foreground = Screen.colors.Brown} + [9] = {bold = true, foreground = Screen.colors.Brown}, + [10] = {background = Screen.colors.LightGrey, underline = true}, + [11] = {bold=true}, }) end) @@ -290,6 +292,369 @@ describe("folded lines", function() end end) + it("works with split", function() + insert([[ + aa + bb + cc + dd + ee + ff]]) + feed_command('2') + command("set foldcolumn=1") + feed('zf3j') + feed_command('1') + feed('zf2j') + feed('zO') + feed_command("rightbelow new") + insert([[ + aa + bb + cc + dd + ee + ff]]) + feed_command('2') + command("set foldcolumn=1") + feed('zf3j') + feed_command('1') + feed('zf2j') + if multigrid then + meths.input_mouse('left', 'press', '', 4, 0, 0) + screen:expect([[ + ## grid 1 + [2:---------------------------------------------]| + [2:---------------------------------------------]| + {2:[No Name] [+] }| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + {3:[No Name] [+] }| + [3:---------------------------------------------]| + ## grid 2 + {7:-}aa | + {7:-}bb | + ## grid 3 + :1 | + ## grid 4 + {7:-}^aa | + {7:+}{5:+--- 4 lines: bb···························}| + {7:│}ff | + ]]) + else + meths.input_mouse('left', 'press', '', 0, 3, 0) + screen:expect([[ + {7:-}aa | + {7:-}bb | + {2:[No Name] [+] }| + {7:-}^aa | + {7:+}{5:+--- 4 lines: bb···························}| + {7:│}ff | + {3:[No Name] [+] }| + :1 | + ]]) + end + + if multigrid then + meths.input_mouse('left', 'press', '', 4, 1, 0) + screen:expect([[ + ## grid 1 + [2:---------------------------------------------]| + [2:---------------------------------------------]| + {2:[No Name] [+] }| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + {3:[No Name] [+] }| + [3:---------------------------------------------]| + ## grid 2 + {7:-}aa | + {7:-}bb | + ## grid 3 + :1 | + ## grid 4 + {7:-}^aa | + {7:-}bb | + {7:2}cc | + ]]) + else + meths.input_mouse('left', 'press', '', 0, 4, 0) + screen:expect([[ + {7:-}aa | + {7:-}bb | + {2:[No Name] [+] }| + {7:-}^aa | + {7:-}bb | + {7:2}cc | + {3:[No Name] [+] }| + :1 | + ]]) + end + + if multigrid then + meths.input_mouse('left', 'press', '', 2, 1, 0) + screen:expect([[ + ## grid 1 + [2:---------------------------------------------]| + [2:---------------------------------------------]| + {3:[No Name] [+] }| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + {2:[No Name] [+] }| + [3:---------------------------------------------]| + ## grid 2 + {7:-}aa | + {7:+}{5:^+--- 4 lines: bb···························}| + ## grid 3 + :1 | + ## grid 4 + {7:-}aa | + {7:-}bb | + {7:2}cc | + ]]) + else + meths.input_mouse('left', 'press', '', 0, 1, 0) + screen:expect([[ + {7:-}aa | + {7:+}{5:^+--- 4 lines: bb···························}| + {3:[No Name] [+] }| + {7:-}aa | + {7:-}bb | + {7:2}cc | + {2:[No Name] [+] }| + :1 | + ]]) + end + + if multigrid then + meths.input_mouse('left', 'press', '', 2, 0, 0) + screen:expect([[ + ## grid 1 + [2:---------------------------------------------]| + [2:---------------------------------------------]| + {3:[No Name] [+] }| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + {2:[No Name] [+] }| + [3:---------------------------------------------]| + ## grid 2 + {7:+}{5:^+-- 6 lines: aa····························}| + {1:~ }| + ## grid 3 + :1 | + ## grid 4 + {7:-}aa | + {7:-}bb | + {7:2}cc | + ]]) + else + meths.input_mouse('left', 'press', '', 0, 0, 0) + screen:expect([[ + {7:+}{5:^+-- 6 lines: aa····························}| + {1:~ }| + {3:[No Name] [+] }| + {7:-}aa | + {7:-}bb | + {7:2}cc | + {2:[No Name] [+] }| + :1 | + ]]) + end + end) + + it("works with tab", function() + insert([[ + aa + bb + cc + dd + ee + ff]]) + feed_command('2') + command("set foldcolumn=2") + feed('zf3j') + feed_command('1') + feed('zf2j') + feed('zO') + feed_command("tab split") + if multigrid then + meths.input_mouse('left', 'press', '', 4, 1, 1) + screen:expect([[ + ## grid 1 + {10: + [No Name] }{11: + [No Name] }{2: }{10:X}| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + [3:---------------------------------------------]| + ## grid 2 (hidden) + {7:- }aa | + {7:│-}bb | + {7:││}cc | + {7:││}dd | + {7:││}ee | + {7:│ }ff | + {1:~ }| + ## grid 3 + :tab split | + ## grid 4 + {7:- }^aa | + {7:│+}{5:+--- 4 lines: bb··························}| + {7:│ }ff | + {1:~ }| + {1:~ }| + {1:~ }| + ]]) + else + meths.input_mouse('left', 'press', '', 0, 2, 1) + screen:expect([[ + {10: + [No Name] }{11: + [No Name] }{2: }{10:X}| + {7:- }^aa | + {7:│+}{5:+--- 4 lines: bb··························}| + {7:│ }ff | + {1:~ }| + {1:~ }| + {1:~ }| + :tab split | + ]]) + end + + if multigrid then + meths.input_mouse('left', 'press', '', 4, 0, 0) + screen:expect([[ + ## grid 1 + {10: + [No Name] }{11: + [No Name] }{2: }{10:X}| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + [4:---------------------------------------------]| + [3:---------------------------------------------]| + ## grid 2 (hidden) + {7:- }aa | + {7:│-}bb | + {7:││}cc | + {7:││}dd | + {7:││}ee | + {7:│ }ff | + {1:~ }| + ## grid 3 + :tab split | + ## grid 4 + {7:+ }{5:^+-- 6 lines: aa···························}| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ]]) + else + meths.input_mouse('left', 'press', '', 0, 1, 0) + screen:expect([[ + {10: + [No Name] }{11: + [No Name] }{2: }{10:X}| + {7:+ }{5:^+-- 6 lines: aa···························}| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + :tab split | + ]]) + end + + feed_command("tabnext") + if multigrid then + meths.input_mouse('left', 'press', '', 2, 1, 1) + screen:expect([[ + ## grid 1 + {11: + [No Name] }{10: + [No Name] }{2: }{10:X}| + [2:---------------------------------------------]| + [2:---------------------------------------------]| + [2:---------------------------------------------]| + [2:---------------------------------------------]| + [2:---------------------------------------------]| + [2:---------------------------------------------]| + [3:---------------------------------------------]| + ## grid 2 + {7:- }^aa | + {7:│+}{5:+--- 4 lines: bb··························}| + {7:│ }ff | + {1:~ }| + {1:~ }| + {1:~ }| + ## grid 3 + :tabnext | + ## grid 4 (hidden) + {7:+ }{5:+-- 6 lines: aa···························}| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ]]) + else + meths.input_mouse('left', 'press', '', 0, 2, 1) + screen:expect([[ + {11: + [No Name] }{10: + [No Name] }{2: }{10:X}| + {7:- }^aa | + {7:│+}{5:+--- 4 lines: bb··························}| + {7:│ }ff | + {1:~ }| + {1:~ }| + {1:~ }| + :tabnext | + ]]) + end + + if multigrid then + meths.input_mouse('left', 'press', '', 2, 0, 0) + screen:expect([[ + ## grid 1 + {11: + [No Name] }{10: + [No Name] }{2: }{10:X}| + [2:---------------------------------------------]| + [2:---------------------------------------------]| + [2:---------------------------------------------]| + [2:---------------------------------------------]| + [2:---------------------------------------------]| + [2:---------------------------------------------]| + [3:---------------------------------------------]| + ## grid 2 + {7:+ }{5:^+-- 6 lines: aa···························}| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ## grid 3 + :tabnext | + ## grid 4 (hidden) + {7:+ }{5:+-- 6 lines: aa···························}| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + ]]) + else + meths.input_mouse('left', 'press', '', 0, 1, 0) + screen:expect([[ + {11: + [No Name] }{10: + [No Name] }{2: }{10:X}| + {7:+ }{5:^+-- 6 lines: aa···························}| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + :tabnext | + ]]) + end + end) + it("works with multibyte text", function() -- Currently the only allowed value of 'maxcombine' eq(6, meths.get_option('maxcombine')) |