xref: /vim-8.2.3635/src/testdir/test_history.vim (revision ba3ff539)
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