test(runtime/syntax): improve syntax tests

When a syntax file is changed, timestamps of the corresponding files are
updated.

NOTE: At the moment this script does not strictly track dependency, like
cpp on c.

Also update ignore files

closes #16548

Co-authored-by: Aliaksei Budavei <0x000c70@gmail.com>
Signed-off-by: Eisuke Kawashima <e-kwsm@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Eisuke Kawashima
2025-03-05 21:15:45 +01:00
committed by Christian Brabandt
parent 273926e5c0
commit 2e18facede
5 changed files with 87 additions and 19 deletions

7
.gitignore vendored
View File

@ -96,6 +96,13 @@ src/json_test
src/message_test
src/kword_test
runtime/syntax/testdir/Xfilter
runtime/syntax/testdir/done/
runtime/syntax/testdir/failed/
runtime/syntax/testdir/messages
runtime/syntax/testdir/testdeps.mk
runtime/syntax/testdir/vimcmd
# Generated by "make install"
runtime/doc/doctags
runtime/doc/tags-*

View File

@ -98,21 +98,35 @@ src/json_test
src/message_test
src/kword_test
runtime/syntax/testdir/Xfilter
runtime/syntax/testdir/done/
runtime/syntax/testdir/failed/
runtime/syntax/testdir/messages
runtime/syntax/testdir/testdeps.mk
runtime/syntax/testdir/vimcmd
# Generated by "make install"
runtime/doc/doctags
runtime/doc/tags-*
# Temporarily generated by "runtime/syntax/generator/make"
runtime/syntax/generator/generator.err
runtime/syntax/generator/sanity_check.err
runtime/syntax/generator/vim.vim.rc
# Generated by "make shadow". The directory names could be anything but we
# restrict them to shadow (the default) or shadow-*
src/shadow
src/shadow-*
src/runtime
src/pixmaps
src/LICENSE
src/README.txt
# other files possibly created by tools
src/cscope.out
# Linter/language server files
/.cache/clangd/
/.ccls-cache/
/compile_commands.json
.cache/clangd/
.ccls-cache/
compile_commands.json

View File

@ -38,33 +38,42 @@ test:
@# Trace ruler liveness on demand.
@#mkdir -p testdir/failed
@#touch "$(VIM_SYNTAX_TEST_LOG)"
VIMRUNTIME=$(VIMRUNTIME) $(ENVVARS) $(VIMPROG) --clean --not-a-term $(DEBUGLOG) -u testdir/runtest.vim > /dev/null
VIMRUNTIME=$(VIMRUNTIME) $(ENVVARS) $(VIMPROG) --clean --not-a-term $(DEBUGLOG) -u testdir/runtest.vim > /dev/null
@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
# add dependence on syntax files
testdir/testdeps.mk:
./testdir/tools/maketestdeps > $@
-include testdir/testdeps.mk
clean testclean:
rm -f testdir/failed/* testdir/done/* testdir/vimcmd testdir/messages testdir/Xtestscript testdir/Xfilter
rm -f testdir/failed/* testdir/done/* testdir/vimcmd testdir/messages testdir/Xtestscript testdir/Xfilter testdir/testdeps.mk
# All initial phony targets; these names may clash with file extensions.
phonies = clean test testclean
.PHONY: $(phonies)
# Collect all input filenames and their file extensions.
# Collect all input filenames and their file types.
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) ? "_" : ""); \
for (i = 1; i < ARGC; i++) { \
name = ARGV[i]; \
sub(/.+\//, "", name); \
print name; \
if (name ~ /.+_.+/) { \
sub(/_.+/, "", name); \
} else { \
sub(/.+\./, "", name) \
} \
if (name == "vim9") name = "vim"; \
exts[name]; \
} \
for (ext in exts) \
print ext; \
}' testdir/input/*.*
.PHONY: self-testing $(testnames)

View File

@ -67,8 +67,8 @@ If there is no further setup required, you can now run all tests:
make test
Or you can run the tests for a filetype only by passing its file extension as
another target, e.g. "java", before "test":
Or you can run the tests for a filetype only by passing its name as another
target, e.g. "java", before "test":
make java test

View File

@ -0,0 +1,38 @@
#!/bin/bash
# This script generates auxiliary recipes for 'make test': e.g. in the case of JAVA,
# - a phony target 'java' depends on all of the testdir/input/java*.java
# - when the syntax file is changed, timestamps of the JAVA files are updated so that the tests will
# be rerun against updated syntax
# - when a vim setup file for test, e.g. testdir/input/setup/java_module_info.vim, is changed,
# timestamp of the corresponding input, testdir/input/java_module_info.java, is updated
#
# NOTE: At the moment this script DOES NOT strictly track dependency, like cpp on c, so run
# `make clean test` before deployment
set -eu +f -o pipefail
cd "$(dirname "$0")"/../..
for input in testdir/input/*.*; do
dirname=$(dirname "$input")
basename=$(basename "$input")
case "$basename" in
vim9_*.*) ft=vim;;
*_*.*) ft=${basename%%_*};;
*.*) ft=${basename%%.*};;
*) exit 1
esac
vimsetup=$dirname/setup/${basename%.*}.vim
if [ ! -r "$vimsetup" ]; then
vimsetup=
fi
cat << EOF
$input: $ft.vim $vimsetup
touch -c \$@
$basename:: $input
$ft:: $basename
EOF
done