mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 08:35:43 +02:00
tests: Allow to test multiple derivations in a single test derivation
This commit is contained in:
parent
55bda0cc3b
commit
71126bfebe
2 changed files with 66 additions and 25 deletions
|
@ -7,7 +7,7 @@
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
fetchTests = import ./fetch-tests.nix;
|
fetchTests = import ./fetch-tests.nix;
|
||||||
test-derivation = import ./test-derivation.nix { inherit pkgs makeNixvimWithModule; };
|
test-derivation = import ./test-derivation.nix { inherit pkgs makeNixvimWithModule lib; };
|
||||||
inherit (test-derivation) mkTestDerivationFromNixvimModule;
|
inherit (test-derivation) mkTestDerivationFromNixvimModule;
|
||||||
|
|
||||||
# List of files containing configurations
|
# List of files containing configurations
|
||||||
|
|
|
@ -1,40 +1,63 @@
|
||||||
{ pkgs, makeNixvimWithModule, ... }:
|
{
|
||||||
|
pkgs,
|
||||||
|
lib ? pkgs.lib,
|
||||||
|
makeNixvimWithModule,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
# Create a nix derivation from a nixvim executable.
|
# Create a nix derivation from a nixvim executable.
|
||||||
# The build phase simply consists in running the provided nvim binary.
|
# The build phase simply consists in running the provided nvim binary.
|
||||||
mkTestDerivationFromNvim =
|
mkTestDerivationFromNvim =
|
||||||
{
|
{
|
||||||
name,
|
name,
|
||||||
nvim,
|
nvim ? null,
|
||||||
|
tests ? [ ],
|
||||||
dontRun ? false,
|
dontRun ? false,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
|
# At least one of these should be undefined
|
||||||
|
assert lib.assertMsg (tests == [ ] || nvim == null) "Both nvim & tests can't be supplied";
|
||||||
|
let
|
||||||
|
nvimAsList = lib.optional (nvim != null) {
|
||||||
|
derivation = nvim;
|
||||||
|
inherit name dontRun;
|
||||||
|
};
|
||||||
|
|
||||||
|
testList = tests ++ nvimAsList;
|
||||||
|
in
|
||||||
pkgs.stdenv.mkDerivation {
|
pkgs.stdenv.mkDerivation {
|
||||||
inherit name;
|
inherit name;
|
||||||
|
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [ pkgs.docker-client ];
|
||||||
nvim
|
|
||||||
pkgs.docker-client
|
|
||||||
];
|
|
||||||
|
|
||||||
dontUnpack = true;
|
dontUnpack = true;
|
||||||
# We need to set HOME because neovim will try to create some files
|
# We need to set HOME because neovim will try to create some files
|
||||||
#
|
#
|
||||||
# Because neovim does not return an exitcode when quitting we need to check if there are
|
# Because neovim does not return an exitcode when quitting we need to check if there are
|
||||||
# errors on stderr
|
# errors on stderr
|
||||||
buildPhase =
|
buildPhase = lib.optionalString (!dontRun) (
|
||||||
if !dontRun then
|
''
|
||||||
''
|
mkdir -p .cache/nvim
|
||||||
mkdir -p .cache/nvim
|
''
|
||||||
|
+ lib.concatStringsSep "\n" (
|
||||||
|
builtins.map (
|
||||||
|
{
|
||||||
|
derivation,
|
||||||
|
name,
|
||||||
|
dontRun ? false,
|
||||||
|
}:
|
||||||
|
lib.optionalString (!dontRun) ''
|
||||||
|
echo "Running test for ${name}"
|
||||||
|
|
||||||
output=$(HOME=$(realpath .) nvim -mn --headless "+q" 2>&1 >/dev/null)
|
output=$(HOME=$(realpath .) ${lib.getExe derivation} -mn --headless "+q" 2>&1 >/dev/null)
|
||||||
if [[ -n $output ]]; then
|
if [[ -n $output ]]; then
|
||||||
echo "ERROR: $output"
|
echo "ERROR: $output"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
''
|
''
|
||||||
else
|
) testList
|
||||||
'''';
|
)
|
||||||
|
);
|
||||||
|
|
||||||
# If we don't do this nix is not happy
|
# If we don't do this nix is not happy
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
|
@ -48,17 +71,35 @@ let
|
||||||
{
|
{
|
||||||
name ? "nixvim-check",
|
name ? "nixvim-check",
|
||||||
pkgs ? pkgs,
|
pkgs ? pkgs,
|
||||||
module,
|
module ? null,
|
||||||
|
tests ? [ ],
|
||||||
extraSpecialArgs ? { },
|
extraSpecialArgs ? { },
|
||||||
dontRun ? false,
|
dontRun ? false,
|
||||||
}:
|
}:
|
||||||
|
# At least one of these should be undefined
|
||||||
|
assert lib.assertMsg (tests == [ ] || module == null) "Both module & tests can't be supplied";
|
||||||
let
|
let
|
||||||
nvim = makeNixvimWithModule {
|
moduleAsList = lib.optional (module != null) { inherit module name; };
|
||||||
inherit pkgs module extraSpecialArgs;
|
moduleList = tests ++ moduleAsList;
|
||||||
_nixvimTests = true;
|
testDerivations = builtins.map (
|
||||||
};
|
{
|
||||||
|
module,
|
||||||
|
name,
|
||||||
|
dontRun ? false,
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
derivation = makeNixvimWithModule {
|
||||||
|
inherit pkgs module extraSpecialArgs;
|
||||||
|
_nixvimTests = true;
|
||||||
|
};
|
||||||
|
inherit name dontRun;
|
||||||
|
}
|
||||||
|
) moduleList;
|
||||||
in
|
in
|
||||||
mkTestDerivationFromNvim { inherit name nvim dontRun; };
|
mkTestDerivationFromNvim {
|
||||||
|
inherit name dontRun;
|
||||||
|
tests = testDerivations;
|
||||||
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
inherit mkTestDerivationFromNvim mkTestDerivationFromNixvimModule;
|
inherit mkTestDerivationFromNvim mkTestDerivationFromNixvimModule;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue