Bram Moolenaar | f273245 | 2018-06-03 14:47:35 +0200 | [diff] [blame] | 1 | " Tests for setting 'buftype' to "prompt" |
| 2 | |
Bram Moolenaar | b46fecd | 2019-06-15 17:58:09 +0200 | [diff] [blame^] | 3 | source check.vim |
| 4 | CheckFeature channel |
Bram Moolenaar | f273245 | 2018-06-03 14:47:35 +0200 | [diff] [blame] | 5 | |
| 6 | source shared.vim |
| 7 | source screendump.vim |
| 8 | |
Bram Moolenaar | 6b810d9 | 2018-06-04 17:28:44 +0200 | [diff] [blame] | 9 | func CanTestPromptBuffer() |
Bram Moolenaar | f273245 | 2018-06-03 14:47:35 +0200 | [diff] [blame] | 10 | " We need to use a terminal window to be able to feed keys without leaving |
| 11 | " Insert mode. |
| 12 | if !has('terminal') |
Bram Moolenaar | 6b810d9 | 2018-06-04 17:28:44 +0200 | [diff] [blame] | 13 | return 0 |
Bram Moolenaar | 1149382 | 2018-06-03 15:08:09 +0200 | [diff] [blame] | 14 | endif |
| 15 | if has('win32') |
Bram Moolenaar | 6b810d9 | 2018-06-04 17:28:44 +0200 | [diff] [blame] | 16 | " TODO: make the tests work on MS-Windows |
| 17 | return 0 |
Bram Moolenaar | f273245 | 2018-06-03 14:47:35 +0200 | [diff] [blame] | 18 | endif |
Bram Moolenaar | 6b810d9 | 2018-06-04 17:28:44 +0200 | [diff] [blame] | 19 | return 1 |
| 20 | endfunc |
| 21 | |
| 22 | func WriteScript(name) |
Bram Moolenaar | f273245 | 2018-06-03 14:47:35 +0200 | [diff] [blame] | 23 | call writefile([ |
| 24 | \ 'func TextEntered(text)', |
| 25 | \ ' if a:text == "exit"', |
Bram Moolenaar | 71ef1ba | 2018-06-21 12:07:04 +0200 | [diff] [blame] | 26 | \ ' " Reset &modified to allow the buffer to be closed.', |
| 27 | \ ' set nomodified', |
Bram Moolenaar | f273245 | 2018-06-03 14:47:35 +0200 | [diff] [blame] | 28 | \ ' stopinsert', |
| 29 | \ ' close', |
| 30 | \ ' else', |
| 31 | \ ' " Add the output above the current prompt.', |
| 32 | \ ' call append(line("$") - 1, "Command: \"" . a:text . "\"")', |
| 33 | \ ' " Reset &modified to allow the buffer to be closed.', |
| 34 | \ ' set nomodified', |
| 35 | \ ' call timer_start(20, {id -> TimerFunc(a:text)})', |
| 36 | \ ' endif', |
| 37 | \ 'endfunc', |
| 38 | \ '', |
| 39 | \ 'func TimerFunc(text)', |
| 40 | \ ' " Add the output above the current prompt.', |
| 41 | \ ' call append(line("$") - 1, "Result: \"" . a:text . "\"")', |
Bram Moolenaar | 3339d3d | 2018-06-03 17:10:40 +0200 | [diff] [blame] | 42 | \ ' " Reset &modified to allow the buffer to be closed.', |
| 43 | \ ' set nomodified', |
Bram Moolenaar | f273245 | 2018-06-03 14:47:35 +0200 | [diff] [blame] | 44 | \ 'endfunc', |
| 45 | \ '', |
| 46 | \ 'call setline(1, "other buffer")', |
Bram Moolenaar | 3339d3d | 2018-06-03 17:10:40 +0200 | [diff] [blame] | 47 | \ 'set nomodified', |
Bram Moolenaar | f273245 | 2018-06-03 14:47:35 +0200 | [diff] [blame] | 48 | \ 'new', |
| 49 | \ 'set buftype=prompt', |
| 50 | \ 'call prompt_setcallback(bufnr(""), function("TextEntered"))', |
| 51 | \ 'startinsert', |
Bram Moolenaar | 6b810d9 | 2018-06-04 17:28:44 +0200 | [diff] [blame] | 52 | \ ], a:name) |
| 53 | endfunc |
| 54 | |
| 55 | func Test_prompt_basic() |
| 56 | if !CanTestPromptBuffer() |
| 57 | return |
| 58 | endif |
| 59 | let scriptName = 'XpromptscriptBasic' |
| 60 | call WriteScript(scriptName) |
| 61 | |
| 62 | let buf = RunVimInTerminal('-S ' . scriptName, {}) |
Bram Moolenaar | f273245 | 2018-06-03 14:47:35 +0200 | [diff] [blame] | 63 | call WaitForAssert({-> assert_equal('%', term_getline(buf, 1))}) |
| 64 | |
| 65 | call term_sendkeys(buf, "hello\<CR>") |
| 66 | call WaitForAssert({-> assert_equal('% hello', term_getline(buf, 1))}) |
| 67 | call WaitForAssert({-> assert_equal('Command: "hello"', term_getline(buf, 2))}) |
| 68 | call WaitForAssert({-> assert_equal('Result: "hello"', term_getline(buf, 3))}) |
| 69 | |
| 70 | call term_sendkeys(buf, "exit\<CR>") |
| 71 | call WaitForAssert({-> assert_equal('other buffer', term_getline(buf, 1))}) |
| 72 | |
| 73 | call StopVimInTerminal(buf) |
Bram Moolenaar | 6b810d9 | 2018-06-04 17:28:44 +0200 | [diff] [blame] | 74 | call delete(scriptName) |
| 75 | endfunc |
| 76 | |
| 77 | func Test_prompt_editing() |
| 78 | if !CanTestPromptBuffer() |
| 79 | return |
| 80 | endif |
| 81 | let scriptName = 'XpromptscriptEditing' |
| 82 | call WriteScript(scriptName) |
| 83 | |
| 84 | let buf = RunVimInTerminal('-S ' . scriptName, {}) |
| 85 | call WaitForAssert({-> assert_equal('%', term_getline(buf, 1))}) |
| 86 | |
| 87 | let bs = "\<BS>" |
| 88 | call term_sendkeys(buf, "hello" . bs . bs) |
| 89 | call WaitForAssert({-> assert_equal('% hel', term_getline(buf, 1))}) |
| 90 | |
| 91 | let left = "\<Left>" |
| 92 | call term_sendkeys(buf, left . left . left . bs . '-') |
| 93 | call WaitForAssert({-> assert_equal('% -hel', term_getline(buf, 1))}) |
| 94 | |
| 95 | let end = "\<End>" |
| 96 | call term_sendkeys(buf, end . "x") |
| 97 | call WaitForAssert({-> assert_equal('% -helx', term_getline(buf, 1))}) |
| 98 | |
| 99 | call term_sendkeys(buf, "\<C-U>exit\<CR>") |
| 100 | call WaitForAssert({-> assert_equal('other buffer', term_getline(buf, 1))}) |
| 101 | |
| 102 | call StopVimInTerminal(buf) |
| 103 | call delete(scriptName) |
Bram Moolenaar | f273245 | 2018-06-03 14:47:35 +0200 | [diff] [blame] | 104 | endfunc |