changeset 21779:30bdd2e4a6f9 v8.2.1439

patch 8.2.1439: tiny and small builds have no test coverage Commit: https://github.com/vim/vim/commit/b96a32ef1a95dd4ebf9413d686bccb1b4645f74b Author: Bram Moolenaar <Bram@vim.org> Date: Thu Aug 13 18:59:55 2020 +0200 patch 8.2.1439: tiny and small builds have no test coverage Problem: Tiny and small builds have no test coverage. Solution: Restore tests that do not depend on the +eval feature. (Ken Takata, closes #6696)
author Bram Moolenaar <Bram@vim.org>
date Thu, 13 Aug 2020 19:15:04 +0200
parents cc500536c15e
children 3efab8d47de0
files .travis.yml Filelist Makefile runtime/doc/testing.txt src/Make_mvc.mak src/Makefile src/testdir/Make_all.mak src/testdir/Make_amiga.mak src/testdir/Make_dos.mak src/testdir/Make_ming.mak src/testdir/Make_vms.mms src/testdir/Makefile src/testdir/runtest.vim src/testdir/test1.in src/testdir/test1.ok src/testdir/test20.in src/testdir/test20.ok src/testdir/test21.in src/testdir/test21.ok src/testdir/test22.in src/testdir/test22.ok src/testdir/test23.in src/testdir/test23.ok src/testdir/test24.in src/testdir/test24.ok src/testdir/test25.in src/testdir/test25.ok src/testdir/test26.in src/testdir/test26.ok src/testdir/test27.in src/testdir/test27.ok src/testdir/test_options.vim src/version.c
diffstat 33 files changed, 606 insertions(+), 213 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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 \
--- 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
--- a/runtime/doc/testing.txt
+++ b/runtime/doc/testing.txt
@@ -20,11 +20,17 @@ 1. Testing Vim						*testing*
 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.
 
--- 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
--- 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.
--- 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 = \
--- 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:
--- a/src/testdir/Make_dos.mak
+++ b/src/testdir/Make_dos.mak
@@ -9,20 +9,80 @@ 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
+
+gui:	nolog tinytests newtests report
+
+tiny:	nolog tinytests report
+
+benchmark: $(SCRIPTS_BENCH)
 
-small:	nolog report
+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.:
+# 	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
+
 
-gui:	nolog $(SCRIPTS_FIRST) newtests report
+# 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 tiny.vim del tiny.vim
+	-if exist mbyte.vim del mbyte.vim
+	-if exist mzscheme.vim del mzscheme.vim
+	-if exist Xdir1 rd /s /q Xdir1
+	-if exist Xfind rd /s /q Xfind
+	-if exist XfakeHOME rd /s /q 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
 
-win32:	nolog $(SCRIPTS_FIRST) newtests report
+nolog:
+	-if exist test.log del test.log
+	-if exist test_result.log del test_result.log
+	-if exist messages del messages
+
+
+# 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
@@ -55,58 +115,6 @@ win32:	nolog $(SCRIPTS_FIRST) newtests r
 		 & 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)
-
-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 )
-
-clean:
-	-del *.out
-	-del *.failed
-	-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 tiny.vim del tiny.vim
-	-if exist mbyte.vim del mbyte.vim
-	-if exist mzscheme.vim del mzscheme.vim
-	-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 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
-
-nolog:
-	-if exist test.log del test.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 )
 
 # 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 )
--- 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:	nolog tinytests newtests report
 
-nongui:	fixff nolog $(SCRIPTS_FIRST) newtests
-	@echo ALL DONE
+gui:	nolog tinytests newtests report
+
+tiny:	nolog tinytests report
 
 benchmark: $(SCRIPTS_BENCH)
 
-small: nolog
-	@echo ALL DONE
+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 )
 
-gui:	fixff nolog $(SCRIPTS_FIRST) newtests
-	@echo ALL DONE
 
-win32:	fixff nolog $(SCRIPTS_FIRST) newtests
-	@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
 
-# 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
 
+# 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
--- 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
--- 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 SwapExist
 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 $(SCRIPTS_FIRST) newtests report
+gui:	nolog tinytests 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"
--- 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')
deleted file mode 100644
--- 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
-
deleted file mode 100644
--- a/src/testdir/test1.ok
+++ /dev/null
@@ -1,1 +0,0 @@
-this is a test
new file mode 100644
--- /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
new file mode 100644
--- /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
+
+
new file mode 100644
--- /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
new file mode 100644
--- /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
new file mode 100644
--- /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
new file mode 100644
--- /dev/null
+++ b/src/testdir/test22.ok
@@ -0,0 +1,2 @@
+fooSLASHbar
+fooPIPEbar
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7dfc1afdc6999616e5171f76f4ff34d92f7d9a2a
GIT binary patch
literal 1301
zc$|$>TXWJt6z+pB?vp>^)S)v74M`xFN=++hUwyDVw9^gFCM-=9vY1^;sMg=^UQ!4b
zN14p-cRA;<JNYuCTyU7M9CCV3i#aS)kw8S^?|e#l0wfy)6A8_M&uN^JDZ~lMNi1m2
zA<cL?rf?Uc{**Hia#p2P4NYiavslQsY%z;yPRE=67DCs<{+HqK>UxNJoC?TT%w}^U
z(r8NIA)Te!gf)Y#M999wMTiQy2^?w=t_(M9HPTzH6pOd+GjJ@qc#?f{6!*`%#$m44
zStD5_SFhxr>nns$3a_nq<~kiS&T*t8Pi(Lp?K+`t-=k8p9z)!;?UF7O{n<W!DivHO
z_|4jvtg%NMTcxtM^JMq8Bx_G=;JVwE)`yFYJYh^J?~fyrSBf+ImE)#%f=N21&(;Xn
zae|i(d{VbA@GsnwC4o9zVBg&Qv*h;Hln_GfV)baqZ##;|C6t#O3~bbUje3_{kX&4z
z)|SUQG%dCesP}^$qpQ!KbR3YbKsr%a&_bASDP+W#heWM~J7W0PN<l|EV(maB*=h%n
zu_~Qt&v7gnGvju}uIrycS9>w+dMby?8jC}gW2s!~R)633T=1)x8f-ih-s*)vRy-Z(
zjd@fVT86w-j#TRljbCkSll$@&$v3`xF!LpB{rdx6tSY|xG*D3hQ9n@Nf7t=-w%1JN
kUM3z2y%;|Om2}Mlcz2GHBmmz(N2(JL$m1iBQ8f?x1H46>RsaA1
new file mode 100644
--- /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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5542c92666d15351d747051f7dfa608a54e8abe1
GIT binary patch
literal 364
zc$`g;JqyAx5Qd%a2XyIjg5cmstk$KQsJMuO25~FFCN|JE+C=>OUTW122lpJg=jFns
zb*M~@);#O0u5Kt$=|bX5yByd2xSyPd7KKBXOO#cHMm24rD+zGot0U*z6NiK;U0dhJ
zY!r=IAzGM3uRdNJ<#;b7)^uoBmT4M=VVcgV7QTt8mSHk1#{<iHY{qWT09pLn)I1#|
z57CG1VbdhTFBnR3NAjU)MlH@!Sa~&7*7Aa`$#wn3m|oNEE^m41x780xX0xE9%7Wl8
P>QMZl;IH}M_agw_K@f0_
new file mode 100644
--- /dev/null
+++ b/src/testdir/test24.ok
@@ -0,0 +1,2 @@
+sd
+map __2 asdsecondsdsd0map __5 asd0fifth
new file mode 100644
--- /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{|}~€‚›¦±¼ÇÓé
new file mode 100644
--- /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{|}~€‚›¦±¼ÇÓé
new file mode 100644
--- /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
+
new file mode 100644
--- /dev/null
+++ b/src/testdir/test26.ok
@@ -0,0 +1,3 @@
+This is the start
+This is the middle
+This is the end
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c35569a76c908682eb8e7e7ab8d9a3522d9fa473
GIT binary patch
literal 2368
zc$~df&2G~`5Z<#NfD4yNs9F%XC9V^pNGU39k&tLA(I7Y>Iq|r*aJ*u7gWDVL#eqlS
z4N_*;UVED#i3222lJU&!%(vgp%w~d8LBa);B2!s$15pu!z$i8{Bw3CiRV0k9%v4Is
zH&>UQcRe}%FqvFjPrRYzFrVHjJp7)`=?N8JG2=SIXrU7SRi)FRtX_^5GwDzH{6!v7
zWWQItB%?)<-O{hDg!a{iNt#KRrBQK%5>$#6HVys!>e|4*JU#P<UGRM$KGAN_cqy|%
za+Tij=u4e$@9252?7(Mje5v&Yr>pHXS|5dQErGER{J_;7H`*LseW($Q5o1ssqBth{
z#vk8<rVFA(p)erFm8N20nibv<?Rwbw>cYF5f(xt(fkf~*&|-5;2T5|^@ki{j30H9B
zxi>5=#d4oilp_*%t1(aWoR<(|5-oCNm<xl$tk5LSBSoO#$-{%%i0rNLHYa0v*E`qM
zg_fewC8*zM9}+iMB~GORu^~_X6?=ni>~*S|PqBEw8c>NvHK&?E{ocf)A+YA7YisT-
z#o1Q^M0>}$ZYHP;t}51;qbv>-rNp|88l+T(f>wzRoao0xzEJCJ1Jp6o*R>~HjL&Nq
zvX7cZD&b@$gkH7kWYgZRZJ=&hY#X6Uw;J^y05kSFU(<M75Y@w{0BT1%x~FB9=a5A7
zHH|dw+*19l#UAV!d$0k!9tka?<NuDR%GZpgEr@b-M$Aqy>5R=#+>9!0G4*$WDQpq-
zw;*zP8tep<%hO;TmA&|+8L5iqm+1>LOWg6-hTjuyt6RC}$blmtJ96mAeMi=yni)tp
z!T#ECZ7*Ll^~lR!DfS{MU4Y-Bjz>h9{}P_%Xt}gf)nmVZ{;GuLPHt2`^g~tm%X_w9
vGbWkO0_NGeyI;1-oMB}MJ;unL(E>(RMs`LXjD_^^>`~k=H#_9?LGAblh&$9d
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..183430d71cfe487b2d405dd2cde25a1eef958d74
GIT binary patch
literal 409
zc${^QO$viB5QX1*PT>WzP(taZhp9G}K$?I*``)Mra8ZZ{>J4JYNNcUi@L*ov$74d2
zB&9Y=*}`44y`Idu(KaRPa(Bxqgy=;|^bfX8DUSRYxyh`UW!bBHM((bvYP&Bzd<%<O
zWP6ZN3ykd=<UsyXa)()VjduR?=V0m|zVp-W<Mm-civl$SGSCoaW1v7hU<3?-6L1Dj
O0m))~J1{IY0;Arr`FgJa
--- 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', @:)
--- 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,