diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2016-10-29 17:28:24 +0200 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2016-10-30 13:10:29 +0100 |
commit | 7cd204dbfa9beb6e59c82d49b029704b9edd4cdb (patch) | |
tree | 033b1e0e8f1cd6efe9f66cc1033eb0b004e38fc2 /test/functional/ex_cmds/global_spec.lua | |
parent | 6143cfdeec4e67cdf73879b92fe2a80b5b36bc1b (diff) | |
download | rneovim-7cd204dbfa9beb6e59c82d49b029704b9edd4cdb.tar.gz rneovim-7cd204dbfa9beb6e59c82d49b029704b9edd4cdb.tar.bz2 rneovim-7cd204dbfa9beb6e59c82d49b029704b9edd4cdb.zip |
ex_global: Catch CTRL-C even if it is mapped.
Problem: If CTRL-C is mapped, it does not interrupt :global output.
Solution: clear `mapped_ctrl_c` during :global.
Diffstat (limited to 'test/functional/ex_cmds/global_spec.lua')
-rw-r--r-- | test/functional/ex_cmds/global_spec.lua | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/test/functional/ex_cmds/global_spec.lua b/test/functional/ex_cmds/global_spec.lua new file mode 100644 index 0000000000..81a0ef3248 --- /dev/null +++ b/test/functional/ex_cmds/global_spec.lua @@ -0,0 +1,74 @@ +local helpers = require('test.functional.helpers')(after_each) +local Screen = require('test.functional.ui.screen') +local clear, feed, source = helpers.clear, helpers.feed, helpers.source + +if helpers.pending_win32(pending) then return end + +describe(':global', function() + before_each(function() + clear() + end) + + it('is interrupted by mapped CTRL-C', function() + if os.getenv("TRAVIS") and os.getenv("CLANG_SANITIZER") == "ASAN_UBSAN" then + -- XXX: ASAN_UBSAN is too slow to react to the CTRL-C. + pending("", function() end) + return + end + + source([[ + set nomore + set undolevels=-1 + nnoremap <C-C> <NOP> + for i in range(0, 99999) + put ='XXX' + endfor + put ='ZZZ' + 1 + .delete + ]]) + + local screen = Screen.new(52, 6) + screen:attach() + screen:set_default_attr_ids({ + [0] = {foreground = Screen.colors.White, + background = Screen.colors.Red}, + [1] = {bold = true, + foreground = Screen.colors.SeaGreen} + }) + + screen:expect([[ + ^XXX | + XXX | + XXX | + XXX | + XXX | + | + ]]) + + local function test_ctrl_c(ms) + feed(":global/^/p<CR>") + helpers.sleep(ms) + feed("<C-C>") + screen:expect([[ + XXX | + XXX | + XXX | + XXX | + {0:Interrupted} | + Interrupt: {1:Press ENTER or type command to continue}^ | + ]]) + end + + -- The test is time-sensitive. Try with different sleep values. + local ms_values = {10, 50, 100} + for i, ms in ipairs(ms_values) do + if i < #ms_values then + local status, _ = pcall(test_ctrl_c, ms) + if status then break end + else -- Call the last attempt directly. + test_ctrl_c(ms) + end + end + end) +end) |