Problem: Tiny and small builds have no test coverage.
Solution: Restore tests that do not depend on the +eval feature.
(Ken Takata, closes #6696)
_anchors:
envs:
- &tiny-nogui
- FEATURES=tiny CONFOPT="--disable-gui"
+ FEATURES=tiny TEST=testtiny CONFOPT="--disable-gui"
- &tiny
- FEATURES=tiny
+ FEATURES=tiny TEST=testtiny
- &small
- FEATURES=small
+ FEATURES=small TEST=testtiny
- &normal
FEATURES=normal
- &linux-huge
src/testdir/gen_opt_test.vim \
src/testdir/README.txt \
src/testdir/Make_all.mak \
- src/testdir/dotest.in \
- src/testdir/test1.in \
- src/testdir/test77a.in \
+ src/testdir/*.in \
src/testdir/*.py \
src/testdir/lsan-suppress.txt \
src/testdir/sautest/autoload/*.vim \
src/testdir/summarize.vim \
src/testdir/term_util.vim \
src/testdir/view_util.vim \
-- src/testdir/test1.ok \
+ src/testdir/test[0-9]*.ok \
src/testdir/test77a.ok \
src/testdir/test83-tags? \
src/testdir/test77a.com \
# Some make programs use the last target for the $@ default; put the other
# targets separately to always let $@ expand to "first" by default.
-all install uninstall tools config configure reconfig proto depend lint tags types test scripttests test_libvterm unittests testclean clean distclean:
+all install uninstall tools config configure reconfig proto depend lint tags types test scripttests testtiny test_libvterm unittests testclean clean distclean:
@if test ! -f src/auto/config.mk; then \
cp src/config.mk.dist src/auto/config.mk; \
fi
Vim can be tested after building it, usually with "make test".
The tests are located in the directory "src/testdir".
+There are two types of tests added over time:
+ test20.in oldest, only for tiny and small builds
+ test_something.vim new style tests
+
*new-style-testing*
New tests should be added as new style tests. The test scripts are named
test_<feature>.vim (replace <feature> with the feature under test). These use
functions such as |assert_equal()| to keep the test commands and the expected
result in one place.
+ *old-style-testing*
+These tests are used only for testing Vim without the |+eval| feature.
Find more information in the file src/testdir/README.txt.
test:
cd testdir
- $(MAKE) /NOLOGO -f Make_dos.mak win32
+ $(MAKE) /NOLOGO -f Make_dos.mak
cd ..
testgvim:
cd testdir
- $(MAKE) /NOLOGO -f Make_dos.mak VIMPROG=..\gvim win32
+ $(MAKE) /NOLOGO -f Make_dos.mak VIMPROG=..\gvim
+ cd ..
+
+testtiny:
+ cd testdir
+ $(MAKE) /NOLOGO -f Make_dos.mak tiny
+ cd ..
+
+testgvimtiny:
+ cd testdir
+ $(MAKE) /NOLOGO -f Make_dos.mak tiny VIMPROG=..\gvim
cd ..
testclean:
$(MAKE) /NOLOGO -f Make_dos.mak clean
cd ..
-# Run test1 to bootstrap tests
+# Run individual OLD style test.
# These do not depend on the executable, compile it when needed.
-$(SCRIPTS_FIRST:.out=):
+$(SCRIPTS_TINY):
cd testdir
- if exist $@.out del $@.out
$(MAKE) /NOLOGO -f Make_dos.mak VIMPROG=..\$(VIMTESTTARGET) nolog
testgui:
cd testdir; $(MAKE) -f Makefile $(GUI_TESTTARGET) VIMPROG=../$(VIMTARGET) GUI_FLAG=-g $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
+testtiny:
+ cd testdir; $(MAKE) -f Makefile tiny VIMPROG=../$(VIMTARGET) SCRIPTSOURCE=../$(SCRIPTSOURCE)
+
benchmark:
cd testdir; $(MAKE) -f Makefile benchmark VIMPROG=../$(VIMTARGET) SCRIPTSOURCE=../$(SCRIPTSOURCE)
CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)"; \
fi
-# Run test1, used to bootstrap tests.
-# This does not depend on the executable, compile first it when needed.
-test1:
+# Run individual OLD style test.
+# These do not depend on the executable, compile it when needed.
+$(SCRIPTS_TINY):
cd testdir; rm -f $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
# Run individual NEW style test.
NO_PLUGINS = --noplugin --not-a-term
NO_INITS = -U NONE $(NO_PLUGINS)
-# The first script creates small.vim.
-SCRIPTS_FIRST = test1.out
+# Tests for tiny and small builds.
+SCRIPTS_TINY = \
+ test20 \
+ test21 \
+ test22 \
+ test23 \
+ test24 \
+ test25 \
+ test26 \
+ test27
+
+SCRIPTS_TINY_OUT = \
+ test20.out \
+ test21.out \
+ test22.out \
+ test23.out \
+ test24.out \
+ test25.out \
+ test26.out \
+ test27.out
# Tests for Vim9 script.
TEST_VIM9 = \
test_vim9_func.res \
test_vim9_script.res
+# Benchmark scripts.
+SCRIPTS_BENCH = test_bench_regexp.res
+
# Individual tests, including the ones part of test_alot.
# Please keep sorted up to test_alot.
NEW_TESTS = \
include Make_all.mak
+SCRIPTS = $(SCRIPTS_TINY_OUT)
+
.SUFFIXES: .in .out .res .vim
-nongui: /tmp $(SCRIPTS_FIRST)
+nongui: /tmp $(SCRIPTS)
csh -c echo ALL DONE
clean:
!include Make_all.mak
-TEST_OUTFILES = $(SCRIPTS_FIRST)
+# Explicit dependencies.
+test_options.res test_alot.res: opt_test.vim
+
+TEST_OUTFILES = $(SCRIPTS_TINY_OUT)
DOSTMP = dostmp
DOSTMP_OUTFILES = $(TEST_OUTFILES:test=dostmp\test)
DOSTMP_INFILES = $(DOSTMP_OUTFILES:.out=.in)
.SUFFIXES: .in .out .res .vim
-nongui: nolog $(SCRIPTS_FIRST) newtests report
+nongui: nolog tinytests newtests report
-small: nolog report
+gui: nolog tinytests newtests report
-gui: nolog $(SCRIPTS_FIRST) newtests report
+tiny: nolog tinytests report
-win32: nolog $(SCRIPTS_FIRST) newtests report
-
-# Copy the input files to dostmp, changing the fileformat to dos.
-$(DOSTMP_INFILES): $(*B).in
- if not exist $(DOSTMP)\NUL md $(DOSTMP)
- if exist $@ del $@
- $(VIMPROG) -u dos.vim $(NO_INITS) "+set ff=dos|f $@|wq" $(*B).in
-
-# For each input file dostmp/test99.in run the tests.
-# This moves test99.in to test99.in.bak temporarily.
-$(TEST_OUTFILES): $(DOSTMP)\$(*B).in
- -@if exist test.out DEL test.out
- -@if exist $(DOSTMP)\$(*B).out DEL $(DOSTMP)\$(*B).out
- move $(*B).in $(*B).in.bak > nul
- copy $(DOSTMP)\$(*B).in $(*B).in > nul
- copy $(*B).ok test.ok > nul
- $(VIMPROG) -u dos.vim $(NO_INITS) -s dotest.in $(*B).in
- -@if exist test.out MOVE /y test.out $(DOSTMP)\$(*B).out > nul
- -@if exist $(*B).in.bak move /y $(*B).in.bak $(*B).in > nul
- -@if exist test.ok del test.ok
- -@if exist Xdir1 rd /s /q Xdir1
- -@if exist Xfind rd /s /q Xfind
- -@if exist XfakeHOME rd /s /q XfakeHOME
- -@del X*
- -@if exist viminfo del viminfo
- $(VIMPROG) -u dos.vim $(NO_INITS) "+set ff=unix|f test.out|wq" \
- $(DOSTMP)\$(*B).out
- @diff test.out $*.ok & if errorlevel 1 \
- ( move /y test.out $*.failed > nul \
- & del $(DOSTMP)\$(*B).out \
- & echo $* FAILED >> test.log ) \
- else ( move /y test.out $*.out > nul )
-
-# Must run test1 first to create small.vim.
-# This rule must come after the one that copies the input files to dostmp to
-# allow for running an individual test.
-$(SCRIPTS) $(SCRIPTS_GUI) $(SCRIPTS_WIN32) $(NEW_TESTS_RES): $(SCRIPTS_FIRST)
+benchmark: $(SCRIPTS_BENCH)
report:
@rem without the +eval feature test_result.log is a copy of test.log
@if exist test.log ( echo TEST FAILURE & exit /b 1 ) \
else ( echo ALL DONE )
+
+# Execute an individual new style test, e.g.:
+# nmake -f Make_dos.mak test_largefile
+$(NEW_TESTS):
+ -if exist $@.res del $@.res
+ -if exist test.log del test.log
+ -if exist messages del messages
+ @$(MAKE) -nologo -f Make_dos.mak $@.res VIMPROG=$(VIMPROG)
+ @type messages
+ @if exist test.log exit 1
+
+
+# Delete files that may interfere with running tests. This includes some files
+# that may result from working on the tests, not only from running them.
clean:
- -del *.out
- -del *.failed
- -del *.res
+ -if exist *.out $(DEL) *.out
+ -if exist *.failed $(DEL) *.failed
+ -if exist *.res $(DEL) *.res
-if exist $(DOSTMP) rd /s /q $(DOSTMP)
-if exist test.in del test.in
-if exist test.ok del test.ok
-if exist Xdir1 rd /s /q Xdir1
-if exist Xfind rd /s /q Xfind
-if exist XfakeHOME rd /s /q XfakeHOME
- -del X*
- -for /d %i in (X*) do @rmdir /s/q %i
+ -if exist X* $(DEL) X*
+ -for /d %i in (X*) do @rd /s/q %i
-if exist viminfo del viminfo
-if exist test.log del test.log
-if exist test_result.log del test_result.log
-if exist test_result.log del test_result.log
-if exist messages del messages
-benchmark: test_bench_regexp.res
-test_bench_regexp.res: test_bench_regexp.vim
- -if exist benchmark.out del benchmark.out
- @echo $(VIMPROG) > vimcmd
- $(VIMPROG) -u NONE $(NO_INITS) -S runtest.vim $*.vim
- @del vimcmd
- @IF EXIST benchmark.out ( type benchmark.out )
+# Tiny tests. Works even without the +eval feature.
+tinytests: $(SCRIPTS_TINY_OUT)
+
+# Copy the input files to dostmp, changing the fileformat to dos.
+$(DOSTMP_INFILES): $(*B).in
+ if not exist $(DOSTMP)\NUL md $(DOSTMP)
+ if exist $@ del $@
+ $(VIMPROG) -u dos.vim $(NO_INITS) "+set ff=dos|f $@|wq" $(*B).in
+
+# For each input file dostmp/test99.in run the tests.
+# This moves test99.in to test99.in.bak temporarily.
+$(TEST_OUTFILES): $(DOSTMP)\$(*B).in
+ -@if exist test.out DEL test.out
+ -@if exist $(DOSTMP)\$(*B).out DEL $(DOSTMP)\$(*B).out
+ move $(*B).in $(*B).in.bak > nul
+ copy $(DOSTMP)\$(*B).in $(*B).in > nul
+ copy $(*B).ok test.ok > nul
+ $(VIMPROG) -u dos.vim $(NO_INITS) -s dotest.in $(*B).in
+ -@if exist test.out MOVE /y test.out $(DOSTMP)\$(*B).out > nul
+ -@if exist $(*B).in.bak move /y $(*B).in.bak $(*B).in > nul
+ -@if exist test.ok del test.ok
+ -@if exist Xdir1 rd /s /q Xdir1
+ -@if exist Xfind rd /s /q Xfind
+ -@if exist XfakeHOME rd /s /q XfakeHOME
+ -@del X*
+ -@if exist viminfo del viminfo
+ $(VIMPROG) -u dos.vim $(NO_INITS) "+set ff=unix|f test.out|wq" \
+ $(DOSTMP)\$(*B).out
+ @diff test.out $*.ok & if errorlevel 1 \
+ ( move /y test.out $*.failed > nul \
+ & del $(DOSTMP)\$(*B).out \
+ & echo $* FAILED >> test.log ) \
+ else ( move /y test.out $*.out > nul )
+
# New style of tests uses Vim script with assert calls. These are easier
# to write and a lot easier to read and debug.
$(VIMPROG) -u gui_preinit.vim -U gui_init.vim $(NO_PLUGINS) -S runtest.vim $*.vim
@del vimcmd
-test_options.res test_alot.res: opt_test.vim
-
opt_test.vim: ../optiondefs.h gen_opt_test.vim
$(VIMPROG) -u NONE -S gen_opt_test.vim --noplugin --not-a-term ../optiondefs.h
+
+test_bench_regexp.res: test_bench_regexp.vim
+ -if exist benchmark.out del benchmark.out
+ @echo $(VIMPROG) > vimcmd
+ $(VIMPROG) -u NONE $(NO_INITS) -S runtest.vim $*.vim
+ @del vimcmd
+ @IF EXIST benchmark.out ( type benchmark.out )
#
# Requires a set of Unix tools: echo, diff, etc.
-ifneq (sh.exe, $(SHELL))
-DEL = rm -f
-DELDIR = rm -rf
-MV = mv
-CP = cp
-CAT = cat
-DIRSLASH = /
-else
+# Don't use unix-like shell.
+SHELL = cmd.exe
+
DEL = del
DELDIR = rd /s /q
-MV = rename
-CP = copy
+MV = move /y
+CP = copy /y
CAT = type
-DIRSLASH = \\
-endif
-VIMPROG = ..$(DIRSLASH)vim
+VIMPROG = ..\\vim
-default: vimall
+default: nongui
include Make_all.mak
-SCRIPTS_BENCH = test_bench_regexp.res
+# Explicit dependencies.
+test_options.res test_alot.res: opt_test.vim
-# Must run test1 first to create small.vim.
-$(NEW_TESTS_RES): $(SCRIPTS_FIRST)
+TEST_OUTFILES = $(SCRIPTS_TINY_OUT)
+DOSTMP = dostmp
+# Keep $(DOSTMP)/*.in
+.PRECIOUS: $(patsubst %.out, $(DOSTMP)/%.in, $(TEST_OUTFILES))
.SUFFIXES: .in .out .res .vim
-vimall: fixff $(SCRIPTS_FIRST) newtests
- @echo ALL DONE
-
-nongui: fixff nolog $(SCRIPTS_FIRST) newtests
- @echo ALL DONE
-
-benchmark: $(SCRIPTS_BENCH)
+nongui: nolog tinytests newtests report
-small: nolog
- @echo ALL DONE
+gui: nolog tinytests newtests report
-gui: fixff nolog $(SCRIPTS_FIRST) newtests
- @echo ALL DONE
+tiny: nolog tinytests report
-win32: fixff nolog $(SCRIPTS_FIRST) newtests
- @echo ALL DONE
-
-# TODO: find a way to avoid changing the distributed files.
-fixff:
- -$(VIMPROG) -u dos.vim $(NO_INITS) "+argdo set ff=dos|upd" +q *.in *.ok
- -$(VIMPROG) -u dos.vim $(NO_INITS) "+argdo set ff=unix|upd" +q \
- dotest.in
+benchmark: $(SCRIPTS_BENCH)
+report:
+ @rem without the +eval feature test_result.log is a copy of test.log
+ @if exist test.log ( copy /y test.log test_result.log > nul ) \
+ else ( echo No failures reported > test_result.log )
+ $(VIMPROG) -u NONE $(NO_INITS) -S summarize.vim messages
+ @echo.
+ @echo Test results:
+ @cmd /c type test_result.log
+ @if exist test.log ( echo TEST FAILURE & exit /b 1 ) \
+ else ( echo ALL DONE )
+
+
+# Execute an individual new style test, e.g.:
+# mingw32-make -f Make_ming.mak test_largefile
+$(NEW_TESTS):
+ -if exist $@.res del $@.res
+ -if exist test.log del test.log
+ -if exist messages del messages
+ @$(MAKE) -f Make_ming.mak $@.res VIMPROG=$(VIMPROG) --no-print-directory
+ @type messages
+ @if exist test.log exit 1
+
+
+# Delete files that may interfere with running tests. This includes some files
+# that may result from working on the tests, not only from running them.
clean:
-@if exist *.out $(DEL) *.out
-@if exist *.failed $(DEL) *.failed
-@if exist *.res $(DEL) *.res
+ -@if exist $(DOSTMP) rd /s /q $(DOSTMP)
-@if exist test.in $(DEL) test.in
-@if exist test.ok $(DEL) test.ok
-@if exist small.vim $(DEL) small.vim
-@if exist Xfind $(DELDIR) Xfind
-@if exist XfakeHOME $(DELDIR) XfakeHOME
-@if exist X* $(DEL) X*
+ -@for /d %%i in (X*) do @rd /s/q %%i
-@if exist viminfo $(DEL) viminfo
-@if exist test.log $(DEL) test.log
+ -@if exist test_result.log del test_result.log
-@if exist messages $(DEL) messages
+ -@if exist benchmark.out del benchmark.out
-@if exist opt_test.vim $(DEL) opt_test.vim
-test1.out: test1.in
- -@if exist wrongtermsize $(DEL) wrongtermsize
- $(VIMPROG) -u dos.vim $(NO_INITS) -s dotest.in test1.in
- -@if exist wrongtermsize ( \
- echo Vim window too small- must be 80x25 or larger && exit 1 \
- )
- -@if exist test.out $(DEL) test.out
- -@if exist viminfo $(DEL) viminfo
-
nolog:
-@if exist test.log $(DEL) test.log
+ -@if exist test_result.log del test_result.log
-@if exist messages $(DEL) messages
-test_bench_regexp.res: test_bench_regexp.vim
- -$(DEL) benchmark.out
- @echo $(VIMPROG) > vimcmd
- $(VIMPROG) -u NONE $(NO_INITS) -S runtest.vim $*.vim
- @$(DEL) vimcmd
- $(CAT) benchmark.out
+
+# Tiny tests. Works even without the +eval feature.
+tinytests: $(SCRIPTS_TINY_OUT)
+
+# Copy the input files to dostmp, changing the fileformat to dos.
+$(DOSTMP)/%.in : %.in
+ if not exist $(DOSTMP)\nul mkdir $(DOSTMP)
+ if not exist $@ $(DEL) $@
+ $(VIMPROG) -u dos.vim $(NO_INITS) "+set ff=dos|f $@|wq" $<
+
+# For each input file dostmp/test99.in run the tests.
+# This moves test99.in to test99.in.bak temporarily.
+%.out : $(DOSTMP)/%.in
+ -@if exist test.out $(DEL) test.out
+ -@if exist $(DOSTMP)\$@ $(DEL) $(DOSTMP)\$@
+ $(MV) $(notdir $<) $(notdir $<).bak > NUL
+ $(CP) $(DOSTMP)\$(notdir $<) $(notdir $<) > NUL
+ $(CP) $(basename $@).ok test.ok > NUL
+ $(VIMPROG) -u dos.vim $(NO_INITS) -s dotest.in $(notdir $<)
+ -@if exist test.out $(MV) test.out $(DOSTMP)\$@ > NUL
+ -@if exist $(notdir $<).bak $(MV) $(notdir $<).bak $(notdir $<) > NUL
+ -@if exist test.ok $(DEL) test.ok
+ -@if exist Xdir1 $(DELDIR) /s /q Xdir1
+ -@if exist Xfind $(DELDIR) Xfind
+ -@if exist XfakeHOME $(DELDIR) XfakeHOME
+ -@del X*
+ -@if exist viminfo del viminfo
+ $(VIMPROG) -u dos.vim $(NO_INITS) "+set ff=unix|f test.out|wq" \
+ $(DOSTMP)\$@
+ @diff test.out $(basename $@).ok & if errorlevel 1 \
+ ( $(MV) test.out $(basename $@).failed > NUL \
+ & del $(DOSTMP)\$@ \
+ & echo $(basename $@) FAILED >> test.log ) \
+ else ( $(MV) test.out $(basename $@).out > NUL )
+
# New style of tests uses Vim script with assert calls. These are easier
# to write and a lot easier to read and debug.
# Limitation: Only works with the +eval feature.
-newtests: $(NEW_TESTS_RES)
+newtests: newtestssilent
+ @if exist messages (findstr "SKIPPED FAILED" messages > nul) && type messages
+
+newtestssilent: $(NEW_TESTS_RES)
.vim.res:
@echo $(VIMPROG) > vimcmd
$(VIMPROG) -u gui_preinit.vim -U gui_init.vim $(NO_PLUGINS) -S runtest.vim $<
@$(DEL) vimcmd
-test_options.res test_alot.res: opt_test.vim
-
opt_test.vim: ../optiondefs.h gen_opt_test.vim
$(VIMPROG) -u NONE -S gen_opt_test.vim --noplugin --not-a-term ../optiondefs.h
+
+test_bench_regexp.res: test_bench_regexp.vim
+ -$(DEL) benchmark.out
+ @echo $(VIMPROG) > vimcmd
+ $(VIMPROG) -u NONE $(NO_INITS) -S runtest.vim $*.vim
+ @$(DEL) vimcmd
+ $(CAT) benchmark.out
# Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
# Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
#
-# Last change: 2020 Jul 03
+# Last change: 2020 Aug 13
#
# This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
# Edit the lines in the Configuration section below to select.
.SUFFIXES : .out .in
-SCRIPT = test1.out test77a.out
+SCRIPT = test20.out test21.out test22.out test23.out test24.out \
+ test25.out test26.out test27.out \
+ test77a.out
.IFDEF WANT_GUI
GUI_OPTION = -g
# Comment out this line to see the verbose output of tests.
#
# Catches SwapExists to avoid hanging at the ATTENTION prompt.
-REDIR_TEST_TO_NULL = --cmd 'au SwapExists * let v:swapchoice = "e"' > /dev/null
+#REDIR_TEST_TO_NULL = --cmd 'au SwapExists * let v:swapchoice = "e"' > /dev/null
# Uncomment this line to use valgrind for memory leaks and extra warnings.
# The output goes into a file "valgrind.testN"
default: nongui
# The list of tests is common to all systems.
-# This defines SCRIPTS_FIRST, NEW_TESTS and NEW_TESTS_RES
+# This defines SCRIPTS_TINY_OUT, NEW_TESTS and NEW_TESTS_RES.
include Make_all.mak
# Explicit dependencies.
test_options.res test_alot.res: opt_test.vim
-SCRIPTS_BENCH = test_bench_regexp.res
-
.SUFFIXES: .in .out .res .vim
-nongui: nolog $(SCRIPTS_FIRST) newtests report
+nongui: nolog tinytests newtests report
+
+gui: nolog tinytests newtests report
-gui: nolog $(SCRIPTS_FIRST) newtests report
+tiny: nolog tinytests report
benchmark: $(SCRIPTS_BENCH)
else echo ALL DONE; \
fi"
-$(SCRIPTS_FIRST) $(NEW_TESTS_RES): $(VIMPROG)
-
-# Must run test1 first to create small.vim.
-$(NEW_TESTS_RES): $(SCRIPTS_FIRST)
+$(SCRIPTS_TINY_OUT) $(NEW_TESTS_RES): $(VIMPROG)
# Execute an individual new style test, e.g.:
fi
RM_ON_RUN = test.out X* viminfo
-RM_ON_START = tiny.vim small.vim mbyte.vim mzscheme.vim test.ok benchmark.out
+RM_ON_START = test.ok benchmark.out
RUN_VIM = VIMRUNTIME=$(SCRIPTSOURCE) $(VALGRIND) $(VIMPROG) -f $(GUI_FLAG) -u unix.vim $(NO_INITS) -s dotest.in
# Delete files that may interfere with running tests. This includes some files
-rm -f valgrind.*
-rm -f asan.*
-test1.out: test1.in
- -rm -rf $*.failed $(RM_ON_RUN) $(RM_ON_START) wrongtermsize
+nolog:
+ -rm -f test.log test_result.log messages
+
+
+# Tiny tests. Works even without the +eval feature.
+tinytests: $(SCRIPTS_TINY_OUT)
+
+.in.out:
+ -rm -rf $*.failed test.ok $(RM_ON_RUN)
+ cp $*.ok test.ok
+ @# Sleep a moment to avoid that the xterm title is messed up.
+ @# 200 msec is sufficient, but only modern sleep supports a fraction of
+ @# a second, fall back to a second if it fails.
+ @-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
$(RUN_VIM) $*.in $(REDIR_TEST_TO_NULL)
- @/bin/sh -c "if test -f wrongtermsize; \
- then echo; \
- echo test1 FAILED - terminal size must be 80x24 or larger; \
- echo; exit 1; \
- elif diff test.out $*.ok; \
- then mv -f test.out $*.out; \
- else echo; \
- echo test1 FAILED - Something basic is wrong; \
- echo; exit 1; fi"
- -rm -rf X* viminfo
-nolog:
- -rm -f test.log messages
+ @# Check if the test.out file matches test.ok.
+ @/bin/sh -c "if test -f test.out; then \
+ if diff test.out $*.ok; \
+ then mv -f test.out $*.out; \
+ else echo $* FAILED >>test.log; mv -f test.out $*.failed; \
+ fi \
+ else echo $* NO OUTPUT >>test.log; \
+ fi"
+ @/bin/sh -c "if test -f valgrind; then\
+ mv -f valgrind valgrind.$*; \
+ fi"
+ -rm -rf X* test.ok viminfo
# New style of tests uses Vim script with assert calls. These are easier
test_bench_regexp.res: test_bench_regexp.vim
-rm -rf benchmark.out $(RM_ON_RUN)
- # Sleep a moment to avoid that the xterm title is messed up.
- # 200 msec is sufficient, but only modern sleep supports a fraction of
- # a second, fall back to a second if it fails.
+ @# Sleep a moment to avoid that the xterm title is messed up.
+ @# 200 msec is sufficient, but only modern sleep supports a fraction of
+ @# a second, fall back to a second if it fails.
@-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
$(RUN_VIMTEST) $(NO_INITS) -S runtest.vim $*.vim $(REDIR_TEST_TO_NULL)
@/bin/sh -c "if test -f benchmark.out; then cat benchmark.out; fi"
" Without the +eval feature we can't run these tests, bail out.
-so small.vim
+silent! while 0
+ qa!
+silent! endwhile
" In the GUI we can always change the screen size.
if has('gui_running')
+++ /dev/null
-
-First a simple test to check if the test script works.
-
-If Vim was not compiled with the +eval feature, the small.vim script will be
-set to copy the test.ok file to test.out, so that it looks like the test
-succeeded. Otherwise an empty small.vim is written. small.vim is sourced by
-tests that require the +eval feature or other features that are missing in the
-small version.
-
-If Vim was not compiled with the +windows feature, the tiny.vim script will be
-set like small.vim above. tiny.vim is sourced by tests that require the
-+windows feature or other features that are missing in the tiny version.
-
-If Vim was not compiled with the +multi_byte feature, the mbyte.vim script will
-be set like small.vim above. mbyte.vim is sourced by tests that require the
-+multi_byte feature.
-Similar logic is applied to the +mzscheme feature, using mzscheme.vim.
-
-STARTTEST
-:" If columns or lines are too small, create wrongtermsize.
-:" (Some tests will fail. When columns and/or lines are small)
-:if &lines < 24 || &columns < 80 | sp another | w! wrongtermsize | qa! | endif
-:"
-:" Write a single line to test.out to check if testing works at all.
-:%d
-athis is a test\e:w! test.out
-:" Create small.vim and tiny.vim empty, create mbyte.vim to skip the test.
-0D:w! small.vim
-:w! tiny.vim
-ae! test.ok
-w! test.out
-qa!
-\e:w! mbyte.vim
-:w! mzscheme.vim
-:"
-:" If +multi_byte feature supported, make mbyte.vim empty.
-:if has("multi_byte") | sp another | w! mbyte.vim | q | endif
-:"
-:" If +mzscheme feature supported, make mzscheme.vim empty.
-:if has("mzscheme") | sp another | w! mzscheme.vim | q | endif
-:"
-:" If +eval feature supported quit here, leaving tiny.vim and small.vim empty.
-:" Otherwise write small.vim to skip the test.
-:if 1 | q! | endif
-:w! small.vim
-:" If +windows feature not supported :sp will fail and tiny.vim will be
-:" written to skip the test.
-:sp another
-:wq! tiny.vim
-:qa!
-ENDTEST
-
+++ /dev/null
-this is a test
--- /dev/null
+Tests Blockwise Visual when there are TABs before the text.
+First test for undo working properly when executing commands from a register.
+Also test this in an empty buffer.
+
+STARTTEST
+G0"ay$k@au
+:new
+@auY:quit!
+GP
+/start here$
+"by$\16jjlld
+/456$
+\16jj"bP
+:/56$/,$-1w! test.out
+:qa!
+ENDTEST
+
+123456
+234567
+345678
+
+test text test tex start here
+ some text
+ test text
+test text
+
+Ox\ejAy\ekdd
--- /dev/null
+123start here56
+234start here67
+345start here78
+
+test text test tex rt here
+ somext
+ tesext
+test text
+
+
--- /dev/null
+Tests for file with some lines ending in CTRL-M, some not\r
+\r
+STARTTEST
+:set ta tx
+:e!
+:$-3,$w! test.out
+:qa!
+ENDTEST
+
+this lines ends in a\r
+this one doesn't
+this one does\r
+and the last one doesn't
--- /dev/null
+this lines ends in a\r
+this one doesn't
+this one does\r
+and the last one doesn't
--- /dev/null
+Tests for complicated + argument to :edit command
+
+STARTTEST
+:$-1w! Xfile1
+:$w! Xfile2
+:edit +1|s/|/PIPE/|w Xfile1| e Xfile2|1 | s/\//SLASH/|w
+:w! test.out
+:e Xfile1
+:w >> test.out
+:qa!
+ENDTEST
+
+The result should be in Xfile1: "fooPIPEbar", in Xfile2: "fooSLASHbar"
+foo|bar
+foo/bar
--- /dev/null
+fooSLASHbar
+fooPIPEbar
--- /dev/null
+start
+test text test text
+test text test text
+test text test text
+test text test text
+test text test text
+test text test text
+test text test text x61
+test text test text x60-x64
+test text test text x78 5
+test text test text o143
+test text test text o140-o144
+test text test text o41 7
+test text test text \%x42
+test text test text \%o103
+test text test text [\x00]
+test text test text [\x00-\x10]
+test text test text [\x-z]
+test text test text [\u-z]
+xx xx a
+xx aaaaa xx a
+xx aaaaa xx a
+xx Aaa xx
+xx Aaaa xx
+xx Aaa xx
+xx foobar xA xx
+xx an A xx
+XX 9;
+YY 77;
+ xyz
+ bcd
+ BB
--- /dev/null
+sd
+map __2 asd\esecondsd\esd0map __5 asd0fifth
--- /dev/null
+Test character classes in regexp using regexpengine 0, 1, 2.
+
+STARTTEST
+/^start-here/+1
+Y:s/\%#=0\d//g
+p:s/\%#=1\d//g
+p:s/\%#=2\d//g
+p:s/\%#=0[0-9]//g
+p:s/\%#=1[0-9]//g
+p:s/\%#=2[0-9]//g
+p:s/\%#=0\D//g
+p:s/\%#=1\D//g
+p:s/\%#=2\D//g
+p:s/\%#=0[^0-9]//g
+p:s/\%#=1[^0-9]//g
+p:s/\%#=2[^0-9]//g
+p:s/\%#=0\o//g
+p:s/\%#=1\o//g
+p:s/\%#=2\o//g
+p:s/\%#=0[0-7]//g
+p:s/\%#=1[0-7]//g
+p:s/\%#=2[0-7]//g
+p:s/\%#=0\O//g
+p:s/\%#=1\O//g
+p:s/\%#=2\O//g
+p:s/\%#=0[^0-7]//g
+p:s/\%#=1[^0-7]//g
+p:s/\%#=2[^0-7]//g
+p:s/\%#=0\x//g
+p:s/\%#=1\x//g
+p:s/\%#=2\x//g
+p:s/\%#=0[0-9A-Fa-f]//g
+p:s/\%#=1[0-9A-Fa-f]//g
+p:s/\%#=2[0-9A-Fa-f]//g
+p:s/\%#=0\X//g
+p:s/\%#=1\X//g
+p:s/\%#=2\X//g
+p:s/\%#=0[^0-9A-Fa-f]//g
+p:s/\%#=1[^0-9A-Fa-f]//g
+p:s/\%#=2[^0-9A-Fa-f]//g
+p:s/\%#=0\w//g
+p:s/\%#=1\w//g
+p:s/\%#=2\w//g
+p:s/\%#=0[0-9A-Za-z_]//g
+p:s/\%#=1[0-9A-Za-z_]//g
+p:s/\%#=2[0-9A-Za-z_]//g
+p:s/\%#=0\W//g
+p:s/\%#=1\W//g
+p:s/\%#=2\W//g
+p:s/\%#=0[^0-9A-Za-z_]//g
+p:s/\%#=1[^0-9A-Za-z_]//g
+p:s/\%#=2[^0-9A-Za-z_]//g
+p:s/\%#=0\h//g
+p:s/\%#=1\h//g
+p:s/\%#=2\h//g
+p:s/\%#=0[A-Za-z_]//g
+p:s/\%#=1[A-Za-z_]//g
+p:s/\%#=2[A-Za-z_]//g
+p:s/\%#=0\H//g
+p:s/\%#=1\H//g
+p:s/\%#=2\H//g
+p:s/\%#=0[^A-Za-z_]//g
+p:s/\%#=1[^A-Za-z_]//g
+p:s/\%#=2[^A-Za-z_]//g
+p:s/\%#=0\a//g
+p:s/\%#=1\a//g
+p:s/\%#=2\a//g
+p:s/\%#=0[A-Za-z]//g
+p:s/\%#=1[A-Za-z]//g
+p:s/\%#=2[A-Za-z]//g
+p:s/\%#=0\A//g
+p:s/\%#=1\A//g
+p:s/\%#=2\A//g
+p:s/\%#=0[^A-Za-z]//g
+p:s/\%#=1[^A-Za-z]//g
+p:s/\%#=2[^A-Za-z]//g
+p:s/\%#=0\l//g
+p:s/\%#=1\l//g
+p:s/\%#=2\l//g
+p:s/\%#=0[a-z]//g
+p:s/\%#=1[a-z]//g
+p:s/\%#=2[a-z]//g
+p:s/\%#=0\L//g
+p:s/\%#=1\L//g
+p:s/\%#=2\L//g
+p:s/\%#=0[^a-z]//g
+p:s/\%#=1[^a-z]//g
+p:s/\%#=2[^a-z]//g
+p:s/\%#=0\u//g
+p:s/\%#=1\u//g
+p:s/\%#=2\u//g
+p:s/\%#=0[A-Z]//g
+p:s/\%#=1[A-Z]//g
+p:s/\%#=2[A-Z]//g
+p:s/\%#=0\U//g
+p:s/\%#=1\U//g
+p:s/\%#=2\U//g
+p:s/\%#=0[^A-Z]//g
+p:s/\%#=1[^A-Z]//g
+p:s/\%#=2[^A-Z]//g
+p:s/\%#=0\%204l^\t...//g
+p:s/\%#=1\%205l^\t...//g
+p:s/\%#=2\%206l^\t...//g
+:/^start-here/+1,$wq! test.out
+ENDTEST
+
+start-here
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
--- /dev/null
+ \f\r !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+0123456789
+0123456789
+0123456789
+0123456789
+0123456789
+0123456789
+ \f\r !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+01234567
+01234567
+01234567
+01234567
+01234567
+01234567
+ \f\r !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+ \f\r !"#$%&'()#+'-./:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+abcdefghiwxyz
+abcdefghiwxyz
+abcdefghiwxyz
+abcdefghiwxyz
+abcdefghiwxyz
+abcdefghiwxyz
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
--- /dev/null
+Test for writing and reading a file of over 100 Kbyte
+
+1 line: "This is the start"
+3001 lines: "This is the leader"
+1 line: "This is the middle"
+3001 lines: "This is the trailer"
+1 line: "This is the end"
+
+STARTTEST
+:%d
+aThis is the start
+This is the leader
+This is the middle
+This is the trailer
+This is the end\ekY3000p2GY3000p
+:w! Xtest
+:%d
+:e! Xtest
+:.w! test.out
+3003G:.w >>test.out
+6005G:.w >>test.out
+:qa!
+ENDTEST
+
--- /dev/null
+This is the start
+This is the middle
+This is the end
" Expand directories.
call feedkeys(":set cdpath=./\<C-A>\<C-B>\"\<CR>", 'tx')
call assert_match(' ./samples/ ', @:)
- call assert_notmatch(' ./small.vim ', @:)
+ call assert_notmatch(' ./summarize.vim ', @:)
" Expand files and directories.
call feedkeys(":set tags=./\<C-A>\<C-B>\"\<CR>", 'tx')
- call assert_match(' ./samples/.* ./small.vim', @:)
+ call assert_match(' ./samples/.* ./summarize.vim', @:)
call feedkeys(":set tags=./\\\\ dif\<C-A>\<C-B>\"\<CR>", 'tx')
call assert_equal('"set tags=./\\ diff diffexpr diffopt', @:)
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1439,
/**/
1438,
/**/