blob: 76396fee3952cc93215de2210cf6ec2c727bc30f [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
Bram Moolenaarb45125b2019-03-24 20:18:40 +010037- Use test_alloc_fail() to have memory allocation fail. This makes it possible
38 to check memory allocation failures are handled gracefully. You need to
39 change the source code to add an ID to the allocation. Add a new one to
40 alloc_id_T, before aid_last.
Bram Moolenaar02c97212018-09-09 15:56:06 +020041
42- Use test_override() to make Vim behave differently, e.g. if char_avail()
43 must return FALSE for a while. E.g. to trigger the CursorMovedI autocommand
Bram Moolenaarb45125b2019-03-24 20:18:40 +010044 event. See test_cursor_func.vim for an example.
Bram Moolenaar02c97212018-09-09 15:56:06 +020045
Bram Moolenaardac19472016-09-03 22:35:40 +020046- If the bug that is being tested isn't fixed yet, you can throw an exception
Bram Moolenaar02c97212018-09-09 15:56:06 +020047 with "Skipped" so that it's clear this still needs work. E.g.: throw
48 "Skipped: Bug with <c-e> and popupmenu not fixed yet"
49
Bram Moolenaarfd89d7e2016-06-04 20:25:05 +020050- See the start of runtest.vim for more help.
Bram Moolenaar6602af72016-01-07 22:01:01 +010051
52
Bram Moolenaarda650582018-02-20 15:51:40 +010053TO ADD A SCREEN DUMP TEST:
54
Bram Moolenaarc4568ab2018-11-16 16:21:05 +010055Mostly the same as writing a new style test. Additionally, see help on
Bram Moolenaarda650582018-02-20 15:51:40 +010056"terminal-dumptest". Put the reference dump in "dumps/Test_func_name.dump".
57
58
Bram Moolenaar6602af72016-01-07 22:01:01 +010059TO ADD AN OLD STYLE TEST:
60
611) Create test_<subject>.in and test_<subject>.ok files.
622) Add test_<subject>.out to SCRIPTS_ALL in Make_all.mak in alphabetical order.
633) Use make test_<subject>.out to run a single test in src/testdir/.
Bram Moolenaarb45125b2019-03-24 20:18:40 +010064 Use make test_<subject> to run a single test in src/.
Bram Moolenaar6602af72016-01-07 22:01:01 +0100654) Also add an entry in src/Makefile.
66
67Keep in mind that the files are used as if everything was typed:
68- To add comments use: :" (that's an Ex command comment)
69- A line break is like pressing Enter. If that happens on the last line
70 you'll hear a beep!