blob: 52d1d7f13f74dcb9494061bd60e1beae2ad41eea [file] [log] [blame]
Bram Moolenaar207f0092020-08-30 17:20:20 +02001*testing.txt* For Vim version 8.2. Last change: 2020 Aug 17
Bram Moolenaared997ad2019-07-21 16:42:00 +02002
3
4 VIM REFERENCE MANUAL by Bram Moolenaar
5
6
7Testing Vim and Vim script *testing-support*
8
9Expression evaluation is explained in |eval.txt|. This file goes into details
10about writing tests in Vim script. This can be used for testing Vim itself
11and for testing plugins.
12
131. Testing Vim |testing|
Bram Moolenaar54775062019-07-31 21:07:14 +0200142. Test functions |test-functions-details|
153. Assert functions |assert-functions-details|
Bram Moolenaared997ad2019-07-21 16:42:00 +020016
17==============================================================================
181. Testing Vim *testing*
19
20Vim can be tested after building it, usually with "make test".
21The tests are located in the directory "src/testdir".
22
Bram Moolenaarb96a32e2020-08-13 18:59:55 +020023There are two types of tests added over time:
24 test20.in oldest, only for tiny and small builds
25 test_something.vim new style tests
26
Bram Moolenaared997ad2019-07-21 16:42:00 +020027 *new-style-testing*
Bram Moolenaarf7c4d832020-08-11 20:42:19 +020028New tests should be added as new style tests. The test scripts are named
29test_<feature>.vim (replace <feature> with the feature under test). These use
30functions such as |assert_equal()| to keep the test commands and the expected
31result in one place.
Bram Moolenaarb96a32e2020-08-13 18:59:55 +020032 *old-style-testing*
33These tests are used only for testing Vim without the |+eval| feature.
Bram Moolenaared997ad2019-07-21 16:42:00 +020034
35Find more information in the file src/testdir/README.txt.
36
37==============================================================================
Bram Moolenaar54775062019-07-31 21:07:14 +0200382. Test functions *test-functions-details*
Bram Moolenaared997ad2019-07-21 16:42:00 +020039
40test_alloc_fail({id}, {countdown}, {repeat}) *test_alloc_fail()*
41 This is for testing: If the memory allocation with {id} is
42 called, then decrement {countdown}, and when it reaches zero
43 let memory allocation fail {repeat} times. When {repeat} is
44 smaller than one it fails one time.
45
Bram Moolenaarce90e362019-09-08 18:58:44 +020046 Can also be used as a |method|: >
47 GetAllocId()->test_alloc_fail()
Bram Moolenaared997ad2019-07-21 16:42:00 +020048
49test_autochdir() *test_autochdir()*
50 Set a flag to enable the effect of 'autochdir' before Vim
51 startup has finished.
52
53
54test_feedinput({string}) *test_feedinput()*
55 Characters in {string} are queued for processing as if they
56 were typed by the user. This uses a low level input buffer.
57 This function works only when with |+unix| or GUI is running.
58
Bram Moolenaarce90e362019-09-08 18:58:44 +020059 Can also be used as a |method|: >
60 GetText()->test_feedinput()
Bram Moolenaared997ad2019-07-21 16:42:00 +020061
62test_garbagecollect_now() *test_garbagecollect_now()*
63 Like garbagecollect(), but executed right away. This must
64 only be called directly to avoid any structure to exist
65 internally, and |v:testing| must have been set before calling
66 any function.
67
68
69test_garbagecollect_soon() *test_garbagecollect_soon()*
70 Set the flag to call the garbagecollector as if in the main
71 loop. Only to be used in tests.
72
73
74test_getvalue({name}) *test_getvalue()*
75 Get the value of an internal variable. These values for
76 {name} are supported:
77 need_fileinfo
78
Bram Moolenaarce90e362019-09-08 18:58:44 +020079 Can also be used as a |method|: >
80 GetName()->test_getvalue()
Bram Moolenaared997ad2019-07-21 16:42:00 +020081
82test_ignore_error({expr}) *test_ignore_error()*
83 Ignore any error containing {expr}. A normal message is given
84 instead.
85 This is only meant to be used in tests, where catching the
86 error with try/catch cannot be used (because it skips over
87 following code).
88 {expr} is used literally, not as a pattern.
89 When the {expr} is the string "RESET" then the list of ignored
90 errors is made empty.
91
Bram Moolenaarce90e362019-09-08 18:58:44 +020092 Can also be used as a |method|: >
93 GetErrorText()->test_ignore_error()
Bram Moolenaared997ad2019-07-21 16:42:00 +020094
95test_null_blob() *test_null_blob()*
96 Return a |Blob| that is null. Only useful for testing.
97
98
99test_null_channel() *test_null_channel()*
100 Return a |Channel| that is null. Only useful for testing.
101 {only available when compiled with the +channel feature}
102
103
104test_null_dict() *test_null_dict()*
105 Return a |Dict| that is null. Only useful for testing.
106
107
Bram Moolenaare69f6d02020-04-01 22:11:01 +0200108test_null_function() *test_null_function()*
Bram Moolenaard1caa942020-04-10 22:10:56 +0200109 Return a |Funcref| that is null. Only useful for testing.
Bram Moolenaare69f6d02020-04-01 22:11:01 +0200110
111
Bram Moolenaared997ad2019-07-21 16:42:00 +0200112test_null_job() *test_null_job()*
113 Return a |Job| that is null. Only useful for testing.
114 {only available when compiled with the +job feature}
115
116
117test_null_list() *test_null_list()*
118 Return a |List| that is null. Only useful for testing.
119
120
121test_null_partial() *test_null_partial()*
122 Return a |Partial| that is null. Only useful for testing.
123
124
125test_null_string() *test_null_string()*
126 Return a |String| that is null. Only useful for testing.
127
128
Bram Moolenaar8ed04582020-02-22 19:07:28 +0100129test_unknown() *test_unknown()*
130 Return a value with unknown type. Only useful for testing.
131
132test_void() *test_void()*
133 Return a value with void type. Only useful for testing.
134
135
Bram Moolenaared997ad2019-07-21 16:42:00 +0200136test_option_not_set({name}) *test_option_not_set()*
137 Reset the flag that indicates option {name} was set. Thus it
138 looks like it still has the default value. Use like this: >
139 set ambiwidth=double
140 call test_option_not_set('ambiwidth')
141< Now the 'ambiwidth' option behaves like it was never changed,
142 even though the value is "double".
143 Only to be used for testing!
144
Bram Moolenaarce90e362019-09-08 18:58:44 +0200145 Can also be used as a |method|: >
146 GetOptionName()->test_option_not_set()
147
Bram Moolenaared997ad2019-07-21 16:42:00 +0200148
149test_override({name}, {val}) *test_override()*
150 Overrides certain parts of Vim's internal processing to be able
151 to run tests. Only to be used for testing Vim!
152 The override is enabled when {val} is non-zero and removed
153 when {val} is zero.
154 Current supported values for name are:
155
156 name effect when {val} is non-zero ~
157 redraw disable the redrawing() function
158 redraw_flag ignore the RedrawingDisabled flag
159 char_avail disable the char_avail() function
160 starting reset the "starting" variable, see below
161 nfa_fail makes the NFA regexp engine fail to force a
162 fallback to the old engine
163 no_query_mouse do not query the mouse position for "dec"
164 terminals
165 no_wait_return set the "no_wait_return" flag. Not restored
166 with "ALL".
Bram Moolenaarb340bae2020-06-15 19:51:56 +0200167 ui_delay time in msec to use in ui_delay(); overrules a
168 wait time of up to 3 seconds for messages
Bram Moolenaar0c0eddd2020-06-13 15:47:25 +0200169 term_props reset all terminal properties when the version
170 string is detected
Bram Moolenaared997ad2019-07-21 16:42:00 +0200171 ALL clear all overrides ({val} is not used)
172
173 "starting" is to be used when a test should behave like
174 startup was done. Since the tests are run by sourcing a
175 script the "starting" variable is non-zero. This is usually a
176 good thing (tests run faster), but sometimes changes behavior
177 in a way that the test doesn't work properly.
178 When using: >
179 call test_override('starting', 1)
180< The value of "starting" is saved. It is restored by: >
181 call test_override('starting', 0)
182
Bram Moolenaarce90e362019-09-08 18:58:44 +0200183< Can also be used as a |method|: >
184 GetOverrideVal()-> test_override('starting')
Bram Moolenaared997ad2019-07-21 16:42:00 +0200185
186test_refcount({expr}) *test_refcount()*
187 Return the reference count of {expr}. When {expr} is of a
188 type that does not have a reference count, returns -1. Only
189 to be used for testing.
190
Bram Moolenaarce90e362019-09-08 18:58:44 +0200191 Can also be used as a |method|: >
192 GetVarname()->test_refcount()
193
Bram Moolenaared997ad2019-07-21 16:42:00 +0200194
195test_scrollbar({which}, {value}, {dragging}) *test_scrollbar()*
196 Pretend using scrollbar {which} to move it to position
197 {value}. {which} can be:
198 left Left scrollbar of the current window
199 right Right scrollbar of the current window
200 hor Horizontal scrollbar
201
202 For the vertical scrollbars {value} can be 1 to the
203 line-count of the buffer. For the horizontal scrollbar the
204 {value} can be between 1 and the maximum line length, assuming
205 'wrap' is not set.
206
207 When {dragging} is non-zero it's like dragging the scrollbar,
208 otherwise it's like clicking in the scrollbar.
209 Only works when the {which} scrollbar actually exists,
210 obviously only when using the GUI.
211
Bram Moolenaarce90e362019-09-08 18:58:44 +0200212 Can also be used as a |method|: >
213 GetValue()->test_scrollbar('right', 0)
Bram Moolenaared997ad2019-07-21 16:42:00 +0200214
215test_setmouse({row}, {col}) *test_setmouse()*
216 Set the mouse position to be used for the next mouse action.
217 {row} and {col} are one based.
218 For example: >
219 call test_setmouse(4, 20)
220 call feedkeys("\<LeftMouse>", "xt")
221
Bram Moolenaared997ad2019-07-21 16:42:00 +0200222test_settime({expr}) *test_settime()*
223 Set the time Vim uses internally. Currently only used for
224 timestamps in the history, as they are used in viminfo, and
225 for undo.
226 Using a value of 1 makes Vim not sleep after a warning or
227 error message.
228 {expr} must evaluate to a number. When the value is zero the
229 normal behavior is restored.
230
Bram Moolenaarce90e362019-09-08 18:58:44 +0200231 Can also be used as a |method|: >
232 GetTime()->test_settime()
233
Bram Moolenaar4f645c52020-02-08 16:40:39 +0100234test_srand_seed([seed]) *test_srand_seed()*
235 When [seed] is given this sets the seed value used by
236 `srand()`. When omitted the test seed is removed.
237
Bram Moolenaared997ad2019-07-21 16:42:00 +0200238==============================================================================
Bram Moolenaar54775062019-07-31 21:07:14 +02002393. Assert functions *assert-functions-details*
Bram Moolenaared997ad2019-07-21 16:42:00 +0200240
241
242assert_beeps({cmd}) *assert_beeps()*
243 Run {cmd} and add an error message to |v:errors| if it does
244 NOT produce a beep or visual bell.
245 Also see |assert_fails()| and |assert-return|.
246
Bram Moolenaar24278d22019-08-16 21:49:22 +0200247 Can also be used as a |method|: >
248 GetCmd()->assert_beeps()
249<
Bram Moolenaared997ad2019-07-21 16:42:00 +0200250 *assert_equal()*
251assert_equal({expected}, {actual} [, {msg}])
252 When {expected} and {actual} are not equal an error message is
253 added to |v:errors| and 1 is returned. Otherwise zero is
254 returned |assert-return|.
255 There is no automatic conversion, the String "4" is different
256 from the Number 4. And the number 4 is different from the
257 Float 4.0. The value of 'ignorecase' is not used here, case
258 always matters.
259 When {msg} is omitted an error in the form "Expected
260 {expected} but got {actual}" is produced.
261 Example: >
262 assert_equal('foo', 'bar')
263< Will result in a string to be added to |v:errors|:
264 test.vim line 12: Expected 'foo' but got 'bar' ~
265
Bram Moolenaar7ff78462020-07-10 22:00:53 +0200266 Can also be used as a |method|, the base is passed as the
267 second argument: >
Bram Moolenaar25e42232019-08-04 15:04:10 +0200268 mylist->assert_equal([1, 2, 3])
269
Bram Moolenaar25e42232019-08-04 15:04:10 +0200270< *assert_equalfile()*
Bram Moolenaarfb517ba2020-06-03 19:55:35 +0200271assert_equalfile({fname-one}, {fname-two} [, {msg}])
Bram Moolenaared997ad2019-07-21 16:42:00 +0200272 When the files {fname-one} and {fname-two} do not contain
273 exactly the same text an error message is added to |v:errors|.
274 Also see |assert-return|.
275 When {fname-one} or {fname-two} does not exist the error will
276 mention that.
277 Mainly useful with |terminal-diff|.
278
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200279 Can also be used as a |method|: >
280 GetLog()->assert_equalfile('expected.log')
281
Bram Moolenaared997ad2019-07-21 16:42:00 +0200282assert_exception({error} [, {msg}]) *assert_exception()*
283 When v:exception does not contain the string {error} an error
284 message is added to |v:errors|. Also see |assert-return|.
285 This can be used to assert that a command throws an exception.
286 Using the error number, followed by a colon, avoids problems
287 with translations: >
288 try
289 commandthatfails
290 call assert_false(1, 'command should have failed')
291 catch
292 call assert_exception('E492:')
293 endtry
Bram Moolenaar1d634542020-08-18 13:41:50 +0200294<
295 *assert_fails()*
296assert_fails({cmd} [, {error} [, {msg} [, {lnum}]]])
Bram Moolenaared997ad2019-07-21 16:42:00 +0200297 Run {cmd} and add an error message to |v:errors| if it does
Bram Moolenaar9b7bf9e2020-07-11 22:14:59 +0200298 NOT produce an error or when {error} is not found in the
299 error message. Also see |assert-return|.
300
301 When {error} is a string it must be found literally in the
302 first reported error. Most often this will be the error code,
303 including the colon, e.g. "E123:". >
304 assert_fails('bad cmd', 'E987:')
305<
306 When {error} is a |List| with one or two strings, these are
307 used as patterns. The first pattern is matched against the
308 first reported error: >
309 assert_fails('cmd', ['E987:.*expected bool'])
310< The second pattern, if present, is matched against the last
311 reported error. To only match the last error use an empty
312 string for the first error: >
313 assert_fails('cmd', ['', 'E987:'])
314<
Bram Moolenaar1d634542020-08-18 13:41:50 +0200315 If {msg} is empty then it is not used. Do this to get the
316 default message when passing the {lnum} argument.
317
318 When {lnum} is present and not negative, and the {error}
319 argument is present and matches, then this is compared with
320 the line number at which the error was reported. That can be
321 the line number in a function or in a script.
322
Bram Moolenaared997ad2019-07-21 16:42:00 +0200323 Note that beeping is not considered an error, and some failing
324 commands only beep. Use |assert_beeps()| for those.
325
Bram Moolenaar24278d22019-08-16 21:49:22 +0200326 Can also be used as a |method|: >
327 GetCmd()->assert_fails('E99:')
328
Bram Moolenaar1d634542020-08-18 13:41:50 +0200329assert_false({actual} [, {msg}]) *assert_false()*
Bram Moolenaared997ad2019-07-21 16:42:00 +0200330 When {actual} is not false an error message is added to
331 |v:errors|, like with |assert_equal()|.
332 Also see |assert-return|.
333 A value is false when it is zero. When {actual} is not a
334 number the assert fails.
335 When {msg} is omitted an error in the form
336 "Expected False but got {actual}" is produced.
337
Bram Moolenaar24278d22019-08-16 21:49:22 +0200338 Can also be used as a |method|: >
339 GetResult()->assert_false()
340
Bram Moolenaared997ad2019-07-21 16:42:00 +0200341assert_inrange({lower}, {upper}, {actual} [, {msg}]) *assert_inrange()*
342 This asserts number and |Float| values. When {actual} is lower
343 than {lower} or higher than {upper} an error message is added
344 to |v:errors|. Also see |assert-return|.
345 When {msg} is omitted an error in the form
346 "Expected range {lower} - {upper}, but got {actual}" is
347 produced.
348
349 *assert_match()*
350assert_match({pattern}, {actual} [, {msg}])
351 When {pattern} does not match {actual} an error message is
352 added to |v:errors|. Also see |assert-return|.
353
354 {pattern} is used as with |=~|: The matching is always done
355 like 'magic' was set and 'cpoptions' is empty, no matter what
356 the actual value of 'magic' or 'cpoptions' is.
357
358 {actual} is used as a string, automatic conversion applies.
359 Use "^" and "$" to match with the start and end of the text.
360 Use both to match the whole text.
361
362 When {msg} is omitted an error in the form
363 "Pattern {pattern} does not match {actual}" is produced.
364 Example: >
365 assert_match('^f.*o$', 'foobar')
366< Will result in a string to be added to |v:errors|:
367 test.vim line 12: Pattern '^f.*o$' does not match 'foobar' ~
368
Bram Moolenaar24278d22019-08-16 21:49:22 +0200369 Can also be used as a |method|: >
370 getFile()->assert_match('foo.*')
371<
Bram Moolenaared997ad2019-07-21 16:42:00 +0200372 *assert_notequal()*
373assert_notequal({expected}, {actual} [, {msg}])
374 The opposite of `assert_equal()`: add an error message to
375 |v:errors| when {expected} and {actual} are equal.
376 Also see |assert-return|.
377
Bram Moolenaar25e42232019-08-04 15:04:10 +0200378 Can also be used as a |method|: >
379 mylist->assert_notequal([1, 2, 3])
380
381< *assert_notmatch()*
Bram Moolenaared997ad2019-07-21 16:42:00 +0200382assert_notmatch({pattern}, {actual} [, {msg}])
383 The opposite of `assert_match()`: add an error message to
384 |v:errors| when {pattern} matches {actual}.
385 Also see |assert-return|.
386
Bram Moolenaar24278d22019-08-16 21:49:22 +0200387 Can also be used as a |method|: >
388 getFile()->assert_notmatch('bar.*')
389
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200390
Bram Moolenaared997ad2019-07-21 16:42:00 +0200391assert_report({msg}) *assert_report()*
392 Report a test failure directly, using {msg}.
393 Always returns one.
394
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200395 Can also be used as a |method|: >
396 GetMessage()->assert_report()
397
398
Bram Moolenaared997ad2019-07-21 16:42:00 +0200399assert_true({actual} [, {msg}]) *assert_true()*
400 When {actual} is not true an error message is added to
401 |v:errors|, like with |assert_equal()|.
402 Also see |assert-return|.
403 A value is TRUE when it is a non-zero number. When {actual}
404 is not a number the assert fails.
405 When {msg} is omitted an error in the form "Expected True but
406 got {actual}" is produced.
407
Bram Moolenaar24278d22019-08-16 21:49:22 +0200408 Can also be used as a |method|: >
409 GetResult()->assert_true()
410<
Bram Moolenaared997ad2019-07-21 16:42:00 +0200411
412 vim:tw=78:ts=8:noet:ft=help:norl: