aboutsummaryrefslogtreecommitdiff
path: root/test/functional/legacy/088_conceal_tabs_spec.lua
blob: 78cdf433fb9db48ce56d0bd49596bc8c5df6645a (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
-- Tests for correct display (cursor column position) with +conceal and
-- tabulators.

local helpers = require('test.functional.helpers')
local feed, insert, eq, eval = helpers.feed, helpers.insert, helpers.eq, helpers.eval
local clear, execute, expect = helpers.clear, helpers.execute, helpers.expect

describe('cursor and column position with conceal and tabulators', function()
  setup(clear)

  it('are working', function()
    insert([[
      start:
      .concealed.     text
      |concealed|	text
      
      	.concealed.	text
      	|concealed|	text
      
      .a.	.b.	.c.	.d.
      |a|	|b|	|c|	|d|]])

    -- Conceal settings.
    execute('set conceallevel=2')
    execute('set concealcursor=nc')
    execute('syntax match test /|/ conceal')
    -- Save current cursor position. Only works in <expr> mode, can't be used
    -- with :normal because it moves the cursor to the command line. Thanks to
    -- ZyX <zyx.vim@gmail.com> for the idea to use an <expr> mapping.
    execute('let positions = []')
    execute([[nnoremap <expr> GG ":let positions += ['".screenrow().":".screencol()."']\n"]])
    -- Start test.
    execute('/^start:')
    feed('ztj')
    feed('GG')
    -- We should end up in the same column when running these commands on the
    -- two lines.
    execute('normal ft')
    feed('GG')
    feed('$')
    feed('GG')
    feed('0j')
    feed('GG')
    execute('normal ft')
    feed('GG')
    feed('$')
    feed('GG')
    feed('j0j')
    feed('GG')
    -- Same for next test block.
    execute('normal ft')
    feed('GG')
    feed('$')
    feed('GG')
    feed('0j')
    feed('GG')
    execute('normal ft')
    feed('GG')
    feed('$')
    feed('GG')
    feed('0j0j')
    feed('GG')
    -- And check W with multiple tabs and conceals in a line.
    feed('W')
    feed('GG')
    feed('W')
    feed('GG')
    feed('W')
    feed('GG')
    feed('$')
    feed('GG')
    feed('0j')
    feed('GG')
    feed('W')
    feed('GG')
    feed('W')
    feed('GG')
    feed('W')
    feed('GG')
    feed('$')
    feed('GG')
    execute('set lbr')
    feed('$')
    feed('GG')
    -- Display result.
    execute([[call append('$', 'end:')]])
    execute([[call append('$', positions)]])
    execute('0,/^end/-1 d')

    -- Assert buffer contents.
    expect([[
      end:
      2:1
      2:17
      2:20
      3:1
      3:17
      3:20
      5:8
      5:25
      5:28
      6:8
      6:25
      6:28
      8:1
      8:9
      8:17
      8:25
      8:27
      9:1
      9:9
      9:17
      9:25
      9:26
      9:26]])
  end)
end)