tests: Reduce the number of calls to mkTestDerivationFromNixvimModule

This commit is contained in:
traxys 2024-07-17 14:16:00 +02:00
parent 71126bfebe
commit 50d865275d
2 changed files with 44 additions and 26 deletions

View file

@ -17,30 +17,51 @@ let
}; };
exampleFiles = { exampleFiles = {
example = name = "examples";
cases =
let let
config = import ../example.nix { inherit pkgs; }; config = import ../example.nix { inherit pkgs; };
in in
builtins.removeAttrs config.programs.nixvim [ [
{
name = "main";
case = builtins.removeAttrs config.programs.nixvim [
# This is not available to standalone modules, only HM & NixOS Modules # This is not available to standalone modules, only HM & NixOS Modules
"enable" "enable"
# This is purely an example, it does not reflect a real usage # This is purely an example, it does not reflect a real usage
"extraConfigLua" "extraConfigLua"
"extraConfigVim" "extraConfigVim"
]; ];
}
];
}; };
# We attempt to build & execute all configurations # We attempt to build & execute all configurations
derivationList = pkgs.lib.mapAttrsToList (name: def: { derivationList = builtins.map (
{ name, cases }:
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;
in
{
inherit name; inherit name;
path = mkTestDerivationFromNixvimModule { path = mkTestDerivationFromNixvimModule {
inherit name; inherit name;
# The module can either be the actual definition, tests = builtins.map (
# or a child attr named `module`. { name, case }:
module = def.module or (lib.removeAttrs def [ "tests" ]); {
dontRun = def.tests.dontRun or false; inherit name;
module = prepareModule case;
dontRun = dontRunModule case;
}
) cases;
# Use the global dontRun only if we don't have a list of modules
dontRun = dontRunModule cases;
pkgs = pkgsUnfree; pkgs = pkgsUnfree;
}; };
}) (testFiles // exampleFiles); }
) (testFiles ++ [ exampleFiles ]);
in in
pkgs.linkFarm "nixvim-tests" derivationList pkgs.linkFarm "nixvim-tests" derivationList

View file

@ -62,13 +62,10 @@ let
# handled by mkTestDerivation # handled by mkTestDerivation
handleTestFile = handleTestFile =
{ namespace, cases }: { namespace, cases }:
lib.attrsets.mapAttrs' (case: config: { {
name = lib.strings.concatStringsSep "-" (namespace ++ [ case ]); name = lib.strings.concatStringsSep "-" namespace;
value = config; cases = lib.mapAttrsToList (name: case: { inherit case name; }) cases;
}) cases; };
# Helper function that calls `//` for each attrset of a list
concatMany = lib.lists.foldr lib.mergeAttrs { };
in in
# An attrset of 'test-name' -> 'test-config' # A list of the form [ { name = "..."; modules = [ /* test cases */ ]; } ]
concatMany (builtins.map handleTestFile testsListEvaluated) builtins.map handleTestFile testsListEvaluated