From: Eisuke Kawashima Date: Wed, 5 Mar 2025 20:15:45 +0000 (+0100) Subject: test(runtime/syntax): improve syntax tests X-Git-Tag: v9.1.1176~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2e18facedeff94685191bb616ae60cbb2214e53b;p=thirdparty%2Fvim.git 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 Signed-off-by: Christian Brabandt --- diff --git a/.gitignore b/.gitignore index 0d38d901de..420b3d90e9 100644 --- a/.gitignore +++ b/.gitignore @@ -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-* diff --git a/.hgignore b/.hgignore index 5c9754e2ec..d7677be5d8 100644 --- a/.hgignore +++ b/.hgignore @@ -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 diff --git a/runtime/syntax/Makefile b/runtime/syntax/Makefile index e981ed01a8..6d8019cded 100644 --- a/runtime/syntax/Makefile +++ b/runtime/syntax/Makefile @@ -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) diff --git a/runtime/syntax/testdir/README.txt b/runtime/syntax/testdir/README.txt index 6703228b9b..d8ac066803 100644 --- a/runtime/syntax/testdir/README.txt +++ b/runtime/syntax/testdir/README.txt @@ -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 diff --git a/runtime/syntax/testdir/tools/maketestdeps b/runtime/syntax/testdir/tools/maketestdeps new file mode 100755 index 0000000000..61bf061f71 --- /dev/null +++ b/runtime/syntax/testdir/tools/maketestdeps @@ -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