123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424 |
- local t = require('test.testutil')
- local n = require('test.functional.testnvim')()
- local Screen = require('test.functional.ui.screen')
- local clear = n.clear
- local command = n.command
- local exec = n.exec
- local expect_exit = n.expect_exit
- local feed = n.feed
- local fn = n.fn
- local read_file = t.read_file
- local eq = t.eq
- local write_file = t.write_file
- local is_os = t.is_os
- describe(':confirm command dialog', function()
- local screen
- local function start_new()
- clear()
- screen = Screen.new(75, 20)
- end
- -- Test for the :confirm command dialog
- -- oldtest: Test_confirm_cmd()
- it('works', function()
- write_file('Xfoo', 'foo1\n')
- write_file('Xbar', 'bar1\n')
- -- Test for saving all the modified buffers
- start_new()
- exec([[
- set nomore
- new Xfoo
- call setline(1, 'foo2')
- new Xbar
- call setline(1, 'bar2')
- wincmd b
- ]])
- feed(':confirm qall\n')
- screen:expect([[
- bar2 |
- {1:~ }|*5
- {2:Xbar [+] }|
- foo2 |
- {1:~ }|*4
- {2:Xfoo [+] }|
- |
- {1:~ }|*2
- {3: }|
- :confirm qall |
- {6:Save changes to "Xbar"?} |
- {6:[Y]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: }^ |
- ]])
- expect_exit(1000, feed, 'A')
- eq('foo2\n', read_file('Xfoo'))
- eq('bar2\n', read_file('Xbar'))
- -- Test for discarding all the changes to modified buffers
- start_new()
- exec([[
- set nomore
- new Xfoo
- call setline(1, 'foo3')
- new Xbar
- call setline(1, 'bar3')
- wincmd b
- ]])
- feed(':confirm qall\n')
- screen:expect([[
- bar3 |
- {1:~ }|*5
- {2:Xbar [+] }|
- foo3 |
- {1:~ }|*4
- {2:Xfoo [+] }|
- |
- {1:~ }|*2
- {3: }|
- :confirm qall |
- {6:Save changes to "Xbar"?} |
- {6:[Y]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: }^ |
- ]])
- expect_exit(1000, feed, 'D')
- eq('foo2\n', read_file('Xfoo'))
- eq('bar2\n', read_file('Xbar'))
- -- Test for saving and discarding changes to some buffers
- start_new()
- exec([[
- set nomore
- new Xfoo
- call setline(1, 'foo4')
- new Xbar
- call setline(1, 'bar4')
- wincmd b
- ]])
- feed(':confirm qall\n')
- screen:expect([[
- bar4 |
- {1:~ }|*5
- {2:Xbar [+] }|
- foo4 |
- {1:~ }|*4
- {2:Xfoo [+] }|
- |
- {1:~ }|*2
- {3: }|
- :confirm qall |
- {6:Save changes to "Xbar"?} |
- {6:[Y]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: }^ |
- ]])
- feed('N')
- screen:expect([[
- bar4 |
- {1:~ }|*5
- {2:Xbar [+] }|
- foo4 |
- {1:~ }|*4
- {2:Xfoo [+] }|
- |
- {3: }|
- :confirm qall |
- {6:Save changes to "Xbar"?} |
- |
- {6:Save changes to "Xfoo"?} |
- {6:[Y]es, (N)o, (C)ancel: }^ |
- ]])
- expect_exit(1000, feed, 'Y')
- eq('foo4\n', read_file('Xfoo'))
- eq('bar2\n', read_file('Xbar'))
- os.remove('Xfoo')
- os.remove('Xbar')
- end)
- -- oldtest: Test_confirm_cmd_cancel()
- it('can be cancelled', function()
- -- Test for closing a window with a modified buffer
- start_new()
- screen:try_resize(75, 10)
- exec([[
- set nohidden nomore
- new
- call setline(1, 'abc')
- ]])
- feed(':confirm close\n')
- screen:expect([[
- abc |
- {1:~ }|*3
- {3:[No Name] [+] }|
- |
- {3: }|
- :confirm close |
- {6:Save changes to "Untitled"?} |
- {6:[Y]es, (N)o, (C)ancel: }^ |
- ]])
- feed('C')
- screen:expect([[
- ^abc |
- {1:~ }|*3
- {3:[No Name] [+] }|
- |
- {1:~ }|*2
- {2:[No Name] }|
- |
- ]])
- feed(':confirm close\n')
- screen:expect([[
- abc |
- {1:~ }|*3
- {3:[No Name] [+] }|
- |
- {3: }|
- :confirm close |
- {6:Save changes to "Untitled"?} |
- {6:[Y]es, (N)o, (C)ancel: }^ |
- ]])
- feed('N')
- screen:expect([[
- ^ |
- {1:~ }|*8
- |
- ]])
- end)
- -- oldtest: Test_confirm_q_wq()
- it('works with :q and :wq', function()
- write_file('Xfoo', 'foo')
- start_new()
- screen:try_resize(75, 8)
- exec([[
- set hidden nomore
- call setline(1, 'abc')
- edit Xfoo
- set nofixendofline
- ]])
- feed(':confirm q\n')
- screen:expect([[
- foo |
- {1:~ }|*3
- {3: }|
- :confirm q |
- {6:Save changes to "Untitled"?} |
- {6:[Y]es, (N)o, (C)ancel: }^ |
- ]])
- feed('C')
- screen:expect([[
- ^abc |
- {1:~ }|*6
- |
- ]])
- command('edit Xfoo')
- feed(':confirm wq\n')
- screen:expect([[
- foo |
- {1:~ }|*3
- {3: }|
- "Xfoo" [noeol] 1L, 3B written |
- {6:Save changes to "Untitled"?} |
- {6:[Y]es, (N)o, (C)ancel: }^ |
- ]])
- feed('C')
- screen:expect([[
- ^abc |
- {1:~ }|*6
- "Xfoo" [noeol] 1L, 3B written |
- ]])
- os.remove('Xfoo')
- end)
- -- oldtest: Test_confirm_write_ro()
- it('works when writing a read-only file', function()
- write_file('Xconfirm_write_ro', 'foo\n')
- start_new()
- screen:try_resize(75, 8)
- exec([[
- set ruler
- set nobackup ff=unix cmdheight=2
- edit Xconfirm_write_ro
- norm Abar
- ]])
- -- Try to write with 'ro' option.
- feed(':set ro | confirm w\n')
- screen:expect([[
- foobar |
- {1:~ }|*2
- {3: }|
- :set ro | confirm w |
- {6:'readonly' option is set for "Xconfirm_write_ro".} |
- {6:Do you wish to write anyway?} |
- {6:(Y)es, [N]o: }^ |
- ]])
- feed('N')
- screen:expect([[
- fooba^r |
- {1:~ }|*5
- |
- 1,6 All |
- ]])
- eq('foo\n', read_file('Xconfirm_write_ro'))
- feed(':confirm w\n')
- screen:expect([[
- foobar |
- {1:~ }|*2
- {3: }|
- :confirm w |
- {6:'readonly' option is set for "Xconfirm_write_ro".} |
- {6:Do you wish to write anyway?} |
- {6:(Y)es, [N]o: }^ |
- ]])
- feed('Y')
- if is_os('win') then
- screen:expect([[
- foobar |
- {1:~ }|
- {3: }|
- :confirm w |
- {6:'readonly' option is set for "Xconfirm_write_ro".} |
- {6:Do you wish to write anyway?} |
- "Xconfirm_write_ro" [unix] 1L, 7B written |
- {6:Press ENTER or type command to continue}^ |
- ]])
- else
- screen:expect([[
- foobar |
- {1:~ }|
- {3: }|
- :confirm w |
- {6:'readonly' option is set for "Xconfirm_write_ro".} |
- {6:Do you wish to write anyway?} |
- "Xconfirm_write_ro" 1L, 7B written |
- {6:Press ENTER or type command to continue}^ |
- ]])
- end
- eq('foobar\n', read_file('Xconfirm_write_ro'))
- feed('<CR>') -- suppress hit-enter prompt
- -- Try to write with read-only file permissions.
- fn.setfperm('Xconfirm_write_ro', 'r--r--r--')
- feed(':set noro | silent undo | confirm w\n')
- screen:expect([[
- foobar |
- {1:~ }|
- {3: }|
- :set noro | silent undo | confirm w |
- {6:File permissions of "Xconfirm_write_ro" are read-only.} |
- {6:It may still be possible to write it.} |
- {6:Do you wish to try?} |
- {6:(Y)es, [N]o: }^ |
- ]])
- feed('Y')
- if is_os('win') then
- screen:expect([[
- foobar |
- {3: }|
- :set noro | silent undo | confirm w |
- {6:File permissions of "Xconfirm_write_ro" are read-only.} |
- {6:It may still be possible to write it.} |
- {6:Do you wish to try?} |
- "Xconfirm_write_ro" [unix] 1L, 4B written |
- {6:Press ENTER or type command to continue}^ |
- ]])
- else
- screen:expect([[
- foobar |
- {3: }|
- :set noro | silent undo | confirm w |
- {6:File permissions of "Xconfirm_write_ro" are read-only.} |
- {6:It may still be possible to write it.} |
- {6:Do you wish to try?} |
- "Xconfirm_write_ro" 1L, 4B written |
- {6:Press ENTER or type command to continue}^ |
- ]])
- end
- eq('foo\n', read_file('Xconfirm_write_ro'))
- feed('<CR>') -- suppress hit-enter prompt
- os.remove('Xconfirm_write_ro')
- end)
- -- oldtest: Test_confirm_write_partial_file()
- it('works when writing a partial file', function()
- write_file('Xwrite_partial', 'a\nb\nc\nd\n')
- start_new()
- screen:try_resize(75, 8)
- exec([[
- set ruler
- set nobackup ff=unix cmdheight=2
- edit Xwrite_partial
- ]])
- feed(':confirm 2,3w\n')
- screen:expect([[
- a |
- b |
- c |
- d |
- {3: }|
- :confirm 2,3w |
- {6:Write partial file?} |
- {6:(Y)es, [N]o: }^ |
- ]])
- feed('N')
- screen:expect([[
- ^a |
- b |
- c |
- d |
- {1:~ }|*2
- |
- 1,1 All |
- ]])
- eq('a\nb\nc\nd\n', read_file('Xwrite_partial'))
- os.remove('Xwrite_partial')
- feed(':confirm 2,3w\n')
- screen:expect([[
- a |
- b |
- c |
- d |
- {3: }|
- :confirm 2,3w |
- {6:Write partial file?} |
- {6:(Y)es, [N]o: }^ |
- ]])
- feed('Y')
- if is_os('win') then
- screen:expect([[
- a |
- b |
- c |
- {3: }|
- :confirm 2,3w |
- {6:Write partial file?} |
- "Xwrite_partial" [New][unix] 2L, 4B written |
- {6:Press ENTER or type command to continue}^ |
- ]])
- else
- screen:expect([[
- a |
- b |
- c |
- {3: }|
- :confirm 2,3w |
- {6:Write partial file?} |
- "Xwrite_partial" [New] 2L, 4B written |
- {6:Press ENTER or type command to continue}^ |
- ]])
- end
- eq('b\nc\n', read_file('Xwrite_partial'))
- os.remove('Xwrite_partial')
- end)
- end)
|