Files
Aliaksei Budavei 92d4e9beb1 runtime(syntax-tests): Clarify the naming scheme for test files
Similar to "sh.vim", there are a handful of other filetypes
whose names (assigned to "b:current_syntax") are different
from the base names of their syntax plugins, e.g. "python2"
and "elsa".  Two scripts, "testdir/tools/maketestdeps" and
"testdir/runtest.vim", currently assume that the base name
of a syntax plugin can be derived from the name of a syntax
test.  Prescribe using the base name of the syntax plugin,
instead of its filetype, for a test filename prefix so that
existing files are listed in Make targets ("maketestdeps")
and name correspondence is kept between the syntax plugin
and optional test settings for it ("runtest.vim").  Add a CI
check for name verification.

closes: #21414

Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-10-21 15:10:49 +00:00

94 lines
3.1 KiB
Makefile

# Portable Makefile for running syntax tests.
# To run the test manually:
# ../../src/vim -u 'testdir/runtest.vim' --cmd 'breakadd func RunTest'
# Override this if needed, the default assumes Vim was built in the src dir.
#VIMPROG = vim
VIMPROG = ../../src/vim
# "runtime" relative to "runtime/syntax/testdir"
VIMRUNTIME = ../..
# Uncomment this line to use valgrind for memory leaks and extra warnings.
# VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=45 --log-file=valgrind.$*
# Trace ruler liveness on demand.
# VIM_SYNTAX_TEST_LOG = `pwd`/testdir/failed/00-TRACE_LOG
# ENVVARS = LC_ALL=C VIM_SYNTAX_TEST_LOG="$(VIM_SYNTAX_TEST_LOG)"
# ENVVARS = LC_ALL=C LANG=C LANGUAGE=C
# Run the syntax tests with a C locale
ENVVARS = LC_ALL=C
RUN_VIMTEST = VIMRUNTIME=$(VIMRUNTIME) $(VALGRIND) $(ENVVARS) ../$(VIMPROG) -f $(GUI_FLAG)
# Uncomment this line for debugging
# DEBUGLOG = --log testlog
# All initial phony targets; these names may clash with file types.
phonies = clean executables misnomers test testclean
.PHONY: $(phonies)
# Run the tests that didn't run yet or failed previously.
# If a test succeeds a testdir/done/{name} file will be written.
# If a test fails a testdir/failed/{name}.dump file will be written.
# Progress and error messages can be found in "testdir/messages".
# Comment out the "> /dev/null" part to see the in-progress Vim behaviors.
test:
@# the "vimcmd" file is used by the screendump utils
@echo "../$(VIMPROG)" > testdir/vimcmd
@echo "$(RUN_VIMTEST)" >> testdir/vimcmd
@# 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
@# 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 $(phonies) > $@
-include testdir/testdeps.mk
executables:
@! find testdir/input -type f -perm /a+x -exec echo Executable syntax test found: \{\} \; | grep :
misnomers:
@s=true; \
for n in $(testnames); \
do case "$$n" in *.* | vim9) ;; \
*) test -f $${n%_}.vim || { echo No such file: syntax/$${n%_}.vim; s=false; } ;; \
esac; \
done; \
$$s
clean testclean:
rm -f testdir/failed/* testdir/done/* testdir/vimcmd testdir/messages testdir/Xtestscript testdir/Xfilter testdir/testdeps.mk
# 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, /[._]/); \
types[parts[1]]; \
print names[3]; \
} \
split("$(phonies)", scratch); \
for (phony in scratch) \
phonies[scratch[phony]]; \
for (type in types) \
print type ((type in phonies) ? "_" : ""); \
}' testdir/input/*.*
.PHONY: self-testing $(testnames)
$(testnames)::
@echo $@ >> testdir/Xfilter
self-testing:: $(testnames)
@echo self-testing > testdir/Xfilter