1" Tests for the history functions 2 3if !has('cmdline_hist') 4 finish 5endif 6 7set history=7 8 9function History_Tests(hist) 10 " First clear the history 11 call histadd(a:hist, 'dummy') 12 call assert_true(histdel(a:hist)) 13 call assert_equal(-1, histnr(a:hist)) 14 call assert_equal('', histget(a:hist)) 15 16 call assert_true(histadd(a:hist, 'ls')) 17 call assert_true(histadd(a:hist, 'buffers')) 18 call assert_equal('buffers', histget(a:hist)) 19 call assert_equal('ls', histget(a:hist, -2)) 20 call assert_equal('ls', histget(a:hist, 1)) 21 call assert_equal('', histget(a:hist, 5)) 22 call assert_equal('', histget(a:hist, -5)) 23 call assert_equal(2, histnr(a:hist)) 24 call assert_true(histdel(a:hist, 2)) 25 call assert_false(histdel(a:hist, 7)) 26 call assert_equal(1, histnr(a:hist)) 27 call assert_equal('ls', histget(a:hist, -1)) 28 29 call assert_true(histadd(a:hist, 'buffers')) 30 call assert_true(histadd(a:hist, 'ls')) 31 call assert_equal('ls', histget(a:hist, -1)) 32 call assert_equal(4, histnr(a:hist)) 33 34 let a=execute('history ' . a:hist) 35 call assert_match("^\n # \\S* history\n 3 buffers\n> 4 ls$", a) 36 let a=execute('history all') 37 call assert_match("^\n # .* history\n 3 buffers\n> 4 ls", a) 38 39 if len(a:hist) > 0 40 let a=execute('history ' . a:hist . ' 2') 41 call assert_match("^\n # \\S* history$", a) 42 let a=execute('history ' . a:hist . ' 3') 43 call assert_match("^\n # \\S* history\n 3 buffers$", a) 44 let a=execute('history ' . a:hist . ' 4') 45 call assert_match("^\n # \\S* history\n> 4 ls$", a) 46 let a=execute('history ' . a:hist . ' 3,4') 47 call assert_match("^\n # \\S* history\n 3 buffers\n> 4 ls$", a) 48 let a=execute('history ' . a:hist . ' -1') 49 call assert_match("^\n # \\S* history\n> 4 ls$", a) 50 let a=execute('history ' . a:hist . ' -2') 51 call assert_match("^\n # \\S* history\n 3 buffers$", a) 52 let a=execute('history ' . a:hist . ' -2,') 53 call assert_match("^\n # \\S* history\n 3 buffers\n> 4 ls$", a) 54 let a=execute('history ' . a:hist . ' -3') 55 call assert_match("^\n # \\S* history$", a) 56 endif 57 58 " Test for removing entries matching a pattern 59 for i in range(1, 3) 60 call histadd(a:hist, 'text_' . i) 61 endfor 62 call assert_true(histdel(a:hist, 'text_\d\+')) 63 call assert_equal('ls', histget(a:hist, -1)) 64 65 " Test for freeing the entire history list 66 for i in range(1, 7) 67 call histadd(a:hist, 'text_' . i) 68 endfor 69 call histdel(a:hist) 70 for i in range(1, 7) 71 call assert_equal('', histget(a:hist, i)) 72 call assert_equal('', histget(a:hist, i - 7 - 1)) 73 endfor 74endfunction 75 76function Test_History() 77 for h in ['cmd', ':', '', 'search', '/', '?', 'expr', '=', 'input', '@', 'debug', '>'] 78 call History_Tests(h) 79 endfor 80 81 " Negative tests 82 call assert_false(histdel('abc')) 83 call assert_equal('', histget('abc')) 84 call assert_fails('call histdel([])', 'E730:') 85 call assert_equal('', histget(10)) 86 call assert_fails('call histget([])', 'E730:') 87 call assert_equal(-1, histnr('abc')) 88 call assert_fails('call histnr([])', 'E730:') 89endfunction 90 91function Test_Search_history_window() 92 new 93 call setline(1, ['a', 'b', 'a', 'b']) 94 1 95 call feedkeys("/a\<CR>", 'xt') 96 call assert_equal('a', getline('.')) 97 1 98 call feedkeys("/b\<CR>", 'xt') 99 call assert_equal('b', getline('.')) 100 1 101 " select the previous /a command 102 call feedkeys("q/kk\<CR>", 'x!') 103 call assert_equal('a', getline('.')) 104 call assert_equal('a', @/) 105 bwipe! 106endfunc 107