Mercurial > vim
view runtime/syntax/testdir/runtest.vim @ 32591:92b93fe443e9 v9.0.1627
patch 9.0.1627: no generic mechanism to test syntax plugins
Commit: https://github.com/vim/vim/commit/46acad7284cba7842b5e505fa3d07e99806d246f
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jun 11 19:04:18 2023 +0100
patch 9.0.1627: no generic mechanism to test syntax plugins
Problem: No generic mechanism to test syntax plugins.
Solution: Add a syntax plugin test mechanism, using screendumps. Add a
simple test for "c".
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 11 Jun 2023 20:15:06 +0200 |
parents | |
children | f8a2fc7d823f |
line wrap: on
line source
" 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!