mirror of
https://github.com/neovim/neovim.git
synced 2025-09-08 20:38:18 +00:00

It is perfectly fine and expected to detach from the screen just by the UI disconnecting from nvim or exiting nvim. Just keep detach() in screen_basic_spec, to get some coverage of the detach method itself. This avoids hang on failure in many situations (though one could argue that detach() should be "fast", or at least "as fast as resize", which works in press-return already). Never use detach() just to change the size of the screen, try_resize() method exists for that specifically.
248 lines
10 KiB
Lua
248 lines
10 KiB
Lua
local helpers = require('test.functional.helpers')(after_each)
|
|
local Screen = require('test.functional.ui.screen')
|
|
local clear, feed, eq = helpers.clear, helpers.feed, helpers.eq
|
|
local command = helpers.command
|
|
local feed_command = helpers.feed_command
|
|
local insert = helpers.insert
|
|
local funcs = helpers.funcs
|
|
local meths = helpers.meths
|
|
|
|
describe("folded lines", function()
|
|
local screen
|
|
before_each(function()
|
|
clear()
|
|
screen = Screen.new(45, 8)
|
|
screen:attach({rgb=true})
|
|
screen:set_default_attr_ids({
|
|
[1] = {bold = true, foreground = Screen.colors.Blue1},
|
|
[2] = {reverse = true},
|
|
[3] = {bold = true, reverse = true},
|
|
[4] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
|
|
[5] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.LightGrey},
|
|
[6] = {background = Screen.colors.Yellow},
|
|
[7] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.WebGray},
|
|
})
|
|
end)
|
|
|
|
it("work with more than one signcolumn", function()
|
|
command("set signcolumn=yes:9")
|
|
feed("i<cr><esc>")
|
|
feed("vkzf")
|
|
screen:expect([[
|
|
{5: ^+-- 2 lines: ·············}|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
|
|
|
]])
|
|
end)
|
|
|
|
it("highlighting with relative line numbers", function()
|
|
command("set relativenumber foldmethod=marker")
|
|
feed_command("set foldcolumn=2")
|
|
funcs.setline(1, '{{{1')
|
|
funcs.setline(2, 'line 1')
|
|
funcs.setline(3, '{{{1')
|
|
funcs.setline(4, 'line 2')
|
|
feed("j")
|
|
screen:expect([[
|
|
{7:+ }{5: 1 +-- 2 lines: ·························}|
|
|
{7:+ }{5: 0 ^+-- 2 lines: ·························}|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
:set foldcolumn=2 |
|
|
]])
|
|
end)
|
|
|
|
it("works with multibyte text", function()
|
|
-- Currently the only allowed value of 'maxcombine'
|
|
eq(6, meths.get_option('maxcombine'))
|
|
eq(true, meths.get_option('arabicshape'))
|
|
insert([[
|
|
å 语 x̨̣̘̫̲͚͎̎͂̀̂͛͛̾͢͟ العَرَبِيَّة
|
|
möre text]])
|
|
screen:expect([[
|
|
å 语 x̎͂̀̂͛͛ ﺎﻠﻋَﺮَﺒِﻳَّﺓ |
|
|
möre tex^t |
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
|
|
|
]])
|
|
|
|
feed('vkzf')
|
|
screen:expect([[
|
|
{5:^+-- 2 lines: å 语 x̎͂̀̂͛͛ ﺎﻠﻋَﺮَﺒِﻳَّﺓ·················}|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
|
|
|
]])
|
|
|
|
feed_command("set noarabicshape")
|
|
screen:expect([[
|
|
{5:^+-- 2 lines: å 语 x̎͂̀̂͛͛ العَرَبِيَّة·················}|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
:set noarabicshape |
|
|
]])
|
|
|
|
feed_command("set number foldcolumn=2")
|
|
screen:expect([[
|
|
{7:+ }{5: 1 ^+-- 2 lines: å 语 x̎͂̀̂͛͛ العَرَبِيَّة···········}|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
:set number foldcolumn=2 |
|
|
]])
|
|
|
|
-- Note: too much of the folded line gets cut off.This is a vim bug.
|
|
feed_command("set rightleft")
|
|
screen:expect([[
|
|
{5:+-- 2 lines: å ······················^· 1 }{7: +}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
:set rightleft |
|
|
]])
|
|
|
|
feed_command("set nonumber foldcolumn=0")
|
|
screen:expect([[
|
|
{5:+-- 2 lines: å 语 x̎͂̀̂͛͛ ال·····················^·}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
:set nonumber foldcolumn=0 |
|
|
]])
|
|
|
|
feed_command("set arabicshape")
|
|
screen:expect([[
|
|
{5:+-- 2 lines: å 语 x̎͂̀̂͛͛ ﺍﻟ·····················^·}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
:set arabicshape |
|
|
]])
|
|
|
|
feed('zo')
|
|
screen:expect([[
|
|
ﺔﻴَّﺑِﺮَﻌَ^ﻟﺍ x̎͂̀̂͛͛ 语 å|
|
|
txet eröm|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
:set arabicshape |
|
|
]])
|
|
|
|
feed_command('set noarabicshape')
|
|
screen:expect([[
|
|
ةيَّبِرَعَ^لا x̎͂̀̂͛͛ 语 å|
|
|
txet eröm|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
{1: ~}|
|
|
:set noarabicshape |
|
|
]])
|
|
|
|
end)
|
|
|
|
it("work in cmdline window", function()
|
|
feed_command("set foldmethod=manual")
|
|
feed_command("let x = 1")
|
|
feed_command("/alpha")
|
|
feed_command("/omega")
|
|
|
|
feed("<cr>q:")
|
|
screen:expect([[
|
|
|
|
|
{2:[No Name] }|
|
|
{1::}set foldmethod=manual |
|
|
{1::}let x = 1 |
|
|
{1::}^ |
|
|
{1:~ }|
|
|
{3:[Command Line] }|
|
|
: |
|
|
]])
|
|
|
|
feed("kzfk")
|
|
screen:expect([[
|
|
|
|
|
{2:[No Name] }|
|
|
{1::}{5:^+-- 2 lines: set foldmethod=manual·········}|
|
|
{1::} |
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{3:[Command Line] }|
|
|
: |
|
|
]])
|
|
|
|
feed("<cr>")
|
|
screen:expect([[
|
|
^ |
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
: |
|
|
]])
|
|
|
|
feed("/<c-f>")
|
|
screen:expect([[
|
|
|
|
|
{2:[No Name] }|
|
|
{1:/}alpha |
|
|
{1:/}{6:omega} |
|
|
{1:/}^ |
|
|
{1:~ }|
|
|
{3:[Command Line] }|
|
|
/ |
|
|
]])
|
|
|
|
feed("ggzfG")
|
|
screen:expect([[
|
|
|
|
|
{2:[No Name] }|
|
|
{1:/}{5:^+-- 3 lines: alpha·························}|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{1:~ }|
|
|
{3:[Command Line] }|
|
|
/ |
|
|
]])
|
|
|
|
end)
|
|
end)
|