summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml6
-rw-r--r--Filelist6
-rw-r--r--Makefile2
-rw-r--r--runtime/doc/testing.txt6
-rw-r--r--src/Make_mvc.mak18
-rw-r--r--src/Makefile9
-rw-r--r--src/testdir/Make_all.mak25
-rw-r--r--src/testdir/Make_amiga.mak4
-rw-r--r--src/testdir/Make_dos.mak123
-rw-r--r--src/testdir/Make_ming.mak147
-rw-r--r--src/testdir/Make_vms.mms6
-rw-r--r--src/testdir/Makefile65
-rw-r--r--src/testdir/runtest.vim4
-rw-r--r--src/testdir/test1.in52
-rw-r--r--src/testdir/test1.ok1
-rw-r--r--src/testdir/test20.in27
-rw-r--r--src/testdir/test20.ok10
-rw-r--r--src/testdir/test21.in13
-rw-r--r--src/testdir/test21.ok4
-rw-r--r--src/testdir/test22.in15
-rw-r--r--src/testdir/test22.ok2
-rw-r--r--src/testdir/test23.inbin0 -> 1301 bytes
-rw-r--r--src/testdir/test23.ok32
-rw-r--r--src/testdir/test24.inbin0 -> 364 bytes
-rw-r--r--src/testdir/test24.ok2
-rw-r--r--src/testdir/test25.in108
-rw-r--r--src/testdir/test25.ok99
-rw-r--r--src/testdir/test26.in24
-rw-r--r--src/testdir/test26.ok3
-rw-r--r--src/testdir/test27.inbin0 -> 2368 bytes
-rw-r--r--src/testdir/test27.okbin0 -> 409 bytes
-rw-r--r--src/testdir/test_options.vim4
-rw-r--r--src/version.c2
33 files changed, 606 insertions, 213 deletions
diff --git a/.travis.yml b/.travis.yml
index a4c628740..a8acd3ade 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -7,11 +7,11 @@ env:
_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
diff --git a/Filelist b/Filelist
index fd8ff05e5..127e3e493 100644
--- a/Filelist
+++ b/Filelist
@@ -158,9 +158,7 @@ SRC_ALL = \
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 \
@@ -179,7 +177,7 @@ SRC_ALL = \
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 \
diff --git a/Makefile b/Makefile
index 7774b6ed1..35119ac1f 100644
--- a/Makefile
+++ b/Makefile
@@ -32,7 +32,7 @@ first:
# 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
diff --git a/runtime/doc/testing.txt b/runtime/doc/testing.txt
index 1147673d5..15c5498a5 100644
--- a/runtime/doc/testing.txt
+++ b/runtime/doc/testing.txt
@@ -20,11 +20,17 @@ and for testing plugins.
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.
diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak
index 8ac39e22b..b6c2d464a 100644
--- a/src/Make_mvc.mak
+++ b/src/Make_mvc.mak
@@ -1464,12 +1464,22 @@ cmdidxs: ex_cmds.h
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:
@@ -1477,9 +1487,9 @@ 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
diff --git a/src/Makefile b/src/Makefile
index 35fe41e74..b025a9486 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -2258,6 +2258,9 @@ scripttests:
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)
@@ -2291,9 +2294,9 @@ test_libvterm:
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.
diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index 57ba651c6..e4ffb05e2 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -7,8 +7,26 @@
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 = \
@@ -25,6 +43,9 @@ TEST_VIM9_RES = \
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 = \
diff --git a/src/testdir/Make_amiga.mak b/src/testdir/Make_amiga.mak
index efd580842..1e8df1937 100644
--- a/src/testdir/Make_amiga.mak
+++ b/src/testdir/Make_amiga.mak
@@ -9,9 +9,11 @@ default: nongui
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:
diff --git a/src/testdir/Make_dos.mak b/src/testdir/Make_dos.mak
index 5931da25d..7ba6cf778 100644
--- a/src/testdir/Make_dos.mak
+++ b/src/testdir/Make_dos.mak
@@ -9,56 +9,23 @@ default: nongui
!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
@@ -71,10 +38,24 @@ report:
@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
@@ -85,8 +66,8 @@ clean:
-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
@@ -99,14 +80,41 @@ nolog:
-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.
@@ -132,7 +140,12 @@ test_gui_init.res: test_gui_init.vim
$(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 )
diff --git a/src/testdir/Make_ming.mak b/src/testdir/Make_ming.mak
index b34ae1d2c..0f594c9e7 100644
--- a/src/testdir/Make_ming.mak
+++ b/src/testdir/Make_ming.mak
@@ -6,62 +6,69 @@
#
# 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
@@ -72,36 +79,63 @@ clean:
-@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
@@ -118,7 +152,12 @@ test_gui_init.res: test_gui_init.vim
$(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
diff --git a/src/testdir/Make_vms.mms b/src/testdir/Make_vms.mms
index f36ae6edd..2adc0f439 100644
--- a/src/testdir/Make_vms.mms
+++ b/src/testdir/Make_vms.mms
@@ -4,7 +4,7 @@
# 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.
@@ -37,7 +37,9 @@ VIMPROG = <->vim.exe
.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
diff --git a/src/testdir/Makefile b/src/testdir/Makefile
index 0d51fde3e..42eb7f556 100644
--- a/src/testdir/Makefile
+++ b/src/testdir/Makefile
@@ -12,7 +12,7 @@ SCRIPTSOURCE = ../../runtime
# 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"
@@ -23,19 +23,19 @@ REDIR_TEST_TO_NULL = --cmd 'au SwapExists * let v:swapchoice = "e"' > /dev/null
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)
@@ -54,10 +54,7 @@ report:
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.:
@@ -81,7 +78,7 @@ test_vim9:
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
@@ -93,22 +90,34 @@ clean:
-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
@@ -148,9 +157,9 @@ test_xxd.res:
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"
diff --git a/src/testdir/runtest.vim b/src/testdir/runtest.vim
index f431748e1..99854042b 100644
--- a/src/testdir/runtest.vim
+++ b/src/testdir/runtest.vim
@@ -46,7 +46,9 @@
" 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')
diff --git a/src/testdir/test1.in b/src/testdir/test1.in
deleted file mode 100644
index 8c0219ea6..000000000
--- a/src/testdir/test1.in
+++ /dev/null
@@ -1,52 +0,0 @@
-
-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: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!
-: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
-
diff --git a/src/testdir/test1.ok b/src/testdir/test1.ok
deleted file mode 100644
index 90bfcb510..000000000
--- a/src/testdir/test1.ok
+++ /dev/null
@@ -1 +0,0 @@
-this is a test
diff --git a/src/testdir/test20.in b/src/testdir/test20.in
new file mode 100644
index 000000000..1ffbed530
--- /dev/null
+++ b/src/testdir/test20.in
@@ -0,0 +1,27 @@
+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$jjlld
+/456$
+jj"bP
+:/56$/,$-1w! test.out
+:qa!
+ENDTEST
+
+123456
+234567
+345678
+
+test text test tex start here
+ some text
+ test text
+test text
+
+OxjAykdd
diff --git a/src/testdir/test20.ok b/src/testdir/test20.ok
new file mode 100644
index 000000000..7c50ea8db
--- /dev/null
+++ b/src/testdir/test20.ok
@@ -0,0 +1,10 @@
+123start here56
+234start here67
+345start here78
+
+test text test tex rt here
+ somext
+ tesext
+test text
+
+
diff --git a/src/testdir/test21.in b/src/testdir/test21.in
new file mode 100644
index 000000000..f5cc046c6
--- /dev/null
+++ b/src/testdir/test21.in
@@ -0,0 +1,13 @@
+Tests for file with some lines ending in CTRL-M, some not
+
+STARTTEST
+:set ta tx
+:e!
+:$-3,$w! test.out
+:qa!
+ENDTEST
+
+this lines ends in a
+this one doesn't
+this one does
+and the last one doesn't
diff --git a/src/testdir/test21.ok b/src/testdir/test21.ok
new file mode 100644
index 000000000..38ff89eaf
--- /dev/null
+++ b/src/testdir/test21.ok
@@ -0,0 +1,4 @@
+this lines ends in a
+this one doesn't
+this one does
+and the last one doesn't
diff --git a/src/testdir/test22.in b/src/testdir/test22.in
new file mode 100644
index 000000000..0e0e60553
--- /dev/null
+++ b/src/testdir/test22.in
@@ -0,0 +1,15 @@
+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
diff --git a/src/testdir/test22.ok b/src/testdir/test22.ok
new file mode 100644
index 000000000..f1930abad
--- /dev/null
+++ b/src/testdir/test22.ok
@@ -0,0 +1,2 @@
+fooSLASHbar
+fooPIPEbar
diff --git a/src/testdir/test23.in b/src/testdir/test23.in
new file mode 100644
index 000000000..7dfc1afdc
--- /dev/null
+++ b/src/testdir/test23.in
Binary files differ
diff --git a/src/testdir/test23.ok b/src/testdir/test23.ok
new file mode 100644
index 000000000..cd6121096
--- /dev/null
+++ b/src/testdir/test23.ok
@@ -0,0 +1,32 @@
+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
diff --git a/src/testdir/test24.in b/src/testdir/test24.in
new file mode 100644
index 000000000..5542c9266
--- /dev/null
+++ b/src/testdir/test24.in
Binary files differ
diff --git a/src/testdir/test24.ok b/src/testdir/test24.ok
new file mode 100644
index 000000000..911d85465
--- /dev/null
+++ b/src/testdir/test24.ok
@@ -0,0 +1,2 @@
+sd
+map __2 asdsecondsdsd0map __5 asd0fifth
diff --git a/src/testdir/test25.in b/src/testdir/test25.in
new file mode 100644
index 000000000..5e8ce4484
--- /dev/null
+++ b/src/testdir/test25.in
@@ -0,0 +1,108 @@
+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
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
diff --git a/src/testdir/test25.ok b/src/testdir/test25.ok
new file mode 100644
index 000000000..df21ed1c5
--- /dev/null
+++ b/src/testdir/test25.ok
@@ -0,0 +1,99 @@
+ !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+0123456789
+0123456789
+0123456789
+0123456789
+0123456789
+0123456789
+ !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+01234567
+01234567
+01234567
+01234567
+01234567
+01234567
+ !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~€‚›¦±¼ÇÓé
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+ !"#$%&'()#+'-./:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~€‚›¦±¼ÇÓé
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~€‚›¦±¼ÇÓé
+abcdefghiwxyz
+abcdefghiwxyz
+abcdefghiwxyz
+abcdefghiwxyz
+abcdefghiwxyz
+abcdefghiwxyz
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
+!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
diff --git a/src/testdir/test26.in b/src/testdir/test26.in
new file mode 100644
index 000000000..2d294cae0
--- /dev/null
+++ b/src/testdir/test26.in
@@ -0,0 +1,24 @@
+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 endkY3000p2GY3000p
+:w! Xtest
+:%d
+:e! Xtest
+:.w! test.out
+3003G:.w >>test.out
+6005G:.w >>test.out
+:qa!
+ENDTEST
+
diff --git a/src/testdir/test26.ok b/src/testdir/test26.ok
new file mode 100644
index 000000000..988e5f24b
--- /dev/null
+++ b/src/testdir/test26.ok
@@ -0,0 +1,3 @@
+This is the start
+This is the middle
+This is the end
diff --git a/src/testdir/test27.in b/src/testdir/test27.in
new file mode 100644
index 000000000..c35569a76
--- /dev/null
+++ b/src/testdir/test27.in
Binary files differ
diff --git a/src/testdir/test27.ok b/src/testdir/test27.ok
new file mode 100644
index 000000000..183430d71
--- /dev/null
+++ b/src/testdir/test27.ok
Binary files differ
diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim
index 5d7714e7a..c5e5ab47c 100644
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -276,11 +276,11 @@ func Test_set_completion()
" 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', @:)
diff --git a/src/version.c b/src/version.c
index 73c965b80..2955eb0e3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1439,
+/**/
1438,
/**/
1437,