Bram Moolenaar | a9537d2 | 2014-08-29 10:04:47 +0200 | [diff] [blame] | 1 | This directory contains tests for various Vim features. |
Bram Moolenaar | ec50401 | 2019-01-11 17:30:16 +0100 | [diff] [blame] | 2 | For testing an indent script see runtime/indent/testdir/README.txt. |
Bram Moolenaar | a9537d2 | 2014-08-29 10:04:47 +0200 | [diff] [blame] | 3 | |
Bram Moolenaar | 6602af7 | 2016-01-07 22:01:01 +0100 | [diff] [blame] | 4 | If it makes sense, add a new test method to an already existing file. You may |
| 5 | want to separate it from other tests with comment lines. |
Bram Moolenaar | a9537d2 | 2014-08-29 10:04:47 +0200 | [diff] [blame] | 6 | |
Bram Moolenaar | 9e4d821 | 2016-08-18 23:04:48 +0200 | [diff] [blame] | 7 | The numbered tests are older, we have switched to named tests. Don't add any |
| 8 | more numbered tests. |
Bram Moolenaar | a9537d2 | 2014-08-29 10:04:47 +0200 | [diff] [blame] | 9 | |
Bram Moolenaar | fd89d7e | 2016-06-04 20:25:05 +0200 | [diff] [blame] | 10 | And then you can choose between a new style test, which is a Vim script, or an |
Bram Moolenaar | 6602af7 | 2016-01-07 22:01:01 +0100 | [diff] [blame] | 11 | old style test, which uses Normal mode commands. Use a new style test if you |
Bram Moolenaar | 9e4d821 | 2016-08-18 23:04:48 +0200 | [diff] [blame] | 12 | can. Use an old style test when it needs to run without the +eval feature. |
Bram Moolenaar | 6602af7 | 2016-01-07 22:01:01 +0100 | [diff] [blame] | 13 | |
| 14 | |
| 15 | TO ADD A NEW STYLE TEST: |
| 16 | |
| 17 | 1) Create a test_<subject>.vim file. |
Bram Moolenaar | ec50401 | 2019-01-11 17:30:16 +0100 | [diff] [blame] | 18 | 2) Add test_<subject>.res to NEW_TESTS_RES in Make_all.mak in alphabetical |
| 19 | order. |
| 20 | 3) Also add an entry "test_<subject>" to NEW_TESTS in Make_all.mak. |
| 21 | 4) Use make test_<subject> to run a single test. |
Bram Moolenaar | a9537d2 | 2014-08-29 10:04:47 +0200 | [diff] [blame] | 22 | |
Bram Moolenaar | 02c9721 | 2018-09-09 15:56:06 +0200 | [diff] [blame] | 23 | At 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 |
| 25 | bit faster, because Vim doesn't have to be started, one Vim instance runs many |
| 26 | tests. |
| 27 | |
| 28 | |
Bram Moolenaar | 6602af7 | 2016-01-07 22:01:01 +0100 | [diff] [blame] | 29 | What you can use (see test_assert.vim for an example): |
Bram Moolenaar | 02c9721 | 2018-09-09 15:56:06 +0200 | [diff] [blame] | 30 | |
Bram Moolenaar | dac1947 | 2016-09-03 22:35:40 +0200 | [diff] [blame] | 31 | - Call assert_equal(), assert_true(), assert_false(), etc. |
Bram Moolenaar | 02c9721 | 2018-09-09 15:56:06 +0200 | [diff] [blame] | 32 | |
| 33 | - Use assert_fails() to check for expected errors. |
| 34 | |
| 35 | - Use try/catch to avoid an exception aborts the test. |
| 36 | |
Bram Moolenaar | b45125b | 2019-03-24 20:18:40 +0100 | [diff] [blame^] | 37 | - 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 Moolenaar | 02c9721 | 2018-09-09 15:56:06 +0200 | [diff] [blame] | 41 | |
| 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 Moolenaar | b45125b | 2019-03-24 20:18:40 +0100 | [diff] [blame^] | 44 | event. See test_cursor_func.vim for an example. |
Bram Moolenaar | 02c9721 | 2018-09-09 15:56:06 +0200 | [diff] [blame] | 45 | |
Bram Moolenaar | dac1947 | 2016-09-03 22:35:40 +0200 | [diff] [blame] | 46 | - If the bug that is being tested isn't fixed yet, you can throw an exception |
Bram Moolenaar | 02c9721 | 2018-09-09 15:56:06 +0200 | [diff] [blame] | 47 | 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 Moolenaar | fd89d7e | 2016-06-04 20:25:05 +0200 | [diff] [blame] | 50 | - See the start of runtest.vim for more help. |
Bram Moolenaar | 6602af7 | 2016-01-07 22:01:01 +0100 | [diff] [blame] | 51 | |
| 52 | |
Bram Moolenaar | da65058 | 2018-02-20 15:51:40 +0100 | [diff] [blame] | 53 | TO ADD A SCREEN DUMP TEST: |
| 54 | |
Bram Moolenaar | c4568ab | 2018-11-16 16:21:05 +0100 | [diff] [blame] | 55 | Mostly the same as writing a new style test. Additionally, see help on |
Bram Moolenaar | da65058 | 2018-02-20 15:51:40 +0100 | [diff] [blame] | 56 | "terminal-dumptest". Put the reference dump in "dumps/Test_func_name.dump". |
| 57 | |
| 58 | |
Bram Moolenaar | 6602af7 | 2016-01-07 22:01:01 +0100 | [diff] [blame] | 59 | TO ADD AN OLD STYLE TEST: |
| 60 | |
| 61 | 1) Create test_<subject>.in and test_<subject>.ok files. |
| 62 | 2) Add test_<subject>.out to SCRIPTS_ALL in Make_all.mak in alphabetical order. |
| 63 | 3) Use make test_<subject>.out to run a single test in src/testdir/. |
Bram Moolenaar | b45125b | 2019-03-24 20:18:40 +0100 | [diff] [blame^] | 64 | Use make test_<subject> to run a single test in src/. |
Bram Moolenaar | 6602af7 | 2016-01-07 22:01:01 +0100 | [diff] [blame] | 65 | 4) Also add an entry in src/Makefile. |
| 66 | |
| 67 | Keep 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! |