local helpers = require('test.functional.helpers')(after_each) local thelpers = require('test.functional.terminal.helpers') local feed_data = thelpers.feed_data local feed, clear = helpers.feed, helpers.clear local poke_eventloop = helpers.poke_eventloop local command = helpers.command local retry = helpers.retry local eq = helpers.eq local eval = helpers.eval local skip = helpers.skip local is_os = helpers.is_os describe(':terminal window', function() local screen before_each(function() clear() screen = thelpers.screen_setup() end) it('sets topline correctly #8556', function() skip(is_os('win')) -- Test has hardcoded assumptions of dimensions. eq(7, eval('&lines')) feed_data('\n\n\n') -- Add blank lines. -- Terminal/shell contents must exceed the height of this window. command('topleft 1split') eq('terminal', eval('&buftype')) feed([[i]]) -- Check topline _while_ in terminal-mode. retry(nil, nil, function() eq(6, eval('winsaveview()["topline"]')) end) end) describe("with 'number'", function() it('wraps text', function() feed([[]]) feed([[:set numberwidth=1 numberi]]) screen:expect([[ {7:1 }tty ready | {7:2 }rows: 6, cols: 48 | {7:3 }{1: } | {7:4 } | {7:5 } | {7:6 } | {3:-- TERMINAL --} | ]]) feed_data('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') screen:expect([[ {7:1 }tty ready | {7:2 }rows: 6, cols: 48 | {7:3 }abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV| {7:4 }WXYZ{1: } | {7:5 } | {7:6 } | {3:-- TERMINAL --} | ]]) -- numberwidth=9 feed([[]]) feed([[:set numberwidth=9 numberi]]) screen:expect([[ {7: 1 }tty ready | {7: 2 }rows: 6, cols: 48 | {7: 3 }abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO| {7: 4 }PQRSTUVWXYZrows: 6, cols: 41 | {7: 5 }{1: } | {7: 6 } | {3:-- TERMINAL --} | ]]) feed_data(' abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') screen:expect([[ {7: 1 }tty ready | {7: 2 }rows: 6, cols: 48 | {7: 3 }abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO| {7: 4 }PQRSTUVWXYZrows: 6, cols: 41 | {7: 5 } abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN| {7: 6 }OPQRSTUVWXYZ{1: } | {3:-- TERMINAL --} | ]]) end) end) describe("with 'statuscolumn'", function() it('wraps text', function() command([[set number statuscolumn=++%l\ \ ]]) screen:expect([[ {7:++1 }tty ready | {7:++2 }rows: 6, cols: 45 | {7:++3 }{1: } | {7:++4 } | {7:++5 } | {7:++6 } | {3:-- TERMINAL --} | ]]) feed_data('\n\n\n\n\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') screen:expect([[ {7:++4 } | {7:++5 } | {7:++6 } | {7:++7 } | {7:++8 }abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS| {7:++9 }TUVWXYZ{1: } | {3:-- TERMINAL --} | ]]) feed_data('\nabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') screen:expect([[ {7:++7 } | {7:++8 }abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR| {7:++9 }STUVWXYZ | {7:++10 }abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR| {7:++11 }STUVWXYZrows: 6, cols: 44 | {7:++12 }{1: } | {3:-- TERMINAL --} | ]]) end) end) describe("with 'colorcolumn'", function() before_each(function() feed([[]]) screen:expect([[ tty ready | {2:^ } | | | | | | ]]) feed(':set colorcolumn=20i') end) it('wont show the color column', function() screen:expect([[ tty ready | {1: } | | | | | {3:-- TERMINAL --} | ]]) end) end) describe('with fold set', function() before_each(function() feed([[:set foldenable foldmethod=manuali]]) feed_data({'line1', 'line2', 'line3', 'line4', ''}) screen:expect([[ tty ready | line1 | line2 | line3 | line4 | {1: } | {3:-- TERMINAL --} | ]]) end) it('wont show any folds', function() feed([[ggvGzf]]) poke_eventloop() screen:expect([[ ^tty ready | line1 | line2 | line3 | line4 | {2: } | | ]]) end) end) end) describe(':terminal with multigrid', function() local screen before_each(function() clear() screen = thelpers.screen_setup(0,nil,50,{ext_multigrid=true}) end) it('resizes to requested size', function() screen:expect([[ ## grid 1 [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [3:--------------------------------------------------]| ## grid 2 tty ready | {1: } | | | | | ## grid 3 {3:-- TERMINAL --} | ]]) screen:try_resize_grid(2, 20, 10) if is_os('win') then screen:expect{any="rows: 10, cols: 20"} else screen:expect([[ ## grid 1 [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [3:--------------------------------------------------]| ## grid 2 tty ready | rows: 10, cols: 20 | {1: } | | | | | | | | ## grid 3 {3:-- TERMINAL --} | ]]) end screen:try_resize_grid(2, 70, 3) if is_os('win') then screen:expect{any="rows: 3, cols: 70"} else screen:expect([[ ## grid 1 [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [3:--------------------------------------------------]| ## grid 2 rows: 10, cols: 20 | rows: 3, cols: 70 | {1: } | ## grid 3 {3:-- TERMINAL --} | ]]) end screen:try_resize_grid(2, 0, 0) if is_os('win') then screen:expect{any="rows: 6, cols: 50"} else screen:expect([[ ## grid 1 [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [2:--------------------------------------------------]| [3:--------------------------------------------------]| ## grid 2 tty ready | rows: 10, cols: 20 | rows: 3, cols: 70 | rows: 6, cols: 50 | {1: } | | ## grid 3 {3:-- TERMINAL --} | ]]) end end) end)