1# 2# Makefile to run all tests for Vim, on Dos-like machines 3# with sh.exe or zsh.exe in the path or not. 4# 5# Author: Bill McCarthy 6# 7# Requires a set of Unix tools: echo, diff, etc. 8 9# Don't use unix-like shell. 10SHELL = cmd.exe 11 12DEL = del 13DELDIR = rd /s /q 14MV = move /y 15CP = copy /y 16CAT = type 17 18VIMPROG = ..\\vim 19 20default: nongui 21 22include Make_all.mak 23 24# Explicit dependencies. 25test_options.res test_alot.res: opt_test.vim 26 27TEST_OUTFILES = $(SCRIPTS_TINY_OUT) 28DOSTMP = dostmp 29# Keep $(DOSTMP)/*.in 30.PRECIOUS: $(patsubst %.out, $(DOSTMP)/%.in, $(TEST_OUTFILES)) 31 32.SUFFIXES: .in .out .res .vim 33 34nongui: nolog tinytests newtests report 35 36gui: nolog tinytests newtests report 37 38tiny: nolog tinytests report 39 40benchmark: $(SCRIPTS_BENCH) 41 42report: 43 @rem without the +eval feature test_result.log is a copy of test.log 44 @if exist test.log ( copy /y test.log test_result.log > nul ) \ 45 else ( echo No failures reported > test_result.log ) 46 $(VIMPROG) -u NONE $(NO_INITS) -S summarize.vim messages 47 @echo. 48 @echo Test results: 49 @cmd /c type test_result.log 50 @if exist test.log ( echo TEST FAILURE & exit /b 1 ) \ 51 else ( echo ALL DONE ) 52 53 54# Execute an individual new style test, e.g.: 55# mingw32-make -f Make_ming.mak test_largefile 56$(NEW_TESTS): 57 -if exist [email protected] del [email protected] 58 -if exist test.log del test.log 59 -if exist messages del messages 60 @$(MAKE) -f Make_ming.mak [email protected] VIMPROG=$(VIMPROG) --no-print-directory 61 @type messages 62 @if exist test.log exit 1 63 64 65# Delete files that may interfere with running tests. This includes some files 66# that may result from working on the tests, not only from running them. 67clean: 68 -@if exist *.out $(DEL) *.out 69 -@if exist *.failed $(DEL) *.failed 70 -@if exist *.res $(DEL) *.res 71 -@if exist $(DOSTMP) rd /s /q $(DOSTMP) 72 -@if exist test.in $(DEL) test.in 73 -@if exist test.ok $(DEL) test.ok 74 -@if exist Xdir1 $(DELDIR) Xdir1 75 -@if exist Xfind $(DELDIR) Xfind 76 -@if exist XfakeHOME $(DELDIR) XfakeHOME 77 -@if exist X* $(DEL) X* 78 -@for /d %%i in (X*) do @rd /s/q %%i 79 -@if exist viminfo $(DEL) viminfo 80 -@if exist test.log $(DEL) test.log 81 -@if exist test_result.log del test_result.log 82 -@if exist messages $(DEL) messages 83 -@if exist benchmark.out del benchmark.out 84 -@if exist opt_test.vim $(DEL) opt_test.vim 85 86nolog: 87 -@if exist test.log $(DEL) test.log 88 -@if exist test_result.log del test_result.log 89 -@if exist messages $(DEL) messages 90 91 92# Tiny tests. Works even without the +eval feature. 93tinytests: $(SCRIPTS_TINY_OUT) 94 95# Copy the input files to dostmp, changing the fileformat to dos. 96$(DOSTMP)/%.in : %.in 97 if not exist $(DOSTMP)\nul mkdir $(DOSTMP) 98 if exist $(DOSTMP)\$< $(DEL) $(DOSTMP)\$< 99 $(VIMPROG) -u dos.vim $(NO_INITS) "+set ff=dos|f $@|wq" $< 100 101# For each input file dostmp/test99.in run the tests. 102# This moves test99.in to test99.in.bak temporarily. 103%.out : $(DOSTMP)/%.in 104 -@if exist test.out $(DEL) test.out 105 -@if exist $(DOSTMP)\$@ $(DEL) $(DOSTMP)\$@ 106 $(MV) $(notdir $<) $(notdir $<).bak > NUL 107 $(CP) $(DOSTMP)\$(notdir $<) $(notdir $<) > NUL 108 $(CP) $(basename $@).ok test.ok > NUL 109 $(VIMPROG) -u dos.vim $(NO_INITS) -s dotest.in $(notdir $<) 110 -@if exist test.out $(MV) test.out $(DOSTMP)\$@ > NUL 111 -@if exist $(notdir $<).bak $(MV) $(notdir $<).bak $(notdir $<) > NUL 112 -@if exist test.ok $(DEL) test.ok 113 -@if exist Xdir1 $(DELDIR) /s /q Xdir1 114 -@if exist Xfind $(DELDIR) Xfind 115 -@if exist XfakeHOME $(DELDIR) XfakeHOME 116 -@del X* 117 -@if exist viminfo del viminfo 118 $(VIMPROG) -u dos.vim $(NO_INITS) "+set ff=unix|f test.out|wq" \ 119 $(DOSTMP)\$@ 120 @diff test.out $(basename $@).ok & if errorlevel 1 \ 121 ( $(MV) test.out $(basename $@).failed > NUL \ 122 & del $(DOSTMP)\$@ \ 123 & echo $(basename $@) FAILED >> test.log ) \ 124 else ( $(MV) test.out $(basename $@).out > NUL ) 125 126 127# New style of tests uses Vim script with assert calls. These are easier 128# to write and a lot easier to read and debug. 129# Limitation: Only works with the +eval feature. 130 131newtests: newtestssilent 132 @if exist messages type messages 133 134newtestssilent: $(NEW_TESTS_RES) 135 136.vim.res: 137 @echo $(VIMPROG) > vimcmd 138 $(VIMPROG) -u NONE $(NO_INITS) -S runtest.vim $*.vim 139 @$(DEL) vimcmd 140 141test_gui.res: test_gui.vim 142 @echo $(VIMPROG) > vimcmd 143 $(VIMPROG) -u NONE $(NO_INITS) -S runtest.vim $< 144 @$(DEL) vimcmd 145 146test_gui_init.res: test_gui_init.vim 147 @echo $(VIMPROG) > vimcmd 148 $(VIMPROG) -u gui_preinit.vim -U gui_init.vim $(NO_PLUGINS) -S runtest.vim $< 149 @$(DEL) vimcmd 150 151opt_test.vim: ../optiondefs.h gen_opt_test.vim 152 $(VIMPROG) -u NONE -S gen_opt_test.vim --noplugin --not-a-term ../optiondefs.h 153 154test_bench_regexp.res: test_bench_regexp.vim 155 -$(DEL) benchmark.out 156 @echo $(VIMPROG) > vimcmd 157 $(VIMPROG) -u NONE $(NO_INITS) -S runtest.vim $*.vim 158 @$(DEL) vimcmd 159 $(CAT) benchmark.out 160