diff options
Diffstat (limited to 'runtime/syntax/testdir/runtest.vim')
-rw-r--r-- | runtime/syntax/testdir/runtest.vim | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/runtime/syntax/testdir/runtest.vim b/runtime/syntax/testdir/runtest.vim new file mode 100644 index 0000000000..d57341d226 --- /dev/null +++ b/runtime/syntax/testdir/runtest.vim @@ -0,0 +1,116 @@ +" Runs all the syntax tests for which there is no "done/name" file. +" +" Current directory must be runtime/syntax. + +" Only do this with the +eval feature +if 1 + +let cwd = getcwd() +if cwd !~ '[/\\]runtime[/\\]syntax\>' + echoerr 'Current directory must be "runtime/syntax"' + qall +endif +if !isdirectory('testdir') + echoerr '"testdir" directory not found' + qall +endif + +" Use the script for source code screendump testing. It sources other scripts, +" therefore we must "cd" there. +cd ../../src/testdir +source screendump.vim +exe 'cd ' .. fnameescape(cwd) + +" For these tests we need to be able to run terminal Vim with 256 colors. On +" MS-Windows the console only has 16 colors and the GUI can't run in a +" terminal. +if !CanRunVimInTerminal() + echomsg 'Cannot make screendumps, aborting' + qall +endif + +cd testdir +if !isdirectory('done') + call mkdir('done') +endif + +set nocp +set nowrapscan +set report=9999 +set modeline +set debug=throw +set nomore + +au! SwapExists * call HandleSwapExists() +func HandleSwapExists() + " Ignore finding a swap file for the test input, the user might be editing + " it and that's OK. + if expand('<afile>') =~ 'input[/\\].*\..*' + let v:swapchoice = 'e' + endif +endfunc + + +let failed_count = 0 +for fname in glob('input/*.*', 1, 1) + if fname =~ '\~$' + " backup file, skip + continue + endif + + let linecount = readfile(fname)->len() + let root = substitute(fname, 'input[/\\]\(.*\)\..*', '\1', '') + + " Execute the test if the "done" file does not exist of when the input file + " is newer. + let in_time = getftime(fname) + let out_time = getftime('done/' .. root) + if out_time < 0 || in_time > out_time + for dumpname in glob('failed/' .. root .. '_\d*\.dump', 1, 1) + call delete(dumpname) + endfor + call delete('done/' .. root) + + let lines =<< trim END + syntax on + END + call writefile(lines, 'Xtestscript') + let buf = RunVimInTerminal('-S Xtestscript ' .. fname, {}) + + " Screendump at the start of the file: root_00.dump + let fail = VerifyScreenDump(buf, root .. '_00', {}) + + " Make a Screendump every 18 lines of the file: root_NN.dump + let topline = 1 + let nr = 1 + while linecount - topline > 20 + let topline += 18 + call term_sendkeys(buf, printf("%dGzt", topline)) + let fail += VerifyScreenDump(buf, root .. printf('_%02d', nr), {}) + let nr += 1 + endwhile + + " Screendump at the end of the file: root_99.dump + call term_sendkeys(buf, 'Gzb') + let fail += VerifyScreenDump(buf, root .. '_99', {}) + + call StopVimInTerminal(buf) + call delete('Xtestscript') + + if fail == 0 + call writefile(['OK'], 'done/' . root) + echo "Test " . root . " OK\n" + else + let failed_count += 1 + endif + endif +endfor + +" Matching "if 1" at the start. +endif + +if failed_count > 0 + " have make report an error + cquit +endif +qall! |