diff --git a/tests/default.nix b/tests/default.nix index 94d19cab..d5383629 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -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 makeNixvimWithModule lib; }; inherit (test-derivation) mkTestDerivationFromNixvimModule; # List of files containing configurations diff --git a/tests/test-derivation.nix b/tests/test-derivation.nix index 9c5355ee..cd95b576 100644 --- a/tests/test-derivation.nix +++ b/tests/test-derivation.nix @@ -1,40 +1,63 @@ -{ 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. mkTestDerivationFromNvim = { name, - nvim, + nvim ? null, + tests ? [ ], 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 { inherit name; - nativeBuildInputs = [ - nvim - pkgs.docker-client - ]; + nativeBuildInputs = [ pkgs.docker-client ]; dontUnpack = true; # 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 # errors on stderr - buildPhase = - if !dontRun then - '' - mkdir -p .cache/nvim + buildPhase = lib.optionalString (!dontRun) ( + '' + 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) - if [[ -n $output ]]; then - echo "ERROR: $output" - exit 1 - fi - '' - else - ''''; + output=$(HOME=$(realpath .) ${lib.getExe derivation} -mn --headless "+q" 2>&1 >/dev/null) + if [[ -n $output ]]; then + echo "ERROR: $output" + exit 1 + fi + '' + ) testList + ) + ); # If we don't do this nix is not happy installPhase = '' @@ -48,17 +71,35 @@ let { name ? "nixvim-check", pkgs ? pkgs, - module, + module ? null, + tests ? [ ], extraSpecialArgs ? { }, dontRun ? false, }: + # At least one of these should be undefined + assert lib.assertMsg (tests == [ ] || module == null) "Both module & tests can't be supplied"; let - nvim = makeNixvimWithModule { - inherit pkgs module extraSpecialArgs; - _nixvimTests = true; - }; + moduleAsList = lib.optional (module != null) { inherit module name; }; + moduleList = tests ++ moduleAsList; + testDerivations = builtins.map ( + { + module, + name, + dontRun ? false, + }: + { + derivation = makeNixvimWithModule { + inherit pkgs module extraSpecialArgs; + _nixvimTests = true; + }; + inherit name dontRun; + } + ) moduleList; in - mkTestDerivationFromNvim { inherit name nvim dontRun; }; + mkTestDerivationFromNvim { + inherit name dontRun; + tests = testDerivations; + }; in { inherit mkTestDerivationFromNvim mkTestDerivationFromNixvimModule;