aboutsummaryrefslogtreecommitdiff
path: root/test/functional/ui/global_statusline_spec.lua
blob: f6821ec589c4047dfb2830b329b1f324c21baca7 (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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
local clear, command, feed = helpers.clear, helpers.command, helpers.feed
local eq, funcs, meths = helpers.eq, helpers.funcs, helpers.meths

describe('global statusline', function()
  local screen

  before_each(function()
    clear()
    screen = Screen.new(60, 16)
    screen:attach()
    command('set laststatus=3')
    command('set ruler')
  end)

  it('works', function()
    screen:expect{grid=[[
      ^                                                            |
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {2:[No Name]                                 0,0-1          All}|
                                                                  |
    ]], attr_ids={
      [1] = {bold = true, foreground = Screen.colors.Blue1};
      [2] = {bold = true, reverse = true};
    }}

    feed('i<CR><CR>')
    screen:expect{grid=[[
                                                                  |
                                                                  |
      ^                                                            |
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {2:[No Name] [+]                             3,1            All}|
      {3:-- INSERT --}                                                |
    ]], attr_ids={
      [1] = {bold = true, foreground = Screen.colors.Blue};
      [2] = {bold = true, reverse = true};
      [3] = {bold = true};
    }}
  end)

  it('works with splits', function()
    command('vsplit | split | vsplit | vsplit | wincmd l | split | 2wincmd l | split')
    screen:expect{grid=[[
                          {1:│}                {1:│} {1:│}^                    |
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:├────────────────┤}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}                {1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:├────────────────────}|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}                    |
      {1:────────────────────┴────────────────┴─┤}{2:~                   }|
                                             {1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
      {3:[No Name]                                 0,0-1          All}|
                                                                  |
    ]], attr_ids={
      [1] = {reverse = true};
      [2] = {bold = true, foreground = Screen.colors.Blue1};
      [3] = {bold = true, reverse = true};
    }}
  end)

  it('works when switching between values of laststatus', function()
    command('set laststatus=1')
    screen:expect{grid=[[
      ^                                                            |
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
                                                0,0-1         All |
    ]], attr_ids={
      [1] = {foreground = Screen.colors.Blue, bold = true};
    }}

    command('set laststatus=3')
    screen:expect{grid=[[
      ^                                                            |
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {1:~                                                           }|
      {2:[No Name]                                 0,0-1          All}|
                                                                  |
    ]], attr_ids={
      [1] = {foreground = Screen.colors.Blue, bold = true};
      [2] = {reverse = true, bold = true};
    }}

    command('vsplit | split | vsplit | vsplit | wincmd l | split | 2wincmd l | split')
    command('set laststatus=2')
    screen:expect{grid=[[
                          {1:│}                {1:│} {1:│}^                    |
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│< Name] 0,0-1   │}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}                {1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{3:<No Name] 0,0-1  All}|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}                    |
      {1:<No Name] 0,0-1  All < Name] 0,0-1    <│}{2:~                   }|
                                             {1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
      {1:[No Name]            0,0-1          All <No Name] 0,0-1  All}|
                                                                  |
    ]], attr_ids={
      [1] = {reverse = true};
      [2] = {foreground = Screen.colors.Blue, bold = true};
      [3] = {reverse = true, bold = true};
    }}

    command('set laststatus=3')
    screen:expect{grid=[[
                          {1:│}                {1:│} {1:│}^                    |
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:├────────────────┤}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}                {1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:├────────────────────}|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}                    |
      {1:────────────────────┴────────────────┴─┤}{2:~                   }|
                                             {1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
      {3:[No Name]                                 0,0-1          All}|
                                                                  |
    ]], attr_ids={
      [1] = {reverse = true};
      [2] = {foreground = Screen.colors.Blue, bold = true};
      [3] = {reverse = true, bold = true};
    }}

    command('set laststatus=0')
    screen:expect{grid=[[
                          {1:│}                {1:│} {1:│}^                    |
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│< Name] 0,0-1   │}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}                {1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{3:<No Name] 0,0-1  All}|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}                    |
      {1:<No Name] 0,0-1  All < Name] 0,0-1    <│}{2:~                   }|
                                             {1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
                                                0,0-1         All |
    ]], attr_ids={
      [1] = {reverse = true};
      [2] = {foreground = Screen.colors.Blue, bold = true};
      [3] = {reverse = true, bold = true};
    }}

    command('set laststatus=3')
    screen:expect{grid=[[
                          {1:│}                {1:│} {1:│}^                    |
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:├────────────────┤}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}                {1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}{2:~                   }|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:├────────────────────}|
      {2:~                   }{1:│}{2:~               }{1:│}{2:~}{1:│}                    |
      {1:────────────────────┴────────────────┴─┤}{2:~                   }|
                                             {1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
      {2:~                                      }{1:│}{2:~                   }|
      {3:[No Name]                                 0,0-1          All}|
                                                                  |
    ]], attr_ids={
      [1] = {reverse = true};
      [2] = {foreground = Screen.colors.Blue, bold = true};
      [3] = {reverse = true, bold = true};
    }}
  end)

  it('win_move_statusline() can reduce cmdheight to 1', function()
    eq(1, meths.get_option('cmdheight'))
    funcs.win_move_statusline(0, -1)
    eq(2, meths.get_option('cmdheight'))
    funcs.win_move_statusline(0, -1)
    eq(3, meths.get_option('cmdheight'))
    funcs.win_move_statusline(0, 1)
    eq(2, meths.get_option('cmdheight'))
    funcs.win_move_statusline(0, 1)
    eq(1, meths.get_option('cmdheight'))
  end)

  it('mouse dragging can reduce cmdheight to 1', function()
    command('set mouse=a')
    meths.input_mouse('left', 'press', '', 0, 14, 10)
    eq(1, meths.get_option('cmdheight'))
    meths.input_mouse('left', 'drag', '', 0, 13, 10)
    eq(2, meths.get_option('cmdheight'))
    meths.input_mouse('left', 'drag', '', 0, 12, 10)
    eq(3, meths.get_option('cmdheight'))
    meths.input_mouse('left', 'drag', '', 0, 13, 10)
    eq(2, meths.get_option('cmdheight'))
    meths.input_mouse('left', 'drag', '', 0, 14, 10)
    eq(1, meths.get_option('cmdheight'))
  end)
end)