mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-20 16:15:43 +02:00
If the test file is `default.nix`, we don't need to append the filename to the test namespace.
53 lines
1.4 KiB
Nix
53 lines
1.4 KiB
Nix
{
|
|
lib,
|
|
pkgs,
|
|
helpers,
|
|
}:
|
|
let
|
|
# Import a test file into the form { name = ""; file = ""; cases = {}; }
|
|
handleTestFile =
|
|
file: namespace:
|
|
let
|
|
fnOrAttrs = import file;
|
|
in
|
|
{
|
|
inherit file;
|
|
name = lib.strings.concatStringsSep "-" namespace;
|
|
cases =
|
|
if builtins.isFunction fnOrAttrs then
|
|
# Call the function
|
|
fnOrAttrs { inherit pkgs lib helpers; }
|
|
else
|
|
fnOrAttrs;
|
|
};
|
|
|
|
# Recurse into all directories, extracting files as we find them.
|
|
# This returns a list of { name; file; cases; } attrsets.
|
|
fetchTests =
|
|
path: namespace:
|
|
let
|
|
# Handle an entry from readDir
|
|
# - If it is a regular nix file, import its content
|
|
# - If it is a directory, continue recursively
|
|
handleEntry =
|
|
name: type:
|
|
let
|
|
file = "${path}/${name}";
|
|
in
|
|
if type == "regular" then
|
|
lib.optional (lib.hasSuffix ".nix" name) (
|
|
handleTestFile file (
|
|
namespace ++ lib.optional (name != "default.nix") (lib.removeSuffix ".nix" name)
|
|
)
|
|
)
|
|
else
|
|
fetchTests file (namespace ++ [ name ]);
|
|
in
|
|
lib.pipe path [
|
|
builtins.readDir
|
|
(lib.filterAttrs (n: v: v != "symlink"))
|
|
(lib.mapAttrsToList handleEntry)
|
|
builtins.concatLists
|
|
];
|
|
in
|
|
root: fetchTests root [ ]
|