<feed xmlns='http://www.w3.org/2005/Atom'>
<title>neovim/test/testutil.lua, branch master</title>
<subtitle>Vim-fork focused on extensibility and usability</subtitle>
<id>http://git.waynecole.info/neovim/atom?h=master</id>
<link rel='self' href='http://git.waynecole.info/neovim/atom?h=master'/>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/'/>
<updated>2026-04-25T14:33:39Z</updated>
<entry>
<title>ci: ensure full sanitizer logs are shown in CI #39361</title>
<updated>2026-04-25T14:33:39Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-04-25T14:33:39Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=0a9016689e63d5ff05e8f7d87ee7625dd6576cdc'/>
<id>urn:sha1:0a9016689e63d5ff05e8f7d87ee7625dd6576cdc</id>
<content type='text'>
Problem:
When ASAN detects an error in a child process, the process may be killed
by test teardown before ASAN finishes writing its log file. This results
in truncated logs with no stack trace.

Also, the sanitizer log content was only written to stdout (which the
test runner may not display) and not included in the test_assert error
message.

Solution:
- Poll (up to 2s) for the ASAN "SUMMARY" line before reading, so the
  crashing process has time to finish writing.
- Include full log content in the test_assert error message, so it
  appears in CI output regardless of stdout handling.
- Warn when the log appears truncated (no SUMMARY line found).</content>
</entry>
<entry>
<title>ci: drop cirrus #39321</title>
<updated>2026-04-22T22:25:07Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-04-22T22:25:07Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=82198d0a6622c750b0b86b721998b00ccf3e2b23'/>
<id>urn:sha1:82198d0a6622c750b0b86b721998b00ccf3e2b23</id>
<content type='text'>
Problem:
cirrus will shutdown soon, and we are running out of minutes anyway,
which causes ci failures.

Solution:
Drop cirrus config.</content>
</entry>
<entry>
<title>test: include test path in summary (#39141)</title>
<updated>2026-04-17T13:20:36Z</updated>
<author>
<name>zeertzjq</name>
<email>zeertzjq@outlook.com</email>
</author>
<published>2026-04-17T13:20:36Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=fefad0721a9d55a9bee352ceeec48c452e1d1802'/>
<id>urn:sha1:fefad0721a9d55a9bee352ceeec48c452e1d1802</id>
<content type='text'>
Ref: https://github.com/neovim/neovim/pull/38486#discussion_r3088483987</content>
</entry>
<entry>
<title>test: replace busted with local harness</title>
<updated>2026-04-15T11:09:25Z</updated>
<author>
<name>Lewis Russell</name>
<email>lewis6991@gmail.com</email>
</author>
<published>2026-03-25T13:33:17Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=55f9c2136e52d8719495b6021ce7e8d64c5141fe'/>
<id>urn:sha1:55f9c2136e52d8719495b6021ce7e8d64c5141fe</id>
<content type='text'>
Replace the busted-based Lua test runner with a repo-local harness.

The new harness runs spec files directly under `nvim -ll`, ships its own
reporter and lightweight `luassert` shim, and keeps the helper/preload
flow used by the functional and unit test suites.

Keep the file boundary model shallow and busted-like by restoring `_G`,
`package.loaded`, `package.preload`, `arg`, and the process environment
between files, without carrying extra reset APIs or custom assertion
machinery.

Update the build and test entrypoints to use the new runner, add
black-box coverage for the harness itself, and drop the bundled
busted/luacheck dependency path.

AI-assisted: Codex
</content>
</entry>
<entry>
<title>test: fix s390x failures</title>
<updated>2026-03-29T11:36:56Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-03-28T22:56:13Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=0ac321a1d6fb9c40fd0343f88398773b1cc1f71a'/>
<id>urn:sha1:0ac321a1d6fb9c40fd0343f88398773b1cc1f71a</id>
<content type='text'>
Problem:
failures in s390x CI.

Solution:
- runtime/lua/man.lua: parse_path() can return nil but 3 callers didn't handle it.
- skip some tests on s390x.

TODO:

- TODO: why "build/bin/xxd is not executable" on s390x?
- TODO: other failures, not addressed (see below).

OTHER FAILURES:

    FAILED   test/functional/treesitter/fold_spec.lua @ 87: treesitter foldexpr recomputes fold levels after lines are added/removed
    test/functional/treesitter/fold_spec.lua:95: Expected objects to be the same.
    Passed in:
    (table: 0x4013c18940) {
      [1] = '0'
      [2] = '0'
      [3] = '0'
     *[4] = '0'
      [5] = '0'
      ...
    Expected:
    (table: 0x4005acf900) {
      [1] = '0'
      [2] = '0'
      [3] = '&gt;1'
     *[4] = '1'
      [5] = '1'
      ...

    stack traceback:
            (tail call): ?
            test/functional/treesitter/fold_spec.lua:95: in function &lt;test/functional/treesitter/fold_spec.lua:87&gt;

    FAILED   test/functional/treesitter/select_spec.lua @ 52: treesitter incremental-selection works
    test/functional/treesitter/select_spec.lua:63: Expected objects to be the same.
    Passed in:
    (string) 'bar(2)'
    Expected:
    (string) 'foo(1)'

    stack traceback:
            (tail call): ?
            test/functional/treesitter/select_spec.lua:63: in function &lt;test/functional/treesitter/select_spec.lua:52&gt;

    FAILED   test/functional/treesitter/select_spec.lua @ 69: treesitter incremental-selection repeat
    test/functional/treesitter/select_spec.lua:82: Expected objects to be the same.
    Passed in:
    (string) '2'
    Expected:
    (string) '4'

    stack traceback:
            (tail call): ?
            test/functional/treesitter/select_spec.lua:82: in function &lt;test/functional/treesitter/select_spec.lua:69&gt;

    FAILED   test/functional/treesitter/select_spec.lua @ 98: treesitter incremental-selection history
    test/functional/treesitter/select_spec.lua:111: Expected objects to be the same.
    Passed in:
    (string) 'bar(2)'
    Expected:
    (string) 'foo(1)'

    stack traceback:
            (tail call): ?
            test/functional/treesitter/select_spec.lua:111: in function &lt;test/functional/treesitter/select_spec.lua:98&gt;

    FAILED   test/functional/treesitter/select_spec.lua @ 186: treesitter incremental-selection with injections works
    test/functional/treesitter/select_spec.lua:201: Expected objects to be the same.
    Passed in:
    (string) 'lua'
    Expected:
    (string) 'foo'

    stack traceback:
            (tail call): ?
            test/functional/treesitter/select_spec.lua:201: in function &lt;test/functional/treesitter/select_spec.lua:186&gt;

    FAILED   test/functional/treesitter/select_spec.lua @ 216: treesitter incremental-selection with injections ignores overlapping nodes
    test/functional/treesitter/select_spec.lua:231: Expected objects to be the same.
    Passed in:
    (string) ' )'
    Expected:
    (string) ' foo('

    stack traceback:
            (tail call): ?
            test/functional/treesitter/select_spec.lua:231: in function &lt;test/functional/treesitter/select_spec.lua:216&gt;

    FAILED   test/functional/treesitter/select_spec.lua @ 307: treesitter incremental-selection with injections handles disjointed trees
    test/functional/treesitter/select_spec.lua:337: Expected objects to be the same.
    Passed in:
    (string) 'int'
    Expected:
    (string) '1}'

    stack traceback:
            (tail call): ?
            test/functional/treesitter/select_spec.lua:337: in function &lt;test/functional/treesitter/select_spec.lua:307&gt;

    ERROR    test/functional/treesitter/parser_spec.lua @ 562: treesitter parser API can run async parses with string parsers
    test/functional/treesitter/parser_spec.lua:565: attempt to index a nil value

    stack traceback:
            test/functional/testnvim/exec_lua.lua:124: in function &lt;test/functional/testnvim/exec_lua.lua:105&gt;
            (tail call): ?
            (tail call): ?
            test/functional/treesitter/parser_spec.lua:563: in function &lt;test/functional/treesitter/parser_spec.lua:562&gt;

    FAILED   test/functional/core/job_spec.lua @ 1157: jobs jobstop() kills entire process tree #6530
    test/functional/core/job_spec.lua:1244: retry() attempts: 94
    test/functional/core/job_spec.lua:1246: Expected objects to be the same.
    Passed in:
    (table: 0x401dd74b30) {
      [name] = 'sleep &lt;defunct&gt;'
      [pid] = 33579
      [ppid] = 1 }
    Expected:
    (userdata) 'vim.NIL'

    stack traceback:
            test/testutil.lua:89: in function 'retry'
            test/functional/core/job_spec.lua:1244: in function &lt;test/functional/core/job_spec.lua:1157&gt;
</content>
</entry>
<entry>
<title>test: fs_spec fails if home is a symlink #38258</title>
<updated>2026-03-12T09:46:18Z</updated>
<author>
<name>Willaaaaaaa</name>
<email>willaaaaaaa936@gmail.com</email>
</author>
<published>2026-03-12T09:46:18Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=c5146362d8564b581042a82019cbae3f7d0d4843'/>
<id>urn:sha1:c5146362d8564b581042a82019cbae3f7d0d4843</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(logging): rename ".nvimlog" =&gt; "nvim.log" #37935</title>
<updated>2026-02-18T16:58:34Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-02-18T16:58:34Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=abfe6c9ef7f4bd41c1306f3c70ead00e4afaa736'/>
<id>urn:sha1:abfe6c9ef7f4bd41c1306f3c70ead00e4afaa736</id>
<content type='text'>
- Rename ".nvimlog" to "nvim.log"
  - doesn't need to be "hidden"/dotfile
  - ".log" extension helps with filetype detection
- Also rename "nvim/log" =&gt; "nvim/nvim.log"</content>
</entry>
<entry>
<title>fix(terminal): changing height may lead to wrong scrollback (#37824)</title>
<updated>2026-02-12T12:10:02Z</updated>
<author>
<name>zeertzjq</name>
<email>zeertzjq@outlook.com</email>
</author>
<published>2026-02-12T12:10:02Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=16da47f4749b49660d85b3d00aaa00d66098027f'/>
<id>urn:sha1:16da47f4749b49660d85b3d00aaa00d66098027f</id>
<content type='text'>
Problem:  Changing terminal height immediately after outputting lines
          may lead to wrong scrollback.
Solution: Insert pending scrollback lines before the old window height.</content>
</entry>
<entry>
<title>test: fix some type warnings (#37483)</title>
<updated>2026-01-21T07:11:47Z</updated>
<author>
<name>zeertzjq</name>
<email>zeertzjq@outlook.com</email>
</author>
<published>2026-01-21T07:11:47Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=1883fe39bdee47a246a913ba021237d1893aaa90'/>
<id>urn:sha1:1883fe39bdee47a246a913ba021237d1893aaa90</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix(tests): use uv.spawn instead of io.popen for unittest helpers</title>
<updated>2025-05-22T09:56:46Z</updated>
<author>
<name>bfredl</name>
<email>bjorn.linse@gmail.com</email>
</author>
<published>2025-05-20T10:10:37Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=c81af9428c08d21d6e7ddc7ce7ac1761e9a20b9e'/>
<id>urn:sha1:c81af9428c08d21d6e7ddc7ce7ac1761e9a20b9e</id>
<content type='text'>
The old implementation of repeated_read_cmd would attempt to run the
command multiple times to handle racyness of async output. Code
like this should not be written. Instead, use the libuv event
loop to read until the process has exited and the pipe has been closed.

This causes some previous discarded errors to be propagated. Fix these
as well.
</content>
</entry>
</feed>
