blob: f72bdbfb85748f4c14a8fb9a2ff9a4b894ea1e10 [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 Moolenaar6602af72016-01-07 22:01:01 +01007TO ADD A NEW STYLE TEST:
8
91) Create a test_<subject>.vim file.
Bram Moolenaarec504012019-01-11 17:30:16 +0100102) Add test_<subject>.res to NEW_TESTS_RES in Make_all.mak in alphabetical
11 order.
123) Also add an entry "test_<subject>" to NEW_TESTS in Make_all.mak.
134) Use make test_<subject> to run a single test.
Bram Moolenaara9537d22014-08-29 10:04:47 +020014
Bram Moolenaar02c97212018-09-09 15:56:06 +020015At 2), instead of running the test separately, it can be included in
16"test_alot". Do this for quick tests without side effects. The test runs a
17bit faster, because Vim doesn't have to be started, one Vim instance runs many
18tests.
19
Bram Moolenaar85683ec2020-02-20 22:35:02 +010020At 4), to run a test in GUI, add "GUI_FLAG=-g" to the make command.
21
Bram Moolenaar02c97212018-09-09 15:56:06 +020022
Bram Moolenaar6602af72016-01-07 22:01:01 +010023What you can use (see test_assert.vim for an example):
Bram Moolenaar02c97212018-09-09 15:56:06 +020024
Bram Moolenaardac19472016-09-03 22:35:40 +020025- Call assert_equal(), assert_true(), assert_false(), etc.
Bram Moolenaar02c97212018-09-09 15:56:06 +020026
27- Use assert_fails() to check for expected errors.
28
29- Use try/catch to avoid an exception aborts the test.
30
Bram Moolenaarb45125b2019-03-24 20:18:40 +010031- Use test_alloc_fail() to have memory allocation fail. This makes it possible
32 to check memory allocation failures are handled gracefully. You need to
33 change the source code to add an ID to the allocation. Add a new one to
34 alloc_id_T, before aid_last.
Bram Moolenaar02c97212018-09-09 15:56:06 +020035
36- Use test_override() to make Vim behave differently, e.g. if char_avail()
37 must return FALSE for a while. E.g. to trigger the CursorMovedI autocommand
Bram Moolenaarb45125b2019-03-24 20:18:40 +010038 event. See test_cursor_func.vim for an example.
Bram Moolenaar02c97212018-09-09 15:56:06 +020039
Bram Moolenaardac19472016-09-03 22:35:40 +020040- If the bug that is being tested isn't fixed yet, you can throw an exception
Bram Moolenaar02c97212018-09-09 15:56:06 +020041 with "Skipped" so that it's clear this still needs work. E.g.: throw
42 "Skipped: Bug with <c-e> and popupmenu not fixed yet"
43
Christian Brabandt2c645e82022-04-20 14:52:01 +010044- The following environment variables are recognized and can be set to
45 influence the behavior of the test suite (see runtest.vim for details)
46
47 - $TEST_MAY_FAIL=Test_channel_one - ignore those failing tests
48 - $TEST_FILTER=Test_channel - only run test that match this pattern
49 - $TEST_SKIP_PAT=Test_channel - skip tests that match this pattern
50 - $TEST_NO_RETRY=yes - do not try to re-run failing tests
51 You can also set them in Vim:
52 :let $TEST_MAY_FAIL = 'Test_channel_one'
53 :let $TEST_FILTER = '_set_mode'
54 :let $TEST_SKIP_PAT = 'Test_loop_forever'
55 :let $TEST_NO_RETRY = 'yes'
56 Use an empty string to revert, e.g.:
57 :let $TEST_FILTER = ''
58
Bram Moolenaarfd89d7e2016-06-04 20:25:05 +020059- See the start of runtest.vim for more help.
Bram Moolenaar6602af72016-01-07 22:01:01 +010060
61
Bram Moolenaarda650582018-02-20 15:51:40 +010062TO ADD A SCREEN DUMP TEST:
63
Bram Moolenaarc4568ab2018-11-16 16:21:05 +010064Mostly the same as writing a new style test. Additionally, see help on
Bram Moolenaarda650582018-02-20 15:51:40 +010065"terminal-dumptest". Put the reference dump in "dumps/Test_func_name.dump".
66
Bram Moolenaar02c037a2020-08-30 19:26:45 +020067
68OLD STYLE TESTS:
69
70There are a few tests that are used when Vim was built without the +eval
71feature. These cannot use the "assert" functions, therefore they consist of a
72.in file that contains Normal mode commands between STARTTEST and ENDTEST.
Bram Moolenaarf10911e2022-01-29 22:20:48 +000073They modify the file and the result gets written in the test.out file. This
Bram Moolenaar02c037a2020-08-30 19:26:45 +020074is then compared with the .ok file. If they are equal the test passed. If
75they differ the test failed.
Bram Moolenaar0e6adf82021-12-16 14:41:10 +000076
77
78RUNNING THE TESTS:
79
80To run a single test from the src directory:
81
82 $ make test_<name>
83
84The below commands should be run from the src/testdir directory.
85
86To run a single test:
87
88 $ make test_<name>.res
89
90The file 'messages' contains the messages generated by the test script. If a
91test fails, then the test.log file contains the error messages. If all the
92tests are successful, then this file will be an empty file.
93
Christian Brabandt2c645e82022-04-20 14:52:01 +010094- To run a single test function from a test script:
Bram Moolenaar0e6adf82021-12-16 14:41:10 +000095
96 $ ../vim -u NONE -S runtest.vim <test_file>.vim <function_name>
97
Christian Brabandt2c645e82022-04-20 14:52:01 +010098- To execute only specific test functions, add a second argument:
99
100 $ ../vim -u NONE -S runtest.vim test_channel.vim open_delay
101
102
103- To run all the tests:
Bram Moolenaar0e6adf82021-12-16 14:41:10 +0000104
105 $ make
106
Christian Brabandt2c645e82022-04-20 14:52:01 +0100107- To run the test on MS-Windows using the MSVC nmake:
Bram Moolenaar0e6adf82021-12-16 14:41:10 +0000108
K.Takata5bc13452022-09-09 10:52:47 +0100109 > nmake -f Make_mvc.mak
Bram Moolenaar0e6adf82021-12-16 14:41:10 +0000110
Christian Brabandt2c645e82022-04-20 14:52:01 +0100111- To run the tests with GUI Vim:
Bram Moolenaar0e6adf82021-12-16 14:41:10 +0000112
113 $ make GUI_FLAG=-g
114
115 or
116
117 $ make VIMPROG=../gvim
118
Christian Brabandt2c645e82022-04-20 14:52:01 +0100119- To cleanup the temporary files after running the tests:
Bram Moolenaar0e6adf82021-12-16 14:41:10 +0000120
121 $ make clean