aboutsummaryrefslogtreecommitdiff
path: root/test/functional/legacy/normal_spec.lua
blob: 1ae22a83bd5212da476c296ff0706d381656a84a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
local t = require('test.testutil')
local n = require('test.functional.testnvim')()
local Screen = require('test.functional.ui.screen')

local clear = n.clear
local exec = n.exec
local feed = n.feed
local api = n.api
local eq = t.eq
local fn = n.fn

describe('normal', function()
  local screen

  before_each(function()
    clear()
    screen = Screen.new(40, 19)
  end)

  -- oldtest: Test_normal_j_below_botline()
  it([[no skipped lines with "j" scrolling below botline and 'foldmethod' not "manual"]], function()
    exec([[
      set number foldmethod=diff scrolloff=0
      call setline(1, map(range(1, 9), 'repeat(v:val, 200)'))
      norm Lj
    ]])
    screen:expect([[
      {8:  2 }222222222222222222222222222222222222|
      {8:    }222222222222222222222222222222222222|*4
      {8:    }22222222222222222222                |
      {8:  3 }333333333333333333333333333333333333|
      {8:    }333333333333333333333333333333333333|*4
      {8:    }33333333333333333333                |
      {8:  4 }^444444444444444444444444444444444444|
      {8:    }444444444444444444444444444444444444|*4
      {8:    }44444444444444444444                |
                                              |
    ]])
  end)

  -- oldtest: Test_single_line_scroll()
  it('(Half)-page scroll up or down reveals virtual lines #19605, #27967', function()
    fn.setline(1, 'foobar one two three')
    exec('set smoothscroll')
    local ns = api.nvim_create_namespace('')
    api.nvim_buf_set_extmark(0, ns, 0, 0, {
      virt_lines = { { { '---', 'IncSearch' } } },
      virt_lines_above = true,
    })
    -- Nvim: not actually necessary to scroll down to hide the virtual line.
    -- Check topfill instead of skipcol and show the screen state.
    feed('<C-E>')
    eq(0, fn.winsaveview().topfill)
    local s1 = [[
      ^foobar one two three                    |
      {1:~                                       }|*17
                                              |
    ]]
    screen:expect(s1)
    feed('<C-B>')
    eq(1, fn.winsaveview().topfill)
    local s2 = [[
      {2:---}                                     |
      ^foobar one two three                    |
      {1:~                                       }|*16
                                              |
    ]]
    screen:expect(s2)
    feed('<C-E>')
    eq(0, fn.winsaveview().topfill)
    screen:expect(s1)
    feed('<C-U>')
    eq(1, fn.winsaveview().topfill)
    screen:expect(s2)

    -- Nvim: also test virt_lines below the last line
    feed('yy100pG<C-L>')
    api.nvim_buf_set_extmark(0, ns, 100, 0, { virt_lines = { { { '---', 'IncSearch' } } } })
    screen:expect({
      grid = [[
        foobar one two three                    |*17
        ^foobar one two three                    |
                                                |
      ]],
    })
    feed('<C-F>')
    screen:expect({
      grid = [[
        ^foobar one two three                    |
        {2:---}                                     |
        {1:~                                       }|*16
                                                |
      ]],
    })
    feed('ggG<C-D>')
    screen:expect({
      grid = [[
        foobar one two three                    |*16
        ^foobar one two three                    |
        {2:---}                                     |
                                                |
      ]],
    })
  end)

  -- oldtest: Test_normal_gm()
  it('gm sets curswant correctly', function()
    screen:try_resize(75, 10)
    exec([[
      call setline(1, repeat(["  abcd\tefgh\tij"], 10))
      call cursor(1, 1)
    ]])
    feed('jVjzf')
    -- gm
    feed('gmk')
    eq(18, fn.virtcol('.'))
    -- g0
    feed('gj0k')
    eq(1, fn.virtcol('.'))
    -- g^
    feed('jg^k')
    eq(3, fn.virtcol('.'))
    exec('call cursor(10, 1)')
    -- gm
    feed('gmk')
    eq(18, fn.virtcol('.'))
    -- g0
    feed('gj0k')
    eq(1, fn.virtcol('.'))
    -- g^
    feed('jg^k')
    eq(3, fn.virtcol('.'))
  end)
end)