local helpers = require('test.functional.helpers')(after_each) local Screen = require('test.functional.ui.screen') local clear = helpers.clear local exec = helpers.exec local feed = helpers.feed before_each(clear) describe('smoothscroll', function() local screen before_each(function() screen = Screen.new(40, 12) screen:attach() end) -- oldtest: Test_CtrlE_CtrlY_stop_at_end() it('disabled does not break and stop at end', function() exec([[ enew call setline(1, ['one', 'two']) set number ]]) feed('') screen:expect({any = " 1 ^one"}) feed('') screen:expect({any = " 2 ^two"}) end) -- oldtest: Test_smoothscroll_CtrlE_CtrlY() it('works with and ', function() exec([[ call setline(1, [ 'line one', 'word '->repeat(20), 'line three', 'long word '->repeat(7), 'line', 'line', 'line', ]) set smoothscroll scrolloff=5 :5 ]]) local s1 = [[ word word word word word word word word | word word word word word word word word | word word word word | line three | long word long word long word long word | long word long word long word | ^line | line | line | ~ | ~ | | ]] local s2 = [[ <<') screen:expect(s1) feed('') screen:expect(s2) feed('') screen:expect(s3) feed('') screen:expect(s4) feed('') screen:expect(s5) feed('') screen:expect(s6) feed('') screen:expect(s7) feed('') screen:expect(s8) exec('set foldmethod=indent') -- move the cursor so we can reuse the same dumps feed('5G') screen:expect(s1) feed('') screen:expect(s2) feed('7G') screen:expect(s7) feed('') screen:expect(s8) end) -- oldtest: Test_smoothscroll_number() it("works 'number' and 'cpo'+=n", function() exec([[ call setline(1, [ 'one ' .. 'word '->repeat(20), 'two ' .. 'long word '->repeat(7), 'line', 'line', 'line', ]) set smoothscroll scrolloff=5 set number cpo+=n :3 func g:DoRel() set number relativenumber scrolloff=0 :%del call setline(1, [ 'one', 'very long text '->repeat(12), 'three', ]) exe "normal 2Gzt\" endfunc ]]) screen:expect([[ 1 one word word word word word word wo| rd word word word word word word word wo| rd word word word word word | 2 two long word long word long word lo| ng word long word long word long word | 3 ^line | 4 line | 5 line | ~ | ~ | ~ | | ]]) feed('') screen:expect([[ <<') screen:expect([[ <<') screen:expect([[ <<< rd word word word word word word wor| d word word word word word word | 2 two long word long word long word lo| ng word long word long word long wor| d | 3 ^line | 4 line | 5 line | ~ | ~ | ~ | | ]]) feed('') screen:expect([[ 1 one word word word word word word wo| rd word word word word word word wor| d word word word word word word | 2 two long word long word long word lo| ng word long word long word long wor| d | 3 ^line | 4 line | 5 line | ~ | ~ | | ]]) exec('call DoRel()') screen:expect([[ 2<<') screen:expect_unchanged() feed('') screen:expect_unchanged() end) -- oldtest: Test_smoothscroll_wrap_scrolloff_zero() it("works with zero 'scrolloff'", function() screen:try_resize(40, 8) exec([[ call setline(1, ['Line' .. (' with some text'->repeat(7))]->repeat(7)) set smoothscroll scrolloff=0 display= :3 ]]) screen:expect([[ <<j') screen:expect_unchanged() feed('G') screen:expect_unchanged() -- moving cursor up - whole top line shows feed('2k') screen:expect([[ ^Line with some text with some text with | some text with some text with some text | with some text with some text | Line with some text with some text with | some text with some text with some text | with some text with some text | @ | | ]]) end) -- oldtest: Test_smoothscroll_wrap_long_line() it("adjusts the cursor position in a long line", function() screen:try_resize(40, 6) exec([[ call setline(1, ['one', 'two', 'Line' .. (' with lots of text'->repeat(30))]) set smoothscroll scrolloff=0 normal 3G10|zt ]]) -- scrolling up, cursor moves screen line down screen:expect([[ Line with^ lots of text with lots of text| with lots of text with lots of text wit| h lots of text with lots of text with lo| ts of text with lots of text with lots o| f text with lots of text with lots of te| | ]]) feed('') screen:expect([[ <<') screen:expect([[ <<< lots ^of text with lots of text with | lots of text with lots of text with lots| of text with lots of text with lots of | text with lots of text with lots of text| with lots of text with lots of text wit| | ]]) -- scrolling down, cursor moves screen line up feed('5') screen:expect([[ <<') screen:expect([[ Line with lots of text with lots of text| with lots of text with lots of text wit| h lots of text with lots of text with lo| ts of text with lots of text with lots o| f text wi^th lots of text with lots of te| | ]]) -- 'scrolloff' set to 1, scrolling up, cursor moves screen line down exec('set scrolloff=1') feed('10|') screen:expect([[ <<gjgj') screen:expect([[ <<') screen:expect([[ <<gj') screen:expect_unchanged() end) -- oldtest: Test_smoothscroll_one_long_line() it("scrolls correctly when moving the cursor", function() screen:try_resize(40, 6) exec([[ call setline(1, 'with lots of text '->repeat(7)) set smoothscroll scrolloff=0 ]]) local s1 = [[ ^with lots of text with lots of text with| lots of text with lots of text with lot| s of text with lots of text with lots of| text | ~ | | ]] screen:expect(s1) feed('') screen:expect([[ <<