BREAKING CHANGES * 32-bit windows builds are no longer provided. * **build deps**: use libuv 1.42.0 upstream for WIN32 (#15889) (f6c0a37), closes #15889 * removes Windows 7 support * removes support for mouse and alternate buffers in TUI for Windows 8 and 8.1 * **lsp/diagnostic:** highlight groups and signs for LSP diagnostics renamed (e.g. `LspDiagnosticsDefaultWarning` to `DiagnosticWarn`) (a5bbb93) * **diagnostic:** make DiagnosticChanged a first class autocmd (#16098) (150a592), closes #16098 * `au User LspDiagnosticsChanged` autocommands are not supported. Use the new first-class DiagnosticChanged event instead. * **lua**: `register_keystroke_callback` => `on_key` (#15460) (69fe427) * **note**: this breaking change was included in 0.5.1 FEATURES * **:source, nvim_exec:** defer script item creation until s:var access (da9b0ab) * **:source, nvim_exec:** support script-local variables (d4ed51e), closes #13143 #11507 * **lua:** add trimempty optional parameter to vim.split (5fa26e2) * **lua:** add vim.str_utf_{start,end} (#16129) (2230b57) * **lua:** add vim.str_utf_pos function (d752cbc) * **lsp:** aggregate code actions from all clients (#15121) (c36df20) * **api:** add lua C bindings for xdiff (#14536) (3d3c0c6) * **api:** evaluate statusline string #16020 (9086938) * **api:** named marks set, get, delete #15346 (49fdc62) * **api:** nvim_get_chan_info: include "argv" for jobs #15537 (0603eba), closes #15440 * **api:** win_viewport also sends line_count #15613 (086631c) * **api:** support :terminal input callback in lua (9e41e82) * **ci:** add backport PR action (#14766) (6cc456d) * **decorations:** allow more than one stacked highlight in a virt_text (1495d36) * **decorations:** support virtual lines (392c658) (8d7816c) * **diagnostic:** move vim.lsp.diagnostic to vim.diagostic and support other sources (a5bbb93) * **diagnostic:** add 'prefix' option to open_float (#16321) (3c74ba4) * **diagnostic:** add option to include diagnostic source (d43151e) * **diagnostic:** allow 'prefix' option to return highlight (cc48837) * **diagnostic:** allow customized diagnostic messages (#15742) (d999c96) * **diagnostic:** match(), tolist(), fromlist() #15704 (e61ea77) * **diagnostic:** update jumplist on goto_next/prev (#15942) (b55944e) * **diagnostic:** use `scope = 'line'` by default for `open_float()` (#16456) (217f9f8), closes #16453 * **diagnostic:** support severity_sort (32c0631) * **checkhealth:** provide function for command line completion (8b43b07) * **f_chansend:** support Blob data argument (7e9ea08) * **job:** add parameter to close stdin (eb7f24b) * **keywordprg:** use :terminal for external commands #15398 (a90513c), closes #2995 #2761 * **lsp:** add 'focus' option to open_floating_preview (#16465) (fff8827) * **lsp:** add a registry for client side code action commands (6c03601) * **lsp:** add client command support to codelens (#15820) (19a77cd) * **lsp:** add codeAction/resolve support (#15818) (ec4731d) * **lsp:** add exit_timeout flag (#16070) (80456cf) * **lsp:** add formatexpr (#16186) (52fa1d2) * **lsp:** add lsp healthcheck (e268026) * **lsp:** add per-client commands (#16101) (519d8de) * **lsp:** add tagfunc (#16103) (f940e7a) * **lsp:** add warning message for large log size (e6777a7) * **lsp:** allow configuring zindex for floating windows (#15086) (c487a73) * **lsp:** allow diagnostics to be disabled for a buffer (#15134) (1aeb945) * **lsp:** allow root_dir to be nil (#15430) (ff0833c) * **lsp:** highlight active parameter in signature help (#15018) (af26371) * **lsp:** improve vim.lsp.util.apply_text_edits (#15561) (41cfba6) * **lsp:** include original request params in handler ctx (187579f) * **lsp:** jump to diagnostics by position (#14795) (ea39ff5) * **lsp:** Make line diagnostics display prettier (e43dbfd) * **lsp:** make list handlers configurable (#15199) (3e00d4f) * **lsp:** support textDocument/prepareRename (#15514) (c1f573f) * **lsp:** use uv_spawn to check if server executable (#16430) (1a60580) * **lsp:** use vim.ui.select() in codelenses (#16004) (e7ea54a) * **lsp:** utilize textEdit.range for startbyte in omnifunc (#15957) (e9d6f7c) * **lua:** add lua-cjson as vendored dependency (8decc9f) * **lua:** add vim.mpack for msgpack support in lua (eaf661d) * **lua:** allow passing handles to vim.b/w/t (6c5e7bd) * **lua:** convert binary string with NULs to Blob (de9df82) * **lua:** document support of packages with v:lua syntax (9dd371b) * **lua:** enable stack traces in error output (#16228) (03b805a) * **lua:** expose lua-cjson as vim.json (30fed27) * **lua:** make vim.mpack support vim.NIL and vim.empty_dict() (0f59666) * **match:** allow hl group to be defined after :match command (fca52f5) * **msgpack:** convert Blobs to BIN strings (af6f454) * **health:** support lua healthchecks (9249dcd), closes #15632 * **shada:** restore Blob globals properly (ef729fb) * **terminal:** TermClose: set exit code in v:event.status #15406 (50b30de), closes #4713 * **treesitter:** add next, prev sibling method (1400841) * **treesitter:** allow to set highlight priority for queries (242608e) * **ui:** add `opt.kind` to `vim.ui.select` (#15838) (7ae86c1) * **ui:** add vim.ui.input and use in lsp rename (#15959) (16d4af6) * **ui:** add vim.ui.select and use in code actions (#15771) (63fde08) * **vim script:** support calling v:lua as a method (b2994e3) CHANGES * **defaults:** auto-create backup dir (4600193) * **defaults:** inccommand=nosplit #15395 (7215d35) * **defaults:** set undo points in <C-U> and <C-W> (#15400) (2cb8db3) * **defaults:** limit syntax cost on CmdwinEnter #15401 (622a36b), closes #6289 #6399 * **defaults:** map CTRL-L to search highlights, update diffs #15385 (0aa8128) * **defaults:** map Y to y$ #13268 (5a111c1), closes #416 #6289 * **defaults:** remove 'options' from viewoptions #15397 (3954537), closes #6289 * **defaults:** set hidden (f6c72b7) * **defaults:** set nojoinspaces (d417e67) * **defaults:** switchbuf=uselast #15394 (4ba7495) * **runtime:** add packages as `"/pack/*/start/*"` patterns to &rtp (9df7e02) * **startup:** load builtin plugins with --clean #15893 (c7a63f3), closes #15605 * **terminal:** set cursorlineopt=number in terminal mode (#15493) (c61a386) * **window:** skip non-focusable floats for :windo (#15378) (e8631cb) PERFORMANCE IMPROVEMENTS * **api:** avoid spurious allocations when converting small objects (705e8f1) * **highlight:** use a hashtable for highlight group names (bb4b4d7) * **lua:** optimize vim.deep_equal #15236 (4b452d4) * **lua:** don't use regexes inside lua require'mod' (ea2023f), closes #15147 #15497 * **lsp:** improve json deserialization performance (#15854) (912a6e5) * **map:** reduce double pointer indirection to single pointer indirection (9e651a9) * **treesitter:** avoid string lookup of highlight name in hot loop (2460f0a) FIXES * **:source, nvim_exec:** handle Vimscript line continuations #14809 (6188926), closes #14807 * **:source:** copy curbuf lines to memory before sourcing #15111 (afdc9e6) * allow str_utfindex second argument to be an explicit nil (#16448) (512ec46) * **api:** fix crash after set_option_value_for() #15390 (8b0e6cc), closes #14097 #13577 * **api:** fix nvim_buf_set_extmark (2338345) * **autocmd:** fix conditions in block_autocmds, unblock_autocmds #15372 (29712ae), closes #6279 * **buffer_updates:** cleanup test behavior (54b2c68) * **buffer_updates:** handle :delete of the very last line in buffer (8335e26) * **buffer_updates:** handle :sort of already sorted buffer (ef687d3) * **buffer_updates:** make `lockmarks` not affect extmarks and buffer updates. fixes #12861 (7d171b1) * **bufupdates:** send correct updates for visual paste (1423146) * **build:** add an env var to re-enable the colors (5087347) * **build:** call find_package(Threads) before using its variables (f446ab3) * **build:** export symbols on Windows (aa644b7) * **build:** fix build failure in MinGW (0503e17) * **build:** make vendored libmpack and libmpack-lua build properly (2a08aef) * **channel:** throw error if sending to internal channel w/o terminal (3b89fee) * **checkhealth:** duplicate checks if module name has "-" #15935 (a36c6e5) * **checkhealth:** mitigate issues with duplicate healthchecks #15919 (acd5e83), closes #15259 * **ci:** disable broken test on openbsd on all CI due to resource constraints (a3e2636) * **ci:** re-run GHA for ready_for_review events (#15377) (c6ef956) * **decorations:** crash when :bdelete (extmark_free_all) after clear_namespace (cd353aa), closes #15212 * **defaults:** "syntax sync maxlines=1" on CmdwinEnter #15552 (5f8518b), closes #15401 * **defaults:** do not map Y in visual-mode #15387 (54726e8), closes #13268 * **diagnostic:** allow floats to be focusable (#16093) (427bac6) * **diagnostic:** change default severity_sort order (938ed45) * **diagnostic:** clamp line numbers in setqflist and setloclist (5b0d8f8) * **diagnostic:** correctly handle folder level diagnostics (f87779a) * **diagnostic:** deepcopy diagnostics before clamping line numbers (2abc799) * **diagnostic:** do not focus floats in goto functions (#16433) (b5b025f) * **diagnostic:** don't clamp line numbers in setqflist (0341c68) * **diagnostic:** don't return nil when callers expect a table (#15765) (057606e) * **diagnostic:** don't use nil col if missing from qflist (#16357) (5e46f64) * **diagnostic:** error on invalid severity value (#15965) (d5dd0aa) * **diagnostic:** fix navigation with diagnostics placed past end of line (34bb5fa) * **diagnostic:** fix option resolution in open_float (#16229) (fd34784) * **diagnostic:** fix wrong data type in setqflist() (3fd1450) * **diagnostic:** get line count per buffer when clamping (c59f200) * **diagnostic:** handle an unknown or missing client (#16242) (1fdbd29) * **diagnostic:** handle diagnostics placed past the end of line (#16095) (a2994c8) * **diagnostic:** make set() go through cache when calling show() (d93f47d) * **diagnostic:** only update decorations for loaded buffers (#15715) (924e8e4) * **diagnostic:** preserve fields from LSP diagnostics via user_data (#15735) (17b7968) * **diagnostic:** remove useless highlight links (#15683) (c13242c), closes #15585 * disable clipboard when test registers (dd63d93) * **docgen:** add tagfunc.lua (0746f00) * **doc:** various fixes #15604 (4eb1ebb) * **eval:** add the vimscript-1 feature to has() (18b32fc) * **eval:** checking for a non-empty string is too strict (#15987) (1dbbaf8) * **eval:** fix has('wsl') #16153 (16d06fa), closes #12642 #16143 * **eval:** fixup for empty modifier in fnamemodify (#16368) (a7ad509), closes #16367 * **extmark:** fix missing virt_lines when using id param of set_extmark (995dbd2) * **extmarks:** splice extmarks on nv_Undo #15920 (e069361) * **fileio:** replace characters over INT_MAX with U+FFFD (#16354) (a2e5c2f), closes #11877 * **float:** fix potential heap corruption in win_redr_border (de670f3) * **float:** redraw if w_border_adj changed (7ff1bc1) * **heath/provider.vim:** using list as string #16007 (5365f24), closes #15988 * **highlight:** remove syncolor.vim, always include syntax colors (9afa0d2), closes #15176 #12573 #15205 * **inccommand:** ignore trailing commands only for *previewed* command #15638 (1f8c91b), closes #8796 #7494 * include ci/ in exported tarball (d6f03aa), closes #15856 * **input:** never reinterpret unmapped ALT- chrods in Terminal mode (#16222) (5ce35ab) * **input:** resolve isolated (non-ALT/META) mappings #13109 (c4857b6), closes #13042 #13086 #15869 * **jobwait:** always drain process event queues #15402 (3c081d0), closes #15349 * **lsp_spec:** tests depended on previous session (069d1de) * **lsp:** accept file URIs without a hostname (a2c2a08) * **lsp:** add done flag to messages returned in util.get_progress_messages() (#15985) (45fa70a) * **lsp:** add placeholder cancel function (#16189) (4da0351) * **lsp:** add textDocument/prepareRename to capability map (#15961) (fcc11d5), closes #15899 * **lsp:** adjust legacy show diagnostic functions to use correct scope (#16106) (dc6c9fe) * **lsp:** allow diagnostic.clear to accept nil bufnr (#15137) (4ed2d4f) * **lsp:** avoid duplicates in client attached buffers (#16099) (c5525f2) * **lsp:** avoid serializing boolean as key (#15810) (96614f8) * **lsp:** change rpc start notify level to warn (#16467) (04c7b55) * **lsp:** change signature of buf_highlight_references (#16345) (eb3d591) * **lsp:** correctly parse LSP snippets #15579 (516775e), closes #15522 * **lsp:** default to UTF-16 in make_position_params (2e3a474) * **lsp:** do not index nil client in progress (#16262) (8f31b21) * **lsp:** do not invoke handlers for unsupported methods (#15926) (d288daa) * **lsp:** don't update active_clients on exit_timeout (#16192) (98f5782) * **lsp:** enable additional capabilities (#15470) (5d63354) * **lsp:** ensure buffers are re-attached on rename (#16266) (ee3a58d) * **lsp:** Ensure users get feedback on references/symbols errors or empty results (256570a) * **lsp:** expose ContentModified error code to callbacks (#15262) (3f09732) * **lsp:** fix cursor row after textEdits (#16038) (bd2f61c) * **lsp:** gracefully handle nil workspaceFolders (#16284) (0ecc58c) * **lsp:** guard textDocument/codeAction command logic #15769 (433bda4) * **lsp:** improve symbols_to_items performance (#16197) (5ad15c9) * **lsp:** Include client name in handler error messages (#15227) (24f2b9e) * **lsp:** pass bufnr for async formatting (#15084) (c31bc6e) * **lsp:** persist diagnostic config for clients (bcc9ba5) * **lsp:** prevent double <text> for cached plaintext markup (910967e) * **lsp:** restore diagnostics extmarks on buffer changes (#15011) (77b33e4) * **lsp:** rewrite incremental sync (#16252) (2ecf0a4) * **lsp:** send buffer contents joined on fileformat-specific linebreak (#16334) (134a638) * **lsp:** send textDocument/didChange for each buffer (#16431) (3451121) * **lsp:** support duplicate params in signature help (#15032) (9132b76) * **lsp:** update lsp-handler signature in call_hierarchy (#15738) (8164adc) * **lsp:** update workspace/applyEdit handler signature (#15573) (3f526fe) * **lua:** fix vim.deepcopy for metatables & cycled tables (#16435) (eb876a0) * **lua:** preserve argument lists which are not lists (6896d22) * **man.vim:** ensure buftype=nofile after :tag or :stag #15675 (29bc648), closes #15650 * **man.vim:** filetype=man is too eager #15488 (2548a9e), closes #15487 #15487 * **mouse:** fix mouse drag positions on multigrid #12667 (0dcfd0e), closes #15091 * **mouse:** correct dragged position in composed layout (810da1a) * **multigrid:** mouse events crash neovim (28ac6c0) * **nvim_open_win:** crash if autocmds delete buffer/window #15549 (0c06da1), closes #15548 * **options:** using :set fillchars should clear local value (7528bce) * prevent K_EVENT from stopping Select mode CTRL-O #15688 (5f144ef) * **provider:** compare versions as number, not string (python 3.10 support) #15937 (e16adbf), closes #14586 * **screen:** make display_tick monotonic up to 2^64. fixes #16152 (9e88c9c) * **screen:** missing search highlights when redrawing from timer #15380 (db695cc), closes #13074 #14064 * **shared:** do not treat empty tables as list in deep extend (#15094) (526fc60) * **sign:** reset auto sign column with minimum in float win minimal style (c8f57f6) * **startup:** init.lua: set $MYVIMRC to absolute path #15748 (c76cddf) * **termdebug:** replace mapset with nvim_set_keymap (#15699) (4d7dcbe) * **termdebug:** replace term_getline with getbufline #15598 (11289ad) * **terminal:** close without ! if the job is stopped (55defa1), closes #4683 * **terminal:** free terminal if close_buffer() closes a closed terminal (#16264) (14def4d) * **test/dumplog:** tostring(rv) before formatting as string (ddaa0cc) * **tests:** use isolated XDG_DATA_HOME in startup tests (8e663e2) * **treesitter:** do not map hl_group when no mapping is set (f489d98) * **treesitter:** run predicates more often in iter_matches (458f2aa) * **tui:** extend smglr ignores to smglp and smgrp (#16239) (3ba800f) * **tui:** remove obsolete $NVIM detection #15791 (4414584), closes #12937 #11390 * **tutor:** formatting, layout #15098 (c52ec8f), closes #15088 * **ui:** use nowait for q mapping in floating window (#16427) (c132144) * **v:lua:** fix emsg when calling v:lua directly (da9005a) * **vim-patch.sh:** run nvim with -u NONE -n #16179 (97ae0ab) * **vim.opt:** vimL map string values not trimmed (#14982) (4906156) * **window:** win_close from other tabpage #15454 (90b2da1), closes #15313 * **windowing:** positioning of relative floats (9065730)
Tests
Tests are broadly divided into unit tests (test/unit), functional tests (test/functional), and old tests (src/nvim/testdir/).
- Unit testing is achieved by compiling the tests as a shared library which is loaded and called by LuaJit FFI.
- Functional tests are driven by RPC, so they do not require LuaJit (as opposed to Lua).
You can learn the key concepts of Lua in 15 minutes. Use any existing test as a template to start writing new tests.
Tests are run by /cmake/RunTests.cmake file, using busted (a Lua test-runner).
For some failures, .nvimlog (or $NVIM_LOG_FILE) may provide insight.
Depending on the presence of binaries (e.g., xclip) some tests will be
ignored. You must compile with libintl to prevent E319: The command is not available in this version errors.
Layout
/test/benchmark: benchmarks/test/functional: functional tests/test/unit: unit tests/test/config: contains*.infiles which are transformed into*.luafiles usingconfigure_fileCMake command: this is for acessing CMake variables in lua tests./test/includes: include-files for use by luajitffi.cdefC definitions parser: normally used to make macros not accessible via this mechanism accessible the other way./test/*/preload.lua: modules preloaded by busted--helperoption/test/**/helpers.lua: common utility functions for test code/test/*/**/*_spec.lua: actual tests. Files that do not end with_spec.luaare libraries like/test/**/helpers.lua, except that they have some common topic./src/nvim/testdir: old tests (from Vim)
Running tests
Executing Tests
To run all tests (except "old" tests):
make test
To run only unit tests:
make unittest
To run only functional tests:
make functionaltest
Legacy tests
To run all legacy Vim tests:
make oldtest
To run a single legacy test file you can use either:
make oldtest TEST_FILE=test_syntax.vim
or:
make src/nvim/testdir/test_syntax.vim
- Specify only the test file name, not the full path.
Debugging tests
-
You can set
$GDBto run tests under gdbserver. And if$VALGRINDis set it will pass--vgdb=yesto valgrind instead of starting gdbserver directly. -
Hanging tests often happen due to unexpected
:h press-enterprompts. The default screen width is 50 columns. Commands that try to print lines longer than 50 columns in the command-line, e.g.:edit very...long...path, will trigger the prompt. In this case, a shorter path or:silent editshould be used. -
If you can't figure out what is going on, try to visualize the screen. Put this at the beginning of your test:
local Screen = require('test.functional.ui.screen') local screen = Screen.new() screen:attach()Afterwards, put
screen:snapshot_util()at any position in your test. See the comment at the top oftest/functional/ui/screen.luafor more.
Filtering Tests
Filter by name
Another filter method is by setting a pattern of test name to TEST_FILTER.
it('foo api',function()
...
end)
it('bar api',function()
...
end)
To run only test with filter name:
TEST_FILTER='foo.*api' make functionaltest
Filter by file
To run a specific unit test:
TEST_FILE=test/unit/foo.lua make unittest
To run a specific functional test:
TEST_FILE=test/functional/foo.lua make functionaltest
To repeat a test:
BUSTED_ARGS="--repeat=100 --no-keep-going" TEST_FILE=test/functional/foo_spec.lua make functionaltest
Filter by tag
Tests can be "tagged" by adding # before a token in the test description.
it('#foo bar baz', function()
...
end)
it('#foo another test', function()
...
end)
To run only the tagged tests:
TEST_TAG=foo make functionaltest
NOTE:
TEST_FILEis not a pattern string likeTEST_TAGorTEST_FILTER. The given value toTEST_FILEmust be a path to an existing file.- Both
TEST_TAGandTEST_FILTERfilter tests by the string descriptions found init()anddescribe().
Writing tests
Guidelines
- Luajit needs to know about type and constant declarations used in function
prototypes. The
helpers.lua
file automatically parses
types.h, so types used in the tested functions could be moved to it to avoid having to rewrite the declarations in the test files.#defineconstants must be rewrittenconstorenumso they can be "visible" to the tests.
- Use pending() to skip tests
(example).
Do not silently skip the test with
if-else. If a functional test depends on some external factor (e.g. the existence ofmd5sumon$PATH), and you can't mock or fake the dependency, then skip the test viapending()if the external factor is missing. This ensures that the total test-count (success + fail + error + pending) is the same in all environments.- Note:
pending()is ignored if it is missing an argument, unless it is contained in anit()block. Provide empty function argument if thepending()call is outside ofit()(example).
- Note:
- Really long
source([=[...]=])blocks may break Vim's Lua syntax highlighting. Try:syntax sync fromstartto fix it.
Where tests go
Tests in /test/unit and /test/functional are divided into groups
by the semantic component they are testing.
- Unit tests
(test/unit) should
match 1-to-1 with the structure of
src/nvim/, because they are testing functions directly. E.g. unit-tests forsrc/nvim/undo.cshould live intest/unit/undo_spec.lua. - Functional tests
(test/functional)
are higher-level (plugins and user input) than unit tests; they are organized
by concept.
- Try to find an existing
test/functional/*/*_spec.luagroup that makes sense, before creating a new one.
- Try to find an existing
Lint
make lint (and make lualint) runs luacheck
on the test code.
If a luacheck warning must be ignored, specify the warning code. Example:
-- luacheck: ignore 621
http://luacheck.readthedocs.io/en/stable/warnings.html
Ignore the smallest applicable scope (e.g. inside a function, not at the top of the file).
Configuration
Test behaviour is affected by environment variables. Currently supported (Functional, Unit, Benchmarks) (when Defined; when set to 1; when defined, treated as Integer; when defined, treated as String; when defined, treated as Number; !must be defined to function properly):
-
BUSTED_ARGS(F) (U): arguments forwarded tobusted. -
GDB(F) (D): makes nvim instances to be run undergdbserver. It will be accessible onlocalhost:7777: usegdb build/bin/nvim, typetarget remote :7777inside. -
GDBSERVER_PORT(F) (I): overrides port used forGDB. -
VALGRIND(F) (D): makes nvim instances to be run undervalgrind. Log files are namedvalgrind-%p.login this case. Note that non-empty valgrind log may fail tests. Valgrind arguments may be seen in/test/functional/helpers.lua. May be used in conjunction withGDB. -
VALGRIND_LOG(F) (S): overrides valgrind log file name used forVALGRIND. -
TEST_COLORS(F) (U) (D): enable pretty colors in test runner. -
TEST_SKIP_FRAGILE(F) (D): makes test suite skip some fragile tests. -
TEST_TIMEOUT(FU) (I): specifies maximum time, in seconds, before the test suite run is killed -
NVIM_LUA_NOTRACK(F) (D): disable reference counting of Lua objects -
NVIM_PROG,NVIM_PRG(F) (S): override path to Neovim executable (default tobuild/bin/nvim). -
CC(U) (S): specifies which C compiler to use to preprocess files. Currently only compilers with gcc-compatible arguments are supported. -
NVIM_TEST_MAIN_CDEFS(U) (1): makesffi.cdefrun in main process. This raises a possibility of bugs due to conflicts in header definitions, despite the counters, but greatly speeds up unit tests by not requiringffi.cdefto do parsing of big strings with C definitions. -
NVIM_TEST_PRINT_I(U) (1): makescimportprint preprocessed, but not yet filtered throughformatcheaders. Used to debugformatc. Printing is done with the line numbers. -
NVIM_TEST_PRINT_CDEF(U) (1): makescimportprint final lines which will be then passed toffi.cdef. Used to debug errorsffi.cdefhappens to throw sometimes. -
NVIM_TEST_PRINT_SYSCALLS(U) (1): makes it print to stderr when syscall wrappers are called and what they returned. Used to debug code which makes unit tests be executed in separate processes. -
NVIM_TEST_RUN_FAILING_TESTS(U) (1): makesitprun tests which are known to fail (marked by setting third argument totrue). -
LOG_DIR(FU) (S!): specifies where to seek for valgrind and ASAN log files. -
NVIM_TEST_CORE_*(FU) (S): a set of environment variables which specify where to search for core files. Are supposed to be defined all at once. -
NVIM_TEST_CORE_GLOB_DIRECTORY(FU) (S): directory where core files are located. May be.. This directory is then recursively searched for core files. Note: this variable must be defined for any of the following to have any effect. -
NVIM_TEST_CORE_GLOB_RE(FU) (S): regular expression which must be matched by core files. E.g./core[^/]*$. May be absent, in which case any file is considered to be matched. -
NVIM_TEST_CORE_EXC_RE(FU) (S): regular expression which excludes certain directories from searching for core files inside. E.g. use^/%.deps$to not search inside/.deps. If absent, nothing is excluded. -
NVIM_TEST_CORE_DB_CMD(FU) (S): command to get backtrace out of the debugger. E.g.gdb -n -batch -ex "thread apply all bt full" "$_NVIM_TEST_APP" -c "$_NVIM_TEST_CORE". Defaults to the example command. This debug command may use environment variables_NVIM_TEST_APP(path to application which is being debugged: normally either nvim or luajit) and_NVIM_TEST_CORE(core file to get backtrace from). -
NVIM_TEST_CORE_RANDOM_SKIP(FU) (D): makescheck_coresnot check cores after approximately 90% of the tests. Should be used when finding cores is too hard for some reason. Normally (on OS X or whenNVIM_TEST_CORE_GLOB_DIRECTORYis defined and this variable is not) cores are checked for after each test. -
NVIM_TEST_RUN_TESTTEST(U) (1): allows runningtest/unit/testtest_spec.luaused to check how testing infrastructure works. -
NVIM_TEST_TRACE_LEVEL(U) (N): specifies unit tests tracing level:0disables tracing (the fastest, but you get no data if tests crash and there no core dump was generated),1leaves only C function calls and returns in the trace (faster than recording everything),2records all function calls, returns and executed Lua source lines.
-
NVIM_TEST_TRACE_ON_ERROR(U) (1): makes unit tests yield trace on error in addition to regular error message. -
NVIM_TEST_MAXTRACE(U) (N): specifies maximum number of trace lines to keep. Default is 1024.