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)
diff --git a/.travis.yml b/.travis.yml
index a4c6287..a8acd3a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -7,11 +7,11 @@
 _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 fd8ff05..127e3e4 100644
--- a/Filelist
+++ b/Filelist
@@ -158,9 +158,7 @@
 		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/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 7774b6e..35119ac 100644
--- a/Makefile
+++ b/Makefile
@@ -32,7 +32,7 @@
 
 # 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 1147673..15c5498 100644
--- a/runtime/doc/testing.txt
+++ b/runtime/doc/testing.txt
@@ -20,11 +20,17 @@
 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 8ac39e2..b6c2d46 100644
--- a/src/Make_mvc.mak
+++ b/src/Make_mvc.mak
@@ -1464,12 +1464,22 @@
 
 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 @@
 	$(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 35fe41e..b025a94 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -2258,6 +2258,9 @@
 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 @@
 			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 57ba651..e4ffb05 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_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 efd5808..1e8df19 100644
--- a/src/testdir/Make_amiga.mak
+++ b/src/testdir/Make_amiga.mak
@@ -9,9 +9,11 @@
 
 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 5931da2..7ba6cf7 100644
--- a/src/testdir/Make_dos.mak
+++ b/src/testdir/Make_dos.mak
@@ -9,20 +9,80 @@
 
 !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
+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.:
+# 	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:
+	-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
+
+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 @@
 		 & 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 @@
 	$(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 b34ae1d..0f594c9 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:	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 @@
 	-@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 @@
 	$(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 f36ae6e..2adc0f4 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 @@
 
 .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 0d51fde..42eb7f5 100644
--- a/src/testdir/Makefile
+++ b/src/testdir/Makefile
@@ -12,7 +12,7 @@
 # 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 @@
 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 @@
 		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 @@
 	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 @@
 	-rm -f valgrind.*
 	-rm -f asan.*
 
-test1.out: test1.in
-	-rm -rf $*.failed $(RM_ON_RUN) $(RM_ON_START) wrongtermsize
-	$(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
+	-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)
+
+	@# 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_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 f431748..9985404 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 8c0219e..0000000
--- 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 90bfcb5..0000000
--- 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 0000000..1ffbed5
--- /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 0000000..7c50ea8
--- /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 0000000..f5cc046
--- /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 0000000..38ff89e
--- /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 0000000..0e0e605
--- /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 0000000..f1930ab
--- /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 0000000..7dfc1af
--- /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 0000000..cd61210
--- /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 0000000..5542c92
--- /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 0000000..911d854
--- /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 0000000..5e8ce44
--- /dev/null
+++ b/src/testdir/test25.in
Binary files differ
diff --git a/src/testdir/test25.ok b/src/testdir/test25.ok
new file mode 100644
index 0000000..df21ed1
--- /dev/null
+++ b/src/testdir/test25.ok
Binary files differ
diff --git a/src/testdir/test26.in b/src/testdir/test26.in
new file mode 100644
index 0000000..2d294ca
--- /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 0000000..988e5f2
--- /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 0000000..c35569a
--- /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 0000000..183430d
--- /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 5d7714e..c5e5ab4 100644
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -276,11 +276,11 @@
   " 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 73c965b..2955eb0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1439,
+/**/
     1438,
 /**/
     1437,