modules/test: init, replacing dontRun arg

Introduces the `test.runNvim` module option.

Deprecates the historic `dontRun` argument passed to the test-derivation
helpers.

Soft-deprecates the `tests.dontRun` attr used in tests currently.
This commit is contained in:
Matt Sturgeon 2024-08-20 00:30:16 +01:00
parent 312db6b6e2
commit f47374fd26
No known key found for this signature in database
GPG key ID: 4F91844CED1A8299
6 changed files with 69 additions and 25 deletions

View file

@ -10,7 +10,7 @@
{ pkgs, config, ... }:
import ../lib {
inherit pkgs lib;
inherit (config.legacyPackages) makeNixvim makeNixvimWithModule;
inherit (config.legacyPackages) makeNixvimWithModule;
}
)
);

View file

@ -1,13 +1,13 @@
# Args probably only needs pkgs and lib
{
makeNixvim,
makeNixvimWithModule,
pkgs,
lib ? pkgs.lib,
_nixvimTests ? false,
...
}@args:
{
# Add all exported modules here
check = import ../tests/test-derivation.nix { inherit makeNixvim makeNixvimWithModule pkgs; };
check = import ../tests/test-derivation.nix { inherit makeNixvimWithModule lib pkgs; };
helpers = import ./helpers.nix (args // { inherit _nixvimTests; });
}

View file

@ -8,5 +8,6 @@
../.
./files
./output.nix
./test.nix
];
}

View file

@ -0,0 +1,10 @@
{ lib, ... }:
{
options.test = {
runNvim = lib.mkOption {
type = lib.types.bool;
description = "Whether to run `nvim` in the test.";
default = true;
};
};
}

View file

@ -7,7 +7,7 @@
}:
let
fetchTests = import ./fetch-tests.nix;
test-derivation = import ./test-derivation.nix { inherit pkgs makeNixvimWithModule; };
test-derivation = import ./test-derivation.nix { inherit pkgs lib makeNixvimWithModule; };
inherit (test-derivation) mkTestDerivationFromNixvimModule;
# List of files containing configurations
@ -43,16 +43,29 @@ lib.pipe (testFiles ++ [ exampleFiles ]) [
let
# The test case can either be the actual definition,
# or a child attr named `module`.
prepareModule = case: case.module or (lib.removeAttrs case [ "tests" ]);
dontRunModule = case: case.tests.dontRun or false;
prepareModule =
case: if lib.isFunction case then case else case.module or (lib.removeAttrs case [ "tests" ]);
# Convert legacy `dontRun` definitions into `test.runNvim` option defs
dontRunModule =
case:
let
dontRun = case.tests.dontRun or false;
in
lib.optionalAttrs dontRun { test.runNvim = false; };
mkTest =
{ name, case }:
{
inherit name;
path = mkTestDerivationFromNixvimModule {
inherit name;
module = prepareModule case;
dontRun = dontRunModule case;
module = {
imports = [
(dontRunModule case)
(prepareModule case)
];
};
pkgs = pkgsUnfree;
};
};

View file

@ -1,4 +1,9 @@
{ pkgs, makeNixvimWithModule, ... }:
{
pkgs,
lib ? pkgs.lib,
makeNixvimWithModule,
...
}:
let
# Create a nix derivation from a nixvim executable.
# The build phase simply consists in running the provided nvim binary.
@ -6,9 +11,17 @@ let
{
name,
nvim,
# TODO: Deprecated 2024-08-20, remove after 24.11
dontRun ? false,
...
}:
}@args:
let
cfg = nvim.config.test;
runNvim =
lib.warnIf (args ? dontRun)
"mkTestDerivationFromNvim: the `dontRun` argument is deprecated. You should use the `test.runNvim` module option instead."
(cfg.runNvim && !dontRun);
in
pkgs.stdenv.mkDerivation {
inherit name;
@ -22,19 +35,15 @@ let
#
# Because neovim does not return an exitcode when quitting we need to check if there are
# errors on stderr
buildPhase =
if !dontRun then
''
mkdir -p .cache/nvim
buildPhase = lib.optionalString runNvim ''
mkdir -p .cache/nvim
output=$(HOME=$(realpath .) nvim -mn --headless "+q" 2>&1 >/dev/null)
if [[ -n $output ]]; then
echo "ERROR: $output"
exit 1
fi
''
else
'''';
output=$(HOME=$(realpath .) nvim -mn --headless "+q" 2>&1 >/dev/null)
if [[ -n $output ]]; then
echo "ERROR: $output"
exit 1
fi
'';
# If we don't do this nix is not happy
installPhase = ''
@ -50,15 +59,26 @@ let
pkgs ? pkgs,
module,
extraSpecialArgs ? { },
# TODO: Deprecated 2024-08-20, remove after 24.11
dontRun ? false,
}:
}@args:
let
nvim = makeNixvimWithModule {
inherit pkgs module extraSpecialArgs;
inherit pkgs extraSpecialArgs;
_nixvimTests = true;
module =
if args ? dontRun then
lib.warn
"mkTestDerivationFromNixvimModule: the `dontRun` argument is deprecated. You should use the `test.runNvim` module option instead."
{
imports = [ module ];
config.test.runNvim = !dontRun;
}
else
module;
};
in
mkTestDerivationFromNvim { inherit name nvim dontRun; };
mkTestDerivationFromNvim { inherit name nvim; };
in
{
inherit mkTestDerivationFromNvim mkTestDerivationFromNixvimModule;