forked from nix-community/nixvim
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tests/plugins: refactor (nix-community#235)
- Loading branch information
1 parent
89f54be
commit db5061b
Showing
38 changed files
with
485 additions
and
744 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
{ | ||
makeNixvim, | ||
lib, | ||
pkgs, | ||
}: let | ||
fetchTests = import ./fetch-tests.nix; | ||
mkTestDerivation = import ./test-derivation.nix {inherit pkgs makeNixvim;}; | ||
|
||
# List of files containing configurations | ||
testFiles = fetchTests { | ||
inherit lib pkgs; | ||
root = ./test-sources; | ||
}; | ||
in | ||
# We attempt to build & execute all configurations | ||
builtins.mapAttrs mkTestDerivation testFiles |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
{ | ||
root, | ||
lib, | ||
pkgs, | ||
}: let | ||
# Handle an entry from readDir and either extract the configuration if its a regular file, | ||
# or continue to recurse if it's a directory. While recursing maintain a list of the traversed | ||
# directories | ||
handleEntry = relativePath: namespace: name: type: let | ||
file = "${root}/${relativePath}/${name}"; | ||
in | ||
if type == "regular" | ||
then [ | ||
{ | ||
namespace = namespace ++ [(lib.strings.removeSuffix ".nix" name)]; | ||
cases = import file; | ||
} | ||
] | ||
else parseDirectories file (namespace ++ [name]); | ||
|
||
# Recurse into all directories, extracting files as we find them. This returs a deeply nested | ||
# list, where each non list element is a set of test cases. | ||
parseDirectories = path: namespace: let | ||
relativePath = lib.removePrefix "${root}" "${path}"; | ||
|
||
children = builtins.readDir path; | ||
childrenFiltered = | ||
lib.attrsets.filterAttrs (n: v: v != "symlink") children; | ||
|
||
childrenRecursed = | ||
lib.attrsets.mapAttrsToList (handleEntry relativePath namespace) childrenFiltered; | ||
in | ||
childrenRecursed; | ||
|
||
# Remove the nesting | ||
testsList = lib.lists.flatten (parseDirectories root []); | ||
|
||
testsListEvaluated = builtins.map ({ | ||
cases, | ||
namespace, | ||
} @ args: | ||
if builtins.isAttrs cases | ||
then args | ||
else { | ||
# cases = cases {inherit pkgs;}; | ||
cases = cases {inherit pkgs;}; | ||
inherit namespace; | ||
}) | ||
testsList; | ||
|
||
# Take a list of test cases (i.e the content of a file) and prepare a test case that can be | ||
# handled by mkTestDerivation | ||
handleTestFile = { | ||
namespace, | ||
cases, | ||
}: | ||
lib.attrsets.mapAttrs' (case: config: { | ||
name = lib.strings.concatStringsSep "-" (namespace ++ [case]); | ||
value = config; | ||
}) | ||
cases; | ||
|
||
# Helper function that calls `//` for each attrset of a list | ||
concatMany = list: lib.lists.foldr lib.mergeAttrs {} list; | ||
# An attrset of 'test-name' -> 'test-config' | ||
in | ||
concatMany (builtins.map handleTestFile testsListEvaluated) |
Oops, something went wrong.