nix-community.nixvim/tests/test-sources/modules/dependencies.nix

119 lines
2.9 KiB
Nix
Raw Normal View History

{
lib,
pkgs,
...
}:
let
inherit (pkgs.stdenv) hostPlatform;
disabledDeps = lib.optionals hostPlatform.isDarwin [
# One of its dependencies is not available on darwin
"fontpreview"
];
isDepEnabled =
name: package:
# Filter disabled dependencies
(!lib.elem name disabledDeps)
# Disable if the package is not compatible with hostPlatform
&& lib.meta.availableOn hostPlatform package;
in
2025-04-06 17:17:51 +02:00
{
override =
{ pkgs, ... }:
{
dependencies.git = {
enable = true;
package = pkgs.gitMinimal;
};
};
all =
{
lib,
pkgs,
options,
...
}:
let
enableDep = depName: depOption: {
enable = isDepEnabled depName depOption.package.default;
};
in
2025-04-06 17:17:51 +02:00
{
dependencies = lib.mapAttrs enableDep options.dependencies;
2025-04-06 17:17:51 +02:00
};
all-examples =
{
lib,
pkgs,
options,
...
}:
{
dependencies = lib.pipe options.dependencies [
# We use a literalExpression example, with an additional `path` attr.
# This means we don't have to convert human readable paths back to list-paths for this test.
(lib.filterAttrs (_: depOption: depOption.package ? example.path))
(lib.mapAttrs (
depName: depOption:
let
packagePath = depOption.package.example.path;
packageName = lib.showAttrPath packagePath;
package = lib.attrByPath packagePath (throw "${packageName} not found in pkgs") pkgs;
in
{
enable = isDepEnabled depName package;
inherit package;
}
))
];
};
# Integration test for `lib.nixvim.deprecation.mkRemovedPackageOptionModule`
removed-package-options =
{
lib,
pkgs,
config,
...
}:
{
test = {
buildNixvim = false;
warnings = expect: [
(expect "count" 2)
(expect "any" "The option `plugins.chatgpt.curlPackage' defined in `")
(expect "any" "has been replaced by `dependencies.curl.enable' and `dependencies.curl.package'.")
(expect "any" "The option `plugins.glow.glowPackage' defined in `")
];
};
plugins.chatgpt.curlPackage = null;
plugins.glow.glowPackage = pkgs.hello;
assertions = [
{
assertion = !lib.elem pkgs.curl config.extraPackages;
message = "Expected curl not to be installed.";
}
{
assertion = config.dependencies.glow.enable;
message = "Expected `dependencies.glow` to be enabled.";
}
{
assertion = lib.elem pkgs.hello config.extraPackages;
message = "Expected hello to be installed.";
}
{
assertion = !lib.elem pkgs.glow config.extraPackages;
message = "Expected glow not to be installed.";
}
];
};
2025-04-06 17:17:51 +02:00
}