summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-03-05 21:21:24 +0100
committerBram Moolenaar <Bram@vim.org>2016-03-05 21:21:24 +0100
commit119d4693e06e68d4f099aa7287e375ae3d265fd0 (patch)
treeb5414f3b9e6e5e7e5658e50cd6533bcda25b9c5a
parent5983ad0b038fa689653246cb304fd43e8ae39a78 (diff)
downloadvim-git-119d4693e06e68d4f099aa7287e375ae3d265fd0.tar.gz
patch 7.4.1494v7.4.1494
Problem: clr_history() does not work properly. Solution: Increment hisptr. Add a test. (Yegappan Lakshmanan)
-rw-r--r--src/ex_getln.c1
-rw-r--r--src/testdir/Make_all.mak1
-rw-r--r--src/testdir/test_history.vim65
-rw-r--r--src/version.c2
4 files changed, 69 insertions, 0 deletions
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 96c3a8ceb..f9791f589 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -5783,6 +5783,7 @@ clr_history(int histype)
{
vim_free(hisptr->hisstr);
clear_hist_entry(hisptr);
+ hisptr++;
}
hisidx[histype] = -1; /* mark history as cleared */
hisnum[histype] = 0; /* reset identifier counter */
diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index 854220f0e..5ad1718c6 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -175,6 +175,7 @@ NEW_TESTS = test_arglist.res \
test_cdo.res \
test_channel.res \
test_hardcopy.res \
+ test_history.res \
test_increment.res \
test_json.res \
test_langmap.res \
diff --git a/src/testdir/test_history.vim b/src/testdir/test_history.vim
new file mode 100644
index 000000000..ee6acfffc
--- /dev/null
+++ b/src/testdir/test_history.vim
@@ -0,0 +1,65 @@
+" 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))
+
+ " 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
diff --git a/src/version.c b/src/version.c
index fe5d00eda..ce21ae7f4 100644
--- a/src/version.c
+++ b/src/version.c
@@ -744,6 +744,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1494,
+/**/
1493,
/**/
1492,