2024-04-20 08:44:13 -07:00
|
|
|
local t = require('test.testutil')
|
|
|
|
local n = require('test.functional.testnvim')()
|
2017-03-24 09:36:46 -07:00
|
|
|
local Screen = require('test.functional.ui.screen')
|
2024-04-20 08:44:13 -07:00
|
|
|
|
|
|
|
local clear, command = n.clear, n.command
|
2024-04-08 02:03:20 -07:00
|
|
|
local pcall_err = t.pcall_err
|
2024-04-20 08:44:13 -07:00
|
|
|
local eval = n.eval
|
2024-04-08 02:03:20 -07:00
|
|
|
local eq = t.eq
|
2024-04-20 08:44:13 -07:00
|
|
|
local insert = n.insert
|
|
|
|
local feed = n.feed
|
|
|
|
local api = n.api
|
2017-03-24 09:36:46 -07:00
|
|
|
|
|
|
|
describe("'fillchars'", function()
|
|
|
|
local screen
|
|
|
|
|
|
|
|
before_each(function()
|
|
|
|
clear()
|
|
|
|
screen = Screen.new(25, 5)
|
|
|
|
screen:attach()
|
|
|
|
end)
|
|
|
|
|
|
|
|
describe('"eob" flag', function()
|
2018-06-13 09:21:25 -07:00
|
|
|
it("uses '~' by default", function()
|
|
|
|
eq('', eval('&fillchars'))
|
2017-03-24 09:36:46 -07:00
|
|
|
screen:expect([[
|
|
|
|
^ |
|
2024-03-22 03:02:52 -07:00
|
|
|
{1:~ }|*3
|
2017-03-24 09:36:46 -07:00
|
|
|
|
|
|
|
|
]])
|
2018-06-13 09:21:25 -07:00
|
|
|
end)
|
2023-12-19 07:46:38 -07:00
|
|
|
|
2018-06-13 09:21:25 -07:00
|
|
|
it('supports whitespace', function()
|
2017-06-26 05:49:15 -07:00
|
|
|
screen:expect([[
|
|
|
|
^ |
|
2024-03-22 03:02:52 -07:00
|
|
|
{1:~ }|*3
|
2017-06-26 05:49:15 -07:00
|
|
|
|
|
|
|
|
]])
|
2018-06-13 09:21:25 -07:00
|
|
|
command('set fillchars=eob:\\ ')
|
2017-03-24 09:36:46 -07:00
|
|
|
screen:expect([[
|
|
|
|
^ |
|
2024-03-22 03:02:52 -07:00
|
|
|
{1: }|*3
|
|
|
|
|
|
2017-03-24 09:36:46 -07:00
|
|
|
]])
|
2018-06-13 09:21:25 -07:00
|
|
|
end)
|
2023-12-19 07:46:38 -07:00
|
|
|
|
2018-06-13 09:21:25 -07:00
|
|
|
it('supports multibyte char', function()
|
|
|
|
command('set fillchars=eob:ñ')
|
2017-03-24 09:36:46 -07:00
|
|
|
screen:expect([[
|
|
|
|
^ |
|
2024-03-22 03:02:52 -07:00
|
|
|
{1:ñ }|*3
|
2018-06-13 09:21:25 -07:00
|
|
|
|
|
2017-03-24 09:36:46 -07:00
|
|
|
]])
|
|
|
|
end)
|
2023-12-19 07:46:38 -07:00
|
|
|
|
2024-01-03 05:31:39 -07:00
|
|
|
it('supports composing multibyte char', function()
|
|
|
|
command('set fillchars=eob:å̲')
|
|
|
|
screen:expect([[
|
|
|
|
^ |
|
2024-03-22 03:02:52 -07:00
|
|
|
{1:å̲ }|*3
|
2024-01-03 05:31:39 -07:00
|
|
|
|
|
|
|
|
]])
|
|
|
|
end)
|
|
|
|
|
2018-06-13 09:21:25 -07:00
|
|
|
it('handles invalid values', function()
|
2024-01-17 16:14:12 -07:00
|
|
|
eq(
|
|
|
|
'Vim(set):E1511: Wrong number of characters for field "eob": fillchars=eob:',
|
|
|
|
pcall_err(command, 'set fillchars=eob:') -- empty string
|
|
|
|
)
|
|
|
|
eq(
|
|
|
|
'Vim(set):E1512: Wrong character width for field "eob": fillchars=eob:馬',
|
|
|
|
pcall_err(command, 'set fillchars=eob:馬') -- doublewidth char
|
|
|
|
)
|
|
|
|
eq(
|
|
|
|
'Vim(set):E1511: Wrong number of characters for field "eob": fillchars=eob:xy',
|
|
|
|
pcall_err(command, 'set fillchars=eob:xy') -- two ascii chars
|
|
|
|
)
|
|
|
|
eq(
|
|
|
|
'Vim(set):E1512: Wrong character width for field "eob": fillchars=eob:<ff>',
|
|
|
|
pcall_err(command, 'set fillchars=eob:\255') -- invalid UTF-8
|
|
|
|
)
|
2018-06-13 09:21:25 -07:00
|
|
|
end)
|
2021-11-16 16:07:15 -07:00
|
|
|
end)
|
2023-12-19 07:46:38 -07:00
|
|
|
|
|
|
|
it('"diff" flag', function()
|
|
|
|
screen:try_resize(45, 8)
|
|
|
|
screen:set_default_attr_ids({
|
|
|
|
[1] = { background = Screen.colors.Grey, foreground = Screen.colors.DarkBlue },
|
|
|
|
[2] = { background = Screen.colors.LightCyan1, bold = true, foreground = Screen.colors.Blue1 },
|
|
|
|
[3] = { background = Screen.colors.LightBlue },
|
|
|
|
[4] = { reverse = true },
|
|
|
|
[5] = { reverse = true, bold = true },
|
|
|
|
})
|
|
|
|
command('set fillchars=diff:…')
|
|
|
|
insert('a\nb\nc\nd\ne')
|
|
|
|
command('vnew')
|
|
|
|
insert('a\nd\ne\nf')
|
|
|
|
command('windo diffthis')
|
|
|
|
screen:expect([[
|
|
|
|
{1: }a │{1: }a |
|
|
|
|
{1: }{2:……………………………………………………}│{1: }{3:b }|
|
|
|
|
{1: }{2:……………………………………………………}│{1: }{3:c }|
|
|
|
|
{1: }d │{1: }d |
|
|
|
|
{1: }e │{1: }^e |
|
|
|
|
{1: }{3:f }│{1: }{2:……………………………………………………}|
|
|
|
|
{4:[No Name] [+] }{5:[No Name] [+] }|
|
|
|
|
|
|
|
|
|
]])
|
|
|
|
end)
|
|
|
|
|
2021-11-16 16:07:15 -07:00
|
|
|
it('has global value', function()
|
|
|
|
screen:try_resize(50, 5)
|
|
|
|
insert('foo\nbar')
|
|
|
|
command('set laststatus=0')
|
|
|
|
command('1,2fold')
|
|
|
|
command('vsplit')
|
|
|
|
command('set fillchars=fold:x')
|
|
|
|
screen:expect([[
|
2024-03-22 03:02:52 -07:00
|
|
|
{13:^+-- 2 lines: fooxxxxxxxx}│{13:+-- 2 lines: fooxxxxxxx}|
|
|
|
|
{1:~ }│{1:~ }|*3
|
2021-11-16 16:07:15 -07:00
|
|
|
|
|
|
|
|
]])
|
|
|
|
end)
|
2023-12-19 07:46:38 -07:00
|
|
|
|
2021-11-16 16:07:15 -07:00
|
|
|
it('has window-local value', function()
|
|
|
|
screen:try_resize(50, 5)
|
|
|
|
insert('foo\nbar')
|
|
|
|
command('set laststatus=0')
|
|
|
|
command('1,2fold')
|
|
|
|
command('vsplit')
|
|
|
|
command('setl fillchars=fold:x')
|
|
|
|
screen:expect([[
|
2024-03-22 03:02:52 -07:00
|
|
|
{13:^+-- 2 lines: fooxxxxxxxx}│{13:+-- 2 lines: foo·······}|
|
|
|
|
{1:~ }│{1:~ }|*3
|
2021-11-16 16:07:15 -07:00
|
|
|
|
|
|
|
|
]])
|
|
|
|
end)
|
2023-12-19 07:46:38 -07:00
|
|
|
|
2021-11-16 16:07:15 -07:00
|
|
|
it('using :set clears window-local value', function()
|
|
|
|
screen:try_resize(50, 5)
|
|
|
|
insert('foo\nbar')
|
|
|
|
command('set laststatus=0')
|
|
|
|
command('setl fillchars=fold:x')
|
|
|
|
command('1,2fold')
|
|
|
|
command('vsplit')
|
|
|
|
command('set fillchars&')
|
|
|
|
screen:expect([[
|
2024-03-22 03:02:52 -07:00
|
|
|
{13:^+-- 2 lines: foo········}│{13:+-- 2 lines: fooxxxxxxx}|
|
|
|
|
{1:~ }│{1:~ }|*3
|
2021-11-16 16:07:15 -07:00
|
|
|
|
|
|
|
|
]])
|
2019-01-26 06:08:22 -07:00
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
describe("'listchars'", function()
|
|
|
|
local screen
|
|
|
|
|
|
|
|
before_each(function()
|
|
|
|
clear()
|
|
|
|
screen = Screen.new(50, 5)
|
|
|
|
screen:attach()
|
|
|
|
end)
|
|
|
|
|
2019-11-24 02:59:15 -07:00
|
|
|
it('has global value', function()
|
|
|
|
feed('i<tab><tab><tab><esc>')
|
|
|
|
command('set list laststatus=0')
|
|
|
|
command('vsplit')
|
|
|
|
command('set listchars=tab:<->')
|
|
|
|
screen:expect([[
|
2024-03-22 03:02:52 -07:00
|
|
|
{1:<------><------>^<------>} │{1:<------><------><------>}|
|
|
|
|
{1:~ }│{1:~ }|*3
|
2019-11-24 02:59:15 -07:00
|
|
|
|
|
|
|
|
]])
|
|
|
|
end)
|
2023-12-19 07:46:38 -07:00
|
|
|
|
2021-11-16 16:07:15 -07:00
|
|
|
it('has window-local value', function()
|
2019-01-26 06:08:22 -07:00
|
|
|
feed('i<tab><tab><tab><esc>')
|
2019-11-24 02:59:15 -07:00
|
|
|
command('set list laststatus=0')
|
|
|
|
command('setl listchars=tab:<->')
|
2019-01-26 06:08:22 -07:00
|
|
|
command('vsplit')
|
2019-11-24 02:59:15 -07:00
|
|
|
command('setl listchars<')
|
2019-01-26 06:08:22 -07:00
|
|
|
screen:expect([[
|
2024-03-22 03:02:52 -07:00
|
|
|
{1:> > ^> } │{1:<------><------><------>}|
|
|
|
|
{1:~ }│{1:~ }|*3
|
2019-01-26 06:08:22 -07:00
|
|
|
|
|
|
|
|
]])
|
2017-03-24 09:36:46 -07:00
|
|
|
end)
|
2023-12-19 07:46:38 -07:00
|
|
|
|
2021-11-16 16:07:15 -07:00
|
|
|
it('using :set clears window-local value', function()
|
|
|
|
feed('i<tab><tab><tab><esc>')
|
|
|
|
command('set list laststatus=0')
|
|
|
|
command('setl listchars=tab:<->')
|
|
|
|
command('vsplit')
|
|
|
|
command('set listchars=tab:>-,eol:$')
|
|
|
|
screen:expect([[
|
2024-03-22 03:02:52 -07:00
|
|
|
{1:>------->-------^>-------$}│{1:<------><------><------>}|
|
|
|
|
{1:~ }│{1:~ }|*3
|
2021-11-16 16:07:15 -07:00
|
|
|
|
|
|
|
|
]])
|
|
|
|
end)
|
2024-01-03 05:31:39 -07:00
|
|
|
|
|
|
|
it('supports composing chars', function()
|
|
|
|
screen:set_default_attr_ids {
|
|
|
|
[1] = { foreground = Screen.colors.Blue1, bold = true },
|
|
|
|
}
|
|
|
|
feed('i<tab><tab><tab>x<esc>')
|
|
|
|
command('set list laststatus=0')
|
|
|
|
-- tricky: the tab value forms three separate one-cell chars,
|
|
|
|
-- thus it should be accepted despite being a mess.
|
|
|
|
command('set listchars=tab:d̞̄̃̒̉̎ò́̌̌̂̐l̞̀̄̆̌̚,eol:å̲')
|
|
|
|
screen:expect([[
|
|
|
|
{1:d̞̄̃̒̉̎ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐l̞̀̄̆̌̚d̞̄̃̒̉̎ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐l̞̀̄̆̌̚d̞̄̃̒̉̎ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐l̞̀̄̆̌̚}^x{1:å̲} |
|
|
|
|
{1:~ }|*3
|
|
|
|
|
|
|
|
|
]])
|
|
|
|
|
2024-01-12 10:59:57 -07:00
|
|
|
api.nvim__invalidate_glyph_cache()
|
2024-01-03 05:31:39 -07:00
|
|
|
screen:_reset()
|
|
|
|
screen:expect([[
|
|
|
|
{1:d̞̄̃̒̉̎ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐l̞̀̄̆̌̚d̞̄̃̒̉̎ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐l̞̀̄̆̌̚d̞̄̃̒̉̎ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐l̞̀̄̆̌̚}^x{1:å̲} |
|
|
|
|
{1:~ }|*3
|
|
|
|
|
|
|
|
|
]])
|
|
|
|
end)
|
2017-03-24 09:36:46 -07:00
|
|
|
end)
|