123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701 |
- local helpers = require('test.functional.helpers')(after_each)
- local Screen = require('test.functional.ui.screen')
- local clear, feed = helpers.clear, helpers.feed
- local eval = helpers.eval
- local eq = helpers.eq
- local command = helpers.command
- local set_method_error = helpers.set_method_error
- local meths = helpers.meths
- local async_meths = helpers.async_meths
- local test_build_dir = helpers.test_build_dir
- local nvim_prog = helpers.nvim_prog
- local iswin = helpers.iswin
- local exc_exec = helpers.exc_exec
- local exec_lua = helpers.exec_lua
- describe('ui/ext_messages', function()
- local screen
- before_each(function()
- clear()
- screen = Screen.new(25, 5)
- screen:attach({rgb=true, ext_messages=true, ext_popupmenu=true})
- screen:set_default_attr_ids({
- [1] = {bold = true, foreground = Screen.colors.Blue1},
- [2] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
- [3] = {bold = true},
- [4] = {bold = true, foreground = Screen.colors.SeaGreen4},
- [5] = {foreground = Screen.colors.Blue1},
- [6] = {bold = true, reverse = true},
- [7] = {background = Screen.colors.Yellow},
- [8] = {foreground = Screen.colors.Red},
- [9] = {special = Screen.colors.Red, undercurl = true},
- })
- end)
- after_each(function()
- os.remove('Xtest')
- end)
- it('msg_clear follows msg_show kind of confirm', function()
- feed('iline 1<esc>')
- feed(':call confirm("test")<cr>')
- screen:expect{grid=[[
- line ^1 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={ {
- content = {{"\ntest\n[O]k: ", 4}},
- kind = 'confirm',
- }}}
- feed('<cr>')
- screen:expect{grid=[[
- line ^1 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]]}
- end)
- it('msg_show kind=confirm,confirm_sub,emsg,wmsg,quickfix', function()
- feed('iline 1\nline 2<esc>')
- -- kind=confirm
- feed(':echo confirm("test")<cr>')
- screen:expect{grid=[[
- line 1 |
- line ^2 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={ {
- content = {{"\ntest\n[O]k: ", 4}},
- kind = 'confirm',
- }}}
- feed('<cr><cr>')
- screen:expect{grid=[[
- line 1 |
- line ^2 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={ {
- content = { { "\ntest\n[O]k: ", 4 } },
- kind = "confirm"
- }, {
- content = { { "1" } },
- kind = "echo"
- }, {
- content = { { "Press ENTER or type command to continue", 4 } },
- kind = "return_prompt"
- } }}
- feed('<cr><cr>')
- -- kind=confirm_sub
- feed(':%s/i/X/gc<cr>')
- screen:expect{grid=[[
- l{7:i}ne 1 |
- l{8:i}ne ^2 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], attr_ids={
- [1] = {bold = true, foreground = Screen.colors.Blue1},
- [2] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
- [3] = {bold = true},
- [4] = {bold = true, foreground = Screen.colors.SeaGreen4},
- [5] = {foreground = Screen.colors.Blue1},
- [6] = {bold = true, reverse = true},
- [7] = {reverse = true},
- [8] = {background = Screen.colors.Yellow},
- }, messages={ {
- content = { { "replace with X (y/n/a/q/l/^E/^Y)?", 4 } },
- kind = "confirm_sub"
- } }}
- feed('nq')
- -- kind=wmsg (editing readonly file)
- command('write Xtest')
- command('set readonly nohls')
- feed('G$x')
- screen:expect{grid=[[
- line 1 |
- {MATCH:.*}|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], attr_ids={
- [1] = {bold = true, foreground = Screen.colors.Blue1},
- [7] = {foreground = Screen.colors.Red},
- }, messages={ {
- content = { { "W10: Warning: Changing a readonly file", 7 } },
- kind = "wmsg"
- }
- }}
- -- kind=wmsg ('wrapscan' after search reaches EOF)
- feed('uG$/i<cr>')
- screen:expect{grid=[[
- l^ine 1 |
- line 2 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], attr_ids={
- [1] = {bold = true, foreground = Screen.colors.Blue1},
- [2] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
- [3] = {bold = true},
- [4] = {bold = true, foreground = Screen.colors.SeaGreen4},
- [5] = {foreground = Screen.colors.Blue1},
- [6] = {bold = true, reverse = true},
- [7] = {foreground = Screen.colors.Red},
- }, messages={ {
- content = { { "search hit BOTTOM, continuing at TOP", 7 } },
- kind = "wmsg"
- } }}
- -- kind=emsg after :throw
- feed(':throw "foo"<cr>')
- screen:expect{grid=[[
- l^ine 1 |
- line 2 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={ {
- content = { { "Error detected while processing :", 2 } },
- kind = "emsg"
- }, {
- content = { { "E605: Exception not caught: foo", 2 } },
- kind = ""
- }, {
- content = { { "Press ENTER or type command to continue", 4 } },
- kind = "return_prompt"
- } }
- }
- -- kind=quickfix after :cnext
- feed('<c-c>')
- command("caddexpr [expand('%').':1:line1',expand('%').':2:line2']")
- feed(':cnext<cr>')
- screen:expect{grid=[[
- line 1 |
- ^line 2 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={ {
- content = { { "(2 of 2): line2" } },
- kind = "quickfix"
- } }}
- end)
- it(':echoerr', function()
- feed(':echoerr "raa"<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={{
- content = {{"raa", 2}},
- kind = "echoerr",
- }}}
- -- cmdline in a later input cycle clears error message
- feed(':')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], cmdline={{
- firstc = ":",
- content = {{ "" }},
- pos = 0,
- }}}
- feed('echoerr "bork" | echoerr "fail"<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={{
- content = {{ "bork", 2 }},
- kind = "echoerr"
- }, {
- content = {{ "fail", 2 }},
- kind = "echoerr"
- }, {
- content = {{ "Press ENTER or type command to continue", 4 }},
- kind = "return_prompt"
- }}}
- feed(':echoerr "extrafail"<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={{
- content = { { "bork", 2 } },
- kind = "echoerr"
- }, {
- content = { { "fail", 2 } },
- kind = "echoerr"
- }, {
- content = { { "extrafail", 2 } },
- kind = "echoerr"
- }, {
- content = { { "Press ENTER or type command to continue", 4 } },
- kind = "return_prompt"
- }}}
- feed('<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]]}
- -- cmdline without interleaving wait/display keeps the error message
- feed(':echoerr "problem" | let x = input("foo> ")<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={{
- content = {{ "problem", 2 }},
- kind = "echoerr"
- }}, cmdline={{
- prompt = "foo> ",
- content = {{ "" }},
- pos = 0,
- }}}
- feed('solution<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]]}
- eq('solution', eval('x'))
- feed(":messages<cr>")
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={
- {kind="echoerr", content={{"raa", 2}}},
- {kind="echoerr", content={{"bork", 2}}},
- {kind="echoerr", content={{"fail", 2}}},
- {kind="echoerr", content={{"extrafail", 2}}},
- {kind="echoerr", content={{"problem", 2}}}
- }}
- end)
- it('shortmess-=S', function()
- command('set shortmess-=S')
- feed('iline 1\nline 2<esc>')
- feed('/line<cr>')
- screen:expect{grid=[[
- {7:^line} 1 |
- {7:line} 2 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={
- {content = {{"/line W [1/2]"}}, kind = "search_count"}
- }}
- feed('n')
- screen:expect{grid=[[
- {7:line} 1 |
- {7:^line} 2 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={
- {content = {{"/line [2/2]"}}, kind = "search_count"}
- }}
- end)
- it(':hi Group output', function()
- feed(':hi ErrorMsg<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={
- {content = {{"\nErrorMsg " }, {"xxx", 2}, {" "},
- {"ctermfg=", 5 }, { "15 " }, { "ctermbg=", 5 }, { "1 " },
- {"guifg=", 5 }, { "White " }, { "guibg=", 5 }, { "Red" }},
- kind = ""}
- }}
- end)
- it("doesn't crash with column adjustment #10069", function()
- feed(':let [x,y] = [1,2]<cr>')
- feed(':let x y<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={
- {content = {{ "x #1" }}, kind = ""},
- {content = {{ "y #2" }}, kind = ""},
- {content = {{ "Press ENTER or type command to continue", 4 }}, kind = "return_prompt"}
- }}
- end)
- it('&showmode', function()
- command('imap <f2> <cmd>echomsg "stuff"<cr>')
- feed('i')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], showmode={{"-- INSERT --", 3}}}
- feed('alphpabet<cr>alphanum<cr>')
- screen:expect{grid=[[
- alphpabet |
- alphanum |
- ^ |
- {1:~ }|
- {1:~ }|
- ]], showmode={ { "-- INSERT --", 3 } }}
- feed('<c-x>')
- screen:expect{grid=[[
- alphpabet |
- alphanum |
- ^ |
- {1:~ }|
- {1:~ }|
- ]], showmode={ { "-- ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)", 3 } }}
- feed('<c-p>')
- screen:expect{grid=[[
- alphpabet |
- alphanum |
- alphanum^ |
- {1:~ }|
- {1:~ }|
- ]], popupmenu={
- anchor = { 1, 2, 0 },
- items = { { "alphpabet", "", "", "" }, { "alphanum", "", "", "" } },
- pos = 1
- }, showmode={ { "-- Keyword Local completion (^N^P) ", 3 }, { "match 1 of 2", 4 } }}
- -- echomsg and showmode don't overwrite each other, this is the same
- -- as the TUI behavior with cmdheight=2 or larger.
- feed('<f2>')
- screen:expect{grid=[[
- alphpabet |
- alphanum |
- alphanum^ |
- {1:~ }|
- {1:~ }|
- ]], popupmenu={
- anchor = { 1, 2, 0 },
- items = { { "alphpabet", "", "", "" }, { "alphanum", "", "", "" } },
- pos = 1
- }, messages={ {
- content = { { "stuff" } },
- kind = "echomsg"
- } }, showmode={ { "-- Keyword Local completion (^N^P) ", 3 }, { "match 1 of 2", 4 } }}
- feed('<c-p>')
- screen:expect{grid=[[
- alphpabet |
- alphanum |
- alphpabet^ |
- {1:~ }|
- {1:~ }|
- ]], popupmenu={
- anchor = { 1, 2, 0 },
- items = { { "alphpabet", "", "", "" }, { "alphanum", "", "", "" } },
- pos = 0
- }, messages={ {
- content = { { "stuff" } },
- kind = "echomsg"
- } }, showmode={ { "-- Keyword Local completion (^N^P) ", 3 }, { "match 2 of 2", 4 } }}
- feed("<esc>:messages<cr>")
- screen:expect{grid=[[
- alphpabet |
- alphanum |
- alphpabe^t |
- {1:~ }|
- {1:~ }|
- ]], messages={
- {kind="echomsg", content={{"stuff"}}},
- }, showmode={
- { "-- INSERT --", 3 }
- }}
- end)
- it('&showmode with macro-recording message', function()
- feed('qq')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], showmode={ { "recording @q", 3 } }}
- feed('i')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], showmode={ { "-- INSERT --recording @q", 3 } }}
- feed('<esc>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], showmode={ { "recording @q", 3 } }}
- feed('q')
- screen:expect([[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]])
- end)
- it('shows macro-recording message with &noshowmode', function()
- command("set noshowmode")
- feed('qq')
- -- also check mode to avoid immediate success
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], showmode={ { "recording @q", 3 } }, mode="normal"}
- feed('i')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], showmode={ { "recording @q", 3 } }, mode="insert"}
- feed('<esc>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], showmode={ { "recording @q", 3 } }, mode="normal"}
- feed('q')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], mode="normal"}
- end)
- it('supports &showcmd and &ruler', function()
- command('set showcmd ruler')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], ruler={ { "0,0-1 All" } }}
- feed('i')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], showmode={ { "-- INSERT --", 3 } }, ruler={ { "0,1 All" } }}
- feed('abcde<cr>12345<esc>')
- screen:expect{grid=[[
- abcde |
- 1234^5 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], ruler={ { "2,5 All" } }}
- feed('d')
- screen:expect{grid=[[
- abcde |
- 1234^5 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], showcmd={ { "d" } }, ruler={ { "2,5 All" } }}
- feed('<esc>^')
- screen:expect{grid=[[
- abcde |
- ^12345 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], ruler={ { "2,1 All" } }}
- feed('d')
- screen:expect{grid=[[
- abcde |
- ^12345 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], showcmd={ { "d" } }, ruler={ { "2,1 All" } }}
- feed('i')
- screen:expect{grid=[[
- abcde |
- ^12345 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], showcmd={ { "di" } }, ruler={ { "2,1 All" } }}
- feed('w')
- screen:expect{grid=[[
- abcde |
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], ruler={ { "2,0-1 All" } }}
- -- when ruler is part of statusline it is not externalized.
- -- this will be added as part of future ext_statusline support
- command("set laststatus=2")
- screen:expect([[
- abcde |
- ^ |
- {1:~ }|
- {1:~ }|
- {6:<o Name] [+] 2,0-1 All}|
- ]])
- end)
- it('keeps history of message of different kinds', function()
- feed(':echomsg "howdy"<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={{
- content = {{ "howdy" }}, kind = "echomsg"}
- }}
- -- always test a message without kind. If this one gets promoted to a
- -- category, add a new message without kind.
- feed('<c-c>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={{
- content = {{ "Type :qa and press <Enter> to exit Nvim" }},
- kind = ""}
- }}
- feed(':echoerr "bork"<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={{
- content = {{ "bork", 2 }}, kind = "echoerr"}
- }}
- feed(':echo "xyz"<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={{
- content = {{ "xyz" }}, kind = "echo"}
- }}
- feed(':call nosuchfunction()<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={{
- content = {{ "E117: Unknown function: nosuchfunction", 2 }},
- kind = "emsg"}
- }}
- feed(':messages<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={
- {kind="echomsg", content={{"howdy"}}},
- {kind="", content={{"Type :qa and press <Enter> to exit Nvim"}}},
- {kind="echoerr", content={{"bork", 2}}},
- {kind="emsg", content={{"E117: Unknown function: nosuchfunction", 2}}}
- }}
- end)
- it('implies ext_cmdline and ignores cmdheight', function()
- eq(0, eval('&cmdheight'))
- feed(':set cmdheight=1')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], cmdline={{
- content = { { "set cmdheight=1" } },
- firstc = ":",
- pos = 15 }
- }}
- feed('<cr>')
- screen:expect([[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]])
- eq(0, eval('&cmdheight'))
- -- normally this would be an error
- feed(':set cmdheight=0')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], cmdline={{
- content = { { "set cmdheight=0" } },
- firstc = ":",
- pos = 15 }
- }}
- feed('<cr>')
- screen:expect([[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]])
- eq(0, eval('&cmdheight'))
- end)
- it('supports multiline messages from lua', function()
- feed(':lua error("such\\nmultiline\\nerror")<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={{
- content = {{'E5108: Error executing lua [string ":lua"]:1: such\nmultiline\nerror', 2}},
- kind = "lua_error"
- }}}
- end)
- it('supports multiline messages from rpc', function()
- feed(':call rpcrequest(1, "test_method")<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={{
- content = {{"Error invoking 'test_method' on channel 1:\ncomplete\nerror\n\nmessage", 2}},
- kind = "rpc_error"
- }}, request_cb=function (name)
- if name == "test_method" then
- set_method_error("complete\nerror\n\nmessage")
- end
- end}
- end)
- it('wildmode=list', function()
- screen:try_resize(25, 7)
- screen:set_option('ext_popupmenu', false)
- command('set wildmenu wildmode=list')
- feed(':set wildm<tab>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]], messages={{
- content = {{'wildmenu wildmode'}},
- kind = '',
- }},
- cmdline={{
- firstc = ':',
- content = {{ 'set wildm' }},
- pos = 9,
- }}}
- end)
- it('hides prompt_for_number messages', function()
- command('set spell')
- feed('ihelllo<esc>')
- feed('z=')
- screen:expect{grid=[[
- {9:helllo} |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:^~ }|
- ]], messages={
- {content = { { 'Change "helllo" to:\n 1 "Hello"\n 2 "Hallo"\n 3 "Hullo"\nType number and <Enter> or click with the mouse (q or empty cancels): ' } }, kind = ""}
- }}
- feed('1')
- screen:expect{grid=[[
- {9:helllo} |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:^~ }|
- ]], messages={
- {content = { { 'Change "helllo" to:\n 1 "Hello"\n 2 "Hallo"\n 3 "Hullo"\nType number and <Enter> or click with the mouse (q or empty cancels): ' } }, kind = ""},
- { content = { { "1" } }, kind = "" }
- }}
- feed('<cr>')
- screen:expect{grid=[[
- ^Hello |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]]}
- end)
- end)
- describe('ui/builtin messages', function()
- local screen
- before_each(function()
- clear()
- screen = Screen.new(60, 7)
- screen:attach({rgb=true, ext_popupmenu=true})
- screen:set_default_attr_ids({
- [1] = {bold = true, foreground = Screen.colors.Blue1},
- [2] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
- [3] = {bold = true, reverse = true},
- [4] = {bold = true, foreground = Screen.colors.SeaGreen4},
- [5] = {foreground = Screen.colors.Blue1},
- [6] = {bold = true, foreground = Screen.colors.Magenta},
- [7] = {background = Screen.colors.Grey20},
- [8] = {reverse = true},
- [9] = {background = Screen.colors.LightRed}
- })
- end)
- it('supports multiline messages from rpc', function()
- feed(':call rpcrequest(1, "test_method")<cr>')
- screen:expect{grid=[[
- {3: }|
- {2:Error invoking 'test_method' on channel 1:} |
- {2:complete} |
- {2:error} |
- |
- {2:message} |
- {4:Press ENTER or type command to continue}^ |
- ]], request_cb=function (name)
- if name == "test_method" then
- set_method_error("complete\nerror\n\nmessage")
- end
- end}
- end)
- it(':hi Group output', function()
- screen:try_resize(70,7)
- feed(':hi ErrorMsg<cr>')
- screen:expect([[
- |
- {1:~ }|
- {1:~ }|
- {3: }|
- :hi ErrorMsg |
- ErrorMsg {2:xxx} {5:ctermfg=}15 {5:ctermbg=}1 {5:guifg=}White {5:guibg=}Red |
- {4:Press ENTER or type command to continue}^ |
- ]])
- feed('<cr>')
- screen:try_resize(30,7)
- feed(':hi ErrorMsg<cr>')
- screen:expect([[
- :hi ErrorMsg |
- ErrorMsg {2:xxx} {5:ctermfg=}15 |
- {5:ctermbg=}1 |
- {5:guifg=}White|
- {5:guibg=}Red |
- {4:Press ENTER or type command to}|
- {4: continue}^ |
- ]])
- feed('<cr>')
- -- screen size doesn't affect internal output #10285
- eq('ErrorMsg xxx ctermfg=15 ctermbg=1 guifg=White guibg=Red',
- meths.exec("hi ErrorMsg", true))
- end)
- it(':syntax list langGroup output', function()
- command("syntax on")
- command("set syntax=vim")
- screen:try_resize(110,7)
- feed(':syntax list vimComment<cr>')
- screen:expect([[
- {6:--- Syntax items ---} |
- vimComment {5:xxx} {5:match} /\s"[^\-:.%#=*].*$/ms=s+1,lc=1 {5:excludenl} {5:contains}=@vimCommentGroup,vimCommentString |
- |
- {5:match} /\<endif\s\+".*$/ms=s+5,lc=5 {5:contains}=@vimCommentGroup,vimCommentString |
- {5:match} /\<else\s\+".*$/ms=s+4,lc=4 {5:contains}=@vimCommentGroup,vimCommentString |
- {5:links to} Comment |
- {4:Press ENTER or type command to continue}^ |
- ]])
- feed('<cr>')
- screen:try_resize(55,7)
- feed(':syntax list vimComment<cr>')
- screen:expect([[
- |
- {5:match} /\<endif\s\+".*$/ms=s+5,lc=5 |
- {5:contains}=@vimCommentGroup,vimCommentString |
- {5:match} /\<else\s\+".*$/ms=s+4,lc=4 {5:c}|
- {5:ontains}=@vimCommentGroup,vimCommentString |
- {5:links to} Comment |
- {4:Press ENTER or type command to continue}^ |
- ]])
- feed('<cr>')
- -- ignore final whitespace inside string
- -- luacheck: push ignore
- eq([[--- Syntax items ---
- vimComment xxx match /\s"[^\-:.%#=*].*$/ms=s+1,lc=1 excludenl contains=@vimCommentGroup,vimCommentString
- match /\<endif\s\+".*$/ms=s+5,lc=5 contains=@vimCommentGroup,vimCommentString
- match /\<else\s\+".*$/ms=s+4,lc=4 contains=@vimCommentGroup,vimCommentString
- links to Comment]],
- meths.exec('syntax list vimComment', true))
- -- luacheck: pop
- end)
- it('supports ruler with laststatus=0', function()
- command("set ruler laststatus=0")
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- 0,0-1 All |
- ]]}
- command("hi MsgArea guibg=#333333")
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {7: 0,0-1 All }|
- ]]}
- command("set rulerformat=%15(%c%V\\ %p%%%)")
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {7: 0,0-1 100% }|
- ]]}
- end)
- it('supports echo with CRLF line separators', function()
- feed(':echo "line 1\\r\\nline 2"<cr>')
- screen:expect{grid=[[
- |
- {1:~ }|
- {1:~ }|
- {3: }|
- line 1 |
- line 2 |
- {4:Press ENTER or type command to continue}^ |
- ]]}
- feed('<cr>:echo "abc\\rz"<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- zbc |
- ]]}
- end)
- it('redraws NOT_VALID correctly after message', function()
- -- edge case: only one window was set NOT_VALID. Orginal report
- -- used :make, but fake it using one command to set the current
- -- window NOT_VALID and another to show a long message.
- command("set more")
- feed(':new<cr><c-w><c-w>')
- screen:expect{grid=[[
- |
- {1:~ }|
- {8:[No Name] }|
- ^ |
- {1:~ }|
- {3:[No Name] }|
- :new |
- ]]}
- feed(':set colorcolumn=10 | digraphs<cr>')
- screen:expect{grid=[[
- :set colorcolumn=10 | digraphs |
- NU {5:^@} 10 SH {5:^A} 1 SX {5:^B} 2 EX {5:^C} 3 |
- ET {5:^D} 4 EQ {5:^E} 5 AK {5:^F} 6 BL {5:^G} 7 |
- BS {5:^H} 8 HT {5:^I} 9 LF {5:^@} 10 VT {5:^K} 11 |
- FF {5:^L} 12 CR {5:^M} 13 SO {5:^N} 14 SI {5:^O} 15 |
- DL {5:^P} 16 D1 {5:^Q} 17 D2 {5:^R} 18 D3 {5:^S} 19 |
- {4:-- More --}^ |
- ]]}
- feed('q')
- screen:expect{grid=[[
- |
- {1:~ }|
- {8:[No Name] }|
- ^ {9: } |
- {1:~ }|
- {3:[No Name] }|
- |
- ]]}
- -- edge case: just covers statusline
- feed(':set colorcolumn=5 | lua error("x\\n\\nx")<cr>')
- screen:expect{grid=[[
- |
- {1:~ }|
- {3: }|
- {2:E5108: Error executing lua [string ":lua"]:1: x} |
- |
- {2:x} |
- {4:Press ENTER or type command to continue}^ |
- ]]}
- feed('<cr>')
- screen:expect{grid=[[
- |
- {1:~ }|
- {8:[No Name] }|
- ^ {9: } |
- {1:~ }|
- {3:[No Name] }|
- |
- ]]}
- -- edge case: just covers lowest window line
- feed(':set colorcolumn=5 | lua error("x\\n\\n\\nx")<cr>')
- screen:expect{grid=[[
- |
- {3: }|
- {2:E5108: Error executing lua [string ":lua"]:1: x} |
- |
- |
- {2:x} |
- {4:Press ENTER or type command to continue}^ |
- ]]}
- feed('<cr>')
- screen:expect{grid=[[
- |
- {1:~ }|
- {8:[No Name] }|
- ^ {9: } |
- {1:~ }|
- {3:[No Name] }|
- |
- ]]}
- end)
- end)
- describe('ui/ext_messages', function()
- local screen
- before_each(function()
- clear{args_rm={'--headless'}, args={"--cmd", "set shortmess-=I"}}
- screen = Screen.new(80, 24)
- screen:attach({rgb=true, ext_messages=true, ext_popupmenu=true})
- screen:set_default_attr_ids({
- [1] = {bold = true, foreground = Screen.colors.Blue1},
- [2] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
- [3] = {bold = true},
- [4] = {bold = true, foreground = Screen.colors.SeaGreen4},
- [5] = {foreground = Screen.colors.Blue1},
- })
- end)
- it('supports intro screen', function()
- -- intro message is not externalized. But check that it still works.
- -- Note parts of it depends on version or is indeterministic. We ignore those parts.
- screen:expect([[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {MATCH:.*}|
- {1:~ }|
- {1:~ }Nvim is open source and freely distributable{1: }|
- {1:~ }https://neovim.io/#chat{1: }|
- {1:~ }|
- {1:~ }type :help nvim{5:<Enter>} if you are new! {1: }|
- {1:~ }type :checkhealth{5:<Enter>} to optimize Nvim{1: }|
- {1:~ }type :q{5:<Enter>} to exit {1: }|
- {1:~ }type :help{5:<Enter>} for help {1: }|
- {1:~ }|
- {MATCH:.*}|
- {MATCH:.*}|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]])
- feed("<c-l>")
- screen:expect([[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ]])
- feed(":intro<cr>")
- screen:expect{grid=[[
- |
- |
- |
- |
- |
- |
- {MATCH:.*}|
- |
- Nvim is open source and freely distributable |
- https://neovim.io/#chat |
- |
- type :help nvim{5:<Enter>} if you are new! |
- type :checkhealth{5:<Enter>} to optimize Nvim |
- type :q{5:<Enter>} to exit |
- type :help{5:<Enter>} for help |
- |
- {MATCH:.*}|
- {MATCH:.*}|
- |
- |
- |
- |
- |
- |
- ]], messages={
- {content = { { "Press ENTER or type command to continue", 4 } }, kind = "return_prompt" }
- }}
- end)
- end)
- describe('ui/msg_puts_printf', function()
- it('output multibyte characters correctly', function()
- local screen
- local cmd = ''
- local locale_dir = test_build_dir..'/share/locale/ja/LC_MESSAGES'
- clear({env={LANG='ja_JP.UTF-8'}})
- screen = Screen.new(25, 5)
- screen:attach()
- if iswin() then
- if os.execute('chcp 932 > NUL 2>&1') ~= 0 then
- pending('missing japanese language features', function() end)
- return
- else
- cmd = 'chcp 932 > NULL & '
- end
- else
- if (exc_exec('lang ja_JP.UTF-8') ~= 0) then
- pending('Locale ja_JP.UTF-8 not supported', function() end)
- return
- elseif helpers.isCI() then
- -- Fails non--Windows CI. Message catalog direcotry issue?
- pending('fails on unix CI', function() end)
- return
- end
- end
- os.execute('cmake -E make_directory '..locale_dir)
- os.execute('cmake -E copy '..test_build_dir..'/src/nvim/po/ja.mo '..locale_dir..'/nvim.mo')
- cmd = cmd..'"'..nvim_prog..'" -u NONE -i NONE -Es -V1'
- command([[call termopen(']]..cmd..[[')]])
- screen:expect([[
- ^Exモードに入ります. ノー |
- マルモードに戻るには"visu|
- al"と入力してください. |
- : |
- |
- ]])
- os.execute('cmake -E remove_directory '..test_build_dir..'/share')
- end)
- end)
- describe('pager', function()
- local screen
- before_each(function()
- clear()
- screen = Screen.new(35, 8)
- screen:attach()
- screen:set_default_attr_ids({
- [1] = {bold = true, foreground = Screen.colors.Blue1},
- [2] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
- [3] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red, special=Screen.colors.Yellow},
- [4] = {bold = true, foreground = Screen.colors.SeaGreen4},
- [5] = {special = Screen.colors.Yellow},
- [6] = {special = Screen.colors.Yellow, bold = true, foreground = Screen.colors.SeaGreen4},
- [7] = {foreground = Screen.colors.Grey0, background = Screen.colors.Grey100},
- [8] = {foreground = Screen.colors.Gray90, background = Screen.colors.Grey100},
- [9] = {foreground = tonumber('0x00000c'), background = Screen.colors.Grey100},
- [10] = {background = Screen.colors.Grey100, bold = true, foreground = tonumber('0xe5e5ff')},
- [11] = {background = Screen.colors.Grey100, bold = true, foreground = tonumber ('0x2b8452')},
- [12] = {bold = true, reverse = true},
- })
- command("set more")
- exec_lua('_G.x = ...', [[
- Lorem ipsum dolor sit amet, consectetur
- adipisicing elit, sed do eiusmod tempor
- incididunt ut labore et dolore magna aliqua.
- Ut enim ad minim veniam, quis nostrud xercitation
- ullamco laboris nisi ut
- aliquip ex ea commodo consequat.]])
- end)
- it('can be quit', function()
- screen:try_resize(25,5)
- feed(':echon join(map(range(0, &lines*10), "v:val"), "\\n")<cr>')
- screen:expect{grid=[[
- 0 |
- 1 |
- 2 |
- 3 |
- {4:-- More --}^ |
- ]]}
- feed('q')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- |
- ]]}
- end)
- it('handles wrapped lines with line scroll', function()
- feed(':lua error(_G.x)<cr>')
- screen:expect{grid=[[
- {2:E5108: Error executing lua [string }|
- {2:":lua"]:1: Lorem ipsum dolor sit am}|
- {2:et, consectetur} |
- {2:adipisicing elit, sed do eiusmod te}|
- {2:mpor} |
- {2:incididunt ut labore et dolore magn}|
- {2:a aliqua.} |
- {4:-- More --}^ |
- ]]}
- feed('j')
- screen:expect{grid=[[
- {2:":lua"]:1: Lorem ipsum dolor sit am}|
- {2:et, consectetur} |
- {2:adipisicing elit, sed do eiusmod te}|
- {2:mpor} |
- {2:incididunt ut labore et dolore magn}|
- {2:a aliqua.} |
- {2:Ut enim ad minim veniam, quis nostr}|
- {4:-- More --}^ |
- ]]}
- feed('k')
- screen:expect{grid=[[
- {2:E5108: Error executing lua [string }|
- {2:":lua"]:1: Lorem ipsum dolor sit am}|
- {2:et, consectetur} |
- {2:adipisicing elit, sed do eiusmod te}|
- {2:mpor} |
- {2:incididunt ut labore et dolore magn}|
- {2:a aliqua.} |
- {4:-- More --}^ |
- ]]}
- feed('j')
- screen:expect{grid=[[
- {2:":lua"]:1: Lorem ipsum dolor sit am}|
- {2:et, consectetur} |
- {2:adipisicing elit, sed do eiusmod te}|
- {2:mpor} |
- {2:incididunt ut labore et dolore magn}|
- {2:a aliqua.} |
- {2:Ut enim ad minim veniam, quis nostr}|
- {4:-- More --}^ |
- ]]}
- end)
- it('handles wrapped lines with page scroll', function()
- feed(':lua error(_G.x)<cr>')
- screen:expect{grid=[[
- {2:E5108: Error executing lua [string }|
- {2:":lua"]:1: Lorem ipsum dolor sit am}|
- {2:et, consectetur} |
- {2:adipisicing elit, sed do eiusmod te}|
- {2:mpor} |
- {2:incididunt ut labore et dolore magn}|
- {2:a aliqua.} |
- {4:-- More --}^ |
- ]]}
- feed('d')
- screen:expect{grid=[[
- {2:incididunt ut labore et dolore magn}|
- {2:a aliqua.} |
- {2:Ut enim ad minim veniam, quis nostr}|
- {2:ud xercitation} |
- {2:ullamco laboris nisi ut} |
- {2:aliquip ex ea commodo consequat.} |
- {4:Press ENTER or type command to cont}|
- {4:inue}^ |
- ]]}
- feed('u')
- screen:expect{grid=[[
- {2:E5108: Error executing lua [string }|
- {2:":lua"]:1: Lorem ipsum dolor sit am}|
- {2:et, consectetur} |
- {2:adipisicing elit, sed do eiusmod te}|
- {2:mpor} |
- {2:incididunt ut labore et dolore magn}|
- {2:a aliqua.} |
- {4:-- More --}^ |
- ]]}
- feed('d')
- screen:expect{grid=[[
- {2:mpor} |
- {2:incididunt ut labore et dolore magn}|
- {2:a aliqua.} |
- {2:Ut enim ad minim veniam, quis nostr}|
- {2:ud xercitation} |
- {2:ullamco laboris nisi ut} |
- {2:aliquip ex ea commodo consequat.} |
- {4:-- More --}^ |
- ]]}
- end)
- it('handles wrapped lines with line scroll and MsgArea highlight', function()
- command("hi MsgArea guisp=Yellow")
- feed(':lua error(_G.x)<cr>')
- screen:expect{grid=[[
- {3:E5108: Error executing lua [string }|
- {3:":lua"]:1: Lorem ipsum dolor sit am}|
- {3:et, consectetur}{5: }|
- {3:adipisicing elit, sed do eiusmod te}|
- {3:mpor}{5: }|
- {3:incididunt ut labore et dolore magn}|
- {3:a aliqua.}{5: }|
- {6:-- More --}{5:^ }|
- ]]}
- feed('j')
- screen:expect{grid=[[
- {3:":lua"]:1: Lorem ipsum dolor sit am}|
- {3:et, consectetur}{5: }|
- {3:adipisicing elit, sed do eiusmod te}|
- {3:mpor}{5: }|
- {3:incididunt ut labore et dolore magn}|
- {3:a aliqua.}{5: }|
- {3:Ut enim ad minim veniam, quis nostr}|
- {6:-- More --}{5:^ }|
- ]]}
- feed('k')
- screen:expect{grid=[[
- {3:E5108: Error executing lua [string }|
- {3:":lua"]:1: Lorem ipsum dolor sit am}|
- {3:et, consectetur}{5: }|
- {3:adipisicing elit, sed do eiusmod te}|
- {3:mpor}{5: }|
- {3:incididunt ut labore et dolore magn}|
- {3:a aliqua.}{5: }|
- {6:-- More --}{5:^ }|
- ]]}
- feed('j')
- screen:expect{grid=[[
- {3:":lua"]:1: Lorem ipsum dolor sit am}|
- {3:et, consectetur}{5: }|
- {3:adipisicing elit, sed do eiusmod te}|
- {3:mpor}{5: }|
- {3:incididunt ut labore et dolore magn}|
- {3:a aliqua.}{5: }|
- {3:Ut enim ad minim veniam, quis nostr}|
- {6:-- More --}{5:^ }|
- ]]}
- end)
- it('handles wrapped lines with page scroll and MsgArea highlight', function()
- command("hi MsgArea guisp=Yellow")
- feed(':lua error(_G.x)<cr>')
- screen:expect{grid=[[
- {3:E5108: Error executing lua [string }|
- {3:":lua"]:1: Lorem ipsum dolor sit am}|
- {3:et, consectetur}{5: }|
- {3:adipisicing elit, sed do eiusmod te}|
- {3:mpor}{5: }|
- {3:incididunt ut labore et dolore magn}|
- {3:a aliqua.}{5: }|
- {6:-- More --}{5:^ }|
- ]]}
- feed('d')
- screen:expect{grid=[[
- {3:incididunt ut labore et dolore magn}|
- {3:a aliqua.}{5: }|
- {3:Ut enim ad minim veniam, quis nostr}|
- {3:ud xercitation}{5: }|
- {3:ullamco laboris nisi ut}{5: }|
- {3:aliquip ex ea commodo consequat.}{5: }|
- {6:Press ENTER or type command to cont}|
- {6:inue}{5:^ }|
- ]]}
- feed('u')
- screen:expect{grid=[[
- {3:E5108: Error executing lua [string }|
- {3:":lua"]:1: Lorem ipsum dolor sit am}|
- {3:et, consectetur}{5: }|
- {3:adipisicing elit, sed do eiusmod te}|
- {3:mpor}{5: }|
- {3:incididunt ut labore et dolore magn}|
- {3:a aliqua.}{5: }|
- {6:-- More --}{5:^ }|
- ]]}
- feed('d')
- screen:expect{grid=[[
- {3:mpor}{5: }|
- {3:incididunt ut labore et dolore magn}|
- {3:a aliqua.}{5: }|
- {3:Ut enim ad minim veniam, quis nostr}|
- {3:ud xercitation}{5: }|
- {3:ullamco laboris nisi ut}{5: }|
- {3:aliquip ex ea commodo consequat.}{5: }|
- {6:-- More --}{5:^ }|
- ]]}
- end)
- it('preserves MsgArea highlighting after more prompt', function()
- screen:try_resize(70,6)
- command("hi MsgArea guisp=Yellow")
- command("map x Lorem ipsum labore et dolore magna aliqua")
- command("map y adipisicing elit")
- command("map z incididunt ut")
- command("map a labore et dolore")
- command("map b ex ea commodo")
- command("map xx yy")
- command("map xy yz")
- feed(':map<cr>')
- screen:expect{grid=[[
- {5: a labore et dolore }|
- {5: b ex ea commodo }|
- {5: xy yz }|
- {5: xx yy }|
- {5: x Lorem ipsum labore et dolore magna aliqua }|
- {6:-- More --}{5:^ }|
- ]]}
- feed('j')
- screen:expect{grid=[[
- {5: b ex ea commodo }|
- {5: xy yz }|
- {5: xx yy }|
- {5: x Lorem ipsum labore et dolore magna aliqua }|
- {5: y adipisicing elit }|
- {6:-- More --}{5:^ }|
- ]]}
- feed('j')
- screen:expect{grid=[[
- {5: xy yz }|
- {5: xx yy }|
- {5: x Lorem ipsum labore et dolore magna aliqua }|
- {5: y adipisicing elit }|
- {5: z incididunt ut }|
- {6:Press ENTER or type command to continue}{5:^ }|
- ]]}
- end)
- it('clears "-- more --" message', function()
- command("hi MsgArea guisp=Yellow blend=10")
- feed(':echon join(range(20), "\\n")<cr>')
- screen:expect{grid=[[
- {7:0}{8: }|
- {9:1}{10: }|
- {9:2}{10: }|
- {9:3}{10: }|
- {9:4}{10: }|
- {9:5}{10: }|
- {9:6}{10: }|
- {11:--}{8: }{11:More}{8: }{11:--}{8:^ }|
- ]]}
- feed('j')
- screen:expect{grid=[[
- {7:1}{8: }|
- {9:2}{10: }|
- {9:3}{10: }|
- {9:4}{10: }|
- {9:5}{10: }|
- {9:6}{10: }|
- {9:7}{10: }|
- {11:--}{8: }{11:More}{8: }{11:--}{8:^ }|
- ]]}
- feed('k')
- screen:expect{grid=[[
- {7:0}{8: }{7:)}{8: }|
- {9:1}{10: }|
- {9:2}{10: }|
- {9:3}{10: }|
- {9:4}{10: }|
- {9:5}{10: }|
- {9:6}{10: }|
- {11:--}{8: }{11:More}{8: }{11:--}{8:^ }|
- ]]}
- feed('j')
- screen:expect{grid=[[
- {7:1}{8: }|
- {9:2}{10: }|
- {9:3}{10: }|
- {9:4}{10: }|
- {9:5}{10: }|
- {9:6}{10: }|
- {9:7}{10: }|
- {11:--}{8: }{11:More}{8: }{11:--}{8:^ }|
- ]]}
- end)
- it('with :!cmd does not crash on resize', function()
- feed(':!sleep 1<cr>')
- screen:expect{grid=[[
- |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {12: }|
- :!sleep 1 |
- |
- ]]}
- -- not processed while command is executing
- async_meths.ui_try_resize(35, 5)
- -- TODO(bfredl): ideally it should be processed just
- -- before the "press ENTER" prompt though
- screen:expect{grid=[[
- |
- {1:~ }|
- {1:~ }|
- {12: }|
- :!sleep 1 |
- |
- {4:Press ENTER or type command to cont}|
- {4:inue}^ |
- ]]}
- feed('<cr>')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- |
- ]]}
- end)
- it('can be resized', function()
- feed(':lua error(_G.x)<cr>')
- screen:expect{grid=[[
- {2:E5108: Error executing lua [string }|
- {2:":lua"]:1: Lorem ipsum dolor sit am}|
- {2:et, consectetur} |
- {2:adipisicing elit, sed do eiusmod te}|
- {2:mpor} |
- {2:incididunt ut labore et dolore magn}|
- {2:a aliqua.} |
- {4:-- More --}^ |
- ]]}
- -- responds to resize, but text is not reflown
- screen:try_resize(45, 5)
- screen:expect{grid=[[
- {2:adipisicing elit, sed do eiusmod te} |
- {2:mpor} |
- {2:incididunt ut labore et dolore magn} |
- {2:a aliqua.} |
- {4:-- More --}^ |
- ]]}
- -- can create empty space, as the command hasn't output the text below yet.
- -- text is not reflown; existing lines get cut
- screen:try_resize(30, 12)
- screen:expect{grid=[[
- {2:E5108: Error executing lua [st}|
- {2:":lua"]:1: Lorem ipsum dolor s}|
- {2:et, consectetur} |
- {2:adipisicing elit, sed do eiusm}|
- {2:mpore} |
- {2:incididunt ut labore et dolore}|
- {2:a aliqua.} |
- |
- |
- |
- |
- {4:-- More --}^ |
- ]]}
- -- continues in a mostly consistent state, but only new lines are
- -- wrapped at the new screen size.
- feed('<cr>')
- screen:expect{grid=[[
- {2:et, consectetur} |
- {2:adipisicing elit, sed do eiusm}|
- {2:mpore} |
- {2:incididunt ut labore et dolore}|
- {2:a aliqua.} |
- {2:Ut enim ad minim veniam, quis }|
- {2:nostrud xercitation} |
- {2:ullamco laboris nisi ut} |
- {2:aliquip ex ea commodo consequa}|
- {2:t.} |
- {4:Press ENTER or type command to}|
- {4: continue}^ |
- ]]}
- feed('q')
- screen:expect{grid=[[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- |
- ]]}
- end)
- end)
|