📝 denops_test

Test deno doc deno land codecov

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")

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 "https://deno.land/std@0.210.0/assert/mod.ts";
import { test } from "./mod.ts";

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 "https://deno.land/std@0.210.0/assert/mod.ts";
import { DenopsStub } from "./mod.ts";

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"]);
});

License

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.