Bram Moolenaar | 90df4b9 | 2021-07-07 20:26:08 +0200 | [diff] [blame] | 1 | *testing.txt* For Vim version 8.2. Last change: 2021 Jul 07 |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 2 | |
| 3 | |
| 4 | VIM REFERENCE MANUAL by Bram Moolenaar |
| 5 | |
| 6 | |
| 7 | Testing Vim and Vim script *testing-support* |
| 8 | |
| 9 | Expression evaluation is explained in |eval.txt|. This file goes into details |
| 10 | about writing tests in Vim script. This can be used for testing Vim itself |
| 11 | and for testing plugins. |
| 12 | |
| 13 | 1. Testing Vim |testing| |
Bram Moolenaar | 5477506 | 2019-07-31 21:07:14 +0200 | [diff] [blame] | 14 | 2. Test functions |test-functions-details| |
| 15 | 3. Assert functions |assert-functions-details| |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 16 | |
| 17 | ============================================================================== |
| 18 | 1. Testing Vim *testing* |
| 19 | |
| 20 | Vim can be tested after building it, usually with "make test". |
| 21 | The tests are located in the directory "src/testdir". |
| 22 | |
Bram Moolenaar | b96a32e | 2020-08-13 18:59:55 +0200 | [diff] [blame] | 23 | There 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 Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 27 | *new-style-testing* |
Bram Moolenaar | f7c4d83 | 2020-08-11 20:42:19 +0200 | [diff] [blame] | 28 | New tests should be added as new style tests. The test scripts are named |
| 29 | test_<feature>.vim (replace <feature> with the feature under test). These use |
| 30 | functions such as |assert_equal()| to keep the test commands and the expected |
| 31 | result in one place. |
Bram Moolenaar | b96a32e | 2020-08-13 18:59:55 +0200 | [diff] [blame] | 32 | *old-style-testing* |
| 33 | These tests are used only for testing Vim without the |+eval| feature. |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 34 | |
| 35 | Find more information in the file src/testdir/README.txt. |
| 36 | |
| 37 | ============================================================================== |
Bram Moolenaar | 5477506 | 2019-07-31 21:07:14 +0200 | [diff] [blame] | 38 | 2. Test functions *test-functions-details* |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 39 | |
| 40 | test_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 Moolenaar | ce90e36 | 2019-09-08 18:58:44 +0200 | [diff] [blame] | 46 | Can also be used as a |method|: > |
| 47 | GetAllocId()->test_alloc_fail() |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 48 | |
| 49 | test_autochdir() *test_autochdir()* |
| 50 | Set a flag to enable the effect of 'autochdir' before Vim |
| 51 | startup has finished. |
| 52 | |
| 53 | |
| 54 | test_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 Moolenaar | ce90e36 | 2019-09-08 18:58:44 +0200 | [diff] [blame] | 59 | Can also be used as a |method|: > |
| 60 | GetText()->test_feedinput() |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 61 | |
| 62 | test_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 | |
| 69 | test_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 | |
| 74 | test_getvalue({name}) *test_getvalue()* |
| 75 | Get the value of an internal variable. These values for |
| 76 | {name} are supported: |
| 77 | need_fileinfo |
| 78 | |
Bram Moolenaar | ce90e36 | 2019-09-08 18:58:44 +0200 | [diff] [blame] | 79 | Can also be used as a |method|: > |
| 80 | GetName()->test_getvalue() |
Yegappan Lakshmanan | f1e7449 | 2021-06-21 18:44:26 +0200 | [diff] [blame] | 81 | < |
Yegappan Lakshmanan | 18d4658 | 2021-06-23 20:46:52 +0200 | [diff] [blame] | 82 | *test_gui_drop_files()* |
| 83 | test_gui_drop_files({list}, {row}, {col}, {mods}) |
| 84 | Drop one or more files in {list} in the window at {row}, {col}. |
Bram Moolenaar | 90df4b9 | 2021-07-07 20:26:08 +0200 | [diff] [blame] | 85 | This function only works when the GUI is running and the |
| 86 | |drag-n-drop| feature is present. |
Yegappan Lakshmanan | 18d4658 | 2021-06-23 20:46:52 +0200 | [diff] [blame] | 87 | |
| 88 | The supported values for {mods} are: |
| 89 | 0x4 Shift |
| 90 | 0x8 Alt |
| 91 | 0x10 Ctrl |
| 92 | The files are added to the argument list and the first file in |
| 93 | {list} is edited in the window. See |drag-n-drop| for more |
| 94 | information. |
| 95 | |
Yegappan Lakshmanan | f1e7449 | 2021-06-21 18:44:26 +0200 | [diff] [blame] | 96 | *test_gui_mouse_event()* |
| 97 | test_gui_mouse_event({button}, {row}, {col}, {multiclick}, {modifiers}) |
Yegappan Lakshmanan | 18d4658 | 2021-06-23 20:46:52 +0200 | [diff] [blame] | 98 | Inject a mouse button click event. This function only works |
| 99 | when the GUI is running. |
Yegappan Lakshmanan | f1e7449 | 2021-06-21 18:44:26 +0200 | [diff] [blame] | 100 | The supported values for {button} are: |
| 101 | 0 right mouse button |
| 102 | 1 middle mouse button |
| 103 | 2 left mouse button |
| 104 | 3 mouse button release |
| 105 | 4 scroll wheel down |
| 106 | 5 scroll wheel up |
| 107 | 6 scroll wheel left |
| 108 | 7 scroll wheel right |
Yegappan Lakshmanan | 18d4658 | 2021-06-23 20:46:52 +0200 | [diff] [blame] | 109 | {row} and {col} specify the location of the mouse click. The |
| 110 | first row of the Vim window is 1 and the last row is 'lines'. |
| 111 | The maximum value of {col} is 'columns'. |
Yegappan Lakshmanan | f1e7449 | 2021-06-21 18:44:26 +0200 | [diff] [blame] | 112 | To inject a multiclick event, set {multiclick} to 1. |
| 113 | The supported values for {modifiers} are: |
| 114 | 4 shift is pressed |
| 115 | 8 alt is pressed |
| 116 | 16 ctrl is pressed |
| 117 | After injecting the mouse event you probably should call |
| 118 | |feedkeys()| to have them processed, e.g.: > |
| 119 | call feedkeys("y", 'Lx!') |
| 120 | |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 121 | |
| 122 | test_ignore_error({expr}) *test_ignore_error()* |
| 123 | Ignore any error containing {expr}. A normal message is given |
| 124 | instead. |
| 125 | This is only meant to be used in tests, where catching the |
| 126 | error with try/catch cannot be used (because it skips over |
| 127 | following code). |
| 128 | {expr} is used literally, not as a pattern. |
| 129 | When the {expr} is the string "RESET" then the list of ignored |
| 130 | errors is made empty. |
| 131 | |
Bram Moolenaar | ce90e36 | 2019-09-08 18:58:44 +0200 | [diff] [blame] | 132 | Can also be used as a |method|: > |
| 133 | GetErrorText()->test_ignore_error() |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 134 | |
| 135 | test_null_blob() *test_null_blob()* |
| 136 | Return a |Blob| that is null. Only useful for testing. |
| 137 | |
| 138 | |
| 139 | test_null_channel() *test_null_channel()* |
| 140 | Return a |Channel| that is null. Only useful for testing. |
| 141 | {only available when compiled with the +channel feature} |
| 142 | |
| 143 | |
| 144 | test_null_dict() *test_null_dict()* |
| 145 | Return a |Dict| that is null. Only useful for testing. |
| 146 | |
| 147 | |
Bram Moolenaar | e69f6d0 | 2020-04-01 22:11:01 +0200 | [diff] [blame] | 148 | test_null_function() *test_null_function()* |
Bram Moolenaar | d1caa94 | 2020-04-10 22:10:56 +0200 | [diff] [blame] | 149 | Return a |Funcref| that is null. Only useful for testing. |
Bram Moolenaar | e69f6d0 | 2020-04-01 22:11:01 +0200 | [diff] [blame] | 150 | |
| 151 | |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 152 | test_null_job() *test_null_job()* |
| 153 | Return a |Job| that is null. Only useful for testing. |
| 154 | {only available when compiled with the +job feature} |
| 155 | |
| 156 | |
| 157 | test_null_list() *test_null_list()* |
| 158 | Return a |List| that is null. Only useful for testing. |
| 159 | |
| 160 | |
| 161 | test_null_partial() *test_null_partial()* |
| 162 | Return a |Partial| that is null. Only useful for testing. |
| 163 | |
| 164 | |
| 165 | test_null_string() *test_null_string()* |
| 166 | Return a |String| that is null. Only useful for testing. |
| 167 | |
| 168 | |
Bram Moolenaar | 8ed0458 | 2020-02-22 19:07:28 +0100 | [diff] [blame] | 169 | test_unknown() *test_unknown()* |
| 170 | Return a value with unknown type. Only useful for testing. |
| 171 | |
| 172 | test_void() *test_void()* |
| 173 | Return a value with void type. Only useful for testing. |
| 174 | |
| 175 | |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 176 | test_option_not_set({name}) *test_option_not_set()* |
| 177 | Reset the flag that indicates option {name} was set. Thus it |
| 178 | looks like it still has the default value. Use like this: > |
| 179 | set ambiwidth=double |
| 180 | call test_option_not_set('ambiwidth') |
| 181 | < Now the 'ambiwidth' option behaves like it was never changed, |
| 182 | even though the value is "double". |
| 183 | Only to be used for testing! |
| 184 | |
Bram Moolenaar | ce90e36 | 2019-09-08 18:58:44 +0200 | [diff] [blame] | 185 | Can also be used as a |method|: > |
| 186 | GetOptionName()->test_option_not_set() |
| 187 | |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 188 | |
| 189 | test_override({name}, {val}) *test_override()* |
| 190 | Overrides certain parts of Vim's internal processing to be able |
| 191 | to run tests. Only to be used for testing Vim! |
| 192 | The override is enabled when {val} is non-zero and removed |
| 193 | when {val} is zero. |
| 194 | Current supported values for name are: |
| 195 | |
| 196 | name effect when {val} is non-zero ~ |
| 197 | redraw disable the redrawing() function |
| 198 | redraw_flag ignore the RedrawingDisabled flag |
| 199 | char_avail disable the char_avail() function |
| 200 | starting reset the "starting" variable, see below |
| 201 | nfa_fail makes the NFA regexp engine fail to force a |
| 202 | fallback to the old engine |
| 203 | no_query_mouse do not query the mouse position for "dec" |
| 204 | terminals |
| 205 | no_wait_return set the "no_wait_return" flag. Not restored |
| 206 | with "ALL". |
Bram Moolenaar | b340bae | 2020-06-15 19:51:56 +0200 | [diff] [blame] | 207 | ui_delay time in msec to use in ui_delay(); overrules a |
| 208 | wait time of up to 3 seconds for messages |
Bram Moolenaar | 0c0eddd | 2020-06-13 15:47:25 +0200 | [diff] [blame] | 209 | term_props reset all terminal properties when the version |
| 210 | string is detected |
Bram Moolenaar | c8cdf0f | 2021-03-13 13:28:13 +0100 | [diff] [blame] | 211 | uptime overrules sysinfo.uptime |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 212 | ALL clear all overrides ({val} is not used) |
| 213 | |
| 214 | "starting" is to be used when a test should behave like |
| 215 | startup was done. Since the tests are run by sourcing a |
| 216 | script the "starting" variable is non-zero. This is usually a |
| 217 | good thing (tests run faster), but sometimes changes behavior |
| 218 | in a way that the test doesn't work properly. |
| 219 | When using: > |
| 220 | call test_override('starting', 1) |
| 221 | < The value of "starting" is saved. It is restored by: > |
| 222 | call test_override('starting', 0) |
| 223 | |
Bram Moolenaar | ce90e36 | 2019-09-08 18:58:44 +0200 | [diff] [blame] | 224 | < Can also be used as a |method|: > |
| 225 | GetOverrideVal()-> test_override('starting') |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 226 | |
| 227 | test_refcount({expr}) *test_refcount()* |
| 228 | Return the reference count of {expr}. When {expr} is of a |
| 229 | type that does not have a reference count, returns -1. Only |
| 230 | to be used for testing. |
| 231 | |
Bram Moolenaar | ce90e36 | 2019-09-08 18:58:44 +0200 | [diff] [blame] | 232 | Can also be used as a |method|: > |
| 233 | GetVarname()->test_refcount() |
| 234 | |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 235 | |
| 236 | test_scrollbar({which}, {value}, {dragging}) *test_scrollbar()* |
| 237 | Pretend using scrollbar {which} to move it to position |
| 238 | {value}. {which} can be: |
| 239 | left Left scrollbar of the current window |
| 240 | right Right scrollbar of the current window |
| 241 | hor Horizontal scrollbar |
| 242 | |
| 243 | For the vertical scrollbars {value} can be 1 to the |
| 244 | line-count of the buffer. For the horizontal scrollbar the |
| 245 | {value} can be between 1 and the maximum line length, assuming |
| 246 | 'wrap' is not set. |
| 247 | |
| 248 | When {dragging} is non-zero it's like dragging the scrollbar, |
| 249 | otherwise it's like clicking in the scrollbar. |
| 250 | Only works when the {which} scrollbar actually exists, |
| 251 | obviously only when using the GUI. |
| 252 | |
Bram Moolenaar | ce90e36 | 2019-09-08 18:58:44 +0200 | [diff] [blame] | 253 | Can also be used as a |method|: > |
| 254 | GetValue()->test_scrollbar('right', 0) |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 255 | |
| 256 | test_setmouse({row}, {col}) *test_setmouse()* |
| 257 | Set the mouse position to be used for the next mouse action. |
| 258 | {row} and {col} are one based. |
| 259 | For example: > |
| 260 | call test_setmouse(4, 20) |
| 261 | call feedkeys("\<LeftMouse>", "xt") |
| 262 | |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 263 | test_settime({expr}) *test_settime()* |
| 264 | Set the time Vim uses internally. Currently only used for |
| 265 | timestamps in the history, as they are used in viminfo, and |
| 266 | for undo. |
| 267 | Using a value of 1 makes Vim not sleep after a warning or |
| 268 | error message. |
| 269 | {expr} must evaluate to a number. When the value is zero the |
| 270 | normal behavior is restored. |
| 271 | |
Bram Moolenaar | ce90e36 | 2019-09-08 18:58:44 +0200 | [diff] [blame] | 272 | Can also be used as a |method|: > |
| 273 | GetTime()->test_settime() |
| 274 | |
Bram Moolenaar | 4f645c5 | 2020-02-08 16:40:39 +0100 | [diff] [blame] | 275 | test_srand_seed([seed]) *test_srand_seed()* |
| 276 | When [seed] is given this sets the seed value used by |
| 277 | `srand()`. When omitted the test seed is removed. |
| 278 | |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 279 | ============================================================================== |
Bram Moolenaar | 5477506 | 2019-07-31 21:07:14 +0200 | [diff] [blame] | 280 | 3. Assert functions *assert-functions-details* |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 281 | |
| 282 | |
| 283 | assert_beeps({cmd}) *assert_beeps()* |
| 284 | Run {cmd} and add an error message to |v:errors| if it does |
| 285 | NOT produce a beep or visual bell. |
Bram Moolenaar | 5b8cabf | 2021-04-02 18:55:57 +0200 | [diff] [blame] | 286 | Also see |assert_fails()|, |assert_nobeep()| and |
| 287 | |assert-return|. |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 288 | |
Bram Moolenaar | 24278d2 | 2019-08-16 21:49:22 +0200 | [diff] [blame] | 289 | Can also be used as a |method|: > |
| 290 | GetCmd()->assert_beeps() |
| 291 | < |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 292 | *assert_equal()* |
| 293 | assert_equal({expected}, {actual} [, {msg}]) |
| 294 | When {expected} and {actual} are not equal an error message is |
| 295 | added to |v:errors| and 1 is returned. Otherwise zero is |
| 296 | returned |assert-return|. |
| 297 | There is no automatic conversion, the String "4" is different |
| 298 | from the Number 4. And the number 4 is different from the |
| 299 | Float 4.0. The value of 'ignorecase' is not used here, case |
| 300 | always matters. |
| 301 | When {msg} is omitted an error in the form "Expected |
| 302 | {expected} but got {actual}" is produced. |
| 303 | Example: > |
| 304 | assert_equal('foo', 'bar') |
| 305 | < Will result in a string to be added to |v:errors|: |
| 306 | test.vim line 12: Expected 'foo' but got 'bar' ~ |
| 307 | |
Bram Moolenaar | 7ff7846 | 2020-07-10 22:00:53 +0200 | [diff] [blame] | 308 | Can also be used as a |method|, the base is passed as the |
| 309 | second argument: > |
Bram Moolenaar | 25e4223 | 2019-08-04 15:04:10 +0200 | [diff] [blame] | 310 | mylist->assert_equal([1, 2, 3]) |
| 311 | |
Bram Moolenaar | 25e4223 | 2019-08-04 15:04:10 +0200 | [diff] [blame] | 312 | < *assert_equalfile()* |
Bram Moolenaar | fb517ba | 2020-06-03 19:55:35 +0200 | [diff] [blame] | 313 | assert_equalfile({fname-one}, {fname-two} [, {msg}]) |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 314 | When the files {fname-one} and {fname-two} do not contain |
| 315 | exactly the same text an error message is added to |v:errors|. |
| 316 | Also see |assert-return|. |
| 317 | When {fname-one} or {fname-two} does not exist the error will |
| 318 | mention that. |
| 319 | Mainly useful with |terminal-diff|. |
| 320 | |
Bram Moolenaar | e49fbff | 2019-08-21 22:50:07 +0200 | [diff] [blame] | 321 | Can also be used as a |method|: > |
| 322 | GetLog()->assert_equalfile('expected.log') |
| 323 | |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 324 | assert_exception({error} [, {msg}]) *assert_exception()* |
| 325 | When v:exception does not contain the string {error} an error |
| 326 | message is added to |v:errors|. Also see |assert-return|. |
| 327 | This can be used to assert that a command throws an exception. |
| 328 | Using the error number, followed by a colon, avoids problems |
| 329 | with translations: > |
| 330 | try |
| 331 | commandthatfails |
| 332 | call assert_false(1, 'command should have failed') |
| 333 | catch |
| 334 | call assert_exception('E492:') |
| 335 | endtry |
Bram Moolenaar | 1d63454 | 2020-08-18 13:41:50 +0200 | [diff] [blame] | 336 | < |
| 337 | *assert_fails()* |
Bram Moolenaar | 9bd5d87 | 2020-09-06 21:47:48 +0200 | [diff] [blame] | 338 | assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]]) |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 339 | Run {cmd} and add an error message to |v:errors| if it does |
Bram Moolenaar | 9b7bf9e | 2020-07-11 22:14:59 +0200 | [diff] [blame] | 340 | NOT produce an error or when {error} is not found in the |
| 341 | error message. Also see |assert-return|. |
| 342 | |
| 343 | When {error} is a string it must be found literally in the |
| 344 | first reported error. Most often this will be the error code, |
| 345 | including the colon, e.g. "E123:". > |
| 346 | assert_fails('bad cmd', 'E987:') |
| 347 | < |
| 348 | When {error} is a |List| with one or two strings, these are |
| 349 | used as patterns. The first pattern is matched against the |
| 350 | first reported error: > |
| 351 | assert_fails('cmd', ['E987:.*expected bool']) |
| 352 | < The second pattern, if present, is matched against the last |
Bram Moolenaar | 4072ba5 | 2020-12-23 13:56:35 +0100 | [diff] [blame] | 353 | reported error. |
| 354 | If there is only one error then both patterns must match. This |
| 355 | can be used to check that there is only one error. |
| 356 | To only match the last error use an empty string for the first |
| 357 | error: > |
Bram Moolenaar | 9b7bf9e | 2020-07-11 22:14:59 +0200 | [diff] [blame] | 358 | assert_fails('cmd', ['', 'E987:']) |
| 359 | < |
Bram Moolenaar | 1d63454 | 2020-08-18 13:41:50 +0200 | [diff] [blame] | 360 | If {msg} is empty then it is not used. Do this to get the |
| 361 | default message when passing the {lnum} argument. |
| 362 | |
| 363 | When {lnum} is present and not negative, and the {error} |
| 364 | argument is present and matches, then this is compared with |
| 365 | the line number at which the error was reported. That can be |
| 366 | the line number in a function or in a script. |
| 367 | |
Bram Moolenaar | 9bd5d87 | 2020-09-06 21:47:48 +0200 | [diff] [blame] | 368 | When {context} is present it is used as a pattern and matched |
| 369 | against the context (script name or function name) where |
| 370 | {lnum} is located in. |
| 371 | |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 372 | Note that beeping is not considered an error, and some failing |
| 373 | commands only beep. Use |assert_beeps()| for those. |
| 374 | |
Bram Moolenaar | 24278d2 | 2019-08-16 21:49:22 +0200 | [diff] [blame] | 375 | Can also be used as a |method|: > |
| 376 | GetCmd()->assert_fails('E99:') |
| 377 | |
Bram Moolenaar | 1d63454 | 2020-08-18 13:41:50 +0200 | [diff] [blame] | 378 | assert_false({actual} [, {msg}]) *assert_false()* |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 379 | When {actual} is not false an error message is added to |
| 380 | |v:errors|, like with |assert_equal()|. |
| 381 | Also see |assert-return|. |
| 382 | A value is false when it is zero. When {actual} is not a |
| 383 | number the assert fails. |
| 384 | When {msg} is omitted an error in the form |
| 385 | "Expected False but got {actual}" is produced. |
| 386 | |
Bram Moolenaar | 24278d2 | 2019-08-16 21:49:22 +0200 | [diff] [blame] | 387 | Can also be used as a |method|: > |
| 388 | GetResult()->assert_false() |
| 389 | |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 390 | assert_inrange({lower}, {upper}, {actual} [, {msg}]) *assert_inrange()* |
| 391 | This asserts number and |Float| values. When {actual} is lower |
| 392 | than {lower} or higher than {upper} an error message is added |
| 393 | to |v:errors|. Also see |assert-return|. |
| 394 | When {msg} is omitted an error in the form |
| 395 | "Expected range {lower} - {upper}, but got {actual}" is |
| 396 | produced. |
| 397 | |
| 398 | *assert_match()* |
| 399 | assert_match({pattern}, {actual} [, {msg}]) |
| 400 | When {pattern} does not match {actual} an error message is |
| 401 | added to |v:errors|. Also see |assert-return|. |
| 402 | |
| 403 | {pattern} is used as with |=~|: The matching is always done |
| 404 | like 'magic' was set and 'cpoptions' is empty, no matter what |
| 405 | the actual value of 'magic' or 'cpoptions' is. |
| 406 | |
| 407 | {actual} is used as a string, automatic conversion applies. |
| 408 | Use "^" and "$" to match with the start and end of the text. |
| 409 | Use both to match the whole text. |
| 410 | |
| 411 | When {msg} is omitted an error in the form |
| 412 | "Pattern {pattern} does not match {actual}" is produced. |
| 413 | Example: > |
| 414 | assert_match('^f.*o$', 'foobar') |
| 415 | < Will result in a string to be added to |v:errors|: |
| 416 | test.vim line 12: Pattern '^f.*o$' does not match 'foobar' ~ |
| 417 | |
Bram Moolenaar | 24278d2 | 2019-08-16 21:49:22 +0200 | [diff] [blame] | 418 | Can also be used as a |method|: > |
| 419 | getFile()->assert_match('foo.*') |
| 420 | < |
Bram Moolenaar | 5b8cabf | 2021-04-02 18:55:57 +0200 | [diff] [blame] | 421 | assert_nobeep({cmd}) *assert_nobeep()* |
| 422 | Run {cmd} and add an error message to |v:errors| if it |
| 423 | produces a beep or visual bell. |
| 424 | Also see |assert_beeps()|. |
| 425 | |
| 426 | Can also be used as a |method|: > |
| 427 | GetCmd()->assert_nobeep() |
| 428 | < |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 429 | *assert_notequal()* |
| 430 | assert_notequal({expected}, {actual} [, {msg}]) |
| 431 | The opposite of `assert_equal()`: add an error message to |
| 432 | |v:errors| when {expected} and {actual} are equal. |
| 433 | Also see |assert-return|. |
| 434 | |
Bram Moolenaar | 25e4223 | 2019-08-04 15:04:10 +0200 | [diff] [blame] | 435 | Can also be used as a |method|: > |
| 436 | mylist->assert_notequal([1, 2, 3]) |
| 437 | |
| 438 | < *assert_notmatch()* |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 439 | assert_notmatch({pattern}, {actual} [, {msg}]) |
| 440 | The opposite of `assert_match()`: add an error message to |
| 441 | |v:errors| when {pattern} matches {actual}. |
| 442 | Also see |assert-return|. |
| 443 | |
Bram Moolenaar | 24278d2 | 2019-08-16 21:49:22 +0200 | [diff] [blame] | 444 | Can also be used as a |method|: > |
| 445 | getFile()->assert_notmatch('bar.*') |
| 446 | |
Bram Moolenaar | e49fbff | 2019-08-21 22:50:07 +0200 | [diff] [blame] | 447 | |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 448 | assert_report({msg}) *assert_report()* |
| 449 | Report a test failure directly, using {msg}. |
| 450 | Always returns one. |
| 451 | |
Bram Moolenaar | e49fbff | 2019-08-21 22:50:07 +0200 | [diff] [blame] | 452 | Can also be used as a |method|: > |
| 453 | GetMessage()->assert_report() |
| 454 | |
| 455 | |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 456 | assert_true({actual} [, {msg}]) *assert_true()* |
| 457 | When {actual} is not true an error message is added to |
| 458 | |v:errors|, like with |assert_equal()|. |
| 459 | Also see |assert-return|. |
| 460 | A value is TRUE when it is a non-zero number. When {actual} |
| 461 | is not a number the assert fails. |
| 462 | When {msg} is omitted an error in the form "Expected True but |
| 463 | got {actual}" is produced. |
| 464 | |
Bram Moolenaar | 24278d2 | 2019-08-16 21:49:22 +0200 | [diff] [blame] | 465 | Can also be used as a |method|: > |
| 466 | GetResult()->assert_true() |
| 467 | < |
Bram Moolenaar | ed997ad | 2019-07-21 16:42:00 +0200 | [diff] [blame] | 468 | |
| 469 | vim:tw=78:ts=8:noet:ft=help:norl: |