# test-samurai.nvim A Neovim plugin to run tests across multiple languages and frameworks with a unified UX and an extensible runner architecture. ## Requirements - Neovim >= 0.11.4 - Lua - Test runners are provided as separate Lua modules ## Installation (Lazy.nvim) Use the GitHub repository. The example below shows how to add the Go runner as a dependency and configure it in `setup()`: ```lua { "m13r/test-samurai.nvim", dependencies = { "m13r/test-samurai-go-runner", -- furthur samurai runners }, config = function() require("test-samurai").setup({ runner_modules = { "test-samurai-go-runner", -- furthur samurai runners }, }) end, } ``` ## Configuration ### Runner modules (required) test-samurai does not ship with any built-in runners. You must explicitly configure the runners you want to use: ```lua require("test-samurai").setup({ runner_modules = { "my-runners.go", "my-runners.js", }, }) ``` If no runner matches the current test file, test-samurai will show: ``` [test-samurai] no runner installed for this kind of test ``` ## Commands and keymaps - `TSamNearest` -> `tn` - `TSamFile` -> `tf` - `TSamAll` -> `ta` - `TSamLast` -> `tl` - `TSamFailedOnly` -> `te` - `TSamShowOutput` -> `to` Additional keymaps: - `qn` -> close the testing floats and jump to the first quickfix entry - `nf` -> jump to the next `[ FAIL ]` entry in the Test-Listing-Float (wraps to the first) - `pf` -> jump to the previous `[ FAIL ]` entry in the Test-Listing-Float (wraps to the last) ## Output UI - Output is shown in a floating container called **Testing-Float**. - The **Test-Listing-Float** is the left subwindow and shows the test result list. - The **Detail-Float** is the right subwindow and shows detailed output for a selected test. - After `TSamNearest`, `TSamFile`, `TSamAll`, `TSamFailedOnly`, etc., the UI opens in listing mode (only **Test-Listing-Float** visible). - Press `` on a `[ FAIL ] ...` line in the listing to open/update the **Detail-Float** as a 20/80 split (left 20% listing, right 80% detail). - ANSI color translation is only applied in the **Detail-Float**; the **Test-Listing-Float** shows raw text without ANSI translation. - `` hides the floating window; `TSamShowOutput` reopens it. ## Runner architecture Runners are standalone Lua modules. All runner modules are expected to implement the full interface so every command and keymap works. Required functions: - `is_test_file` - `find_nearest` - `build_command` - `build_file_command` - `build_all_command` - `build_failed_command` - `collect_failed_locations` No runner for your environment exists? No problem: use `runners-agents.md` to guide an AI-assisted runner implementation tailored to your stack. ## Known runners - [`m13r/test-samurai-go-runner`](https://gitea.mschirmer.com/m13r/test-samurai-go-runner) - [`m13r/test-samurai-jest-runner`](https://gitea.mschirmer.com/m13r/test-samurai-jest-runner) - [`m13r/test-samurai-mocha-runner`](https://gitea.mschirmer.com/m13r/test-samurai-mocha-runner) - [`m13r/test-samurai-vitest-runner`](https://gitea.mschirmer.com/m13r/test-samurai-vitest-runner) ## Development Tests are written with `plenary.nvim` / `busted`. Mocks and stubs are allowed. Run tests: ```sh bash run_test.sh ```