neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit d6bee7e407442112ee9008ea35d6fe73dbb3eaaf
parent 6aa80b1ab221e02618554261ae8f522e37ecaddd
Author: Justin M. Keyes <justinkz@gmail.com>
Date:   Fri,  5 Dec 2025 16:04:24 -0500

test: skip noisy "terminal mode unavailable" logs #36794

Problem:
Every CI log has a lot of noise at the end, which makes it harder to
find relevant test failures:

    Running tests from test/functional/terminal/tui_spec.lua
    ...
    T5831 TUI bg color queries the terminal for background color:
    T5832 TUI bg color triggers OptionSet from automatic background processing:
    T5833 TUI bg color sends theme update notifications when background changes #31652:
    ...
    Running tests from test/functional/ui/output_spec.lua
    ...
    WRN 2025-12-02T03:36:47.304 ui/c/T5831.28003.0 tui_handle_term_mode:223: TUI: terminal mode 2026 unavailable, state 0
    WRN 2025-12-02T03:36:47.359 ui/c/T5832.28006.0 tui_handle_term_mode:223: TUI: terminal mode 2048 unavailable, state 0
    WRN 2025-12-02T03:36:47.414 ui/c/T5833.28009.0 tui_handle_term_mode:223: TUI: terminal mode 2048 unavailable, state 0

Solution:
- Skip logging in test-mode.
    - This can be reverted later, when these logs are changed to "INFO"
      level, per this TODO comment:
      ```
      // TODO(bfredl): This is really ILOG but we want it in all builds.
      // add to show_verbose_terminfo() without being too racy ????
      WLOG("TUI: terminal mode %d unavailable, state %d", mode, state);
      ```
Diffstat:
Mcmake/RunTests.cmake | 1+
Mruntime/doc/dev_test.txt | 2++
Msrc/nvim/tui/tui.c | 14++++++++++++--
Mtest/functional/terminal/tui_spec.lua | 9+++------
Mtest/functional/testnvim.lua | 15++++++++-------
Mtest/functional/testterm.lua | 5++---
6 files changed, 28 insertions(+), 18 deletions(-)

diff --git a/cmake/RunTests.cmake b/cmake/RunTests.cmake @@ -1,3 +1,4 @@ +set(ENV{NVIM_TEST} "1") # Set LC_ALL to meet expectations of some locale-sensitive tests. set(ENV{LC_ALL} "en_US.UTF-8") set(ENV{VIMRUNTIME} ${WORKING_DIR}/runtime) diff --git a/runtime/doc/dev_test.txt b/runtime/doc/dev_test.txt @@ -438,6 +438,8 @@ Number; !must be defined to function properly): - `TEST_TIMEOUT` (FU) (I): specifies maximum time, in seconds, before the test suite run is killed +- `NVIM_TEST` (FU) (D): lets Nvim process detect that it is running in a test. + - `NVIM_LUA_NOTRACK` (F) (D): disable reference counting of Lua objects - `NVIM_PRG` (F) (S): path to Nvim executable (default: `build/bin/nvim`). diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c @@ -41,6 +41,7 @@ #include "nvim/ugrid.h" #include "nvim/ui_client.h" #include "nvim/ui_defs.h" +#include "nvim/vim_defs.h" #ifdef MSWIN # include "nvim/os/os_win_console.h" @@ -214,13 +215,20 @@ static void tui_set_term_mode(TUIData *tui, TermMode mode, bool set) void tui_handle_term_mode(TUIData *tui, TermMode mode, TermModeState state) FUNC_ATTR_NONNULL_ALL { + static TriState is_test = kNone; + if (is_test == kNone) { + // XXX: Skip some logs which are noisy in CI. #33599 + is_test = os_env_exists("NVIM_TEST", false); + } bool is_set = false; switch (state) { case kTermModeNotRecognized: case kTermModePermanentlyReset: // TODO(bfredl): This is really ILOG but we want it in all builds. // add to show_verbose_terminfo() without being too racy ???? - WLOG("TUI: terminal mode %d unavailable, state %d", mode, state); + if (is_test == kFalse) { + WLOG("TUI: terminal mode %d unavailable, state %d", mode, state); + } // If the mode is not recognized, or if the terminal emulator does not allow it to be changed, // then there is nothing to do break; @@ -230,7 +238,9 @@ void tui_handle_term_mode(TUIData *tui, TermMode mode, TermModeState state) FALLTHROUGH; case kTermModeReset: // The terminal supports changing the given mode - WLOG("TUI: terminal mode %d detected, state %d", mode, state); + if (is_test == kFalse) { + WLOG("TUI: terminal mode %d detected, state %d", mode, state); + } switch (mode) { case kTermModeSynchronizedOutput: // Ref: https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036 diff --git a/test/functional/terminal/tui_spec.lua b/test/functional/terminal/tui_spec.lua @@ -3159,8 +3159,7 @@ describe('TUI FocusGained/FocusLost', function() end) end) --- These tests require `tt` because --headless/--embed --- does not initialize the TUI. +-- These tests require `tt` because --headless/--embed does not initialize the TUI. describe("TUI 't_Co' (terminal colors)", function() local screen @@ -3439,8 +3438,7 @@ describe("TUI 't_Co' (terminal colors)", function() end) end) --- These tests require `tt` because --headless/--embed --- does not initialize the TUI. +-- These tests require `tt` because --headless/--embed does not initialize the TUI. describe("TUI 'term' option", function() local screen @@ -3491,8 +3489,7 @@ describe("TUI 'term' option", function() end) end) --- These tests require `tt` because --headless/--embed --- does not initialize the TUI. +-- These tests require `tt` because --headless/--embed does not initialize the TUI. describe('TUI', function() local screen diff --git a/test/functional/testnvim.lua b/test/functional/testnvim.lua @@ -610,21 +610,22 @@ function M._new_argv(...) assert(type(v) == 'string') env_opt[k] = v end + -- Set these from the environment unless the caller defined them. for _, k in ipairs({ - 'HOME', 'ASAN_OPTIONS', - 'TSAN_OPTIONS', - 'MSAN_OPTIONS', + 'GCOV_ERROR_FILE', + 'HOME', 'LD_LIBRARY_PATH', - 'PATH', + 'MSAN_OPTIONS', + 'NVIM_TEST', 'NVIM_LOG_FILE', 'NVIM_RPLUGIN_MANIFEST', - 'GCOV_ERROR_FILE', - 'XDG_DATA_DIRS', + 'PATH', 'TMPDIR', + 'TSAN_OPTIONS', 'VIMRUNTIME', + 'XDG_DATA_DIRS', }) do - -- Set these from the environment unless the caller defined them. if not env_opt[k] then env_opt[k] = os.getenv(k) end diff --git a/test/functional/testterm.lua b/test/functional/testterm.lua @@ -200,9 +200,8 @@ function M.setup_child_nvim(args, opts) local argv = { nvim_prog, unpack(args or {}) } local env = opts.env or {} - if not env.VIMRUNTIME then - env.VIMRUNTIME = os.getenv('VIMRUNTIME') - end + env.VIMRUNTIME = env.VIMRUNTIME or os.getenv('VIMRUNTIME') + env.NVIM_TEST = env.NVIM_TEST or os.getenv('NVIM_TEST') return M.setup_screen(opts.extra_rows, argv, opts.cols, env) end