Yegappan Lakshmanan 10 лет назад
Родитель
Сommit
6e6064a087
2 измененных файлов с 1065 добавлено и 0 удалено
  1. 21 0
      test/mru_unittest.sh
  2. 1044 0
      test/unit_tests.vim

+ 21 - 0
test/mru_unittest.sh

@@ -0,0 +1,21 @@
+#!/bin/bash
+
+# Script to run unit-tests for the MRU Vim plugin
+
+VIM=/usr/bin/vim
+VIM_CMD="$VIM -N -u NONE -U NONE -i NONE"
+
+$VIM_CMD -S unit_tests.vim
+
+echo "MRU unit test results"
+cat results.txt
+
+echo
+grep FAIL results.txt > /dev/null 2>&1
+if [ $? -eq 0 ]
+then
+    echo "ERROR: Some test failed."
+else
+    echo "SUCCESS: All the tests passed."
+fi
+

+ 1044 - 0
test/unit_tests.vim

@@ -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