aboutsummaryrefslogtreecommitdiff
path: root/test/functional/ui/multigrid_spec.lua
diff options
context:
space:
mode:
authorUtkarsh Maheshwari <utkarshme96@gmail.com>2018-12-18 12:50:44 +0100
committerBjörn Linse <bjorn.linse@gmail.com>2018-12-31 12:44:22 +0100
commitebe16cd9bdd214955469f4db4f1c4a2c11724b1d (patch)
treec16e24b07200ab5c6a34c7ee8d37e24f0a60b1ea /test/functional/ui/multigrid_spec.lua
parent1f8afe15a4670b237a4e97d8038ddd75c7d9d227 (diff)
downloadrneovim-ebe16cd9bdd214955469f4db4f1c4a2c11724b1d.tar.gz
rneovim-ebe16cd9bdd214955469f4db4f1c4a2c11724b1d.tar.bz2
rneovim-ebe16cd9bdd214955469f4db4f1c4a2c11724b1d.zip
multigrid: add multigrid screen tests
Diffstat (limited to 'test/functional/ui/multigrid_spec.lua')
-rw-r--r--test/functional/ui/multigrid_spec.lua932
1 files changed, 932 insertions, 0 deletions
diff --git a/test/functional/ui/multigrid_spec.lua b/test/functional/ui/multigrid_spec.lua
new file mode 100644
index 0000000000..6a4d956404
--- /dev/null
+++ b/test/functional/ui/multigrid_spec.lua
@@ -0,0 +1,932 @@
+local helpers = require('test.functional.helpers')(after_each)
+local Screen = require('test.functional.ui.screen')
+local spawn, set_session = helpers.spawn, helpers.set_session
+local feed, command, insert = helpers.feed, helpers.command, helpers.insert
+local eq = helpers.eq
+
+-- Note 1:
+-- Global grid i.e. "grid 1" shows some unwanted elements because they are
+-- not cleared when they are expected to be drawn over by window grids.
+
+describe('multigrid screen', function()
+ local screen
+ local nvim_argv = {helpers.nvim_prog, '-u', 'NONE', '-i', 'NONE', '-N',
+ '--cmd', 'set shortmess+=I background=light noswapfile belloff= noshowcmd noruler',
+ '--embed'}
+
+ before_each(function()
+ local screen_nvim = spawn(nvim_argv)
+ set_session(screen_nvim)
+ screen = Screen.new()
+ screen:attach({ext_multigrid=true})
+ screen:set_default_attr_ids({
+ [1] = {bold = true, foreground = Screen.colors.Blue1},
+ [2] = {foreground = Screen.colors.Magenta},
+ [3] = {foreground = Screen.colors.Brown, bold = true},
+ [4] = {foreground = Screen.colors.SlateBlue},
+ [5] = {bold = true, foreground = Screen.colors.SlateBlue},
+ [6] = {foreground = Screen.colors.Cyan4},
+ [7] = {bold = true},
+ [8] = {underline = true, bold = true, foreground = Screen.colors.SlateBlue},
+ [9] = {foreground = Screen.colors.SlateBlue, underline = true},
+ [10] = {foreground = Screen.colors.Red},
+ [11] = {bold = true, reverse = true},
+ [12] = {reverse = true},
+ [13] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.LightGrey},
+ })
+ screen.win_position = {}
+ end)
+
+ after_each(function()
+ screen:detach()
+ end)
+
+ it('default initial screen', function()
+ screen:expect([[
+ ## grid 1
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ {11:[No Name] }|
+ |
+ ## grid 2
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+
+ it('positions windows correctly', function()
+ command('vsplit')
+ screen:expect([[
+ ## grid 1
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {11:[No Name] }{12:[No Name] }|
+ |
+ ## grid 2
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 3
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]], nil, nil, function()
+ eq({
+ [2] = { win = 1000, startrow = 0, startcol = 27, width = 26, height = 12 },
+ [3] = { win = 1001, startrow = 0, startcol = 0, width = 26, height = 12 }
+ }, screen.win_position)
+ end)
+ command('wincmd l')
+ command('split')
+ screen:expect([[
+ ## grid 1
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│}{11:[No Name] }|
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:[No Name] [No Name] }|
+ |
+ ## grid 2
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 3
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 4
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]], nil, nil, function()
+ eq({
+ [2] = { win = 1000, startrow = 7, startcol = 27, width = 26, height = 5 },
+ [3] = { win = 1001, startrow = 0, startcol = 0, width = 26, height = 12 },
+ [4] = { win = 1002, startrow = 0, startcol = 27, width = 26, height = 6 }
+ }, screen.win_position)
+ end)
+ command('wincmd h')
+ command('q')
+ screen:expect([[
+ ## grid 1
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {11:[No Name] }|
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:[No Name] }|
+ |
+ ## grid 2
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 4
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]], nil, nil, function()
+ eq({
+ [2] = { win = 1000, startrow = 7, startcol = 0, width = 53, height = 5 },
+ [4] = { win = 1002, startrow = 0, startcol = 0, width = 53, height = 6 }
+ }, screen.win_position)
+ end)
+ end)
+
+ describe('split', function ()
+ describe('horizontally', function ()
+ it('allocates grids', function ()
+ command('sp')
+ screen:expect([[
+ ## grid 1
+ |
+ |
+ |
+ |
+ |
+ |
+ {11:[No Name] }|
+ |
+ |
+ |
+ |
+ |
+ {12:[No Name] }|
+ |
+ ## grid 2
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 3
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+
+ it('resizes grids', function ()
+ command('sp')
+ command('resize 8')
+ -- see "Note 1" for info about why there are three statuslines
+ screen:expect([[
+ ## grid 1
+ |
+ |
+ |
+ |
+ |
+ |
+ {11:[No Name] }|
+ |
+ {11:[No Name] }|
+ |
+ |
+ |
+ {12:[No Name] }|
+ |
+ ## grid 2
+ |
+ {1:~ }|
+ {1:~ }|
+ ## grid 3
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+
+ it('splits vertically', function()
+ command('sp')
+ command('vsp')
+ command('vsp')
+ screen:expect([[
+ ## grid 1
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {11:[No Name] }{12:[No Name] [No Name] }|
+ |
+ |
+ |
+ |
+ |
+ {12:[No Name] }|
+ |
+ ## grid 2
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 3
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 4
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 5
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ insert('hello')
+ screen:expect([[
+ ## grid 1
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {11:[No Name] [+] }{12:[No Name] [+] [No Name] [+] }|
+ |
+ |
+ |
+ |
+ |
+ {12:[No Name] [+] }|
+ |
+ ## grid 2
+ hello |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 3
+ hello |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 4
+ hello |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 5
+ hell^o |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+ it('closes splits', function ()
+ command('sp')
+ command('q')
+ screen:expect([[
+ ## grid 1
+ |
+ |
+ |
+ |
+ |
+ |
+ {11:[No Name] }|
+ |
+ |
+ |
+ |
+ |
+ {11:[No Name] }|
+ |
+ ## grid 2
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+ end)
+
+ describe('vertically', function ()
+ it('allocates grids', function ()
+ command('vsp')
+ screen:expect([[
+ ## grid 1
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {11:[No Name] }{12:[No Name] }|
+ |
+ ## grid 2
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 3
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+ it('resizes grids', function ()
+ command('vsp')
+ command('vertical resize 10')
+ -- see "Note 1" for info about why there are two vseps
+ screen:expect([[
+ ## grid 1
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {12:│} {12:│} |
+ {11:<No Name] }{12:[No Name] }|
+ |
+ ## grid 2
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 3
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+ it('splits horizontally', function ()
+ command('vsp')
+ command('sp')
+ screen:expect([[
+ ## grid 1
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {11:[No Name] }{12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:[No Name] [No Name] }|
+ |
+ ## grid 2
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 3
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 4
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ insert('hello')
+ screen:expect([[
+ ## grid 1
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {11:[No Name] [+] }{12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:[No Name] [+] [No Name] [+] }|
+ |
+ ## grid 2
+ hello |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 3
+ hello |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ## grid 4
+ hell^o |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+ it('closes splits', function ()
+ command('vsp')
+ command('q')
+ -- see "Note 1" for info about why there is a vsep
+ screen:expect([[
+ ## grid 1
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {12:│} |
+ {11:[No Name] }|
+ |
+ ## grid 2
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+ end)
+ end)
+
+ describe('on resize', function ()
+ it('rebuilds all grids', function ()
+ screen:try_resize(25, 6)
+ screen:expect([[
+ ## grid 1
+ |
+ |
+ |
+ |
+ {11:[No Name] }|
+ |
+ ## grid 2
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+
+ it('has minimum width/height values', function()
+ screen:try_resize(1, 1)
+ screen:expect([[
+ ## grid 1
+ |
+ {11:[No Name] }|
+ |
+ ## grid 2
+ ^ |
+ ]])
+
+ feed('<esc>:ls')
+ screen:expect([[
+ ## grid 1
+ |
+ {11:[No Name] }|
+ :ls^ |
+ ## grid 2
+ |
+ ]])
+ end)
+ end)
+
+ describe('grid of smaller inner size', function()
+ it('is rendered correctly', function()
+ screen:try_resize_grid(2, 8, 5)
+ screen:expect([[
+ ## grid 1
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ {11:[No Name] }|
+ |
+ ## grid 2
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+ end)
+
+ describe('grid of bigger inner size', function()
+ it('is rendered correctly', function()
+ screen:try_resize_grid(2, 80, 20)
+ screen:expect([[
+ ## grid 1
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ {11:[No Name] }|
+ |
+ ## grid 2
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+ end)
+
+ describe('with resized grid', function()
+ before_each(function()
+ screen:try_resize_grid(2, 60, 20)
+ end)
+ it('gets written till grid width', function()
+ insert(('a'):rep(60).."\n")
+ screen:expect([[
+ ## grid 1
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ {11:[No Name] [+] }|
+ |
+ ## grid 2
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+
+ it('wraps with grid width', function()
+ insert(('b'):rep(80).."\n")
+ screen:expect([[
+ ## grid 1
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ {11:[No Name] [+] }|
+ |
+ ## grid 2
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb|
+ bbbbbbbbbbbbbbbbbbbb |
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+
+ it('displays messages with default grid width', function()
+ command('echomsg "this is a very very very very very very very very'..
+ ' long message"')
+ screen:expect([[
+ ## grid 1
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ {11:[No Name] }|
+ this is a very very very...ry very very long message |
+ ## grid 2
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+
+ it('creates folds with grid width', function()
+ insert('this is a fold\nthis is inside fold\nthis is outside fold')
+ feed('kzfgg')
+ screen:expect([[
+ ## grid 1
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ {11:[No Name] [+] }|
+ |
+ ## grid 2
+ {13:^+-- 2 lines: this is a fold································}|
+ this is outside fold |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ ]])
+ end)
+ end)
+end)