vim/runtime/syntax/testdir/tools/regenerate_screendumps.sh
Aliaksei Budavei 7003a5d63f
runtime(syntax-tests): Apply stronger synchronisation between buffers
The current lightweight synchronisation with ":redraw" needs further
reinforcement in the light of v9.1.1110.  And, with v9.1.0820, make
another synchronisation point _before_ the first (or only) screenful is
dumped.

Also add a script to regenerate all screendumps.

closes: #16632

Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-01 16:28:20 +01:00

126 lines
2.7 KiB
Bash
Executable file

#!/bin/sh -e
#
# The following steps are to be taken by this script:
# 1) Remove all files from the "dumps" directory.
# 2) Generate screendumps for each syntax test and each self-test.
# 3) Unconditionally move each batch of screendumps to "dumps"; if generated
# files differ on repeated runs, always remove these files from "dumps".
# 4) Repeat steps 2) and 3) once or as many times as requested with the "$1"
# argument.
# 5) Summarise any differences.
#
# Provided that "git difftool" is set up (see src/testdir/commondumps.vim),
# run "git difftool HEAD -- '**/*.dump'" to collate tracked and generated
# screendumps.
case "$1" in
-h | --help)
printf >&2 "Usage: [time VIM_SYNTAX_TEST_LOG=/tmp/log] $0 [1 | 2 | ...]\n"
exit 0
;;
esac
tries="${1:-1}"
shift $#
case "$tries" in
0* | *[!0-9]*)
exit 80
;;
esac
test -x "$(command -v make)" || exit 81
test -x "$(command -v git)" || exit 82
case "$(git status --porcelain=v1)" in
'') ;;
*) printf >&2 'Resolve ALL changes before proceeding.\n'
exit 83
;;
esac
templet=$(printf "\t\t\t\t$(tput rev)%%s$(tput sgr0)") || exit 84
cd "$(dirname "$0")/../../../syntax" || exit 85
set +f
rm testdir/dumps/*.dump || exit 86
spuriosities=''
# Because the clean target of Make will be executed before each syntax test,
# this environment variable needs to be pointed to an existing file that is
# created in a directory not affectable by the target.
if test -w "$VIM_SYNTAX_TEST_LOG"
then
log=-e VIM_SYNTAX_TEST_LOG="$VIM_SYNTAX_TEST_LOG"
else
log=
fi
for f in testdir/input/*.*
do
test ! -d "$f" || continue
b=$(basename "$f")
i=0
printf "$templet\n\n" "$b"
while test "$i" -le "$tries"
do
make $log clean "$b" test || :
case "$i" in
0) mv testdir/failed/*.dump testdir/dumps/
;;
*) case "$(printf '%s' testdir/failed/*.dump)" in
testdir/failed/\*.dump)
# (Repeatable) success.
;;
*) spuriosities="${spuriosities}${b} "
p=${b%.*}
rm -f testdir/dumps/"$p"_[0-9][0-9].dump \
testdir/dumps/"$p"_[0-9][0-9][0-9].dump \
testdir/dumps/"$p"_[0-9][0-9][0-9][0-9].dump
;;
esac
;;
esac
i=$(($i + 1))
sleep 1
done
done
# For a 20-file set, initially fail for a series of: 1-6, 7-12, 13-18, 19-20.
tries=$(($tries + 3))
i=0
while test "$i" -le "$tries"
do
make $log clean self-testing test || :
case "$i" in
[0-3]) mv testdir/failed/dots_*.dump testdir/dumps/
;;
*) case "$(printf '%s' testdir/failed/*.dump)" in
testdir/failed/\*.dump)
# (Repeatable) success.
;;
*) spuriosities="${spuriosities}dots_xy "
rm -f testdir/dumps/dots_*.dump
;;
esac
;;
esac
sleep 1
i=$(($i + 1))
done
make clean
git diff --compact-summary
if test -n "$spuriosities"
then
printf '\n%s\n' "$spuriosities"
exit 87
fi
# vim:sw=8:ts=8:noet:nosta: