blob: f4486e302b8866aa3feaabae8d0dbe6877e74376 [file] [log] [blame]
Bram Moolenaara9537d22014-08-29 10:04:47 +02001This directory contains tests for various Vim features.
Bram Moolenaarec504012019-01-11 17:30:16 +01002For testing an indent script see runtime/indent/testdir/README.txt.
Bram Moolenaara9537d22014-08-29 10:04:47 +02003
Bram Moolenaar6602af72016-01-07 22:01:01 +01004If it makes sense, add a new test method to an already existing file. You may
5want to separate it from other tests with comment lines.
Bram Moolenaara9537d22014-08-29 10:04:47 +02006
Bram Moolenaar9e4d8212016-08-18 23:04:48 +02007The numbered tests are older, we have switched to named tests. Don't add any
8more numbered tests.
Bram Moolenaara9537d22014-08-29 10:04:47 +02009
Bram Moolenaarfd89d7e2016-06-04 20:25:05 +020010And then you can choose between a new style test, which is a Vim script, or an
Bram Moolenaar6602af72016-01-07 22:01:01 +010011old style test, which uses Normal mode commands. Use a new style test if you
Bram Moolenaar9e4d8212016-08-18 23:04:48 +020012can. Use an old style test when it needs to run without the +eval feature.
Bram Moolenaar6602af72016-01-07 22:01:01 +010013
14
15TO ADD A NEW STYLE TEST:
16
171) Create a test_<subject>.vim file.
Bram Moolenaarec504012019-01-11 17:30:16 +0100182) Add test_<subject>.res to NEW_TESTS_RES in Make_all.mak in alphabetical
19 order.
203) Also add an entry "test_<subject>" to NEW_TESTS in Make_all.mak.
214) Use make test_<subject> to run a single test.
Bram Moolenaara9537d22014-08-29 10:04:47 +020022
Bram Moolenaar02c97212018-09-09 15:56:06 +020023At 2), instead of running the test separately, it can be included in
24"test_alot". Do this for quick tests without side effects. The test runs a
25bit faster, because Vim doesn't have to be started, one Vim instance runs many
26tests.
27
28
Bram Moolenaar6602af72016-01-07 22:01:01 +010029What you can use (see test_assert.vim for an example):
Bram Moolenaar02c97212018-09-09 15:56:06 +020030
Bram Moolenaardac19472016-09-03 22:35:40 +020031- Call assert_equal(), assert_true(), assert_false(), etc.
Bram Moolenaar02c97212018-09-09 15:56:06 +020032
33- Use assert_fails() to check for expected errors.
34
35- Use try/catch to avoid an exception aborts the test.
36
37- Use alloc_fail() to have memory allocation fail. This makes it possible to
38 check memory allocation failures are handled gracefully. You need to change
39
40- the source code to add an ID to the allocation. Update LAST_ID_USED above
41 alloc_id() to the highest ID used.
42
43- Use test_override() to make Vim behave differently, e.g. if char_avail()
44 must return FALSE for a while. E.g. to trigger the CursorMovedI autocommand
45 event.
46
47- See test_cursor_func.vim for an example.
48
Bram Moolenaardac19472016-09-03 22:35:40 +020049- If the bug that is being tested isn't fixed yet, you can throw an exception
Bram Moolenaar02c97212018-09-09 15:56:06 +020050 with "Skipped" so that it's clear this still needs work. E.g.: throw
51 "Skipped: Bug with <c-e> and popupmenu not fixed yet"
52
Bram Moolenaarfd89d7e2016-06-04 20:25:05 +020053- See the start of runtest.vim for more help.
Bram Moolenaar6602af72016-01-07 22:01:01 +010054
55
Bram Moolenaarda650582018-02-20 15:51:40 +010056TO ADD A SCREEN DUMP TEST:
57
Bram Moolenaarc4568ab2018-11-16 16:21:05 +010058Mostly the same as writing a new style test. Additionally, see help on
Bram Moolenaarda650582018-02-20 15:51:40 +010059"terminal-dumptest". Put the reference dump in "dumps/Test_func_name.dump".
60
61
Bram Moolenaar6602af72016-01-07 22:01:01 +010062TO ADD AN OLD STYLE TEST:
63
641) Create test_<subject>.in and test_<subject>.ok files.
652) Add test_<subject>.out to SCRIPTS_ALL in Make_all.mak in alphabetical order.
663) Use make test_<subject>.out to run a single test in src/testdir/.
67 Use make test_<subject> to run a single test in src/.
684) Also add an entry in src/Makefile.
69
70Keep in mind that the files are used as if everything was typed:
71- To add comments use: :" (that's an Ex command comment)
72- A line break is like pressing Enter. If that happens on the last line
73 you'll hear a beep!