aboutsummaryrefslogtreecommitdiff
path: root/test/functional/eval/timer_spec.lua
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2021-09-17 09:16:40 -0700
committerGitHub <noreply@github.com>2021-09-17 09:16:40 -0700
commitd8de4eb685e35646c7d541e9a75bdc296127b7e2 (patch)
tree4bb05ec713856715ac9ba57e5d116eed344511b9 /test/functional/eval/timer_spec.lua
parentd56002f7b722facd97b0958e141c8ed2d01495f7 (diff)
downloadrneovim-d8de4eb685e35646c7d541e9a75bdc296127b7e2.tar.gz
rneovim-d8de4eb685e35646c7d541e9a75bdc296127b7e2.tar.bz2
rneovim-d8de4eb685e35646c7d541e9a75bdc296127b7e2.zip
test: reorg #15698
Problem: Subdirectories like "visual", "insert", "normal" encourage people to separate *related* tests for no good reason. Typically the _mode_ is not the relevant topic of a test (and when it is, _then_ create an appropriate describe() or it()). Solution: - Delete the various `test/functional/<mode>/` subdirectories, move their tests to more meaningful topics. - Rename `…/normal/` to `…/editor/`. - Move or merge `…/visual/*` and `…/insert/*` tests into here where appropriate. - Rename `…/eval/` to `…/vimscript/`. - Move `…/viml/*` into here also. * test(reorg): insert/* => editor/mode_insert_spec.lua * test(reorg): cmdline/* => editor/mode_cmdline_spec.lua * test(reorg): eval core tests => eval_spec.lua
Diffstat (limited to 'test/functional/eval/timer_spec.lua')
-rw-r--r--test/functional/eval/timer_spec.lua265
1 files changed, 0 insertions, 265 deletions
diff --git a/test/functional/eval/timer_spec.lua b/test/functional/eval/timer_spec.lua
deleted file mode 100644
index 9ee0735e40..0000000000
--- a/test/functional/eval/timer_spec.lua
+++ /dev/null
@@ -1,265 +0,0 @@
-local helpers = require('test.functional.helpers')(after_each)
-local Screen = require('test.functional.ui.screen')
-local feed, eq, eval, ok = helpers.feed, helpers.eq, helpers.eval, helpers.ok
-local source, nvim_async, run = helpers.source, helpers.nvim_async, helpers.run
-local clear, command, funcs = helpers.clear, helpers.command, helpers.funcs
-local curbufmeths = helpers.curbufmeths
-local load_adjust = helpers.load_adjust
-local retry = helpers.retry
-
-describe('timers', function()
- before_each(function()
- clear()
- source([[
- let g:val = 0
- func MyHandler(timer)
- let g:val += 1
- endfunc
- ]])
- end)
-
- it('works one-shot', function()
- eq(0, eval("[timer_start(10, 'MyHandler'), g:val][1]"))
- run(nil, nil, nil, load_adjust(100))
- eq(1,eval("g:val"))
- end)
-
- it('works one-shot when repeat=0', function()
- eq(0, eval("[timer_start(10, 'MyHandler', {'repeat': 0}), g:val][1]"))
- run(nil, nil, nil, load_adjust(100))
- eq(1, eval("g:val"))
- end)
-
- it('works with repeat two', function()
- eq(0, eval("[timer_start(10, 'MyHandler', {'repeat': 2}), g:val][1]"))
- run(nil, nil, nil, load_adjust(20))
- retry(nil, load_adjust(300), function()
- eq(2, eval("g:val"))
- end)
- end)
-
- it('are triggered during sleep', function()
- source([[
- let g:val = -1
- func! MyHandler(timer)
- if g:val >= 0
- let g:val += 1
- if g:val == 2
- call timer_stop(a:timer)
- endif
- endif
- endfunc
- ]])
- eval("timer_start(10, 'MyHandler', {'repeat': -1})")
- nvim_async("command", "sleep 10")
- eq(-1, eval("g:val")) -- timer did nothing yet.
- nvim_async("command", "let g:val = 0")
- run(nil, nil, nil, load_adjust(20))
- retry(nil, nil, function()
- eq(2, eval("g:val"))
- end)
- end)
-
- it('works with zero timeout', function()
- -- timer_start does still not invoke the callback immediately
- eq(0, eval("[timer_start(0, 'MyHandler', {'repeat': 1000}), g:val][1]"))
- retry(nil, nil, function()
- eq(1000, eval("g:val"))
- end)
- end)
-
- it('can be started during sleep', function()
- nvim_async("command", "sleep 10")
- -- this also tests that remote requests works during sleep
- eq(0, eval("[timer_start(10, 'MyHandler', {'repeat': 2}), g:val][1]"))
- run(nil, nil, nil, load_adjust(20))
- retry(nil, load_adjust(300), function() eq(2,eval("g:val")) end)
- end)
-
- it('are paused when event processing is disabled', function()
- command("call timer_start(5, 'MyHandler', {'repeat': -1})")
- run(nil, nil, nil, load_adjust(10))
- local count = eval("g:val")
- -- shows two line error message and thus invokes the return prompt.
- -- if we start to allow event processing here, we need to change this test.
- feed(':throw "fatal error"<CR>')
- run(nil, nil, nil, load_adjust(30))
- feed("<cr>")
- local diff = eval("g:val") - count
- assert(0 <= diff and diff <= 4,
- 'expected (0 <= diff <= 4), got: '..tostring(diff))
- end)
-
- it('are triggered in blocking getchar() call', function()
- command("call timer_start(5, 'MyHandler', {'repeat': -1})")
- nvim_async("command", "let g:val = 0 | let g:c = getchar()")
- retry(nil, nil, function()
- local val = eval("g:val")
- ok(val >= 2, "expected >= 2, got: "..tostring(val))
- eq(0, eval("getchar(1)"))
- end)
- feed("c")
- eq(99, eval("g:c"))
- end)
-
- it('can invoke redraw in blocking getchar() call', function()
- local screen = Screen.new(40, 6)
- screen:attach()
- screen:set_default_attr_ids({
- [1] = {bold=true, foreground=Screen.colors.Blue},
- })
-
- curbufmeths.set_lines(0, -1, true, {"ITEM 1", "ITEM 2"})
- source([[
- let g:cont = 0
- func! AddItem(timer)
- if !g:cont
- return
- endif
- call timer_stop(a:timer)
-
- call nvim_buf_set_lines(0, 2, 2, v:true, ['ITEM 3'])
-
- " Meant to test for what Vim tests in Test_peek_and_get_char.
- call getchar(1)
-
- redraw
- endfunc
- ]])
- nvim_async("command", "let g:c2 = getchar()")
- nvim_async("command", "call timer_start("..load_adjust(100)..", 'AddItem', {'repeat': -1})")
-
- screen:expect([[
- ITEM 1 |
- ITEM 2 |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- ^ |
- ]])
- nvim_async("command", "let g:cont = 1")
-
- screen:expect([[
- ITEM 1 |
- ITEM 2 |
- ITEM 3 |
- {1:~ }|
- {1:~ }|
- ^ |
- ]])
-
- feed("3")
- eq(51, eval("g:c2"))
- screen:expect([[
- ^ITEM 1 |
- ITEM 2 |
- ITEM 3 |
- {1:~ }|
- {1:~ }|
- |
- ]])
- end)
-
- it('can be stopped', function()
- local t_init_val = eval("[timer_start(5, 'MyHandler', {'repeat': -1}), g:val]")
- eq(0, t_init_val[2])
- run(nil, nil, nil, load_adjust(30))
- funcs.timer_stop(t_init_val[1])
- local count = eval("g:val")
- run(nil, load_adjust(300), nil, load_adjust(30))
- local count2 = eval("g:val")
- -- when count is eval:ed after timer_stop this should be non-racy
- eq(count, count2)
- end)
-
- it('can be stopped from the handler', function()
- source([[
- func! MyHandler(timer)
- let g:val += 1
- if g:val == 3
- call timer_stop(a:timer)
- " check double stop is ignored
- call timer_stop(a:timer)
- endif
- endfunc
- ]])
- eq(0, eval("g:val"))
- command("call timer_start(10, 'MyHandler', {'repeat': -1})")
- retry(nil, nil, function()
- eq(3, eval("g:val"))
- end)
- end)
-
- it('can have two timers', function()
- source([[
- let g:val2 = 0
- func! MyHandler2(timer)
- let g:val2 += 1
- endfunc
- ]])
- command("call timer_start(2, 'MyHandler', {'repeat': 3})")
- command("call timer_start(4, 'MyHandler2', {'repeat': 2})")
- retry(nil, nil, function()
- eq(3, eval("g:val"))
- eq(2, eval("g:val2"))
- end)
- end)
-
- it('do not crash when processing events in the handler', function()
- source([[
- let g:val = 0
- func! MyHandler(timer)
- call timer_stop(a:timer)
- sleep 10m
- let g:val += 1
- endfunc
- ]])
- command("call timer_start(5, 'MyHandler', {'repeat': 1})")
- run(nil, nil, nil, load_adjust(20))
- retry(nil, load_adjust(150), function()
- eq(1, eval("g:val"))
- end)
- end)
-
-
- it("doesn't mess up the cmdline", function()
- local screen = Screen.new(40, 6)
- screen:attach()
- screen:set_default_attr_ids( {[0] = {bold=true, foreground=255}} )
- source([[
- let g:val = 0
- func! MyHandler(timer)
- while !g:val
- return
- endwhile
- call timer_stop(a:timer)
-
- echo "evil"
- redraw
- let g:val = 2
- endfunc
- ]])
- command("call timer_start(100, 'MyHandler', {'repeat': -1})")
- feed(":good")
- screen:expect([[
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- :good^ |
- ]])
- command('let g:val = 1')
-
- screen:expect{grid=[[
- |
- {0:~ }|
- {0:~ }|
- {0:~ }|
- {0:~ }|
- :good^ |
- ]], intermediate=true, timeout=load_adjust(200)}
-
- eq(2, eval('g:val'))
- end)
-end)