aboutsummaryrefslogtreecommitdiff
path: root/test/functional/vimscript
diff options
context:
space:
mode:
authorEvgeni Chasnovski <evgeni.chasnovski@gmail.com>2022-06-19 16:08:43 +0300
committerEvgeni Chasnovski <evgeni.chasnovski@gmail.com>2022-06-23 10:34:02 +0300
commit9f28eddfab368697c21e6628fdf55af5ec4f4c39 (patch)
treeba305b2d2786160d882d14bcaef22d0ea727a02a /test/functional/vimscript
parent7b2b44bce4bff85d9fd1bef09d294ddb889056e4 (diff)
downloadrneovim-9f28eddfab368697c21e6628fdf55af5ec4f4c39.tar.gz
rneovim-9f28eddfab368697c21e6628fdf55af5ec4f4c39.tar.bz2
rneovim-9f28eddfab368697c21e6628fdf55af5ec4f4c39.zip
fix(float): make `screen*()` functions respect floating windows
Resolves #19013.
Diffstat (limited to 'test/functional/vimscript')
-rw-r--r--test/functional/vimscript/screenchar_spec.lua69
1 files changed, 69 insertions, 0 deletions
diff --git a/test/functional/vimscript/screenchar_spec.lua b/test/functional/vimscript/screenchar_spec.lua
new file mode 100644
index 0000000000..767e3c57ef
--- /dev/null
+++ b/test/functional/vimscript/screenchar_spec.lua
@@ -0,0 +1,69 @@
+local helpers = require('test.functional.helpers')(after_each)
+local clear, eq, neq = helpers.clear, helpers.eq, helpers.neq
+local command, meths, funcs = helpers.command, helpers.meths, helpers.funcs
+local tbl_deep_extend = helpers.tbl_deep_extend
+
+-- Set up two overlapping floating windows
+local setup_floating_windows = function()
+ local base_opts = {
+ relative = 'editor',
+ height = 1,
+ width = 2,
+ anchor = 'NW',
+ style = 'minimal',
+ border = 'none',
+ }
+
+ local bufnr_1 = meths.create_buf(false, true)
+ meths.buf_set_lines(bufnr_1, 0, -1, true, { 'aa' })
+ local opts_1 = tbl_deep_extend('force', { row = 0, col = 0, zindex = 11 }, base_opts)
+ meths.open_win(bufnr_1, false, opts_1)
+
+ local bufnr_2 = meths.create_buf(false, true)
+ meths.buf_set_lines(bufnr_2, 0, -1, true, { 'bb' })
+ local opts_2 = tbl_deep_extend('force', { row = 0, col = 1, zindex = 10 }, base_opts)
+ meths.open_win(bufnr_2, false, opts_2)
+
+ command('redraw')
+end
+
+describe('screenchar() and family respect floating windows', function()
+ before_each(function()
+ clear()
+ -- These commands result into visible text `aabc`.
+ -- `aab` - from floating windows, `c` - from text in regular window.
+ meths.buf_set_lines(0, 0, -1, true, { 'cccc' })
+ setup_floating_windows()
+ end)
+
+ it('screenattr()', function()
+ local attr_1 = funcs.screenattr(1, 1)
+ local attr_2 = funcs.screenattr(1, 2)
+ local attr_3 = funcs.screenattr(1, 3)
+ local attr_4 = funcs.screenattr(1, 4)
+ eq(attr_1, attr_2)
+ eq(attr_1, attr_3)
+ neq(attr_1, attr_4)
+ end)
+
+ it('screenchar()', function()
+ eq(97, funcs.screenchar(1, 1))
+ eq(97, funcs.screenchar(1, 2))
+ eq(98, funcs.screenchar(1, 3))
+ eq(99, funcs.screenchar(1, 4))
+ end)
+
+ it('screenchars()', function()
+ eq({ 97 }, funcs.screenchars(1, 1))
+ eq({ 97 }, funcs.screenchars(1, 2))
+ eq({ 98 }, funcs.screenchars(1, 3))
+ eq({ 99 }, funcs.screenchars(1, 4))
+ end)
+
+ it('screenstring()', function()
+ eq('a', funcs.screenstring(1, 1))
+ eq('a', funcs.screenstring(1, 2))
+ eq('b', funcs.screenstring(1, 3))
+ eq('c', funcs.screenstring(1, 4))
+ end)
+end)