1
0
Fork 0
mirror of synced 2024-11-18 06:55:33 -05:00
ultimate-vim/sources_non_forked/mru.vim/test/unit_tests.vim
2022-05-19 23:12:17 +08:00

1830 lines
47 KiB
VimL

" 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 = '-RecentFiles-'
" Set the $MRU_PROFILE environment variable to profile the MRU plugin
let s:do_profile = 0
if exists('$MRU_PROFILE')
let s:do_profile = 1
endif
" Profile the MRU plugin
if s:do_profile
profile start mru_profile.txt
profile! file */mru.vim
endif
" Tests assume that 'hidden' option is not set
set nohidden
source ../plugin/mru.vim
" Function to log test results
func! LogResult(test, result)
call add(g:results, a:test . ': ' . a:result)
endfunc
" ==========================================================================
" Test1
" When the MRU list is empty, invoking the MRU command should return an error
" ==========================================================================
func Test_01()
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
endfunc
" ==========================================================================
" 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.
" ==========================================================================
func Test_02()
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
endfunc
" ==========================================================================
" Test3
" Select a file from the MRU window and check whether it is opened
" ==========================================================================
func Test_03()
let test_name = 'test3'
" Go to the last but one line
$
" Select the last file in the MRU window
exe "normal \<Enter>"
if fnamemodify(@%, ':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
endfunc
" ==========================================================================
" Test4
" MRU opens a selected file in the previous/last window
" ==========================================================================
func Test_04()
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
endfunc
" ==========================================================================
" Test5
" MRU opens a selected file in the same window if the file is already opened
" ==========================================================================
func Test_05()
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(@%, ':p:t') !=# 'file1.txt'
call LogResult(test_name, "FAIL (1)")
else
MRU
call search('file2.txt')
exe "normal \<Enter>"
if winnr() != 2 || fnamemodify(@%, ':p:t') !=# 'file2.txt'
call LogResult(test_name, "FAIL (2)")
else
MRU
call search('file3.txt')
exe "normal \<Enter>"
if winnr() != 3 || fnamemodify(@%, ':p:t') !=# 'file3.txt'
call LogResult(test_name, "FAIL (3)")
else
call LogResult(test_name, 'pass')
endif
endif
endif
endfunc
" ==========================================================================
" Test6
" MRU opens a file selected with 'o' command in a new window
" ==========================================================================
func Test_06()
let test_name = 'test6'
enew | only
edit file1.txt
below new
MRU
normal o
if winnr() == 3 && fnamemodify(@%, ':p:t') ==# 'file1.txt'
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
endfunc
" ==========================================================================
" Test7
" MRU opens the selected file in a new window if the previous buffer is
" modified.
" ==========================================================================
func Test_07()
let test_name = 'test7'
enew | only
insert
MRU plugin test
.
MRU
call search('file3.txt')
exe "normal \<Enter>"
if winnr() == 1 && winnr('$') == 2 &&
\ fnamemodify(@%, ':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
endfunc
" ==========================================================================
" Test8
" MRU opens a file selected with 'v' command in read-only mode in the current
" window.
" ==========================================================================
func Test_08()
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 == 1
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
endfunc
" ==========================================================================
" Test9
" Use 'O' in the MRU window to open a file in a vertically split window
" ==========================================================================
func Test_09()
let test_name = 'test9'
enew | only
edit file1.txt
MRU
call search('file2.txt')
normal O
let b1 = @%
wincmd h
let b2 = @%
wincmd l
let b3 = @%
if winnr('$') == 2 && b1 ==# 'file2.txt' &&
\ b2 ==# 'file1.txt' && b3 ==# 'file2.txt'
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
endfunc
" ==========================================================================
" Test10
" Use 'p' in the MRU window to open a file in the preview window
" ==========================================================================
func Test_10()
let test_name = 'test10'
enew | only
MRU
call search('file3.txt')
normal p
wincmd P
let p1 = &previewwindow
let b1 = @%
if winnr('$') == 2 && &previewwindow && @% =~# 'file3.txt'
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
pclose
endfunc
" ==========================================================================
" Test11
" MRU opens a file selected with 't' command in a new tab and the tab
" is opened at the end
" ==========================================================================
func Test_11()
let test_name = 'test11'
enew | only
edit a1.txt
tabnew a2.txt
tabnew a3.txt
tabnew a4.txt
tabfirst
MRU
call search('file3.txt')
normal t
if fnamemodify(@%, ':p:t') ==# 'file3.txt' && tabpagenr() == 5
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
call LogResult(test_name, "file = " . fnamemodify(@%, ':p:t'))
call LogResult(test_name, "tab page = " . tabpagenr())
endif
tabonly
endfunc
" ==========================================================================
" Test12
" The 'q' command closes the MRU window
" ==========================================================================
func Test_12()
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
endfunc
" ==========================================================================
" Test13
" A selected file is opened in a new window if the previous window is a
" preview window
" ==========================================================================
func Test_13()
let test_name = 'test13'
enew | only
setlocal previewwindow
MRU
call search('file2.txt')
exe "normal \<Enter>"
if winnr() == 1 && winnr('$') == 2 &&
\ &previewwindow == 0 &&
\ fnamemodify(@%, ':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
endfunc
" ==========================================================================
" Test14
" A selected file is opened in a new window if the previous window contains
" a special buffer (used by some other plugin)
" ==========================================================================
func Test_14()
let test_name = 'test14'
enew | only
setlocal buftype=nofile
MRU
call search('file3.txt')
exe "normal \<Enter>"
if winnr() == 1 && winnr('$') == 2 &&
\ &buftype == '' &&
\ fnamemodify(@%, ':p:t') ==# 'file3.txt'
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
" Discard the special buffer
enew
endfunc
" ==========================================================================
" 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)
" ==========================================================================
func Test_15()
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(@%, ':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(@%, ':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(@%, ':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
endfunc
" ==========================================================================
" 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.
" ==========================================================================
func Test_16()
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
endfunc
" ==========================================================================
" Test17
" When the MRU list is updated, the MRU file also should updated.
" ==========================================================================
func Test_17()
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
endfunc
" MRU_Test_Add_Files
" Add the supplied List of files to the beginning of the MRU file
func! s:MRU_Test_Add_Files(fnames)
let l = readfile(g:MRU_File)
call extend(l, a:fnames, 1)
call writefile(l, g:MRU_File)
endfunc
" ==========================================================================
" Test18
" When the MRU file is updated by another Vim instance, the MRU plugin
" should update the MRU list
" ==========================================================================
func Test_18()
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
endfunc
" ==========================================================================
" 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
" ==========================================================================
func Test_19()
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
endfunc
" ==========================================================================
" Test20
" When the MRU list has more than g:MRU_Max_Entries, the list should be
" trimmed. The last entries should be removed.
" ==========================================================================
func Test_20()
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
endfunc
" ==========================================================================
" Test21
" When an filename (already present in the MRU list) is specified to the MRU
" command, it should edit the file.
" ==========================================================================
func Test_21()
let test_name = 'test21'
enew | only
edit file1.txt
edit file2.txt
edit file3.txt
enew
MRU file2.txt
if fnamemodify(@%, ':p:t') ==# 'file2.txt' && winnr('$') == 1
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
endfunc
" ==========================================================================
" 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
" ==========================================================================
func Test_22()
let test_name = 'test22'
enew | only
edit file1.txt
edit file2.txt
edit file3.txt
only
MRU file.*
if @% != 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
endfunc
" ==========================================================================
" 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
" ==========================================================================
func Test_23()
let test_name = 'test23'
enew | only
let g:MRU_FuzzyMatch = 0
edit file1.txt
edit file2.txt
edit file3.txt
only
MRU file
if @% != 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
endfunc
" ==========================================================================
" Test24
" When a non-existing filename is specified to the MRU command, an error
" message should be displayed.
" ==========================================================================
func Test_24()
let test_name = 'test24'
let g:MRU_FuzzyMatch = 0
redir => msg
MRU nonexistingfile.txt
redir END
if @% == 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
endfunc
" ==========================================================================
" Test25
" The MRU command should support filename completion. Supply a partial file
" name to the MRU command and complete the filenames.
" ==========================================================================
func Test_25()
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
endfunc
" ==========================================================================
" Test26
" When trying to complete filenames for the MRU command without specifying
" any text should return the entire MRU list.
" ==========================================================================
func Test_26()
let test_name = 'test26'
enew | only
call delete(g: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
endfunc
" ==========================================================================
" 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)
" ==========================================================================
func Test_27()
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(@%, ':p:t') ==# 'file1.txt'
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
close
edit!
endfunc
" ==========================================================================
" 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
" ==========================================================================
func Test_28()
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(@%, ':p:t') ==# 'file2.txt'
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
edit file1.txt
edit!
set nohidden
%bw!
endfunc
" ==========================================================================
" 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.
" ==========================================================================
func Test_29()
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
endfunc
" ==========================================================================
" Test30
" Only file names matching the regular expression in the MRU_Include_Files
" variable should be added to the MRU list.
" ==========================================================================
func Test_30()
let test_name = 'test30'
enew | only
edit file1.txt
let g: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 g:MRU_Include_Files=''
endfunc
" ==========================================================================
" Test31
" File names matching the regular expression in the MRU_Exclude_Files
" variable should not be added to the MRU list.
" ==========================================================================
func Test_31()
let test_name = 'test31'
enew | only
let g: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 g: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
endfunc
" ==========================================================================
" Test32
" If the MRU window is open, when adding a file name to the list, the MRU
" window should be refreshed.
" ==========================================================================
func Test_32()
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
endfunc
" ==========================================================================
" 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.
" ==========================================================================
func Test_33()
let test_name = 'test33'
enew | only
edit file1.txt
let g:MRU_Use_Current_Window=1
MRU
if winnr('$') == 1 && @% == g:MRU_buffer_name
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
let g:MRU_Use_Current_Window=0
endfunc
" ==========================================================================
" Test34
" When MRU_Use_Current_Window is set, selecting a file from the MRU window
" should replace the MRU buffer with the selected file.
" ==========================================================================
func Test_34()
let test_name = 'test34'
enew | only
let g:MRU_Use_Current_Window=1
let w:marker=1
MRU
if winnr('$') == 1 && w:marker && @% == g:MRU_buffer_name
call search('file2.txt')
exe "normal \<Enter>"
if winnr('$') == 1 && w:marker && @% == '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 g:MRU_Use_Current_Window=0
endfunc
" ==========================================================================
" Test35
" When MRU_Use_Current_Window is set, if the current buffer has unsaved
" changes, then the MRU window should be opened in a split window
" ==========================================================================
func Test_35()
let test_name = 'test35'
enew | only
let g:MRU_Use_Current_Window=1
set modified
MRU
if winnr('$') == 2 && winnr() == 2 && @% == g:MRU_buffer_name
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
close
set nomodified
let g:MRU_Use_Current_Window=0
enew | only
endfunc
" ==========================================================================
" Test36
" 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.
" ==========================================================================
func Test_36()
let test_name = 'test36'
enew | only
let g: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 g:MRU_Auto_Close=1
only
endfunc
" ==========================================================================
" Test37
" 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.
" ==========================================================================
func Test_37()
let test_name = 'test37'
enew | only
let g: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 g:MRU_Open_File_Use_Tabs=0
endfunc
" ==========================================================================
" Test38
" 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.
" ==========================================================================
func Test_38()
let test_name = 'test38'
enew | only
edit file3.txt
enew
let g: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 g: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 g:MRU_Window_Open_Always=0
if test_result == 'pass'
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
endfunc
" ==========================================================================
" Test39
" If the current tabpage is empty, then pressing 't' in the MRU window
" should open the file in the current tabpage.
" ==========================================================================
func Test_39()
let test_name = 'test39'
enew | only | tabonly
tabnew
tabnew
tabnext 2
MRU
call search('file2.txt')
normal t
if fnamemodify(@%, ':p:t') ==# 'file2.txt' && tabpagenr() == 2
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
call LogResult(test_name, "file = " . fnamemodify(@%, ':p:t'))
call LogResult(test_name, "tab page = " . tabpagenr())
endif
tabonly
endfunc
" ==========================================================================
" Test40
" Pressing 'd' in the MRU window should delete the file under the cursor
" from the MRU list
" ==========================================================================
func Test_40()
let test_name = 'test40'
edit file2.txt
enew
MRU
call search('file2.txt')
normal d
close
let l = readfile(g:MRU_File)
if match(l, 'file2.txt') == -1
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
endfunc
" ==========================================================================
" Test41
" Running the :vimgrep command should not add the files to the MRU list
" ==========================================================================
func Test_41()
let test_name = 'test41'
call writefile(['bright'], 'dummy1.txt')
call writefile(['bright'], 'dummy2.txt')
vimgrep /bright/j dummy*
let l = readfile(g:MRU_File)
if match(l, 'dummy') == -1
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
call delete('dummy1.txt')
call delete('dummy2.txt')
endfunc
" ==========================================================================
" Test42
" Using a command modifier with the MRU command to open the MRU window
" ==========================================================================
func Test_42()
if v:version < 800
" The <mods> command modifier is supported only by Vim 8.0 and above
return
endif
let test_name = 'test42'
enew | only
topleft MRU
if winnr() == 1 && winnr('$') == 2
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
enew | only
botright MRU
if winnr() == 2 && winnr('$') == 2
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
enew | only
botright MRU
if winnr() == 2 && winnr('$') == 2
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
enew | only
endfunc
" ==========================================================================
" Test43
" Opening a file using the MRU command should jump to the window containing
" the file (if it is already opened).
" ==========================================================================
func Test_43()
let test_name = 'test43'
only
edit file3.txt
below split file2.txt
below split file1.txt
wincmd t
MRU file1.txt
if winnr() != 3 || fnamemodify(@%, ':p:t') !=# 'file1.txt'
call LogResult(test_name, 'FAIL (1)')
else
MRU file2.txt
if winnr() != 2 && fnamemodify(@%, ':p:t') !=# 'file2.txt'
call LogResult(test_name, 'FAIL (2)')
else
MRU file3.txt
if winnr() != 1 && fnamemodify(@%, ':p:t') !=# 'file3.txt'
call LogResult(test_name, 'FAIL (3)')
else
call LogResult(test_name, 'pass')
endif
endif
endif
enew | only
endfunc
" ==========================================================================
" Test44
" Opening a file using the MRU command should open the file in a new window if
" the current buffer has unsaved changes.
" ==========================================================================
func Test_44()
let test_name = 'test44'
only
set modified
MRU file2.txt
if winnr('$') == 2 && winnr() == 1 &&
\ fnamemodify(@%, ':p:t') ==# 'file2.txt'
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
close
set nomodified
endfunc
" ==========================================================================
" Test45
" Opening a file from the MRU window using 'v' should open the file in a new
" window if the current buffer has unsaved changes.
" ==========================================================================
func Test_45()
let test_name = 'test45'
only
set modified
MRU
call search('file3.txt')
normal v
if winnr('$') == 2 && winnr() == 1
\ && fnamemodify(@%, ':p:t') ==# 'file3.txt'
\ && &readonly
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
close
set nomodified
endfunc
" ==========================================================================
" Test46
" Specify a count to the :MRU command to set the MRU window height/width
" ==========================================================================
func Test_46()
let test_name = 'test46'
only
" default height is 8
MRU
if winnr() != 2 || winheight(0) != 8
call LogResult(test_name, 'FAIL (1)')
return
endif
close
" use a specific height value
15MRU
if winnr() != 2 || winheight(0) != 15
call LogResult(test_name, 'FAIL (2)')
return
endif
close
if v:version >= 800
" use a specific height value with a command modifier
topleft 12MRU
if winnr() != 1 || winheight(0) != 12
call LogResult(test_name, 'FAIL (3)')
return
endif
close
" check for the width (leftmost window)
vertical topleft 20MRU
if winnr() != 1 || winwidth(0) != 20
call LogResult(test_name, 'FAIL (4)')
return
endif
close
" check for the width (rightmost window)
vertical botright 25MRU
if winnr() != 2 || winwidth(0) != 25
call LogResult(test_name, 'FAIL (5)')
return
endif
close
endif
call LogResult(test_name, 'pass')
endfunc
" ==========================================================================
" Test47
" The height of the MRU window should be MRU_Window_Height
" ==========================================================================
func Test_47()
let test_name = 'test47'
only
" default height is 8
MRU
if winheight(0) != 8
call LogResult(test_name, 'FAIL (1)')
return
endif
close
let g:MRU_Window_Height = 2
MRU
if winheight(0) != 2
call LogResult(test_name, 'FAIL (2)')
return
endif
close
let g:MRU_Window_Height = 12
MRU
if winheight(0) != 12
call LogResult(test_name, 'FAIL (3)')
return
endif
close
call LogResult(test_name, 'pass')
let g:MRU_Window_Height = 8
endfunc
" ==========================================================================
" Test48
" Fuzzy search file names with MRU_FuzzyMatch set to 1.
" ==========================================================================
func Test_48()
if !exists('*matchfuzzy')
return
endif
let test_name = 'test48'
enew | only
let g:MRU_FuzzyMatch = 1
MRU F1
if fnamemodify(@%, ':p:t') ==# 'file1.txt' && winnr('$') == 1
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL (1)')
endif
let g:MRU_FuzzyMatch = 0
redir => msg
MRU F1
redir END
if msg =~# "MRU file list doesn't contain files matching F1"
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL (2)')
endif
let g:MRU_FuzzyMatch = 1
endfunc
" ==========================================================================
" Test49
" Test for creating a new file by saving an unnamed buffer.
" ==========================================================================
func Test_49()
let test_name = 'test49'
enew | only
call setline(1, 'sample file')
write sample.txt
let l = readfile(g:MRU_File)
if match(l, 'sample.txt') != -1
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL')
endif
call delete('sample.txt')
bwipe sample.txt
endfunc
" ==========================================================================
" Test50
" Test for the MruGetFiles() function
" ==========================================================================
func Test_50()
let test_name = 'test50'
enew | only
let list1 = MruGetFiles()
let list2 = readfile(g:MRU_File)
if list1 != list2[1:]
call LogResult(test_name, 'FAIL (1)')
return
endif
if MruGetFiles('x1y2z3') == []
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL (2)')
endif
endfunc
" ==========================================================================
" Test51
" Test for the :MruRefresh command
" ==========================================================================
func Test_51()
let test_name = 'test51'
enew | only
if match(MruGetFiles(), 'sample.txt') == -1
call LogResult(test_name, 'FAIL (1)')
return
endif
MruRefresh
if match(MruGetFiles(), 'sample.txt') == -1
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL (2)')
endif
endfunc
" ==========================================================================
" Test52
" Test for the re-opening a deleted buffer from the MRU list
" ==========================================================================
func Test_52()
let test_name = 'test52'
edit file1.txt
edit file2.txt
bd
" select the file from the MRU window
MRU
call search('file2.txt')
exe "normal \<Enter>"
if !&buflisted || fnamemodify(@%, ':p:t') !=# 'file2.txt'
call LogResult(test_name, 'FAIL (1)')
return
endif
" open the file directly using the command
bw file1.txt file2.txt
edit file2.txt
edit file1.txt
bd
MRU file1.txt
if !&buflisted || fnamemodify(@%, ':p:t') !=# 'file1.txt'
call LogResult(test_name, 'FAIL (2)')
return
endif
call LogResult(test_name, 'pass')
endfunc
" ==========================================================================
" Test53
" Test for using a command modifier when directly opening a file using the
" MRU command.
" ==========================================================================
func Test_53()
if v:version < 800
return
endif
let test_name = 'test53'
%bw!
topleft MRU file2.txt
if winnr('$') == 2 && winnr() == 1 && fnamemodify(@%, ':p:t') ==# 'file2.txt'
wincmd j
if winnr() != 2
call LogResult(test_name, 'FAIL (1)')
return
endif
else
call LogResult(test_name, 'FAIL (2)')
return
endif
%bw
belowright MRU file2.txt
if winnr('$') == 2 && winnr() == 2 && fnamemodify(@%, ':p:t') ==# 'file2.txt'
wincmd k
if winnr() != 1
call LogResult(test_name, 'FAIL (3)')
return
endif
else
call LogResult(test_name, 'FAIL (4)')
return
endif
%bw
vertical topleft MRU file2.txt
if winnr('$') == 2 && winnr() == 1 && fnamemodify(@%, ':p:t') ==# 'file2.txt'
wincmd l
if winnr() != 2
call LogResult(test_name, 'FAIL (5)')
return
endif
else
call LogResult(test_name, 'FAIL (6)')
return
endif
%bw
vertical belowright MRU file2.txt
if winnr('$') == 2 && winnr() == 2 && fnamemodify(@%, ':p:t') ==# 'file2.txt'
wincmd h
if winnr() != 1
call LogResult(test_name, 'FAIL (7)')
return
endif
else
call LogResult(test_name, 'FAIL (8)')
return
endif
%bw
tab MRU file2.txt
if tabpagenr() != 2 || fnamemodify(@%, ':p:t') !=# 'file2.txt'
call LogResult(test_name, 'FAIL (9)')
return
endif
%bw
call LogResult(test_name, 'pass')
endfunc
" ==========================================================================
" Test54
" Test for the :MRUToggle command.
" ==========================================================================
func Test_54()
let test_name = 'test54'
only
" open the MRU window
MRUToggle
if bufwinnr(g:MRU_buffer_name) != 2 || winnr() != 2
call LogResult(test_name, 'FAIL (1)')
return
endif
" close the MRU window
MRUToggle
if bufwinnr(g:MRU_buffer_name) != -1 || winnr() != 1
call LogResult(test_name, 'FAIL (2)')
return
endif
" close the MRU window from some other window
MRUToggle
wincmd k
MRUToggle
if bufwinnr(g:MRU_buffer_name) != -1 || winnr() != 1
call LogResult(test_name, 'FAIL (3)')
return
endif
call LogResult(test_name, 'pass')
endfunc
" ==========================================================================
" Test55
" Editing a file selected from the MRU window should set the current file to
" be the alternate file.
" ==========================================================================
func Test_55()
let test_name = 'test55'
silent! bw file1.txt file2.txt file3.txt
new
edit file1.txt
edit file2.txt
MRU
call search('file3.txt')
exe "normal \<Enter>"
if fnamemodify(@%, ':p:t') !=# 'file3.txt'
\ || fnamemodify(@#, ':p:t') !=# 'file2.txt'
call LogResult(test_name, 'FAIL')
return
endif
call LogResult(test_name, 'pass')
endfunc
" ==========================================================================
" Test56
" With MRU_Use_Current_Window set to 1, editing a file from the MRU list
" should not change the alternate file.
" ==========================================================================
func Test_56()
let test_name = 'test56'
let g:MRU_Use_Current_Window = 1
bw file1.txt file2.txt file3.txt
new
edit file3.txt
edit file1.txt
edit file2.txt
MRU
call search('file3.txt')
exe "normal \<Enter>"
if fnamemodify(@%, ':p:t') !=# 'file3.txt'
\ || fnamemodify(@#, ':p:t') !=# 'file2.txt'
call LogResult(test_name, 'FAIL (1)')
return
endif
" try viewing a file
MRU
call search('file1.txt')
normal v
if fnamemodify(@%, ':p:t') !=# 'file1.txt'
\ || fnamemodify(@#, ':p:t') !=# 'file3.txt'
\ || !&readonly
call LogResult(test_name, 'FAIL (2)')
return
endif
" try opening a wiped out buffer
bw file2.txt
MRU
call search('file2.txt')
exe "normal \<Enter>"
if fnamemodify(@%, ':p:t') !=# 'file2.txt'
\ || fnamemodify(@#, ':p:t') !=# 'file1.txt'
\ || &readonly
call LogResult(test_name, 'FAIL (3)')
return
endif
let g:MRU_Use_Current_Window = 0
bw!
call LogResult(test_name, 'pass')
endfunc
" ==========================================================================
" Test57
" When the MRU window is closed, the MRU buffer should be unloaded.
" If 'MRU_Use_Current_Window' is set, then the MRU buffer should be wiped out.
" ==========================================================================
func Test_57()
let test_name = 'test57'
MRU
let mrubnum = bufnr('')
close
if bufloaded(mrubnum)
call LogResult(test_name, 'FAIL (1)')
return
endif
let g:MRU_Use_Current_Window = 1
new
edit Xfile
MRU
let mrubnum = bufnr('')
edit #
if bufexists(mrubnum) || @% != 'Xfile'
call LogResult(test_name, 'FAIL (2)')
return
endif
let g:MRU_Use_Current_Window = 0
bw!
call LogResult(test_name, 'pass')
endfunc
" ==========================================================================
" Test58
" When the MRU window is toggled with MRU_Use_Current_Window set to 1, the
" previous buffer should be loaded.
" ==========================================================================
func Test_58()
let test_name = 'test58'
let g:MRU_Use_Current_Window = 1
new
edit Xfile
MRUToggle
if @% != g:MRU_buffer_name || winnr('$') != 2
call LogResult(test_name, 'FAIL (1)')
return
endif
MRUToggle
if @% != 'Xfile' || winnr('$') != 2
call LogResult(test_name, 'FAIL (2)')
return
endif
let g:MRU_Use_Current_Window = 0
bw!
call LogResult(test_name, 'pass')
endfunc
" ==========================================================================
" Test59
" When the MRU_Set_Alternate_File is set to 1, on plugin startup, the
" alternate file should be set to the first file in the MRU list.
" ==========================================================================
func Test_59()
if v:version < 802
return
endif
let test_name = 'test59'
call writefile([], 'Xfirstfile')
edit Xfirstfile
call writefile([
\ "let MRU_File='vim_mru_file'",
\ "let MRU_Set_Alternate_File=1",
\ "source ../plugin/mru.vim",
\ "call writefile([@#], 'Xoutput')"
\ ], 'Xscript')
silent! !vim -u NONE --noplugin i NONE -N -S Xscript -c "qa"
if !filereadable('Xoutput')
call LogResult(test_name, 'FAIL (1)')
else
let lines = readfile('Xoutput')
if len(lines) == 1 && lines[0] =~ 'Xfirstfile$'
call LogResult(test_name, 'pass')
else
call LogResult(test_name, 'FAIL (2)')
endif
endif
call delete('Xscript')
call delete('Xoutput')
call delete('Xfirstfile')
endfunc
" ==========================================================================
" Test60
" With MRU_Use_Current_Window set to 1, MRU opens a selected file in the
" current window, even when the file is already open in another window
" ==========================================================================
func Test_60()
let test_name = 'test60'
let g:MRU_Use_Current_Window = 1
edit file1.txt
let bnum = bufnr()
only
below split file2.txt
MRU
call search('file1.txt')
exe "normal \<Enter>"
if winnr() == 2 && winbufnr(1) == bnum && winbufnr(2) == bnum
call LogResult(test_name, "pass")
else
call LogResult(test_name, "FAIL")
endif
let g:MRU_Use_Current_Window = 0
endfunc
" ==========================================================================
" 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(g:MRU_File)
let results = []
" Generate a sorted list of Test_ functions to run
redir @q
silent function /^Test_
redir END
let s:tests = split(substitute(@q, '\(function\) \(\k*()\)', '\2', 'g'))
" Run the tests
set nomore
set debug=beep
for one_test in sort(s:tests)
exe 'call ' . one_test
endfor
set more
call writefile(results, 'results.txt')
" TODO:
" Add the following tests:
" 1. When the MRU list is modified, the MRU menu should be refreshed.
" 2. Try to jump to an already open file from the MRU window and using the
" MRU command.
" 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(g:MRU_File)
" End of unit test execution
qall
" vim: shiftwidth=2 sts=2 expandtab