|
|
@@ -0,0 +1,1044 @@
|
|
|
+" MRU plugin unit-tests
|
|
|
+
|
|
|
+" MRU plugin settings
|
|
|
+let MRU_File='vim_mru_file'
|
|
|
+let MRU_Auto_Close=1
|
|
|
+let MRU_Max_Entries=10
|
|
|
+let MRU_buffer_name = '__MRU_Files__'
|
|
|
+
|
|
|
+" Function to log test results
|
|
|
+function! LogResult(test, result)
|
|
|
+ redir >> results.txt
|
|
|
+ silent echon "\r" . a:test . ': ' . a:result . "\n"
|
|
|
+ redir END
|
|
|
+endfunction
|
|
|
+
|
|
|
+" Set the following variable to 1, to profile the MRU plugin
|
|
|
+let s:do_profile=0
|
|
|
+
|
|
|
+" Profile the MRU plugin
|
|
|
+if s:do_profile
|
|
|
+ profile start mru_profile.txt
|
|
|
+ profile! file */mru.vim
|
|
|
+endif
|
|
|
+
|
|
|
+runtime plugin/mru.vim
|
|
|
+
|
|
|
+" Create the files used by the tests
|
|
|
+call writefile(['MRU test file1'], 'file1.txt')
|
|
|
+call writefile(['MRU test file2'], 'file2.txt')
|
|
|
+call writefile(['MRU test file3'], 'file3.txt')
|
|
|
+
|
|
|
+call writefile(['#include <stdio.h', 'int main(){}'], 'abc.c')
|
|
|
+call writefile(['#include <stdlib.h', 'int main(){}'], 'def.c')
|
|
|
+
|
|
|
+" Remove the results from the previous test runs
|
|
|
+call delete('results.txt')
|
|
|
+call delete(MRU_File)
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test1
|
|
|
+" When the MRU list is empty, invoking the MRU command should return an error
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test1'
|
|
|
+
|
|
|
+redir => msg
|
|
|
+MRU
|
|
|
+redir END
|
|
|
+if msg =~# "MRU file list is empty"
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test2
|
|
|
+" Open the MRU window and check the order of files listed in the window
|
|
|
+" Open the MRU window when the window is already opened.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test2'
|
|
|
+
|
|
|
+edit file1.txt
|
|
|
+edit file2.txt
|
|
|
+edit file3.txt
|
|
|
+edit file2.txt
|
|
|
+edit file1.txt
|
|
|
+
|
|
|
+MRU
|
|
|
+MRU
|
|
|
+
|
|
|
+let l = getline(1, "$")
|
|
|
+if l[0] =~# "file1.txt" && l[1] =~# "file2.txt" && l[2] =~# "file3.txt"
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test3
|
|
|
+" Select a file from the MRU window and check whether it is opened
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test3'
|
|
|
+
|
|
|
+" Go to the last but one line
|
|
|
+$
|
|
|
+
|
|
|
+" Select the last file in the MRU window
|
|
|
+exe "normal \<Enter>"
|
|
|
+
|
|
|
+if fnamemodify(bufname('%'), ':p:t') !=# 'file3.txt'
|
|
|
+ call LogResult(test_name, "FAIL (1)")
|
|
|
+else
|
|
|
+ " Make sure the MRU window is closed
|
|
|
+ if bufwinnr(g:MRU_buffer_name) == -1
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+ else
|
|
|
+ call LogResult(test_name, "FAIL (2)")
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test4
|
|
|
+" MRU opens a selected file in the previous/last window
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test4'
|
|
|
+
|
|
|
+" Edit a file and then open a new window, open the MRU window and select the
|
|
|
+" file
|
|
|
+split file1.txt
|
|
|
+only
|
|
|
+below new
|
|
|
+
|
|
|
+MRU
|
|
|
+call search('file2.txt')
|
|
|
+exe "normal \<Enter>"
|
|
|
+
|
|
|
+if winnr() == 2
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test5
|
|
|
+" MRU opens a selected file in the same window if the file is already opened
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test5'
|
|
|
+
|
|
|
+edit file1.txt
|
|
|
+only
|
|
|
+below split file2.txt
|
|
|
+below split file3.txt
|
|
|
+
|
|
|
+MRU
|
|
|
+call search('file1.txt')
|
|
|
+exe "normal \<Enter>"
|
|
|
+
|
|
|
+if winnr() != 1 || fnamemodify(bufname('%'), ':p:t') !=# 'file1.txt'
|
|
|
+ call LogResult(test_name, "FAIL (1)")
|
|
|
+else
|
|
|
+ MRU
|
|
|
+ call search('file2.txt')
|
|
|
+ exe "normal \<Enter>"
|
|
|
+ if winnr() != 2 || fnamemodify(bufname('%'), ':p:t') !=# 'file2.txt'
|
|
|
+ call LogResult(test_name, "FAIL (2)")
|
|
|
+ else
|
|
|
+ MRU
|
|
|
+ call search('file3.txt')
|
|
|
+ exe "normal \<Enter>"
|
|
|
+ if winnr() != 3 || fnamemodify(bufname('%'), ':p:t') !=# 'file3.txt'
|
|
|
+ call LogResult(test_name, "FAIL (3)")
|
|
|
+ else
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+ endif
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test6
|
|
|
+" MRU opens a file selected with 'o' command in a new window
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test6'
|
|
|
+enew | only
|
|
|
+
|
|
|
+edit file1.txt
|
|
|
+below new
|
|
|
+
|
|
|
+MRU
|
|
|
+normal o
|
|
|
+
|
|
|
+if winnr() == 3 && fnamemodify(bufname('%'), ':p:t') ==# 'file1.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test7
|
|
|
+" MRU opens the selected file in a new window if the previous buffer is
|
|
|
+" modified.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test7'
|
|
|
+enew | only
|
|
|
+
|
|
|
+insert
|
|
|
+MRU plugin test
|
|
|
+.
|
|
|
+MRU
|
|
|
+call search('file3.txt')
|
|
|
+exe "normal \<Enter>"
|
|
|
+if winnr() == 1 && winnr('$') == 2 &&
|
|
|
+ \ fnamemodify(bufname('%'), ':p:t') ==# 'file3.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" Discard changes in the new buffer
|
|
|
+wincmd b
|
|
|
+enew!
|
|
|
+only
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test8
|
|
|
+" MRU opens a file selected with 'v' command in read-only mode in the current
|
|
|
+" window.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test8'
|
|
|
+enew | only
|
|
|
+
|
|
|
+MRU
|
|
|
+call search('file1.txt')
|
|
|
+normal v
|
|
|
+let r1 = &readonly
|
|
|
+MRU
|
|
|
+call search('file2.txt')
|
|
|
+exe "normal \<Enter>"
|
|
|
+let r2 = &readonly
|
|
|
+MRU
|
|
|
+call search('file1.txt')
|
|
|
+exe "normal \<Enter>"
|
|
|
+let r3 = &readonly
|
|
|
+if r1 == 1 && r2 == 0 && r3 == 0
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test9
|
|
|
+" Use 'O' in the MRU window to open a file in a veritcally split window
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test9'
|
|
|
+enew | only
|
|
|
+
|
|
|
+edit file1.txt
|
|
|
+MRU
|
|
|
+call search('file2.txt')
|
|
|
+normal O
|
|
|
+let b1 = bufname('%')
|
|
|
+wincmd h
|
|
|
+let b2 = bufname('%')
|
|
|
+wincmd l
|
|
|
+let b3 = bufname('%')
|
|
|
+if winnr('$') == 2 && b1 ==# 'file2.txt' &&
|
|
|
+ \ b2 ==# 'file1.txt' && b3 ==# 'file2.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test10
|
|
|
+" Use 'p' in the MRU window to open a file in the preview window
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test10'
|
|
|
+enew | only
|
|
|
+
|
|
|
+MRU
|
|
|
+call search('file3.txt')
|
|
|
+normal p
|
|
|
+wincmd P
|
|
|
+let p1 = &previewwindow
|
|
|
+let b1 = bufname('%')
|
|
|
+if winnr('$') == 2 && &previewwindow && bufname('%') =~# 'file3.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+pclose
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test11
|
|
|
+" MRU opens a file selected with 't' command in a new tab and the tab
|
|
|
+" is opened at the end
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test11'
|
|
|
+enew | only
|
|
|
+
|
|
|
+tabnew
|
|
|
+tabnew
|
|
|
+tabnew
|
|
|
+tabfirst
|
|
|
+MRU
|
|
|
+call search('file3.txt')
|
|
|
+normal t
|
|
|
+if fnamemodify(bufname('%'), ':p:t') ==# 'file3.txt' && tabpagenr() == 5
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+ call LogResult(test_name, "file = " . fnamemodify(bufname('%'), ':p:t'))
|
|
|
+ call LogResult(test_name, "tab page = " . tabpagenr())
|
|
|
+endif
|
|
|
+
|
|
|
+tabonly
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test12
|
|
|
+" The 'q' command closes the MRU window
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test12'
|
|
|
+enew | only
|
|
|
+
|
|
|
+MRU
|
|
|
+normal q
|
|
|
+if bufwinnr(g:MRU_buffer_name) == -1
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test13
|
|
|
+" A selected file is opened in a new window if the previous window is a
|
|
|
+" preview window
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test13'
|
|
|
+enew | only
|
|
|
+
|
|
|
+setlocal previewwindow
|
|
|
+MRU
|
|
|
+call search('file2.txt')
|
|
|
+exe "normal \<Enter>"
|
|
|
+if winnr() == 1 && winnr('$') == 2 &&
|
|
|
+ \ &previewwindow == 0 &&
|
|
|
+ \ fnamemodify(bufname('%'), ':p:t') ==# 'file2.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" Close the preview window created by this test
|
|
|
+new
|
|
|
+only
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test14
|
|
|
+" A selected file is opened in a new window if the previous window contains
|
|
|
+" a special buffer (used by some other plugin)
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test14'
|
|
|
+enew | only
|
|
|
+
|
|
|
+setlocal buftype=nofile
|
|
|
+MRU
|
|
|
+call search('file3.txt')
|
|
|
+exe "normal \<Enter>"
|
|
|
+if winnr() == 1 && winnr('$') == 2 &&
|
|
|
+ \ &buftype == '' &&
|
|
|
+ \ fnamemodify(bufname('%'), ':p:t') ==# 'file3.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" Discard the special buffer
|
|
|
+enew
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test15
|
|
|
+" If a file selected using the 't' command is already opened in a tab,
|
|
|
+" then jump to that tab (instead of opening a new tab)
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test15'
|
|
|
+enew | only
|
|
|
+
|
|
|
+" Open the test files in the middle window with empty windows at the top and
|
|
|
+" bottom
|
|
|
+edit file1.txt
|
|
|
+above new
|
|
|
+botright new
|
|
|
+tabedit file2.txt
|
|
|
+above new
|
|
|
+botright new
|
|
|
+tabedit file3.txt
|
|
|
+above new
|
|
|
+botright new
|
|
|
+tabfirst
|
|
|
+
|
|
|
+MRU
|
|
|
+call search('file3.txt')
|
|
|
+exe "normal t"
|
|
|
+if tabpagenr() != 3
|
|
|
+ \ || fnamemodify(bufname('%'), ':p:t') !=# 'file3.txt'
|
|
|
+ \ || winnr() != 2
|
|
|
+ call LogResult(test_name, "FAIL (1)")
|
|
|
+else
|
|
|
+ MRU
|
|
|
+ call search('file1.txt')
|
|
|
+ exe "normal t"
|
|
|
+ if tabpagenr() != 1
|
|
|
+ \ || fnamemodify(bufname('%'), ':p:t') !=# 'file1.txt'
|
|
|
+ \ || winnr() != 2
|
|
|
+ call LogResult(test_name, "FAIL (2)")
|
|
|
+ else
|
|
|
+ MRU
|
|
|
+ call search('file2.txt')
|
|
|
+ exe "normal t"
|
|
|
+ if tabpagenr() != 2
|
|
|
+ \ || fnamemodify(bufname('%'), ':p:t') !=# 'file2.txt'
|
|
|
+ \ || winnr() != 2
|
|
|
+ call LogResult(test_name, "FAIL (3)")
|
|
|
+ else
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+ endif
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+" Close all the other tabs
|
|
|
+tabonly
|
|
|
+enew
|
|
|
+only
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test16
|
|
|
+" Open multiple files from the MRU window using the visual mode and by using a
|
|
|
+" count. Each file should be opened in a separate window.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test16'
|
|
|
+enew | only
|
|
|
+
|
|
|
+edit file3.txt
|
|
|
+edit file2.txt
|
|
|
+edit file1.txt
|
|
|
+enew
|
|
|
+MRU
|
|
|
+exe "normal 3\<Enter>"
|
|
|
+if winnr('$') == 3 &&
|
|
|
+ \ bufwinnr('file3.txt') == 1 &&
|
|
|
+ \ bufwinnr('file2.txt') == 2 &&
|
|
|
+ \ bufwinnr('file1.txt') == 3
|
|
|
+ let test_result = 'pass'
|
|
|
+else
|
|
|
+ let test_result = 'FAIL'
|
|
|
+endif
|
|
|
+
|
|
|
+only | enew
|
|
|
+
|
|
|
+if test_result == 'pass'
|
|
|
+ MRU
|
|
|
+ exe "normal V2j\<Enter>"
|
|
|
+ if winnr('$') == 3 &&
|
|
|
+ \ bufwinnr('file1.txt') == 1 &&
|
|
|
+ \ bufwinnr('file2.txt') == 2 &&
|
|
|
+ \ bufwinnr('file3.txt') == 3
|
|
|
+ let test_result = 'pass'
|
|
|
+ else
|
|
|
+ let test_result = 'FAIL'
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+if test_result == 'pass'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test17
|
|
|
+" When the MRU list is updated, the MRU file also should updated.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test17'
|
|
|
+enew | only
|
|
|
+
|
|
|
+edit file1.txt
|
|
|
+let l = readfile(g:MRU_File)
|
|
|
+if l[1] =~# 'file1.txt'
|
|
|
+ edit file2.txt
|
|
|
+ let l = readfile(g:MRU_File)
|
|
|
+ if l[1] =~# 'file2.txt'
|
|
|
+ edit file3.txt
|
|
|
+ let l = readfile(g:MRU_File)
|
|
|
+ if l[1] =~# 'file3.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+ else
|
|
|
+ call LogResult(test_name, "FAIL (3)")
|
|
|
+ endif
|
|
|
+ else
|
|
|
+ call LogResult(test_name, "FAIL (2)")
|
|
|
+ endif
|
|
|
+else
|
|
|
+ call LogResult(test_name, "FAIL (1)")
|
|
|
+endif
|
|
|
+
|
|
|
+" MRU_Test_Add_Files
|
|
|
+" Add the supplied List of files to the beginning of the MRU file
|
|
|
+function! s:MRU_Test_Add_Files(fnames)
|
|
|
+ let l = readfile(g:MRU_File)
|
|
|
+ call extend(l, a:fnames, 1)
|
|
|
+ call writefile(l, g:MRU_File)
|
|
|
+endfunction
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test18
|
|
|
+" When the MRU file is updated by another Vim instance, the MRU plugin
|
|
|
+" should update the MRU list
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test18'
|
|
|
+enew | only
|
|
|
+
|
|
|
+call s:MRU_Test_Add_Files(['/software/editors/vim',
|
|
|
+ \ '/software/editors/emacs',
|
|
|
+ \ '/software/editors/nano'])
|
|
|
+MRU
|
|
|
+if getline(1) ==# 'vim (/software/editors/vim)'
|
|
|
+ \ && getline(2) ==# 'emacs (/software/editors/emacs)'
|
|
|
+ \ && getline(3) ==# 'nano (/software/editors/nano)'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" Close the MRU window
|
|
|
+close
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test19
|
|
|
+" When the MRU file is updated by another Vim instance, the MRU file names
|
|
|
+" from the current instance should be merged with that list
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test19'
|
|
|
+enew | only
|
|
|
+
|
|
|
+" Remove all the files from the MRU file
|
|
|
+let l = readfile(g:MRU_File)
|
|
|
+call remove(l, 1, -1)
|
|
|
+call writefile(l, g:MRU_File)
|
|
|
+edit file1.txt
|
|
|
+call s:MRU_Test_Add_Files(['/software/os/unix'])
|
|
|
+edit file2.txt
|
|
|
+call s:MRU_Test_Add_Files(['/software/os/windows'])
|
|
|
+edit file3.txt
|
|
|
+call s:MRU_Test_Add_Files(['/software/os/osx'])
|
|
|
+MRU
|
|
|
+if getline(1) ==# 'osx (/software/os/osx)'
|
|
|
+ \ && getline(2) =~# 'file3.txt'
|
|
|
+ \ && getline(3) ==# 'windows (/software/os/windows)'
|
|
|
+ \ && getline(4) =~# 'file2.txt'
|
|
|
+ \ && getline(5) ==# 'unix (/software/os/unix)'
|
|
|
+ \ && getline(6) =~# 'file1.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+close
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test20
|
|
|
+" When the MRU list has more than g:MRU_Max_Entries, the list should be
|
|
|
+" trimmed. The last entries should be removed.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test20'
|
|
|
+enew | only
|
|
|
+
|
|
|
+" Create a MRU list with MRU_Max_Entries
|
|
|
+let flist = []
|
|
|
+for i in range(1, g:MRU_Max_Entries)
|
|
|
+ let flist += ['/usr/share/mru_test/mru_file' . i . '.abc']
|
|
|
+endfor
|
|
|
+
|
|
|
+" Modify the MRU file to contain max entries
|
|
|
+let l = readfile(g:MRU_File)
|
|
|
+call remove(l, 1, -1)
|
|
|
+call extend(l, flist)
|
|
|
+call writefile(l, g:MRU_File)
|
|
|
+
|
|
|
+enew
|
|
|
+edit file1.txt
|
|
|
+let l = readfile(g:MRU_File)
|
|
|
+if len(l) == (g:MRU_Max_Entries + 1) &&
|
|
|
+ \ l[g:MRU_Max_Entries] != '/usr/share/mru_test/mru_file9.abc'
|
|
|
+ call LogResult(test_name, "FAIL (1)")
|
|
|
+else
|
|
|
+ edit file2.txt
|
|
|
+ let l = readfile(g:MRU_File)
|
|
|
+ if len(l) == (g:MRU_Max_Entries + 1) &&
|
|
|
+ \ l[g:MRU_Max_Entries] != '/usr/share/mru_test/mru_file8.abc'
|
|
|
+ call LogResult(test_name, "FAIL (2)")
|
|
|
+ else
|
|
|
+ edit file3.txt
|
|
|
+ let l = readfile(g:MRU_File)
|
|
|
+ if len(l) == (g:MRU_Max_Entries + 1) &&
|
|
|
+ \ l[g:MRU_Max_Entries] != '/usr/share/mru_test/mru_file7.abc'
|
|
|
+ call LogResult(test_name, "FAIL (3)")
|
|
|
+ else
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+ endif
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test21
|
|
|
+" When an filename (already present in the MRU list) is specified to the MRU
|
|
|
+" command, it should edit the file.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test21'
|
|
|
+enew | only
|
|
|
+
|
|
|
+edit file1.txt
|
|
|
+edit file2.txt
|
|
|
+edit file3.txt
|
|
|
+enew
|
|
|
+MRU file2.txt
|
|
|
+if fnamemodify(bufname('%'), ':p:t') ==# 'file2.txt' && winnr('$') == 1
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test22
|
|
|
+" When a pattern (matching multiple filenames) is specified to the MRU
|
|
|
+" command, then the MRU window should be opened with all the matching
|
|
|
+" filenames
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test22'
|
|
|
+enew | only
|
|
|
+
|
|
|
+edit file1.txt
|
|
|
+edit file2.txt
|
|
|
+edit file3.txt
|
|
|
+only
|
|
|
+MRU file.*
|
|
|
+if bufname('%') != g:MRU_buffer_name
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+else
|
|
|
+ let l = getline(1, "$")
|
|
|
+ if l[0] =~# "file3.txt" && l[1] =~# "file2.txt" && l[2] =~# "file1.txt"
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+ else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+ endif
|
|
|
+endif
|
|
|
+close
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test23
|
|
|
+" When a partial filename (matching multiple filenames) is specified to the
|
|
|
+" MRU command, then the MRU window should be opened with all the matching
|
|
|
+" filenames
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test23'
|
|
|
+enew | only
|
|
|
+
|
|
|
+edit file1.txt
|
|
|
+edit file2.txt
|
|
|
+edit file3.txt
|
|
|
+only
|
|
|
+MRU file
|
|
|
+if bufname('%') != g:MRU_buffer_name
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+else
|
|
|
+ let l = getline(1, "$")
|
|
|
+ if l[0] =~# "file3.txt" && l[1] =~# "file2.txt" && l[2] =~# "file1.txt"
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+ else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+ endif
|
|
|
+endif
|
|
|
+close
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test24
|
|
|
+" When a non-existing filename is specified to the MRU command, an error
|
|
|
+" message should be displayed.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test24'
|
|
|
+
|
|
|
+redir => msg
|
|
|
+MRU nonexistingfile.txt
|
|
|
+redir END
|
|
|
+if bufname('%') == g:MRU_buffer_name ||
|
|
|
+ \ msg !~# "MRU file list doesn't contain files " .
|
|
|
+ \ "matching nonexistingfile.txt"
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test25
|
|
|
+" The MRU command should support filename completion. Supply a partial file
|
|
|
+" name to the MRU command and complete the filenames.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test25'
|
|
|
+enew | only
|
|
|
+
|
|
|
+edit file1.txt
|
|
|
+edit file2.txt
|
|
|
+edit file3.txt
|
|
|
+exe 'normal! :MRU file' . "\<C-A>" . "\<Home>let m='\<End>'\<CR>"
|
|
|
+let fnames = split(m)
|
|
|
+if fnames[1] =~# 'file3.txt' && fnames[2] =~# 'file2.txt' &&
|
|
|
+ \ fnames[3] =~# 'file1.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test26
|
|
|
+" When trying to complete filenames for the MRU command without specifying
|
|
|
+" any text should return the the entire MRU list.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test26'
|
|
|
+enew | only
|
|
|
+
|
|
|
+call delete(MRU_File)
|
|
|
+edit file1.txt
|
|
|
+edit file2.txt
|
|
|
+edit file3.txt
|
|
|
+
|
|
|
+exe 'normal! :MRU ' . "\<C-A>" . "\<Home>let m='\<End>'\<CR>"
|
|
|
+let fnames = split(m)
|
|
|
+if fnames[1] =~# 'file3.txt' && fnames[2] =~# 'file2.txt' &&
|
|
|
+ \ fnames[3] =~# 'file1.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test27
|
|
|
+" When the current file/buffer has unsaved changes, MRU should open a selected
|
|
|
+" file in a new window (if the 'hidden' option is not set)
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test27'
|
|
|
+enew | only
|
|
|
+
|
|
|
+edit file1.txt
|
|
|
+edit file2.txt
|
|
|
+call append(line('$'), 'Temporary changes to buffer')
|
|
|
+MRU
|
|
|
+call search('file1.txt')
|
|
|
+exe "normal \<Enter>"
|
|
|
+if winnr() == 1 && winnr('$') == 2 &&
|
|
|
+ \ fnamemodify(bufname('%'), ':p:t') ==# 'file1.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+close
|
|
|
+edit!
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test28
|
|
|
+" When the current file/buffer has unsaved changes and the 'hidden' option is
|
|
|
+" set, then MRU should open a selected file in the current window
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test28'
|
|
|
+enew | only
|
|
|
+
|
|
|
+edit file2.txt
|
|
|
+edit file1.txt
|
|
|
+call append(line('$'), 'Temporary changes to buffer')
|
|
|
+set hidden
|
|
|
+
|
|
|
+MRU
|
|
|
+call search('file2.txt')
|
|
|
+exe "normal \<Enter>"
|
|
|
+if winnr('$') == 1 &&
|
|
|
+ \ fnamemodify(bufname('%'), ':p:t') ==# 'file2.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+edit file1.txt
|
|
|
+edit!
|
|
|
+set nohidden
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test29
|
|
|
+" Every edited file is added to the top of the MRU list. If a file is already
|
|
|
+" present in the MRU list, then it is moved to the top of the list.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test29'
|
|
|
+enew | only
|
|
|
+
|
|
|
+edit file1.txt
|
|
|
+let f1 = readfile(g:MRU_File, '', 2)
|
|
|
+edit file2.txt
|
|
|
+let f2 = readfile(g:MRU_File, '', 2)
|
|
|
+edit file3.txt
|
|
|
+let f3 = readfile(g:MRU_File, '', 2)
|
|
|
+edit file1.txt
|
|
|
+let f4 = readfile(g:MRU_File, '', 2)
|
|
|
+if f1[1] =~# 'file1.txt' && f2[1] =~# 'file2.txt' && f3[1] =~# 'file3.txt' &&
|
|
|
+ \ f4[1] =~# 'file1.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test30
|
|
|
+" Only file names matching the regular expression in the MRU_Include_Files
|
|
|
+" variable should be added to the MRU list.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test30'
|
|
|
+enew | only
|
|
|
+
|
|
|
+edit file1.txt
|
|
|
+let MRU_Include_Files='\.c'
|
|
|
+edit abc.c
|
|
|
+let f1 = readfile(g:MRU_File, '', 2)
|
|
|
+edit file1.txt
|
|
|
+let f2 = readfile(g:MRU_File, '', 2)
|
|
|
+edit def.c
|
|
|
+let f3 = readfile(g:MRU_File, '', 2)
|
|
|
+if f1[1] =~# 'abc.c' && f2[1] =~# 'abc.c' && f3[1] =~# 'def.c'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+let MRU_Include_Files=''
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test31
|
|
|
+" File names matching the regular expression in the MRU_Exclude_Files
|
|
|
+" variable should not be added to the MRU list.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test31'
|
|
|
+enew | only
|
|
|
+
|
|
|
+let MRU_Exclude_Files='\.txt'
|
|
|
+edit abc.c
|
|
|
+let f1 = readfile(g:MRU_File, '', 2)
|
|
|
+edit file1.txt
|
|
|
+edit file2.txt
|
|
|
+edit file3.txt
|
|
|
+let f2 = readfile(g:MRU_File, '', 2)
|
|
|
+edit def.c
|
|
|
+let f3 = readfile(g:MRU_File, '', 2)
|
|
|
+let MRU_Exclude_Files=''
|
|
|
+edit file1.txt
|
|
|
+let f4 = readfile(g:MRU_File, '', 2)
|
|
|
+if f1[1] =~# 'abc.c' && f2[1] =~# 'abc.c' && f3[1] =~# 'def.c' &&
|
|
|
+ \ f4[1] =~# 'file1.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test32
|
|
|
+" If the MRU window is open, when adding a file name to the list, the MRU
|
|
|
+" window should be refreshed.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test32'
|
|
|
+enew | only
|
|
|
+
|
|
|
+MRU
|
|
|
+wincmd p
|
|
|
+edit abc.c
|
|
|
+wincmd p
|
|
|
+let s1 = getline(1)
|
|
|
+wincmd p
|
|
|
+edit file1.txt
|
|
|
+wincmd p
|
|
|
+let s2 = getline(1)
|
|
|
+close
|
|
|
+if s1 =~# 'abc.c' && s2 =~# 'file1.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test33
|
|
|
+" When MRU_Use_Current_Window is set, the MRU list should be displayed in
|
|
|
+" the current window.
|
|
|
+" Selecting a file from the MRU window should replace
|
|
|
+" the MRU buffer with the selected file.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test33'
|
|
|
+enew | only
|
|
|
+
|
|
|
+edit file1.txt
|
|
|
+let MRU_Use_Current_Window=1
|
|
|
+MRU
|
|
|
+if winnr('$') == 1 && bufname('%') == g:MRU_buffer_name
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+let MRU_Use_Current_Window=0
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test34
|
|
|
+" When MRU_Use_Current_Window is set, selecting a file from the MRU window
|
|
|
+" should replace the MRU buffer with the selected file.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test34'
|
|
|
+enew | only
|
|
|
+
|
|
|
+let MRU_Use_Current_Window=1
|
|
|
+let w:marker=1
|
|
|
+MRU
|
|
|
+if winnr('$') == 1 && w:marker && bufname('%') == g:MRU_buffer_name
|
|
|
+ call search('file2.txt')
|
|
|
+ exe "normal \<Enter>"
|
|
|
+ if winnr('$') == 1 && w:marker && bufname('%') == 'file2.txt'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+ else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+ endif
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+unlet w:marker
|
|
|
+let MRU_Use_Current_Window=0
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test35
|
|
|
+" When MRU_Auto_Close is not set, the MRU window should not automatically
|
|
|
+" close when a file is selected. The MRU window should be kept open.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test35'
|
|
|
+enew | only
|
|
|
+
|
|
|
+let MRU_Auto_Close=0
|
|
|
+new
|
|
|
+MRU
|
|
|
+call search('file1.txt')
|
|
|
+exe "normal \<Enter>"
|
|
|
+2wincmd w
|
|
|
+MRU
|
|
|
+call search('file2.txt')
|
|
|
+exe "normal \<Enter>"
|
|
|
+if winnr('$') == 3 &&
|
|
|
+ \ bufwinnr('file1.txt') == 1 &&
|
|
|
+ \ bufwinnr('file2.txt') == 2 &&
|
|
|
+ \ bufwinnr(g:MRU_buffer_name) == 3
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+wincmd b
|
|
|
+close
|
|
|
+let MRU_Auto_Close=1
|
|
|
+only
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test36
|
|
|
+" When MRU_Open_File_Use_Tabs is set, a selected file should be opened in a
|
|
|
+" tab. If the file is already opened in a tab, then the focus should be moved
|
|
|
+" to that tab.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test36'
|
|
|
+enew | only
|
|
|
+
|
|
|
+let MRU_Open_File_Use_Tabs=1
|
|
|
+edit file1.txt
|
|
|
+MRU
|
|
|
+call search('file2.txt')
|
|
|
+exe "normal \<Enter>"
|
|
|
+MRU
|
|
|
+call search('file3.txt')
|
|
|
+exe "normal \<Enter>"
|
|
|
+MRU file1.txt
|
|
|
+let t1 = tabpagenr()
|
|
|
+MRU
|
|
|
+call search('file2.txt')
|
|
|
+exe "normal \<Enter>"
|
|
|
+let t2 = tabpagenr()
|
|
|
+MRU
|
|
|
+call search('file3.txt')
|
|
|
+exe "normal \<Enter>"
|
|
|
+let t3 = tabpagenr()
|
|
|
+
|
|
|
+tabonly | enew
|
|
|
+
|
|
|
+if t1 == 1 && t2 == 2 && t3 == 3
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+let MRU_Open_File_Use_Tabs=0
|
|
|
+
|
|
|
+" ==========================================================================
|
|
|
+" Test37
|
|
|
+" If the MRU_Window_Open_Always is set to 0, when the MRU command finds a
|
|
|
+" single matching file name, then it should open the MRU window. If this
|
|
|
+" variable is set to 1, then the file should be opened without opening the MRU
|
|
|
+" window.
|
|
|
+" ==========================================================================
|
|
|
+let test_name = 'test37'
|
|
|
+enew | only
|
|
|
+
|
|
|
+edit file3.txt
|
|
|
+enew
|
|
|
+
|
|
|
+let MRU_Window_Open_Always=1
|
|
|
+MRU file3.txt
|
|
|
+if winnr('$') == 2 &&
|
|
|
+ \ bufwinnr(g:MRU_buffer_name) == 2
|
|
|
+ let test_result = 'pass'
|
|
|
+else
|
|
|
+ let test_result = 'FAIL'
|
|
|
+endif
|
|
|
+close
|
|
|
+
|
|
|
+enew | only
|
|
|
+
|
|
|
+if test_result == 'pass'
|
|
|
+ let MRU_Window_Open_Always=0
|
|
|
+ MRU file3.txt
|
|
|
+ if winnr('$') == 1 &&
|
|
|
+ \ bufwinnr('file3.txt') == 1
|
|
|
+ let test_result = 'pass'
|
|
|
+ else
|
|
|
+ let test_result = 'FAIL'
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+let MRU_Window_Open_Always=0
|
|
|
+
|
|
|
+if test_result == 'pass'
|
|
|
+ call LogResult(test_name, 'pass')
|
|
|
+else
|
|
|
+ call LogResult(test_name, 'FAIL')
|
|
|
+endif
|
|
|
+
|
|
|
+" TODO:
|
|
|
+" 1. When the MRU list is modified, the MRU menu should be refreshed.
|
|
|
+" 2. Lock and Unlock the MRU list.
|
|
|
+" 3. Try to jump to an already open file from the MRU window and using the
|
|
|
+" MRU command.
|
|
|
+" 4. Open an existing file but not present in the MRU list using the MRU command
|
|
|
+" 5. Split open a file in readonly mode.
|
|
|
+
|
|
|
+" Cleanup the files used by the tests
|
|
|
+call delete('file1.txt')
|
|
|
+call delete('file2.txt')
|
|
|
+call delete('file3.txt')
|
|
|
+call delete('abc.c')
|
|
|
+call delete('def.c')
|
|
|
+call delete(MRU_File)
|
|
|
+
|
|
|
+" End of unit test execution
|
|
|
+qall
|