diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/functional/options/fillchars_spec.lua | 66 | ||||
-rw-r--r-- | test/functional/options/num_options_spec.lua | 15 | ||||
-rw-r--r-- | test/functional/ui/fold_spec.lua | 213 | ||||
-rw-r--r-- | test/functional/ui/multibyte_spec.lua | 122 | ||||
-rw-r--r-- | test/functional/ui/output_spec.lua | 6 |
5 files changed, 418 insertions, 4 deletions
diff --git a/test/functional/options/fillchars_spec.lua b/test/functional/options/fillchars_spec.lua new file mode 100644 index 0000000000..ab61935d4c --- /dev/null +++ b/test/functional/options/fillchars_spec.lua @@ -0,0 +1,66 @@ +local helpers = require('test.functional.helpers')(after_each) +local Screen = require('test.functional.ui.screen') +local clear, command = helpers.clear, helpers.command +local eval = helpers.eval +local eq = helpers.eq +local exc_exec = helpers.exc_exec + +describe("'fillchars'", function() + local screen + + before_each(function() + clear() + screen = Screen.new(25, 5) + screen:attach() + end) + + after_each(function() + screen:detach() + end) + + local function shouldfail(val,errval) + errval = errval or val + eq('Vim(set):E474: Invalid argument: fillchars='..errval, + exc_exec('set fillchars='..val)) + end + + describe('"eob" flag', function() + it("uses '~' by default", function() + eq('', eval('&fillchars')) + screen:expect([[ + ^ | + ~ | + ~ | + ~ | + | + ]]) + end) + it('supports whitespace', function() + command('set fillchars=eob:\\ ') + screen:expect([[ + ^ | + | + | + | + | + ]]) + end) + it('supports multibyte char', function() + command('set fillchars=eob:ñ') + screen:expect([[ + ^ | + ñ | + ñ | + ñ | + | + ]]) + end) + it('handles invalid values', function() + shouldfail('eob:') -- empty string + shouldfail('eob:馬') -- doublewidth char + shouldfail('eob:å̲') -- composing chars + shouldfail('eob:xy') -- two ascii chars + shouldfail('eob:\255', 'eob:<ff>') -- invalid UTF-8 + end) + end) +end) diff --git a/test/functional/options/num_options_spec.lua b/test/functional/options/num_options_spec.lua index ed17ffdd3c..fb0559054d 100644 --- a/test/functional/options/num_options_spec.lua +++ b/test/functional/options/num_options_spec.lua @@ -51,7 +51,6 @@ describe(':set validation', function() should_succeed('winminheight', 0) should_fail('winwidth', 0, 'E487') should_fail('helpheight', -1, 'E487') - should_fail('maxcombine', 7, 'E474') should_fail('iminsert', 3, 'E474') should_fail('imsearch', 3, 'E474') should_fail('titlelen', -1, 'E487') @@ -94,4 +93,18 @@ describe(':set validation', function() feed_command('set winminwidth=3') eq('E592', eval("v:errmsg"):match("E%d*")) end) + + it('set maxcombine resets to 6', function() + local function setto(value) + feed_command('setglobal maxcombine=' .. value) + feed_command('setlocal maxcombine=' .. value) + meths.set_option('maxcombine', value) + eq(6, meths.get_option('maxcombine')) + eq('', eval("v:errmsg")) + end + setto(0) + setto(1) + setto(6) + setto(7) + end) end) diff --git a/test/functional/ui/fold_spec.lua b/test/functional/ui/fold_spec.lua new file mode 100644 index 0000000000..9c5a59b58d --- /dev/null +++ b/test/functional/ui/fold_spec.lua @@ -0,0 +1,213 @@ +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 feed_command = helpers.feed_command +local insert = helpers.insert +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) + + after_each(function() + screen:detach() + 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:~ }| + | + ]]) + + feed_command("set number foldcolumn=2") + screen:expect([[ + {7:+ }{5: 1 ^+-- 2 lines: å 语 x̎͂̀̂͛͛ العَرَبِيَّة···········}| + {7: }{1:~ }| + {7: }{1:~ }| + {7: }{1:~ }| + {7: }{1:~ }| + {7: }{1:~ }| + {7: }{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: ~}{7: }| + {1: ~}{7: }| + {1: ~}{7: }| + {1: ~}{7: }| + {1: ~}{7: }| + {1: ~}{7: }| + :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: ~}| + | + ]]) + + feed('zo') + screen:expect([[ + ﺔﻴَّﺑِﺮَﻌَ^ﻟﺍ x̎͂̀̂͛͛ 语 å| + txet eröm| + {1: ~}| + {1: ~}| + {1: ~}| + {1: ~}| + {1: ~}| + | + ]]) + + feed_command('set noarabicshape') + screen:expect([[ + ةيَّبِرَعَ^لا x̎͂̀̂͛͛ 语 å| + txet eröm| + {1: ~}| + {1: ~}| + {1: ~}| + {1: ~}| + {1: ~}| + | + ]]) + + 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) diff --git a/test/functional/ui/multibyte_spec.lua b/test/functional/ui/multibyte_spec.lua new file mode 100644 index 0000000000..278480ec4f --- /dev/null +++ b/test/functional/ui/multibyte_spec.lua @@ -0,0 +1,122 @@ +local helpers = require('test.functional.helpers')(after_each) +local Screen = require('test.functional.ui.screen') +local clear = helpers.clear +local feed = helpers.feed +local feed_command = helpers.feed_command +local insert = helpers.insert +local funcs = helpers.funcs + +describe("multibyte rendering", function() + local screen + before_each(function() + clear() + screen = Screen.new(60, 6) + screen:attach({rgb=true}) + screen:set_default_attr_ids({ + [1] = {bold = true, foreground = Screen.colors.Blue1}, + [2] = {background = Screen.colors.WebGray}, + [3] = {background = Screen.colors.LightMagenta}, + [4] = {bold = true}, + }) + end) + + after_each(function() + screen:detach() + end) + + it("works with composed char at start of line", function() + insert([[ + ̊ + x]]) + feed("gg") + -- verify the modifier infact is alone + feed_command("ascii") + screen:expect([[ + ^ ̊ | + x | + {1:~ }| + {1:~ }| + {1:~ }| + < ̊> 778, Hex 030a, Octal 1412 | + ]]) + + -- a char inserted before will spontaneously merge with it + feed("ia<esc>") + feed_command("ascii") + screen:expect([[ + ^å | + x | + {1:~ }| + {1:~ }| + {1:~ }| + <a> 97, Hex 61, Octal 141 < ̊> 778, Hex 030a, Octal 1412 | + ]]) + end) + + it('works with doublewidth char at end of line', function() + feed('58a <esc>a馬<esc>') + screen:expect([[ + ^馬| + {1:~ }| + {1:~ }| + {1:~ }| + {1:~ }| + | + ]]) + + feed('i <esc>') + screen:expect([[ + ^ {1:>}| + 馬 | + {1:~ }| + {1:~ }| + {1:~ }| + | + ]]) + + feed('l') + screen:expect([[ + {1:>}| + ^馬 | + {1:~ }| + {1:~ }| + {1:~ }| + | + ]]) + end) + + it('clears left half of double-width char when right half is overdrawn', function() + feed('o-馬<esc>ggiab ') + screen:expect([[ + ab ^ | + -馬 | + {1:~ }| + {1:~ }| + {1:~ }| + {4:-- INSERT --} | + ]]) + + -- check double-with char is temporarily hidden when overlapped + funcs.complete(4, {'xx', 'yy'}) + screen:expect([[ + ab xx^ | + - {2: xx } | + {1:~ }{3: yy }{1: }| + {1:~ }| + {1:~ }| + {4:-- INSERT --} | + ]]) + + -- check it is properly restored + feed('z') + screen:expect([[ + ab xxz^ | + -馬 | + {1:~ }| + {1:~ }| + {1:~ }| + {4:-- INSERT --} | + ]]) + end) +end) + diff --git a/test/functional/ui/output_spec.lua b/test/functional/ui/output_spec.lua index 02ca566bd8..93d8965cb1 100644 --- a/test/functional/ui/output_spec.lua +++ b/test/functional/ui/output_spec.lua @@ -111,10 +111,10 @@ describe("shell command :!", function() feed([[<CR>]]) -- Print BELL control code. #4338 screen.bell = false - feed([[:!printf '\x07\x07\x07\x07text'<CR>]]) + feed([[:!printf '\007\007\007\007text'<CR>]]) screen:expect([[ ~ | - :!printf '\x07\x07\x07\x07text' | + :!printf '\007\007\007\007text' | text | Press ENTER or type command to continue^ | ]], nil, nil, function() @@ -122,7 +122,7 @@ describe("shell command :!", function() end) feed([[<CR>]]) -- Print BS control code. - feed([[:echo system('printf ''\x08\n''')<CR>]]) + feed([[:echo system('printf ''\010\n''')<CR>]]) screen:expect([[ ~ | ^H | |