patch 8.1.2225: the "last used" info of a buffer is under used
Problem: The "last used" info of a buffer is under used.
Solution: Add "lastused" to getbufinfo(). List buffers sorted by last-used
field. (Andi Massimino, closes #4722)
diff --git a/src/testdir/test_bufwintabinfo.vim b/src/testdir/test_bufwintabinfo.vim
index ee22ebd..b4b8a10 100644
--- a/src/testdir/test_bufwintabinfo.vim
+++ b/src/testdir/test_bufwintabinfo.vim
@@ -139,3 +139,15 @@
set foldlevel=0
endif
endfunc
+
+function Test_getbufinfo_lastused()
+ call test_settime(1234567)
+ edit Xtestfile1
+ enew
+ call test_settime(7654321)
+ edit Xtestfile2
+ enew
+ call assert_equal(getbufinfo('Xtestfile1')[0].lastused, 1234567)
+ call assert_equal(getbufinfo('Xtestfile2')[0].lastused, 7654321)
+ call test_settime(0)
+endfunc
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index 55f35e7..57dff41 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -767,3 +767,48 @@
endtry
bw!
endfunc
+
+func Test_buffers_lastused()
+ " check that buffers are sorted by time when wildmode has lastused
+ call test_settime(1550020000) " middle
+ edit bufa
+ enew
+ call test_settime(1550030000) " newest
+ edit bufb
+ enew
+ call test_settime(1550010000) " oldest
+ edit bufc
+ enew
+ call test_settime(0)
+ enew
+
+ call assert_equal(['bufa', 'bufb', 'bufc'],
+ \ getcompletion('', 'buffer'))
+
+ let save_wildmode = &wildmode
+ set wildmode=full:lastused
+
+ let cap = "\<c-r>=execute('let X=getcmdline()')\<cr>"
+ call feedkeys(":b \<tab>" .. cap .. "\<esc>", 'xt')
+ call assert_equal('b bufb', X)
+ call feedkeys(":b \<tab>\<tab>" .. cap .. "\<esc>", 'xt')
+ call assert_equal('b bufa', X)
+ call feedkeys(":b \<tab>\<tab>\<tab>" .. cap .. "\<esc>", 'xt')
+ call assert_equal('b bufc', X)
+ enew
+
+ edit other
+ call feedkeys(":b \<tab>" .. cap .. "\<esc>", 'xt')
+ call assert_equal('b bufb', X)
+ call feedkeys(":b \<tab>\<tab>" .. cap .. "\<esc>", 'xt')
+ call assert_equal('b bufa', X)
+ call feedkeys(":b \<tab>\<tab>\<tab>" .. cap .. "\<esc>", 'xt')
+ call assert_equal('b bufc', X)
+ enew
+
+ let &wildmode = save_wildmode
+
+ bwipeout bufa
+ bwipeout bufb
+ bwipeout bufc
+endfunc
diff --git a/src/testdir/test_excmd.vim b/src/testdir/test_excmd.vim
index 509d78d..992fc3d 100644
--- a/src/testdir/test_excmd.vim
+++ b/src/testdir/test_excmd.vim
@@ -19,3 +19,28 @@
normal vv
call assert_fails(":'<,'>echo 1", 'E481:')
endfunc
+
+func Test_buffers_lastused()
+ call test_settime(localtime() - 2000) " middle
+ edit bufa
+ enew
+ call test_settime(localtime() - 10) " newest
+ edit bufb
+ enew
+ call test_settime(1550010000) " oldest
+ edit bufc
+ enew
+ call test_settime(0)
+ enew
+
+ let ls = split(execute('buffers t', 'silent!'), '\n')
+ let bufs = ls->map({i,v->split(v, '"\s*')[1:2]})
+ call assert_equal(['bufb', 'bufa', 'bufc'], bufs[1:]->map({i,v->v[0]}))
+ call assert_match('1[0-3] seconds ago', bufs[1][1])
+ call assert_match('\d\d:\d\d:\d\d', bufs[2][1])
+ call assert_match('2019/02/1\d \d\d:\d\d:00', bufs[3][1])
+
+ bwipeout bufa
+ bwipeout bufb
+ bwipeout bufc
+endfunc