Mercurial > vim
view src/testdir/test_history.vim @ 15721:e84eb23f4670 v8.1.0868
patch 8.1.0868: crash if triggering garbage collector after a function call
commit https://github.com/vim/vim/commit/889da2f2438c8168f9a25dc776360b81109bad44
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Feb 2 14:02:30 2019 +0100
patch 8.1.0868: crash if triggering garbage collector after a function call
Problem: Crash if triggering garbage collector after a function call.
(Michael Henry)
Solution: Don't call the garbage collector right away, do it later.
(closes #3894)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 02 Feb 2019 14:15:12 +0100 |
parents | 1946487c74ba |
children | f38fcbf343ce |
line wrap: on
line source
" Tests for the history functions if !has('cmdline_hist') finish endif set history=7 function History_Tests(hist) " First clear the history call histadd(a:hist, 'dummy') call assert_true(histdel(a:hist)) call assert_equal(-1, histnr(a:hist)) call assert_equal('', histget(a:hist)) call assert_true(histadd(a:hist, 'ls')) call assert_true(histadd(a:hist, 'buffers')) call assert_equal('buffers', histget(a:hist)) call assert_equal('ls', histget(a:hist, -2)) call assert_equal('ls', histget(a:hist, 1)) call assert_equal('', histget(a:hist, 5)) call assert_equal('', histget(a:hist, -5)) call assert_equal(2, histnr(a:hist)) call assert_true(histdel(a:hist, 2)) call assert_false(histdel(a:hist, 7)) call assert_equal(1, histnr(a:hist)) call assert_equal('ls', histget(a:hist, -1)) call assert_true(histadd(a:hist, 'buffers')) call assert_true(histadd(a:hist, 'ls')) call assert_equal('ls', histget(a:hist, -1)) call assert_equal(4, histnr(a:hist)) let a=execute('history ' . a:hist) call assert_match("^\n # \\S* history\n 3 buffers\n> 4 ls$", a) let a=execute('history all') call assert_match("^\n # .* history\n 3 buffers\n> 4 ls", a) if len(a:hist) > 0 let a=execute('history ' . a:hist . ' 2') call assert_match("^\n # \\S* history$", a) let a=execute('history ' . a:hist . ' 3') call assert_match("^\n # \\S* history\n 3 buffers$", a) let a=execute('history ' . a:hist . ' 4') call assert_match("^\n # \\S* history\n> 4 ls$", a) let a=execute('history ' . a:hist . ' 3,4') call assert_match("^\n # \\S* history\n 3 buffers\n> 4 ls$", a) let a=execute('history ' . a:hist . ' -1') call assert_match("^\n # \\S* history\n> 4 ls$", a) let a=execute('history ' . a:hist . ' -2') call assert_match("^\n # \\S* history\n 3 buffers$", a) let a=execute('history ' . a:hist . ' -2,') call assert_match("^\n # \\S* history\n 3 buffers\n> 4 ls$", a) let a=execute('history ' . a:hist . ' -3') call assert_match("^\n # \\S* history$", a) endif " Test for removing entries matching a pattern for i in range(1, 3) call histadd(a:hist, 'text_' . i) endfor call assert_true(histdel(a:hist, 'text_\d\+')) call assert_equal('ls', histget(a:hist, -1)) " Test for freeing the entire history list for i in range(1, 7) call histadd(a:hist, 'text_' . i) endfor call histdel(a:hist) for i in range(1, 7) call assert_equal('', histget(a:hist, i)) call assert_equal('', histget(a:hist, i - 7 - 1)) endfor endfunction function Test_History() for h in ['cmd', ':', '', 'search', '/', '?', 'expr', '=', 'input', '@', 'debug', '>'] call History_Tests(h) endfor " Negative tests call assert_false(histdel('abc')) call assert_equal('', histget('abc')) call assert_fails('call histdel([])', 'E730:') call assert_equal('', histget(10)) call assert_fails('call histget([])', 'E730:') call assert_equal(-1, histnr('abc')) call assert_fails('call histnr([])', 'E730:') endfunction function Test_Search_history_window() new call setline(1, ['a', 'b', 'a', 'b']) 1 call feedkeys("/a\<CR>", 'xt') call assert_equal('a', getline('.')) 1 call feedkeys("/b\<CR>", 'xt') call assert_equal('b', getline('.')) 1 " select the previous /a command call feedkeys("q/kk\<CR>", 'x!') call assert_equal('a', getline('.')) call assert_equal('a', @/) bwipe! endfunc function Test_history_completion() call feedkeys(":history \<C-A>\<C-B>\"\<CR>", 'tx') call assert_equal('"history / : = > ? @ all cmd debug expr input search', @:) endfunc