Mercurial > vim
changeset 36256:0b27d4f52503 draft v9.1.0763
patch 9.1.0763: tests: cannot run single syntax tests
Commit: https://github.com/vim/vim/commit/ec0229414bc5ba6aadc515c7a01d8e07e060f330
Author: Aliaksei Budavei <0x000c70@gmail.com>
Date: Sun Oct 6 16:57:33 2024 +0200
patch 9.1.0763: tests: cannot run single syntax tests
Problem: tests: cannot run single syntax tests
Solution: Support running a subset of syntax tests
(Aliaksei Budavei)
Two methods of assembling a subset of test filenames for
selection are provided:
* Filename and filetype Make targets will be generated, and
multiple such targets can be passed before the mandated
trailing "test" target, e.g. "make html markdown test".
* Filenames and their parts can be specified as a regular
expression that is assigned to a "VIM_SYNTAX_TEST_FILTER"
environment variable, and used with the test Make target,
e.g. "VIM_SYNTAX_TEST_FILTER=html\\\|markdown make test".
(This variable will be ignored and the whole suite will be
run when Make is GNU Make and a parent Makefile is used.)
Methods can be used alone or together, with the Make targets
having the higher precedence. Neither method will influence
the order of test execution.
closes: #15670
Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 06 Oct 2024 17:00:07 +0200 |
parents | 5cb68a77256c |
children | 1e521ce9e273 |
files | Makefile runtime/syntax/Makefile runtime/syntax/testdir/README.txt runtime/syntax/testdir/input/selftestdir/README.txt runtime/syntax/testdir/runtest.vim src/version.c |
diffstat | 6 files changed, 81 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/Makefile +++ b/Makefile @@ -61,6 +61,9 @@ indenttest: # Executable used for running the syntax tests. VIM_FOR_SYNTAXTEST = ../../src/vim +# (For local testing only with GNU Make.) +VIM_SYNTAX_TEST_FILTER = + syntaxtest: cd runtime/syntax && \ $(MAKE) clean && \
--- a/runtime/syntax/Makefile +++ b/runtime/syntax/Makefile @@ -31,10 +31,38 @@ test: @echo "../$(VIMPROG)" > testdir/vimcmd @echo "$(RUN_VIMTEST)" >> testdir/vimcmd VIMRUNTIME=$(VIMRUNTIME) $(ENVVARS) $(VIMPROG) --clean --not-a-term $(DEBUGLOG) -u testdir/runtest.vim + @rm -f testdir/Xfilter @# FIXME: Temporarily show the whole file to find out what goes wrong @#if [ -f testdir/messages ]; then tail -n 6 testdir/messages; fi @if [ -f testdir/messages ]; then cat testdir/messages; fi clean testclean: - rm -f testdir/failed/* testdir/done/* testdir/vimcmd testdir/messages testdir/Xtestscript + rm -f testdir/failed/* testdir/done/* testdir/vimcmd testdir/messages testdir/Xtestscript testdir/Xfilter + +# All initial phony targets; these names may clash with file extensions. +phonies = clean test testclean + +# Collect all input filenames and their file extensions. +testnames != set +f; \ +awk 'BEGIN { \ + for (i = 1; i < ARGC; i++) { \ + split(ARGV[i], names, /\//); \ + split(names[3], parts, /\./); \ + exts[parts[2]]; \ + print names[3]; \ + } \ + split("$(phonies)", scratch); \ + for (phony in scratch) \ + phonies[scratch[phony]]; \ + for (ext in exts) \ + print ext ((ext in phonies) ? "_" : ""); \ +}' testdir/input/*.* + +.PHONY: self-testing $(testnames) + +$(testnames):: + @echo $@ >> testdir/Xfilter + +self-testing:: $(testnames) + @echo self-testing > testdir/Xfilter
--- a/runtime/syntax/testdir/README.txt +++ b/runtime/syntax/testdir/README.txt @@ -63,12 +63,40 @@ script file will be sourced before any V Every line of a source file must not be longer than 1425 (19 x 75) characters. -If there is no further setup required, you can now run the tests: +If there is no further setup required, you can now run all tests: make test -The first time this will fail with an error for a missing screendump. The -newly created screendumps will be "failed/java_00.dump", +Or you can run the tests for a filetype only by passing its file extension as +another target, e.g. "java", before "test": + + make java test + +Or you can run a test or two by passing their filenames as extra targets, e.g. +"java_string.java" and "java_numbers.java", before "test", after listing all +available syntax tests for Java: + + ls testdir/input/java* + make java_string.java java_numbers.java test + +(Some interactive shells may attempt to perform word completion on arbitrary +command arguments when you press certain keys, e.g. Tab or Ctrl-i.) + +As an alternative, you can specify a subset of test filenames for running as +a regular expression and assign it to a VIM_SYNTAX_TEST_FILTER environment +variable; e.g. to run all tests whose base names contain "fold", use any of: + + make test -e 'VIM_SYNTAX_TEST_FILTER = fold.*\..\+' + make test VIM_SYNTAX_TEST_FILTER='fold.*\..\+' + VIM_SYNTAX_TEST_FILTER='fold.*\..\+' make test + +Consider quoting the variable value to avoid any interpretation by the shell. + +Both Make targets and the variable may be used at the same time, the target +names will be tried for matching before the variable value. + +The first time testing "input/java.java" will fail with an error for a missing +screendump. The newly created screendumps will be "failed/java_00.dump", "failed/java_01.dump", etc. You can inspect each with: call term_dumpload('failed/java_00.dump') @@ -206,5 +234,4 @@ screendumps will be shown with no differ ../../../src/vim --clean -S viewdumps.vim -TODO: run test for one specific filetype TODO: test syncing by jumping around
--- a/runtime/syntax/testdir/input/selftestdir/README.txt +++ b/runtime/syntax/testdir/input/selftestdir/README.txt @@ -6,5 +6,5 @@ This is mainly used for debugging and te Please test any changes as follows: cd runtime/syntax/ - VIM_SYNTAX_SELF_TESTING=1 make clean test + make clean self-testing test
--- a/runtime/syntax/testdir/runtest.vim +++ b/runtime/syntax/testdir/runtest.vim @@ -115,13 +115,26 @@ func RunTest() " Create a map of setup configuration filenames with their basenames as keys. let setup = glob('input/setup/*.vim', 1, 1) \ ->reduce({d, f -> extend(d, {fnamemodify(f, ':t:r'): f})}, {}) + " Turn a subset of filenames etc. requested for testing into a pattern. + let filter = filereadable('../testdir/Xfilter') + \ ? readfile('../testdir/Xfilter') + \ ->map({_, v -> (v =~ '\.' ? '^' : '\.') .. v .. '$'}) + \ ->join('\|') + \ : '' - if exists("$VIM_SYNTAX_SELF_TESTING") + " Treat "\.self-testing$" as a string NOT as a regexp. + if filter ==# '\.self-testing$' let dirpath = 'input/selftestdir/' let fnames = readdir(dirpath, {fname -> fname !~ '^README\.txt$'}) else let dirpath = 'input/' - let fnames = readdir(dirpath, {fname -> fname !~ '\~$' && fname =~ '^.\+\..\+$'}) + let filter ..= exists("$VIM_SYNTAX_TEST_FILTER") && + \ !empty($VIM_SYNTAX_TEST_FILTER) + \ ? (empty(filter) ? '' : '\|') .. $VIM_SYNTAX_TEST_FILTER + \ : '' + let fnames = readdir(dirpath, + \ {subset -> {fname -> fname !~ '\~$' && fname =~# subset}}( + \ empty(filter) ? '^.\+\..\+$' : filter)) endif for fname in fnames