aboutsummaryrefslogtreecommitdiff
path: root/test/functional/api/window_spec.lua
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2014-10-26 16:10:36 +0100
committerBjörn Linse <bjorn.linse@gmail.com>2014-11-01 12:05:36 +0100
commitd6da42475888bae48104d1de98fcc9640b619de3 (patch)
tree070714ceb34d1534544075298f37ab826019e160 /test/functional/api/window_spec.lua
parentb34705bf5fd807203b9cb07d91755bd09d808d18 (diff)
downloadrneovim-d6da42475888bae48104d1de98fcc9640b619de3.tar.gz
rneovim-d6da42475888bae48104d1de98fcc9640b619de3.tar.bz2
rneovim-d6da42475888bae48104d1de98fcc9640b619de3.zip
test/api: add test for set_cursor always updating the screen
Diffstat (limited to 'test/functional/api/window_spec.lua')
-rw-r--r--test/functional/api/window_spec.lua69
1 files changed, 67 insertions, 2 deletions
diff --git a/test/functional/api/window_spec.lua b/test/functional/api/window_spec.lua
index a3814cce0f..4c867d2f5d 100644
--- a/test/functional/api/window_spec.lua
+++ b/test/functional/api/window_spec.lua
@@ -1,9 +1,28 @@
-- Sanity checks for window_* API calls via msgpack-rpc
local helpers = require('test.functional.helpers')
local clear, nvim, buffer, curbuf, curbuf_contents, window, curwin, eq, neq,
- ok = helpers.clear, helpers.nvim, helpers.buffer, helpers.curbuf,
+ ok, feed, rawfeed, insert, eval = helpers.clear, helpers.nvim, helpers.buffer, helpers.curbuf,
helpers.curbuf_contents, helpers.window, helpers.curwin, helpers.eq,
- helpers.neq, helpers.ok
+ helpers.neq, helpers.ok, helpers.feed, helpers.rawfeed, helpers.insert, helpers.eval
+
+-- check if str is visible at the beginning of some line
+local function is_visible(str)
+ local slen = string.len(str)
+ local nlines = eval("&lines")
+ for i = 1,nlines do
+ local iseq = true
+ for j = 1,slen do
+ if string.byte(str,j) ~= eval("screenchar("..i..","..j..")") then
+ iseq = false
+ break
+ end
+ end
+ if iseq then
+ return true
+ end
+ end
+ return false
+end
describe('window_* functions', function()
before_each(clear)
@@ -29,6 +48,52 @@ describe('window_* functions', function()
nvim('command', 'normal i dumb')
eq('typing\n some dumb text', curbuf_contents())
end)
+
+ it('updates the screen, and also when the window is unfocused', function()
+ insert("prologue")
+ feed('100o<esc>')
+ insert("epilogue")
+ win = curwin()
+ feed('gg')
+
+ -- cursor position is at beginning
+ eq({1, 0}, window('get_cursor', win))
+ eq(true, is_visible("prologue"))
+ eq(false, is_visible("epilogue"))
+
+ -- move cursor to end
+ window('set_cursor', win, {101, 0})
+ eq(false, is_visible("prologue"))
+ eq(true, is_visible("epilogue"))
+
+ -- move cursor to the beginning again
+ window('set_cursor', win, {1, 0})
+ eq(true, is_visible("prologue"))
+ eq(false, is_visible("epilogue"))
+
+ -- move focus to new window
+ nvim('command',"new")
+ neq(win, curwin())
+
+ -- sanity check, cursor position is kept
+ eq({1, 0}, window('get_cursor', win))
+ eq(true, is_visible("prologue"))
+ eq(false, is_visible("epilogue"))
+
+ -- move cursor to end
+ window('set_cursor', win, {101, 0})
+ eq(false, is_visible("prologue"))
+ eq(true, is_visible("epilogue"))
+
+ -- move cursor to the beginning again
+ window('set_cursor', win, {1, 0})
+ eq(true, is_visible("prologue"))
+ eq(false, is_visible("epilogue"))
+
+ -- curwin didn't change back
+ neq(win, curwin())
+ end)
+
end)
describe('{get,set}_height', function()