1071d4279SBram Moolenaar# 26ee10162SBram Moolenaar# Makefile to run all tests for Vim 3071d4279SBram Moolenaar# 4071d4279SBram Moolenaar 53f12a242SBram Moolenaar# Use console or GUI. 6071d4279SBram MoolenaarVIMPROG = ../vim 729f9ed20SBram MoolenaarXXDPROG = ../xxd/xxd 83f12a242SBram Moolenaar# VIMPROG = ../gvim 93f12a242SBram Moolenaar 10efa304d7SBram MoolenaarSCRIPTSOURCE = ../../runtime 11071d4279SBram Moolenaar 12d8f27b30SBram Moolenaar# Comment out this line to see the verbose output of tests. 13d8f27b30SBram Moolenaar# 14d8f27b30SBram Moolenaar# Catches SwapExists to avoid hanging at the ATTENTION prompt. 15592f57f5SBram MoolenaarREDIR_TEST_TO_NULL = --cmd 'au SwapExists * let v:swapchoice = "e"' | LC_ALL=C LANG=C LANGUAGE=C awk '/Executing Test_/{match($$0, "Executing Test_[^\\)]*\\)"); print substr($$0, RSTART, RLENGTH) "\r"; fflush()}' 16e76d7a63SBram Moolenaar 170c77b7baSBram Moolenaar# Uncomment this line to use valgrind for memory leaks and extra warnings. 180c77b7baSBram Moolenaar# The output goes into a file "valgrind.testN" 190c77b7baSBram Moolenaar# Vim should be compiled with EXITFREE to avoid false warnings. 200c77b7baSBram Moolenaar# This will make testing about 10 times as slow. 21af6c12c2SBram Moolenaar# VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=25 --log-file=valgrind.$* 224d2fffc8SBram Moolenaar 2340bbceeeSBram Moolenaardefault: nongui 24680eeca9SBram Moolenaar 257b6156f4SBram Moolenaar# The list of tests is common to all systems. 26b96a32efSBram Moolenaar# This defines SCRIPTS_TINY_OUT, NEW_TESTS and NEW_TESTS_RES. 277b6156f4SBram Moolenaarinclude Make_all.mak 28071d4279SBram Moolenaar 2946fd6bf2SBram Moolenaar# Explicit dependencies. 3046fd6bf2SBram Moolenaartest_options.res test_alot.res: opt_test.vim 3146fd6bf2SBram Moolenaar 3243345546SBram Moolenaar.SUFFIXES: .in .out .res .vim 33071d4279SBram Moolenaar 34b96a32efSBram Moolenaarnongui: nolog tinytests newtests report 35071d4279SBram Moolenaar 36b96a32efSBram Moolenaargui: nolog tinytests newtests report 37b96a32efSBram Moolenaar 38b96a32efSBram Moolenaartiny: nolog tinytests report 39f2e53dadSBram Moolenaar 40fda3729aSBram Moolenaarbenchmark: $(SCRIPTS_BENCH) 41fda3729aSBram Moolenaar 42f2e53dadSBram Moolenaarreport: 43*c512599bSK.Takata @# without the +eval feature test_result.log is a copy of test.log 4418250e29SBram Moolenaar @/bin/sh -c "if test -f test.log; \ 4518250e29SBram Moolenaar then cp test.log test_result.log; \ 4618250e29SBram Moolenaar else echo No failures reported > test_result.log; \ 4718250e29SBram Moolenaar fi" 487d232041SBram Moolenaar $(VIMPROG) -u NONE $(NO_INITS) -S summarize.vim messages $(REDIR_TEST_TO_NULL) 49071d4279SBram Moolenaar @echo 50f2e53dadSBram Moolenaar @echo 'Test results:' 519c0cec65SBram Moolenaar @cat test_result.log 52f2e53dadSBram Moolenaar @/bin/sh -c "if test -f test.log; \ 539c0cec65SBram Moolenaar then echo TEST FAILURE; exit 1; \ 54f2e53dadSBram Moolenaar else echo ALL DONE; \ 55f2e53dadSBram Moolenaar fi" 56071d4279SBram Moolenaar 57b96a32efSBram Moolenaar$(SCRIPTS_TINY_OUT) $(NEW_TESTS_RES): $(VIMPROG) 58ec50401eSBram Moolenaar 59ec50401eSBram Moolenaar 60ec50401eSBram Moolenaar# Execute an individual new style test, e.g.: 61ec50401eSBram Moolenaar# make test_largefile 62ec50401eSBram Moolenaar$(NEW_TESTS): 63ec50401eSBram Moolenaar rm -f $@.res test.log messages 6485683ec6SBram Moolenaar @MAKEFLAGS=--no-print-directory $(MAKE) -f Makefile $@.res VIMPROG=$(VIMPROG) XXDPROG=$(XXDPROG) SCRIPTSOURCE=$(SCRIPTSOURCE) 65ba089307SBram Moolenaar @cat messages 664e0bf846SBram Moolenaar @if test -f test.log; then \ 674e0bf846SBram Moolenaar exit 1; \ 684e0bf846SBram Moolenaar fi 69071d4279SBram Moolenaar 70ec5929d0SBram Moolenaar# Run only tests specific for Vim9 script 71ec5929d0SBram Moolenaartest_vim9: 72ec5929d0SBram Moolenaar rm -f test_vim9_*.res test.log messages 73ec5929d0SBram Moolenaar @MAKEFLAGS=--no-print-directory $(MAKE) -f Makefile $(TEST_VIM9_RES) VIMPROG=$(VIMPROG) XXDPROG=$(XXDPROG) SCRIPTSOURCE=$(SCRIPTSOURCE) 74ec5929d0SBram Moolenaar @cat messages 75ec5929d0SBram Moolenaar @MAKEFLAGS=--no-print-directory $(MAKE) -f Makefile report VIMPROG=$(VIMPROG) XXDPROG=$(XXDPROG) SCRIPTSOURCE=$(SCRIPTSOURCE) 76ec5929d0SBram Moolenaar @if test -f test.log; then \ 77ec5929d0SBram Moolenaar exit 1; \ 78ec5929d0SBram Moolenaar fi 79ec5929d0SBram Moolenaar 8060ec5f35SBram MoolenaarRM_ON_RUN = test.out X* viminfo 81b96a32efSBram MoolenaarRM_ON_START = test.ok benchmark.out 8241a82604SBram MoolenaarRUN_VIM = VIMRUNTIME=$(SCRIPTSOURCE) $(VALGRIND) $(VIMPROG) -f $(GUI_FLAG) -u unix.vim $(NO_INITS) -s dotest.in 8360ec5f35SBram Moolenaar 84d9b0d83bSBram Moolenaar# Delete files that may interfere with running tests. This includes some files 85d9b0d83bSBram Moolenaar# that may result from working on the tests, not only from running them. 86071d4279SBram Moolenaarclean: 874f5b0e53SBram Moolenaar -rm -rf *.out *.failed *.res *.rej *.orig XfakeHOME Xdir1 Xfind 888ed75cb0SBram Moolenaar -rm -f opt_test.vim test.log test_result.log messages 898ed75cb0SBram Moolenaar -rm -f $(RM_ON_RUN) $(RM_ON_START) 908ed75cb0SBram Moolenaar -rm -f valgrind.* 9195a467e7SBram Moolenaar -rm -f asan.* 92071d4279SBram Moolenaar 93071d4279SBram Moolenaarnolog: 94b96a32efSBram Moolenaar -rm -f test.log test_result.log messages 95b96a32efSBram Moolenaar 96b96a32efSBram Moolenaar 97b96a32efSBram Moolenaar# Tiny tests. Works even without the +eval feature. 98b96a32efSBram Moolenaartinytests: $(SCRIPTS_TINY_OUT) 99b96a32efSBram Moolenaar 100b96a32efSBram Moolenaar.in.out: 101b96a32efSBram Moolenaar -rm -rf $*.failed test.ok $(RM_ON_RUN) 102b96a32efSBram Moolenaar cp $*.ok test.ok 103b96a32efSBram Moolenaar @# Sleep a moment to avoid that the xterm title is messed up. 104b96a32efSBram Moolenaar @# 200 msec is sufficient, but only modern sleep supports a fraction of 105b96a32efSBram Moolenaar @# a second, fall back to a second if it fails. 106b96a32efSBram Moolenaar @-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1" 107b96a32efSBram Moolenaar $(RUN_VIM) $*.in $(REDIR_TEST_TO_NULL) 108b96a32efSBram Moolenaar 109b96a32efSBram Moolenaar @# Check if the test.out file matches test.ok. 110b96a32efSBram Moolenaar @/bin/sh -c "if test -f test.out; then \ 111b96a32efSBram Moolenaar if diff test.out $*.ok; \ 112b96a32efSBram Moolenaar then mv -f test.out $*.out; \ 113b96a32efSBram Moolenaar else echo $* FAILED >>test.log; mv -f test.out $*.failed; \ 114b96a32efSBram Moolenaar fi \ 115b96a32efSBram Moolenaar else echo $* NO OUTPUT >>test.log; \ 116b96a32efSBram Moolenaar fi" 117b96a32efSBram Moolenaar @/bin/sh -c "if test -f valgrind; then\ 118b96a32efSBram Moolenaar mv -f valgrind valgrind.$*; \ 119b96a32efSBram Moolenaar fi" 120b96a32efSBram Moolenaar -rm -rf X* test.ok viminfo 12143345546SBram Moolenaar 12243345546SBram Moolenaar 12343345546SBram Moolenaar# New style of tests uses Vim script with assert calls. These are easier 12443345546SBram Moolenaar# to write and a lot easier to read and debug. 12543345546SBram Moolenaar# Limitation: Only works with the +eval feature. 12641a82604SBram MoolenaarRUN_VIMTEST = VIMRUNTIME=$(SCRIPTSOURCE) $(VALGRIND) $(VIMPROG) -f $(GUI_FLAG) -u unix.vim 12743345546SBram Moolenaar 128e7893a40SBram Moolenaarnewtests: newtestssilent 1296e3aeec8SBram Moolenaar @/bin/sh -c "if test -f messages; then cat messages; fi" 130e7893a40SBram Moolenaar 131ec50401eSBram Moolenaarnewtestssilent: $(NEW_TESTS_RES) 132e7893a40SBram Moolenaar 13343345546SBram Moolenaar 1341417031cSBram Moolenaar.vim.res: 13563182053SBram Moolenaar @echo "$(VIMPROG)" > vimcmd 13663182053SBram Moolenaar @echo "$(RUN_VIMTEST)" >> vimcmd 137e76d7a63SBram Moolenaar $(RUN_VIMTEST) $(NO_INITS) -S runtest.vim $*.vim $(REDIR_TEST_TO_NULL) 1388be2fbb6SBram Moolenaar @rm vimcmd 1398be2fbb6SBram Moolenaar 1408be2fbb6SBram Moolenaartest_gui.res: test_gui.vim 14163182053SBram Moolenaar @echo "$(VIMPROG)" > vimcmd 14263182053SBram Moolenaar @echo "$(RUN_GVIMTEST)" >> vimcmd 1438be2fbb6SBram Moolenaar $(RUN_VIMTEST) -u NONE $(NO_INITS) -S runtest.vim $< 1448be2fbb6SBram Moolenaar @rm vimcmd 1458be2fbb6SBram Moolenaar 1468be2fbb6SBram Moolenaartest_gui_init.res: test_gui_init.vim 14763182053SBram Moolenaar @echo "$(VIMPROG)" > vimcmd 14863182053SBram Moolenaar @echo "$(RUN_GVIMTEST_WITH_GVIMRC)" >> vimcmd 1498774845cSBram Moolenaar $(RUN_VIMTEST) -u gui_preinit.vim -U gui_init.vim $(NO_PLUGINS) -S runtest.vim $< 15066459b7cSBram Moolenaar @rm vimcmd 15165408f7dSBram Moolenaar 152d9b0d83bSBram Moolenaaropt_test.vim: ../optiondefs.h gen_opt_test.vim 153d9b0d83bSBram Moolenaar $(VIMPROG) -u NONE -S gen_opt_test.vim --noplugin --not-a-term ../optiondefs.h 15429f9ed20SBram Moolenaar 15529f9ed20SBram Moolenaartest_xxd.res: 15629f9ed20SBram Moolenaar XXD=$(XXDPROG); export XXD; $(RUN_VIMTEST) $(NO_INITS) -S runtest.vim test_xxd.vim 157ad48e6c1SBram Moolenaar 158ad48e6c1SBram Moolenaartest_bench_regexp.res: test_bench_regexp.vim 159ad48e6c1SBram Moolenaar -rm -rf benchmark.out $(RM_ON_RUN) 160b96a32efSBram Moolenaar @# Sleep a moment to avoid that the xterm title is messed up. 161b96a32efSBram Moolenaar @# 200 msec is sufficient, but only modern sleep supports a fraction of 162b96a32efSBram Moolenaar @# a second, fall back to a second if it fails. 163ad48e6c1SBram Moolenaar @-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1" 164ad48e6c1SBram Moolenaar $(RUN_VIMTEST) $(NO_INITS) -S runtest.vim $*.vim $(REDIR_TEST_TO_NULL) 165ad48e6c1SBram Moolenaar @/bin/sh -c "if test -f benchmark.out; then cat benchmark.out; fi" 166