diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 8b80e39..f281f4a 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 7.4.  Last change: 2016 Aug 14
+*eval.txt*	For Vim version 7.4.  Last change: 2016 Aug 16
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -29,6 +29,7 @@
 10. No +eval feature		|no-eval-feature|
 11. The sandbox			|eval-sandbox|
 12. Textlock			|textlock|
+13. Testing			|testing|
 
 {Vi does not have any of these commands}
 
@@ -1233,7 +1234,7 @@
 							*closure*
 Lambda expressions can access outer scope variables and arguments.  This is
 often called a closure.  Example where "i" a and "a:arg" are used in a lambda
-while they exists in the function scope.  They remain valid even after the
+while they exist in the function scope.  They remain valid even after the
 function returns: >
 	:function Foo(arg)
 	:  let i = 3
@@ -2032,7 +2033,7 @@
 cosh({expr})			Float	hyperbolic cosine of {expr}
 count({list}, {expr} [, {ic} [, {start}]])
 				Number	count how many {expr} are in {list}
-cscope_connection([{num} , {dbpath} [, {prepend}]])
+cscope_connection([{num}, {dbpath} [, {prepend}]])
 				Number	checks existence of cscope connection
 cursor({lnum}, {col} [, {off}])
 				Number	move cursor to {lnum}, {col}, {off}
@@ -4492,7 +4493,7 @@
 		The result is a String, which is the contents of register
 		{regname}.  Example: >
 			:let cliptext = getreg('*')
-<		When {regname} was not set the result is a empty string.
+<		When {regname} was not set the result is an empty string.
 
 		getreg('=') returns the last evaluated value of the expression
 		register.  (For use in maps.)
@@ -4529,8 +4530,8 @@
 
 		Each List item is a Dictionary with the following entries:
 			nr		tab page number.
-			windows		List of window IDs in the tag page.
 			variables	dictionary of tabpage local variables.
+			windows		List of window IDs in the tag page.
 
 gettabvar({tabnr}, {varname} [, {def}])				*gettabvar()*
 		Get the value of a tab-local variable {varname} in tab page
@@ -4587,9 +4588,11 @@
 			bufnum		number of buffer in the window
 			height		window height
 			loclist		1 if showing a location list
+					{only with the +quickfix feature}
 			nr		window number
 			options		dictionary of window local options
 			quickfix	1 if quickfix or location list window
+					{only with the +quickfix feature}
 			tpnr		tab page number
 			variables	dictionary of window local variables
 			width		window width
@@ -7520,7 +7523,7 @@
 tabpagebuflist([{arg}])					*tabpagebuflist()*
 		The result is a |List|, where each item is the number of the
 		buffer associated with each window in the current tab page.
-		{arg} specifies the number of tab page to be used.  When
+		{arg} specifies the number of the tab page to be used. When
 		omitted the current tab page is used.
 		When {arg} is invalid the number zero is returned.
 		To get a list of all buffers in all tabs use this: >
@@ -7703,9 +7706,9 @@
 
 timer_pause({timer}, {paused})				*timer_pause()*
 		Pause or unpause a timer.  A paused timer does not invoke its
-		callback, while the time it would is not changed.  Unpausing a
-		timer may cause the callback to be invoked almost immediately
-		if enough time has passed.
+		callback when its time expires.  Unpausing a timer may cause
+		the callback to be invoked almost immediately if enough time
+		has passed.
 
 		Pausing a timer is useful to avoid the callback to be called
 		for a short time.
@@ -7716,7 +7719,7 @@
 
 		{only available when compiled with the |+timers| feature}
 
-							*timer_start()*
+						*timer_start()* *timer* *timers*
 timer_start({time}, {callback} [, {options}])
 		Create a timer and return the timer ID.
 
@@ -10480,5 +10483,26 @@
 	- closing a window or quitting Vim
 	- etc.
 
+==============================================================================
+13. Testing							*testing*
+
+Vim can be tested after building it, usually with "make test".
+The tests are located in the directory "src/testdir".
+
+There are several types of tests added over time:
+	test33.in		oldest, don't add any more
+	test_something.in	old style tests
+	test_something.vim	new style tests
+
+						*new-style-testing*
+New tests should be added as new style tests.  These use functions such as
+|assert_equal()| to keep the test commands and the expected result in one
+place.
+						*old-style-testing*
+In some cases an old style test needs to be used.  E.g. when testing Vim
+without the |+eval| feature.
+
+Find more information in the file src/testdir/README.txt.
+
 
  vim:tw=78:ts=8:ft=help:norl:
