diff src/testdir/test_viminfo.vim @ 9240:636cfa97200e v7.4.1903

commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d Author: Bram Moolenaar <Bram@vim.org> Date: Mon Jun 6 21:07:52 2016 +0200 patch 7.4.1903 Problem: When writing viminfo merging current history with history in viminfo may drop recent history entries. Solution: Add new format for viminfo lines, use it for history entries. Use a timestamp for ordering the entries. Add test_settime(). Add the viminfo version. Does not do merging on timestamp yet.
author Christian Brabandt <cb@256bit.org>
date Mon, 06 Jun 2016 21:15:07 +0200
parents fb764adba294
children 26c7bf23ec1d
line wrap: on
line diff
--- a/src/testdir/test_viminfo.vim
+++ b/src/testdir/test_viminfo.vim
@@ -1,6 +1,7 @@
 " Test for reading and writing .viminfo
 
 function Test_read_and_write()
+  call histdel(':')
   let lines = [
 	\ '# comment line',
 	\ '*encoding=utf-8',
@@ -18,14 +19,16 @@ function Test_read_and_write()
   for line in lines
     if line[0] == '|'
       if done == 0
+	call assert_equal('|1,2', line)
+      elseif done == 1
 	call assert_equal('|copied as-is', line)
-      elseif done == 1
+      elseif done == 2
 	call assert_equal('|and one more', line)
       endif
       let done += 1
     endif
   endfor
-  call assert_equal(2, done)
+  call assert_equal(3, done)
 
   call delete('Xviminfo')
 endfunc
@@ -48,3 +51,68 @@ func Test_global_vars()
   call delete('Xviminfo')
   set viminfo-=!
 endfunc
+
+func Test_cmdline_history()
+  call histdel(':')
+  call test_settime(11)
+  call histadd(':', "echo 'one'")
+  call test_settime(12)
+  " split into two lines
+  let long800 = repeat(" 'eight'", 100)
+  call histadd(':', "echo " . long800)
+  call test_settime(13)
+  " split into three lines
+  let long1400 = repeat(" 'fourteeeeen'", 100)
+  call histadd(':', "echo " . long1400)
+  wviminfo Xviminfo
+  let lines = readfile('Xviminfo')
+  let done_colon = 0
+  let done_bar = 0
+  let lnum = 0
+  while lnum < len(lines)
+    let line = lines[lnum] | let lnum += 1
+    if line[0] == ':'
+      if done_colon == 0
+	call assert_equal(":\x161408", line)
+	let line = lines[lnum] | let lnum += 1
+	call assert_equal('<echo ' . long1400, line)
+      elseif done_colon == 1
+	call assert_equal(":\x16808", line)
+	let line = lines[lnum] | let lnum += 1
+	call assert_equal("<echo " . long800, line)
+      elseif done_colon == 2
+	call assert_equal(":echo 'one'", line)
+      endif
+      let done_colon += 1
+    elseif line[0:4] == '|2,0,'
+      if done_bar == 0
+	call assert_equal("|2,0,13,,>1407", line)
+	let line = lines[lnum] | let lnum += 1
+	call assert_equal('|<"echo ' . long1400[0:484], line)
+	let line = lines[lnum] | let lnum += 1
+	call assert_equal('|<' . long1400[485:974], line)
+	let line = lines[lnum] | let lnum += 1
+	call assert_equal('|<' . long1400[975:] . '"', line)
+      elseif done_bar == 1
+	call assert_equal('|2,0,12,,>807', line)
+	let line = lines[lnum] | let lnum += 1
+	call assert_equal('|<"echo ' . long800[0:484], line)
+	let line = lines[lnum] | let lnum += 1
+	call assert_equal('|<' . long800[485:] . '"', line)
+      elseif done_bar == 2
+	call assert_equal("|2,0,11,,\"echo 'one'\"", line)
+      endif
+      let done_bar += 1
+    endif
+  endwhile
+  call assert_equal(3, done_colon)
+  call assert_equal(3, done_bar)
+
+  call histdel(':')
+  rviminfo Xviminfo
+  call assert_equal("echo " . long1400, histget(':', -1))
+  call assert_equal("echo " . long800, histget(':', -2))
+  call assert_equal("echo 'one'", histget(':', -3))
+
+  call delete('Xviminfo')
+endfunc