A Deno module designed for testing denops.vim. This module is intended to be used in the unit tests of denops plugins.
Note
To use the test
function, an environment variable DENOPS_TEST_DENOPS_PATH
is required. Clone the denops.vim repository and set the path to this
environment variable.
Additionally, the following environment variables are available to configure
the behavior of the test
function:
DENOPS_TEST_VIM_EXECUTABLE
: Path to the Vim executable (default: "vim")DENOPS_TEST_NVIM_EXECUTABLE
: Path to the Neovim executable (default: "nvim")DENOPS_TEST_VERBOSE
:1
ortrue
to print Vim messages (echomsg)DENOPS_TEST_CONNECT_TIMEOUT
: Timeout [ms] for connecting to Vim/Neovim (default: 30000)
If you want to test denops plugins with a real Vim and/or Neovim process, use
the test
function to define a test case, as shown below:
import { assert, assertEquals, assertFalse } from "jsr:@std/assert";
import { test } from "jsr:@denops/test";
test("vim", "Start Vim to test denops features", async (denops) => {
assertFalse(await denops.call("has", "nvim"));
});
test({
mode: "nvim",
name: "Start Neovim to test denops features",
fn: async (denops) => {
assert(await denops.call("has", "nvim"));
},
});
test({
mode: "all",
name: "Start Vim and Neovim to test denops features",
fn: async (denops) => {
assertEquals(await denops.call("abs", -4), 4);
},
});
test({
mode: "any",
name: "Start Vim or Neovim to test denops features",
fn: async (denops) => {
assertEquals(await denops.call("abs", -4), 4);
},
});
If you want to test denops plugins without a real Vim and/or Neovim process, use
the DenopsStub
class to create a stub instance of the Denops
interface, as
shown below:
import { assertEquals } from "jsr:@std/assert";
import { DenopsStub } from "jsr:@denops/test";
Deno.test("denops.call", async () => {
const denops = new DenopsStub({
call: (fn, ...args) => {
return Promise.resolve([fn, ...args]);
},
});
assertEquals(await denops.call("foo", "bar"), ["foo", "bar"]);
});
Copy and modify the following GitHub Workflow to run tests in GitHub Action
name: Test
on:
push:
branches:
- main
pull_request:
paths:
- "**.md"
- "**.ts"
- "deno.jsonc"
- ".github/workflows/test.yml"
workflow_dispatch:
inputs:
denops_branch:
description: 'Denops branch to test'
required: false
default: 'main'
# Use 'bash' as default shell even on Windows
defaults:
run:
shell: bash --noprofile --norc -eo pipefail {0}
env:
DENOPS_BRANCH: ${{ github.event.inputs.denops_branch || 'main' }}
jobs:
test:
strategy:
matrix:
runner:
- windows-latest
- macos-latest
- ubuntu-latest
deno_version:
- "1.45.0"
- "1.x"
host_version:
- vim: "v9.1.0448"
nvim: "v0.10.0"
runs-on: ${{ matrix.runner }}
steps:
- run: git config --global core.autocrlf false
if: runner.os == 'Windows'
- uses: actions/checkout@v4
- uses: denoland/setup-deno@v1
with:
deno-version: ${{ matrix.deno_version }}
- name: Get denops
run: |
git clone https://github.com/vim-denops/denops.vim /tmp/denops.vim
echo "DENOPS_TEST_DENOPS_PATH=/tmp/denops.vim" >> "$GITHUB_ENV"
- name: Try switching denops branch
run: |
git -C /tmp/denops.vim switch ${{ env.DENOPS_BRANCH }} || true
git -C /tmp/denops.vim branch
- uses: rhysd/action-setup-vim@v1
id: vim
with:
version: ${{ matrix.host_version.vim }}
- uses: rhysd/action-setup-vim@v1
id: nvim
with:
neovim: true
version: ${{ matrix.host_version.nvim }}
- name: Export executables
run: |
echo "DENOPS_TEST_VIM_EXECUTABLE=${{ steps.vim.outputs.executable }}" >> "$GITHUB_ENV"
echo "DENOPS_TEST_NVIM_EXECUTABLE=${{ steps.nvim.outputs.executable }}" >> "$GITHUB_ENV"
- name: Check versions
run: |
deno --version
${DENOPS_TEST_VIM_EXECUTABLE} --version
${DENOPS_TEST_NVIM_EXECUTABLE} --version
- name: Perform pre-cache
run: |
deno cache ${DENOPS_TEST_DENOPS_PATH}/denops/@denops-private/mod.ts
deno cache ./denops/your_plugin/main.ts
- name: Run tests
run: deno test -A
This library may be called from denops itself so import map is not available.
The code follows the MIT license, as stated in LICENSE. Contributors are required to agree that any modifications submitted to this repository adhere to the license.